Repository: caijiahao/springMvcPlusMongo Branch: master Commit: ebed1f40abd8 Files: 3783 Total size: 41.1 MB Directory structure: gitextract_vg550q8n/ ├── .idea/ │ ├── artifacts/ │ │ ├── mongo_war.xml │ │ └── mongo_war_exploded.xml │ ├── compiler.xml │ ├── copyright/ │ │ └── profiles_settings.xml │ ├── encodings.xml │ ├── libraries/ │ │ ├── Maven__antlr_antlr_2_7_7.xml │ │ ├── Maven__aopalliance_aopalliance_1_0.xml │ │ ├── Maven__aspectj_aspectjrt_1_5_3.xml │ │ ├── Maven__ch_qos_logback_logback_classic_1_1_1.xml │ │ ├── Maven__ch_qos_logback_logback_core_1_1_1.xml │ │ ├── Maven__com_alibaba_druid_1_0_17.xml │ │ ├── Maven__com_alibaba_fastjson_1_2_7.xml │ │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_5_0.xml │ │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_5_4.xml │ │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_5_4.xml │ │ ├── Maven__com_thoughtworks_xstream_xstream_1_4_1.xml │ │ ├── Maven__commons_beanutils_commons_beanutils_1_8_0.xml │ │ ├── Maven__commons_codec_commons_codec_1_10.xml │ │ ├── Maven__commons_collections_commons_collections_3_2_2.xml │ │ ├── Maven__commons_fileupload_commons_fileupload_1_3_2.xml │ │ ├── Maven__commons_httpclient_commons_httpclient_3_1.xml │ │ ├── Maven__commons_io_commons_io_2_2.xml │ │ ├── Maven__commons_lang_commons_lang_2_5.xml │ │ ├── Maven__commons_logging_commons_logging_1_2.xml │ │ ├── Maven__dom4j_dom4j_1_6.xml │ │ ├── Maven__javax_validation_validation_api_1_0_0_GA.xml │ │ ├── Maven__jstl_jstl_1_2.xml │ │ ├── Maven__junit_junit_4_11.xml │ │ ├── Maven__log4j_log4j_1_2_16.xml │ │ ├── Maven__mysql_mysql_connector_java_5_1_22.xml │ │ ├── Maven__net_sf_ezmorph_ezmorph_1_0_6.xml │ │ ├── Maven__net_sf_json_lib_json_lib_2_4.xml │ │ ├── Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml │ │ ├── Maven__org_apache_poi_poi_3_12_beta1.xml │ │ ├── Maven__org_aspectj_aspectjweaver_1_6_11.xml │ │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml │ │ ├── Maven__org_hibernate_common_hibernate_commons_annotations_4_0_4_Final.xml │ │ ├── Maven__org_hibernate_hibernate_core_4_3_1_Final.xml │ │ ├── Maven__org_hibernate_hibernate_entitymanager_4_3_1_Final.xml │ │ ├── Maven__org_hibernate_hibernate_validator_4_3_1_Final.xml │ │ ├── Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml │ │ ├── Maven__org_javassist_javassist_3_18_1_GA.xml │ │ ├── Maven__org_jboss_jandex_1_1_0_Final.xml │ │ ├── Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml │ │ ├── Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml │ │ ├── Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml │ │ ├── Maven__org_json_json_20160212.xml │ │ ├── Maven__org_mongodb_mongo_java_driver_3_2_2.xml │ │ ├── Maven__org_slf4j_jcl_over_slf4j_1_7_12.xml │ │ ├── Maven__org_slf4j_slf4j_api_1_7_12.xml │ │ ├── Maven__org_springframework_data_spring_data_commons_1_11_0_RELEASE.xml │ │ ├── Maven__org_springframework_data_spring_data_mongodb_1_8_0_RELEASE.xml │ │ ├── Maven__org_springframework_spring_aop_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_aspects_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_beans_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_context_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_core_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_expression_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_jdbc_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_orm_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_test_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_tx_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_web_4_1_7_RELEASE.xml │ │ ├── Maven__org_springframework_spring_webmvc_4_1_7_RELEASE.xml │ │ ├── Maven__taglibs_standard_1_1_2.xml │ │ ├── Maven__xml_apis_xml_apis_1_0_b2.xml │ │ ├── Maven__xmlpull_xmlpull_1_1_3_1.xml │ │ └── Maven__xpp3_xpp3_min_1_1_4c.xml │ ├── misc.xml │ ├── modules.xml │ ├── vcs.xml │ └── workspace.xml ├── mongo.iml ├── pom.xml ├── src/ │ ├── doc/ │ │ ├── mogodb.txt │ │ └── mongo.docx │ ├── main/ │ │ ├── java/ │ │ │ ├── com/ │ │ │ │ └── lida/ │ │ │ │ └── mongo/ │ │ │ │ ├── log/ │ │ │ │ │ ├── Impl/ │ │ │ │ │ │ └── MongoDBAppender.java │ │ │ │ │ └── MongoDBAppenderBase.java │ │ │ │ ├── person/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── MongoController.java │ │ │ │ │ ├── dao/ │ │ │ │ │ │ └── PersonDao.java │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── Address.java │ │ │ │ │ │ └── Person.java │ │ │ │ │ └── mongoDao/ │ │ │ │ │ ├── PersonMongoDao.java │ │ │ │ │ └── PersonMongoImpl.java │ │ │ │ ├── qq/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── LoginController.java │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── QQUserInfo.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sensor/ │ │ │ │ │ ├── Enum/ │ │ │ │ │ │ ├── SerialNum.java │ │ │ │ │ │ └── StationType.java │ │ │ │ │ ├── dao/ │ │ │ │ │ │ ├── SensorMongoDao.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── SensorMongoImpl.java │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── Sensor.java │ │ │ │ │ └── service/ │ │ │ │ │ ├── UpdateData.java │ │ │ │ │ ├── calculateAverage.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── CalculateAverageImpl.java │ │ │ │ │ ├── SensorService.java │ │ │ │ │ ├── SensorServiceImpl.java │ │ │ │ │ └── UpdateDataImpl.java │ │ │ │ ├── spider/ │ │ │ │ │ └── GithubRepoPageProcessor.java │ │ │ │ ├── task/ │ │ │ │ │ ├── TestTask.java │ │ │ │ │ └── UpdateDataTask.java │ │ │ │ ├── util/ │ │ │ │ │ ├── AdvancedUtil.java │ │ │ │ │ ├── Client.java │ │ │ │ │ ├── CommonUtil.java │ │ │ │ │ ├── Count.java │ │ │ │ │ ├── HttpClientUtils.java │ │ │ │ │ ├── HttpRequestUtil.java │ │ │ │ │ ├── JsonUtil.java │ │ │ │ │ ├── MD5ForDiscuz.java │ │ │ │ │ ├── MenuManager.java │ │ │ │ │ ├── MessageUtil.java │ │ │ │ │ ├── MongodbUtil.java │ │ │ │ │ ├── MyX509TrustManager.java │ │ │ │ │ ├── QQUtils.java │ │ │ │ │ ├── SignUtil.java │ │ │ │ │ ├── StringUtil.java │ │ │ │ │ └── WeixinUtil.java │ │ │ │ └── weixin/ │ │ │ │ ├── controller/ │ │ │ │ │ └── WeChatController.java │ │ │ │ ├── message/ │ │ │ │ │ ├── req/ │ │ │ │ │ │ ├── BaseMessage.java │ │ │ │ │ │ ├── ImageMessage.java │ │ │ │ │ │ ├── LinkMessage.java │ │ │ │ │ │ ├── TextMessage.java │ │ │ │ │ │ └── VoiceMessage.java │ │ │ │ │ └── resp/ │ │ │ │ │ ├── Article.java │ │ │ │ │ ├── BaseMessage.java │ │ │ │ │ ├── Music.java │ │ │ │ │ ├── MusicMessage.java │ │ │ │ │ ├── NewsMessage.java │ │ │ │ │ └── TextMessage.java │ │ │ │ ├── model/ │ │ │ │ │ ├── AccessToken.java │ │ │ │ │ ├── BaiduPlace.java │ │ │ │ │ ├── Button.java │ │ │ │ │ ├── CommonButton.java │ │ │ │ │ ├── ComplexButton.java │ │ │ │ │ ├── Menu.java │ │ │ │ │ ├── SNSUserInfo.java │ │ │ │ │ ├── UserLocation.java │ │ │ │ │ ├── ViewButton.java │ │ │ │ │ ├── WeixinOauth2Token.java │ │ │ │ │ └── WeixinUserInfo.java │ │ │ │ └── service/ │ │ │ │ ├── CoreService.java │ │ │ │ ├── TemplateMes.java │ │ │ │ ├── TemplateMesService.java │ │ │ │ └── WeatherService.java │ │ │ └── light/ │ │ │ └── mvc/ │ │ │ ├── controller/ │ │ │ │ ├── base/ │ │ │ │ │ └── BaseController.java │ │ │ │ ├── manual/ │ │ │ │ │ ├── EFManualCategoryController.java │ │ │ │ │ └── EFManualContentController.java │ │ │ │ ├── news/ │ │ │ │ │ ├── EFCategoryController.java │ │ │ │ │ └── EFNewsController.java │ │ │ │ ├── sensor/ │ │ │ │ │ ├── apiSensorController.java │ │ │ │ │ ├── mapController.java │ │ │ │ │ ├── moniNodeController.java │ │ │ │ │ ├── pestDataController.java │ │ │ │ │ ├── sensorController.java │ │ │ │ │ └── stationController.java │ │ │ │ └── sys/ │ │ │ │ ├── DictionaryController.java │ │ │ │ ├── DictionarytypeController.java │ │ │ │ ├── IndexController.java │ │ │ │ ├── OrganizationController.java │ │ │ │ ├── PictureCheckCode.java │ │ │ │ ├── ResourceController.java │ │ │ │ ├── RoleController.java │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ ├── BaseDaoI.java │ │ │ │ └── impl/ │ │ │ │ └── BaseDaoImpl.java │ │ │ ├── framework/ │ │ │ │ ├── constant/ │ │ │ │ │ └── GlobalConstant.java │ │ │ │ └── interceptors/ │ │ │ │ ├── SecurityInterceptor.java │ │ │ │ └── SecurityInterceptorFront.java │ │ │ ├── model/ │ │ │ │ ├── base/ │ │ │ │ │ ├── IdEntity.java │ │ │ │ │ ├── IdEntityORACLE.java │ │ │ │ │ └── baseEntity.java │ │ │ │ ├── manual/ │ │ │ │ │ ├── TEFmanualCategory.java │ │ │ │ │ ├── TEFmanualContent.java │ │ │ │ │ └── TEFmanualKeyword.java │ │ │ │ ├── news/ │ │ │ │ │ ├── TEFcategory.java │ │ │ │ │ └── TEFnews.java │ │ │ │ ├── sensor/ │ │ │ │ │ ├── TmonitoringNode.java │ │ │ │ │ ├── TpestData.java │ │ │ │ │ ├── Tsensor.java │ │ │ │ │ └── Tstation.java │ │ │ │ └── sys/ │ │ │ │ ├── TEFDictionary.java │ │ │ │ ├── TEFDictionaryCategory.java │ │ │ │ ├── TEFLoginUser.java │ │ │ │ ├── TEFNotice.java │ │ │ │ ├── TEFOrganization.java │ │ │ │ ├── TEFPersonalInfo.java │ │ │ │ ├── TEFResource.java │ │ │ │ ├── TEFResourceMeta.java │ │ │ │ ├── TEFRole.java │ │ │ │ ├── Tdictionary.java │ │ │ │ ├── Tdictionarytype.java │ │ │ │ ├── Torganization.java │ │ │ │ ├── Tresource.java │ │ │ │ ├── Trole.java │ │ │ │ └── Tuser.java │ │ │ ├── pageModel/ │ │ │ │ ├── base/ │ │ │ │ │ ├── Grid.java │ │ │ │ │ ├── Json.java │ │ │ │ │ ├── JsonAPI.java │ │ │ │ │ ├── JsonToMobile.java │ │ │ │ │ ├── Notice.java │ │ │ │ │ ├── PageFilter.java │ │ │ │ │ ├── Result.java │ │ │ │ │ ├── SessionInfo.java │ │ │ │ │ └── Tree.java │ │ │ │ ├── manual/ │ │ │ │ │ ├── EFExpertList.java │ │ │ │ │ ├── EFmanualCategory.java │ │ │ │ │ ├── EFmanualCategoryList.java │ │ │ │ │ ├── EFmanualContent.java │ │ │ │ │ └── EFmanualKeyword.java │ │ │ │ ├── news/ │ │ │ │ │ ├── EFCategory.java │ │ │ │ │ └── EFNews.java │ │ │ │ ├── sensor/ │ │ │ │ │ ├── Sensor.java │ │ │ │ │ ├── Station.java │ │ │ │ │ ├── monitoringNode.java │ │ │ │ │ ├── pestAndSensorDate.java │ │ │ │ │ └── pestData.java │ │ │ │ └── sys/ │ │ │ │ ├── Dictionary.java │ │ │ │ ├── Dictionarytype.java │ │ │ │ ├── EFNotice.java │ │ │ │ ├── EFResourceMeta.java │ │ │ │ ├── Organization.java │ │ │ │ ├── Resource.java │ │ │ │ ├── Role.java │ │ │ │ └── User.java │ │ │ ├── service/ │ │ │ │ ├── base/ │ │ │ │ │ └── ServiceException.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── manual/ │ │ │ │ │ │ ├── EFManualCategoryServiceImpl.java │ │ │ │ │ │ ├── EFManualContentServiceImpl.java │ │ │ │ │ │ └── EFManualKeywordServiceImpl.java │ │ │ │ │ └── news/ │ │ │ │ │ ├── EFCategoryServiceImpl.java │ │ │ │ │ └── EFNewsServiceImpl.java │ │ │ │ ├── manual/ │ │ │ │ │ ├── EFManualCategoryServiceI.java │ │ │ │ │ ├── EFManualContentServiceI.java │ │ │ │ │ └── EFManualKeywordServiceI.java │ │ │ │ ├── news/ │ │ │ │ │ ├── EFCategoryServiceI.java │ │ │ │ │ └── EFNewsServiceI.java │ │ │ │ ├── sensor/ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── monitoringNodeServiceImpl.java │ │ │ │ │ │ ├── pestDataServiceImpl.java │ │ │ │ │ │ ├── pestSensorServiceImpl.java │ │ │ │ │ │ └── stationServiceImpl.java │ │ │ │ │ ├── monitoringNodeServiceI.java │ │ │ │ │ ├── pestDataServiceI.java │ │ │ │ │ ├── pestSensorServiceI.java │ │ │ │ │ └── stationServiceI.java │ │ │ │ └── sys/ │ │ │ │ ├── DictionaryServiceI.java │ │ │ │ ├── DictionarytypeServiceI.java │ │ │ │ ├── EFNoticeServiceI.java │ │ │ │ ├── OrganizationServiceI.java │ │ │ │ ├── ResourceMetaServiceI.java │ │ │ │ ├── ResourceServiceI.java │ │ │ │ ├── RoleServiceI.java │ │ │ │ ├── UserServiceI.java │ │ │ │ └── impl/ │ │ │ │ ├── DictionaryServiceImpl.java │ │ │ │ ├── DictionarytypeServiceImpl.java │ │ │ │ ├── EFNoticeServiceImpl.java │ │ │ │ ├── OrganizationServiceImpl.java │ │ │ │ ├── ResourceMetaImpl.java │ │ │ │ ├── ResourceServiceImpl.java │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ │ └── utils/ │ │ │ ├── DateTimeUtil.java │ │ │ ├── ExcelUtil.java │ │ │ ├── FastJsonHttpMessageConverter.java │ │ │ ├── MD5Util.java │ │ │ ├── MyImageUtil.java │ │ │ ├── PropertiesLoader.java │ │ │ ├── StringEscapeEditor.java │ │ │ ├── StringUnEscapeEditor.java │ │ │ ├── StringUtil.java │ │ │ └── coder.java │ │ ├── resources/ │ │ │ ├── config.properties │ │ │ ├── log4j.properties │ │ │ ├── logback.xml │ │ │ └── spring/ │ │ │ ├── spring-context.xml │ │ │ ├── spring-hibernate.xml │ │ │ ├── spring-mongo.xml │ │ │ └── spring-web.xml │ │ └── webapp/ │ │ ├── WEB-INF/ │ │ │ ├── views/ │ │ │ │ ├── bsmode/ │ │ │ │ │ └── html/ │ │ │ │ │ ├── 404.html │ │ │ │ │ ├── 500.html │ │ │ │ │ ├── about_us.html │ │ │ │ │ ├── basic_table.html │ │ │ │ │ ├── blank.html │ │ │ │ │ ├── blog.html │ │ │ │ │ ├── button.html │ │ │ │ │ ├── calendar.html │ │ │ │ │ ├── chartjs.html │ │ │ │ │ ├── contact_us.html │ │ │ │ │ ├── draggable_portlet.html │ │ │ │ │ ├── dynamic_table.html │ │ │ │ │ ├── editable_table.html │ │ │ │ │ ├── faq.html │ │ │ │ │ ├── flot_chart.html │ │ │ │ │ ├── font_awesome.html │ │ │ │ │ ├── form_component.html │ │ │ │ │ ├── form_layout.html │ │ │ │ │ ├── form_validation.html │ │ │ │ │ ├── form_wizard.html │ │ │ │ │ ├── gallery.html │ │ │ │ │ ├── general.html │ │ │ │ │ ├── general_portlet.html │ │ │ │ │ ├── glyphicons.html │ │ │ │ │ ├── grids.html │ │ │ │ │ ├── index - 副本.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── invoice.html │ │ │ │ │ ├── lock.html │ │ │ │ │ ├── login.html │ │ │ │ │ ├── metro_view.html │ │ │ │ │ ├── nestable.html │ │ │ │ │ ├── pricing_tables.html │ │ │ │ │ ├── profile.html │ │ │ │ │ ├── search_result.html │ │ │ │ │ ├── slider.html │ │ │ │ │ ├── tabs_accordion.html │ │ │ │ │ ├── timeline.html │ │ │ │ │ ├── tree_view.html │ │ │ │ │ └── typography.html │ │ │ │ ├── eumode/ │ │ │ │ │ ├── MoniNode/ │ │ │ │ │ │ ├── MoniNodeAdd.jsp │ │ │ │ │ │ ├── MoniNodeInfo.jsp │ │ │ │ │ │ ├── MoniNodeList.jsp │ │ │ │ │ │ ├── pestMoniNode.jsp │ │ │ │ │ │ ├── pestMoniNodeEdit.jsp │ │ │ │ │ │ └── pestMoniSearch.jsp │ │ │ │ │ ├── inc.jsp │ │ │ │ │ ├── index.jsp │ │ │ │ │ ├── login.jsp │ │ │ │ │ ├── manual/ │ │ │ │ │ │ ├── category.jsp │ │ │ │ │ │ ├── categoryAdd.jsp │ │ │ │ │ │ ├── categoryEdit.jsp │ │ │ │ │ │ ├── manual.jsp │ │ │ │ │ │ ├── manualAdd.jsp │ │ │ │ │ │ └── manualDetail.jsp │ │ │ │ │ ├── news/ │ │ │ │ │ │ ├── category.jsp │ │ │ │ │ │ ├── categoryAdd.jsp │ │ │ │ │ │ ├── categoryEdit.jsp │ │ │ │ │ │ ├── news.jsp │ │ │ │ │ │ ├── newsAdd.jsp │ │ │ │ │ │ ├── newsDetail.jsp │ │ │ │ │ │ └── newsEdit.jsp │ │ │ │ │ ├── pestData/ │ │ │ │ │ │ ├── pestdata.jsp │ │ │ │ │ │ ├── pestdataAdd.jsp │ │ │ │ │ │ ├── pestdataEdit.jsp │ │ │ │ │ │ └── pestdataSearch.jsp │ │ │ │ │ ├── pestImg/ │ │ │ │ │ │ ├── ImgInfo.jsp │ │ │ │ │ │ ├── pestImg.jsp │ │ │ │ │ │ ├── pestImgAdd.jsp │ │ │ │ │ │ ├── pestImgEdit.jsp │ │ │ │ │ │ └── pestImgSearch.jsp │ │ │ │ │ ├── sensor/ │ │ │ │ │ │ ├── sensorSearch.jsp │ │ │ │ │ │ ├── sensordata.jsp │ │ │ │ │ │ ├── sensordataAdd.jsp │ │ │ │ │ │ └── sensordataEdit.jsp │ │ │ │ │ ├── station/ │ │ │ │ │ │ ├── organizationEdit.jsp │ │ │ │ │ │ ├── station.jsp │ │ │ │ │ │ └── stationAdd.jsp │ │ │ │ │ └── sys/ │ │ │ │ │ ├── dictionary.jsp │ │ │ │ │ ├── dictionaryAdd.jsp │ │ │ │ │ ├── dictionaryEdit.jsp │ │ │ │ │ ├── organization.jsp │ │ │ │ │ ├── organizationAdd.jsp │ │ │ │ │ ├── organizationEdit.jsp │ │ │ │ │ ├── resource.jsp │ │ │ │ │ ├── resourceAdd.jsp │ │ │ │ │ ├── resourceEdit.jsp │ │ │ │ │ ├── role.jsp │ │ │ │ │ ├── roleAdd.jsp │ │ │ │ │ ├── roleEdit.jsp │ │ │ │ │ ├── roleGrant.jsp │ │ │ │ │ ├── user.jsp │ │ │ │ │ ├── userAdd.jsp │ │ │ │ │ ├── userEdit.jsp │ │ │ │ │ ├── userEditPwd.jsp │ │ │ │ │ └── userManual.jsp │ │ │ │ ├── front/ │ │ │ │ │ ├── applycommpany.html │ │ │ │ │ ├── applycommpany.jsp │ │ │ │ │ ├── applycountryside.html │ │ │ │ │ ├── applycountryside.jsp │ │ │ │ │ ├── article.html │ │ │ │ │ ├── article.jsp │ │ │ │ │ ├── articlelist.html │ │ │ │ │ ├── articlelist.jsp │ │ │ │ │ ├── askquestionpage.html │ │ │ │ │ ├── askquestionpage.jsp │ │ │ │ │ ├── commpanylist.html │ │ │ │ │ ├── commpanylist.jsp │ │ │ │ │ ├── countrysidelist.html │ │ │ │ │ ├── countrysidelist.jsp │ │ │ │ │ ├── expertlist.jsp │ │ │ │ │ ├── footer.jsp │ │ │ │ │ ├── forgetpassword.html │ │ │ │ │ ├── header.jsp │ │ │ │ │ ├── inc-head.jsp │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.jsp │ │ │ │ │ ├── informationlist.html │ │ │ │ │ ├── informationlist.jsp │ │ │ │ │ ├── knowledgedata.html │ │ │ │ │ ├── knowledgedata.jsp │ │ │ │ │ ├── login.html │ │ │ │ │ ├── login.jsp │ │ │ │ │ ├── loginTTI.jsp │ │ │ │ │ ├── login_old.jsp │ │ │ │ │ ├── loginvideo.jsp │ │ │ │ │ ├── navigation.jsp │ │ │ │ │ ├── performancelist.html │ │ │ │ │ ├── performancelist.jsp │ │ │ │ │ ├── performancemanage.html │ │ │ │ │ ├── performancemanage.jsp │ │ │ │ │ ├── personalcenter.html │ │ │ │ │ ├── personalcenter.jsp │ │ │ │ │ ├── personalnavigation.jsp │ │ │ │ │ ├── personalnoticelist.jsp │ │ │ │ │ ├── personalquestionlist.html │ │ │ │ │ ├── personalquestionlist.jsp │ │ │ │ │ ├── questionlist.html │ │ │ │ │ ├── questionlist.jsp │ │ │ │ │ ├── questionpage.html │ │ │ │ │ ├── questionpage.jsp │ │ │ │ │ ├── register.html │ │ │ │ │ ├── register.jsp │ │ │ │ │ ├── showvideopage.html │ │ │ │ │ └── wpthemedemobar.jsp │ │ │ │ ├── inc.jsp │ │ │ │ ├── mogoList.jsp │ │ │ │ └── qq.jsp │ │ │ └── web.xml │ │ ├── assets/ │ │ │ ├── bootstrap/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── bootstrap-fileupload.css │ │ │ │ ├── img/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-fileupload.js │ │ │ ├── bootstrap-colorpicker/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── colorpicker.css │ │ │ │ ├── img/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-colorpicker.js │ │ │ ├── bootstrap-datepicker/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── datepicker.css │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-datepicker.js │ │ │ ├── bootstrap-daterangepicker/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── date.js │ │ │ │ ├── daterangepicker.css │ │ │ │ └── daterangepicker.js │ │ │ ├── bootstrap-inputmask/ │ │ │ │ └── Descr.WD3 │ │ │ ├── bootstrap-timepicker/ │ │ │ │ ├── compiled/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── timepicker.css │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-timepicker.js │ │ │ ├── bootstrap-toggle-buttons/ │ │ │ │ └── static/ │ │ │ │ ├── js/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── jquery.toggle.buttons.js │ │ │ │ └── stylesheets/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-toggle-buttons.css │ │ │ ├── bootstrap-tree/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── bootstrap-tree/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ │ └── bootstrap-tree.css │ │ │ │ │ ├── img/ │ │ │ │ │ │ └── Descr.WD3 │ │ │ │ │ └── js/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── bootstrap-tree.js │ │ │ │ ├── htmlexample.html │ │ │ │ ├── img/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── img/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ ├── jsonexample.json │ │ │ │ └── xmlexample.xml │ │ │ ├── bootstrap-wizard/ │ │ │ │ └── Descr.WD3 │ │ │ ├── bootstrap-wysihtml5/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── bootstrap-wysihtml5.css │ │ │ │ ├── bootstrap-wysihtml5.js │ │ │ │ └── wysihtml5-0.3.0.js │ │ │ ├── chart-master/ │ │ │ │ ├── Chart.js │ │ │ │ └── Descr.WD3 │ │ │ ├── chosen-bootstrap/ │ │ │ │ └── chosen/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── chosen.css │ │ │ ├── ckeditor/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── ckeditor.js │ │ │ ├── clockface/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── clockface.css │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── clockface.js │ │ │ ├── data-tables/ │ │ │ │ ├── DT_bootstrap.css │ │ │ │ ├── DT_bootstrap.js │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── images/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── img/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── img/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── jquery.dataTables.js │ │ │ ├── dropzone/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── dropzone.css │ │ │ │ ├── deps/ │ │ │ │ │ └── emitter/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── index.js │ │ │ │ ├── dropzone.js │ │ │ │ ├── images/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ ├── index.js │ │ │ │ └── lib/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── dropzone.js │ │ │ ├── fancybox/ │ │ │ │ └── source/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── jquery.fancybox.css │ │ │ │ └── jquery.fancybox.pack.js │ │ │ ├── flot/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── jquery.flot.crosshair.js │ │ │ │ ├── jquery.flot.js │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ └── jquery.flot.stack.js │ │ │ ├── font-awesome/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ ├── M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13053E3D2A0B │ │ │ │ │ ├── M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z │ │ │ │ │ ├── M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t06C14E9A4A │ │ │ │ │ ├── M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -9008AD2B1A63 │ │ │ │ │ ├── M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19072F5ECA8B │ │ │ │ │ ├── M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t10853ADFA9F │ │ │ │ │ ├── M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q03F7DC5A5A │ │ │ │ │ ├── M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 0606112A72 │ │ │ │ │ ├── M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-0A62DD2A40 │ │ │ │ │ ├── M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.03ECFC9A16 │ │ │ │ │ ├── M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -064148EA68 │ │ │ │ │ ├── font-awesome.css │ │ │ │ │ └── img/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── img/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── font/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── fontawesome-webfont.eot@ │ │ │ │ ├── fontawesome-webfont.eot@v=3.2.1 │ │ │ │ ├── fontawesome-webfont.ttf@v=3.2.1 │ │ │ │ ├── fontawesome-webfont.woff@v=3.2.1 │ │ │ │ └── img/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── img/ │ │ │ │ └── Descr.WD3 │ │ │ ├── fullcalendar/ │ │ │ │ └── fullcalendar/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-fullcalendar.css │ │ │ ├── gritter/ │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── jquery.gritter.css │ │ │ │ ├── images/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── jquery.gritter.js │ │ │ ├── jquery-easy-pie-chart/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── jquery.easy-pie-chart.css │ │ │ │ └── jquery.easy-pie-chart.js │ │ │ ├── jquery-slimscroll/ │ │ │ │ └── Descr.WD3 │ │ │ ├── jquery-tags-input/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── jquery.tagsinput.css │ │ │ ├── jquery-ui/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── images/ │ │ │ │ └── Descr.WD3 │ │ │ ├── jqvmap/ │ │ │ │ └── jqvmap/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── data/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── jquery.vmap.sampledata.js │ │ │ │ ├── jquery.vmap.js │ │ │ │ ├── jqvmap.css │ │ │ │ └── maps/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── jquery.vmap.europe.js │ │ │ │ ├── jquery.vmap.germany.js │ │ │ │ ├── jquery.vmap.russia.js │ │ │ │ ├── jquery.vmap.usa.js │ │ │ │ └── jquery.vmap.world.js │ │ │ ├── metr-folio/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── tiles/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ ├── css/ │ │ │ │ │ ├── Descr.WD3 │ │ │ │ │ └── metro-gallery.css │ │ │ │ ├── icons/ │ │ │ │ │ └── Descr.WD3 │ │ │ │ └── js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── jquery.metro-gal.megafoliopro.js │ │ │ ├── nestable/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── jquery.nestable.css │ │ │ │ └── jquery.nestable.js │ │ │ ├── plugins/ │ │ │ │ └── bootstrap-tree/ │ │ │ │ └── bootstrap-tree/ │ │ │ │ └── img/ │ │ │ │ └── Descr.WD3 │ │ │ └── uniform/ │ │ │ └── Descr.WD3 │ │ ├── error/ │ │ │ ├── 404.jsp │ │ │ ├── 500.jsp │ │ │ ├── noSecurity.jsp │ │ │ ├── noSession.jsp │ │ │ └── noSessionFront.jsp │ │ ├── font/ │ │ │ ├── Descr.WD3 │ │ │ ├── myriadprobold.eot@ │ │ │ ├── myriadproit.eot@ │ │ │ ├── myriadprolight.eot@ │ │ │ └── myriadproregular.eot@ │ │ ├── index.jsp │ │ ├── jslib/ │ │ │ ├── bs_js/ │ │ │ │ ├── Descr.WD3 │ │ │ │ ├── all-chartjs.js │ │ │ │ ├── common-scripts.js │ │ │ │ ├── custom-flot-chart.js │ │ │ │ ├── draggable-portlet.js │ │ │ │ ├── dynamic-table.js │ │ │ │ ├── easy-pie-chart.js │ │ │ │ ├── editable-table.js │ │ │ │ ├── excanvas.js │ │ │ │ ├── external-dragging-calendar.js │ │ │ │ ├── flot-chart.js │ │ │ │ ├── form-component.js │ │ │ │ ├── form-validation-script.js │ │ │ │ ├── form-wizard.js │ │ │ │ ├── gmaps-scripts.js │ │ │ │ ├── gmaps.js │ │ │ │ ├── gritter.js │ │ │ │ ├── home-chartjs.js │ │ │ │ ├── home-page-calender.js │ │ │ │ ├── jQuery.dualListBox-1.3.js │ │ │ │ ├── jquery.blockui.js │ │ │ │ ├── jquery.nicescroll.js │ │ │ │ ├── jquery.sparkline.js │ │ │ │ ├── nestable.js │ │ │ │ ├── pulstate.js │ │ │ │ ├── respond.js │ │ │ │ ├── sliders.js │ │ │ │ ├── sparkline-chart.js │ │ │ │ ├── tree.js │ │ │ │ └── vmaps-scripts.js │ │ │ ├── chart/ │ │ │ │ ├── g.bar.js │ │ │ │ ├── g.dot.js │ │ │ │ ├── g.line.js │ │ │ │ ├── g.pie.js │ │ │ │ ├── g.raphael.js │ │ │ │ ├── index.html │ │ │ │ ├── jquery-2.1.4.js │ │ │ │ ├── raphael-min.js │ │ │ │ └── raphael.js │ │ │ └── eu_js/ │ │ │ ├── My97DatePicker/ │ │ │ │ ├── WdatePicker.js │ │ │ │ ├── calendar.js │ │ │ │ ├── lang/ │ │ │ │ │ ├── en.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh-tw.js │ │ │ │ └── skin/ │ │ │ │ ├── WdatePicker.css │ │ │ │ ├── default/ │ │ │ │ │ └── datepicker.css │ │ │ │ └── whyGreen/ │ │ │ │ └── datepicker.css │ │ │ ├── easyui1.3.3/ │ │ │ │ ├── locale/ │ │ │ │ │ ├── easyui-lang-en.js │ │ │ │ │ └── easyui-lang-zh_CN.js │ │ │ │ └── themes/ │ │ │ │ ├── default/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── gray/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── icon.css │ │ │ │ ├── metro-blue/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── metro-gray/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── metro-green/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── metro-orange/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ └── metro-red/ │ │ │ │ ├── accordion.css │ │ │ │ ├── calendar.css │ │ │ │ ├── combo.css │ │ │ │ ├── combobox.css │ │ │ │ ├── datagrid.css │ │ │ │ ├── datebox.css │ │ │ │ ├── dialog.css │ │ │ │ ├── easyui.css │ │ │ │ ├── layout.css │ │ │ │ ├── linkbutton.css │ │ │ │ ├── menu.css │ │ │ │ ├── menubutton.css │ │ │ │ ├── messager.css │ │ │ │ ├── pagination.css │ │ │ │ ├── panel.css │ │ │ │ ├── progressbar.css │ │ │ │ ├── propertygrid.css │ │ │ │ ├── searchbox.css │ │ │ │ ├── slider.css │ │ │ │ ├── spinner.css │ │ │ │ ├── splitbutton.css │ │ │ │ ├── tabs.css │ │ │ │ ├── tooltip.css │ │ │ │ ├── tree.css │ │ │ │ ├── validatebox.css │ │ │ │ └── window.css │ │ │ ├── extEasyUI.js │ │ │ ├── extJquery.js │ │ │ ├── jquery-1.8.3.js │ │ │ ├── lightmvc.js │ │ │ └── xheditor/ │ │ │ ├── xheditor_emot/ │ │ │ │ ├── default/ │ │ │ │ │ └── config.txt │ │ │ │ ├── ipb/ │ │ │ │ │ └── config.txt │ │ │ │ └── pidgin/ │ │ │ │ └── config.txt │ │ │ ├── xheditor_lang/ │ │ │ │ ├── en.js │ │ │ │ ├── zh-cn.js │ │ │ │ └── zh-tw.js │ │ │ ├── xheditor_plugins/ │ │ │ │ ├── html2markdown.js │ │ │ │ ├── htmldomparser.js │ │ │ │ ├── multiupload/ │ │ │ │ │ ├── multiupload.css │ │ │ │ │ ├── multiupload.html │ │ │ │ │ ├── multiupload.js │ │ │ │ │ └── swfupload/ │ │ │ │ │ ├── swfupload.js │ │ │ │ │ └── swfupload.swf │ │ │ │ ├── showdown.js │ │ │ │ └── ubb.js │ │ │ └── xheditor_skin/ │ │ │ ├── default/ │ │ │ │ ├── iframe.css │ │ │ │ └── ui.css │ │ │ ├── nostyle/ │ │ │ │ ├── iframe.css │ │ │ │ └── ui.css │ │ │ ├── o2007blue/ │ │ │ │ ├── iframe.css │ │ │ │ └── ui.css │ │ │ ├── o2007silver/ │ │ │ │ ├── iframe.css │ │ │ │ └── ui.css │ │ │ └── vista/ │ │ │ ├── iframe.css │ │ │ └── ui.css │ │ └── style/ │ │ └── eu/ │ │ ├── index/ │ │ │ ├── article.css │ │ │ ├── comment.css │ │ │ ├── commpany.css │ │ │ ├── countryside.css │ │ │ ├── css.css │ │ │ ├── default.css │ │ │ ├── detailinputunit.css │ │ │ ├── embed.default.css │ │ │ ├── expert.css │ │ │ ├── information.css │ │ │ ├── knowledgedata.css │ │ │ ├── login.css │ │ │ ├── performance.css │ │ │ ├── personalquestionlist.css │ │ │ ├── play.css │ │ │ ├── themepark.css │ │ │ └── thickbox.css │ │ └── theme/ │ │ ├── css/ │ │ │ ├── style-default.css │ │ │ └── style-flat.css │ │ ├── fonts/ │ │ │ ├── font-awesome/ │ │ │ │ ├── css/ │ │ │ │ │ ├── font-awesome-ie7.css │ │ │ │ │ └── font-awesome.css │ │ │ │ ├── font/ │ │ │ │ │ └── FontAwesome.otf │ │ │ │ ├── less/ │ │ │ │ │ ├── bootstrap.less │ │ │ │ │ ├── core.less │ │ │ │ │ ├── extras.less │ │ │ │ │ ├── font-awesome-ie7.less │ │ │ │ │ ├── font-awesome.less │ │ │ │ │ ├── icons.less │ │ │ │ │ ├── mixins.less │ │ │ │ │ ├── path.less │ │ │ │ │ └── variables.less │ │ │ │ └── scss/ │ │ │ │ ├── _bootstrap.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _extras.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── font-awesome-ie7.scss │ │ │ │ └── font-awesome.scss │ │ │ └── glyphicons/ │ │ │ ├── css/ │ │ │ │ └── glyphicons.css │ │ │ └── fonts/ │ │ │ └── glyphicons-regular.otf │ │ ├── less/ │ │ │ ├── accordions.less │ │ │ ├── alerts.less │ │ │ ├── buttons.less │ │ │ ├── calendar.less │ │ │ ├── choose.less │ │ │ ├── documentation.less │ │ │ ├── form-wizards.less │ │ │ ├── forms.less │ │ │ ├── front.less │ │ │ ├── gallery.less │ │ │ ├── guidedtour.less │ │ │ ├── jquery-ui.less │ │ │ ├── labels.less │ │ │ ├── landings.less │ │ │ ├── layout.less │ │ │ ├── login.less │ │ │ ├── lt-ie9.less │ │ │ ├── menus.less │ │ │ ├── mixins.less │ │ │ ├── modals.less │ │ │ ├── notifications.less │ │ │ ├── pagination.less │ │ │ ├── popovers.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive.less │ │ │ ├── rtl.less │ │ │ ├── scaffolding.less │ │ │ ├── sliders.less │ │ │ ├── style-default.less │ │ │ ├── style-flat.less │ │ │ ├── tables.less │ │ │ ├── tabs.less │ │ │ ├── themer.less │ │ │ ├── timeline.less │ │ │ ├── tooltips.less │ │ │ ├── variables.less │ │ │ └── widgets.less │ │ ├── scripts/ │ │ │ ├── demo/ │ │ │ │ ├── calendar.js │ │ │ │ ├── charts.helper.js │ │ │ │ ├── charts.js │ │ │ │ ├── choose.js │ │ │ │ ├── common.js │ │ │ │ ├── contact.js │ │ │ │ ├── file_managers.js │ │ │ │ ├── finances.js │ │ │ │ ├── form_elements.js │ │ │ │ ├── form_validator.js │ │ │ │ ├── form_wizards.js │ │ │ │ ├── google_analytics.js │ │ │ │ ├── image_crop.js │ │ │ │ ├── index.js │ │ │ │ ├── infinite_scroll.js │ │ │ │ ├── maps_google.js │ │ │ │ ├── maps_vector.js │ │ │ │ ├── modals.js │ │ │ │ ├── notifications.js │ │ │ │ ├── sliders.js │ │ │ │ ├── tables.js │ │ │ │ ├── tables_responsive.js │ │ │ │ ├── themer.js │ │ │ │ ├── tour_demo.js │ │ │ │ ├── twitter.js │ │ │ │ ├── ui.js │ │ │ │ └── widgets.js │ │ │ └── plugins/ │ │ │ ├── charts/ │ │ │ │ ├── easy-pie/ │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── excanvas.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── style.css │ │ │ │ │ ├── jquery.easy-pie-chart.coffee │ │ │ │ │ ├── jquery.easy-pie-chart.css │ │ │ │ │ └── jquery.easy-pie-chart.js │ │ │ │ └── flot/ │ │ │ │ ├── API.txt │ │ │ │ ├── FAQ.txt │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── Makefile │ │ │ │ ├── NEWS.txt │ │ │ │ ├── PLUGINS.txt │ │ │ │ ├── README.txt │ │ │ │ ├── examples/ │ │ │ │ │ ├── ajax.html │ │ │ │ │ ├── annotating.html │ │ │ │ │ ├── basic.html │ │ │ │ │ ├── data-eu-gdp-growth-1.json │ │ │ │ │ ├── data-eu-gdp-growth-2.json │ │ │ │ │ ├── data-eu-gdp-growth-3.json │ │ │ │ │ ├── data-eu-gdp-growth-4.json │ │ │ │ │ ├── data-eu-gdp-growth-5.json │ │ │ │ │ ├── data-eu-gdp-growth.json │ │ │ │ │ ├── data-japan-gdp-growth.json │ │ │ │ │ ├── data-usa-gdp-growth.json │ │ │ │ │ ├── graph-types.html │ │ │ │ │ ├── image.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── interacting-axes.html │ │ │ │ │ ├── interacting.html │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── multiple-axes.html │ │ │ │ │ ├── navigate.html │ │ │ │ │ ├── percentiles.html │ │ │ │ │ ├── pie.html │ │ │ │ │ ├── realtime.html │ │ │ │ │ ├── resize.html │ │ │ │ │ ├── selection.html │ │ │ │ │ ├── setting-options.html │ │ │ │ │ ├── stacking.html │ │ │ │ │ ├── symbols.html │ │ │ │ │ ├── thresholding.html │ │ │ │ │ ├── time.html │ │ │ │ │ ├── tracking.html │ │ │ │ │ ├── turning-series.html │ │ │ │ │ ├── visitors.html │ │ │ │ │ └── zooming.html │ │ │ │ ├── excanvas.js │ │ │ │ ├── jquery.colorhelpers.js │ │ │ │ ├── jquery.flot.crosshair.js │ │ │ │ ├── jquery.flot.fillbetween.js │ │ │ │ ├── jquery.flot.image.js │ │ │ │ ├── jquery.flot.js │ │ │ │ ├── jquery.flot.navigate.js │ │ │ │ ├── jquery.flot.orderBars.js │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ ├── jquery.flot.selection.js │ │ │ │ ├── jquery.flot.stack.js │ │ │ │ ├── jquery.flot.symbol.js │ │ │ │ ├── jquery.flot.threshold.js │ │ │ │ ├── jquery.flot.tooltip.js │ │ │ │ └── jquery.js │ │ │ ├── color/ │ │ │ │ ├── farbtastic/ │ │ │ │ │ ├── CHANGELOG.html │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── README.html │ │ │ │ │ ├── demo1.html │ │ │ │ │ ├── demo2.html │ │ │ │ │ ├── farbtastic.css │ │ │ │ │ └── farbtastic.js │ │ │ │ └── jquery-miniColors/ │ │ │ │ ├── component.json │ │ │ │ ├── index.html │ │ │ │ ├── jquery.miniColors.css │ │ │ │ ├── jquery.miniColors.js │ │ │ │ └── readme.md │ │ │ ├── forms/ │ │ │ │ ├── bootstrap-datetimepicker/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── datetimepicker.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── bootstrap-datetimepicker.js │ │ │ │ │ └── locales/ │ │ │ │ │ ├── bootstrap-datetimepicker.bg.js │ │ │ │ │ ├── bootstrap-datetimepicker.ca.js │ │ │ │ │ ├── bootstrap-datetimepicker.cs.js │ │ │ │ │ ├── bootstrap-datetimepicker.da.js │ │ │ │ │ ├── bootstrap-datetimepicker.de.js │ │ │ │ │ ├── bootstrap-datetimepicker.el.js │ │ │ │ │ ├── bootstrap-datetimepicker.es.js │ │ │ │ │ ├── bootstrap-datetimepicker.fi.js │ │ │ │ │ ├── bootstrap-datetimepicker.fr.js │ │ │ │ │ ├── bootstrap-datetimepicker.he.js │ │ │ │ │ ├── bootstrap-datetimepicker.hr.js │ │ │ │ │ ├── bootstrap-datetimepicker.hu.js │ │ │ │ │ ├── bootstrap-datetimepicker.id.js │ │ │ │ │ ├── bootstrap-datetimepicker.is.js │ │ │ │ │ ├── bootstrap-datetimepicker.it.js │ │ │ │ │ ├── bootstrap-datetimepicker.ja.js │ │ │ │ │ ├── bootstrap-datetimepicker.kr.js │ │ │ │ │ ├── bootstrap-datetimepicker.lt.js │ │ │ │ │ ├── bootstrap-datetimepicker.lv.js │ │ │ │ │ ├── bootstrap-datetimepicker.ms.js │ │ │ │ │ ├── bootstrap-datetimepicker.nb.js │ │ │ │ │ ├── bootstrap-datetimepicker.nl.js │ │ │ │ │ ├── bootstrap-datetimepicker.pl.js │ │ │ │ │ ├── bootstrap-datetimepicker.pt-BR.js │ │ │ │ │ ├── bootstrap-datetimepicker.pt.js │ │ │ │ │ ├── bootstrap-datetimepicker.ro.js │ │ │ │ │ ├── bootstrap-datetimepicker.rs-latin.js │ │ │ │ │ ├── bootstrap-datetimepicker.rs.js │ │ │ │ │ ├── bootstrap-datetimepicker.ru.js │ │ │ │ │ ├── bootstrap-datetimepicker.sk.js │ │ │ │ │ ├── bootstrap-datetimepicker.sl.js │ │ │ │ │ ├── bootstrap-datetimepicker.sv.js │ │ │ │ │ ├── bootstrap-datetimepicker.sw.js │ │ │ │ │ ├── bootstrap-datetimepicker.th.js │ │ │ │ │ ├── bootstrap-datetimepicker.tr.js │ │ │ │ │ ├── bootstrap-datetimepicker.uk.js │ │ │ │ │ ├── bootstrap-datetimepicker.zh-CN.js │ │ │ │ │ └── bootstrap-datetimepicker.zh-TW.js │ │ │ │ ├── bootstrap-timepicker/ │ │ │ │ │ ├── .bowerrc │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── bootstrap-timepicker.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── bootstrap-timepicker.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ └── timepicker.less │ │ │ │ │ └── spec/ │ │ │ │ │ └── js/ │ │ │ │ │ ├── KeyboardEventsSpec.js │ │ │ │ │ ├── MouseEventsSpec.js │ │ │ │ │ ├── TimepickerSpec.js │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ └── timepicker.html │ │ │ │ │ └── helpers/ │ │ │ │ │ ├── SpecHelper.js │ │ │ │ │ └── jasmine-jquery.js │ │ │ │ ├── dropzone/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── basic.css │ │ │ │ │ │ └── dropzone.css │ │ │ │ │ ├── dropzone.js │ │ │ │ │ └── upload.php │ │ │ │ ├── jquery-inputmask/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist/ │ │ │ │ │ │ ├── jquery.inputmask.bundle.js │ │ │ │ │ │ └── min/ │ │ │ │ │ │ ├── jquery.inputmask.date.extensions.js │ │ │ │ │ │ ├── jquery.inputmask.extensions.js │ │ │ │ │ │ ├── jquery.inputmask.js │ │ │ │ │ │ ├── jquery.inputmask.numeric.extensions.js │ │ │ │ │ │ └── jquery.inputmask.regex.extensions.js │ │ │ │ │ └── js/ │ │ │ │ │ ├── jquery.inputmask.date.extensions.js │ │ │ │ │ ├── jquery.inputmask.extensions.js │ │ │ │ │ ├── jquery.inputmask.js │ │ │ │ │ ├── jquery.inputmask.numeric.extensions.js │ │ │ │ │ └── jquery.inputmask.regex.extensions.js │ │ │ │ ├── jquery-validation/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── changelog.txt │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── ajaxSubmit-intergration-demo.html │ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ │ ├── captcha.js │ │ │ │ │ │ │ ├── image_req.php │ │ │ │ │ │ │ ├── images/ │ │ │ │ │ │ │ │ └── image.php │ │ │ │ │ │ │ ├── index.php │ │ │ │ │ │ │ ├── newsession.php │ │ │ │ │ │ │ ├── process.php │ │ │ │ │ │ │ ├── rand.php │ │ │ │ │ │ │ └── style.css │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── chili.css │ │ │ │ │ │ │ ├── cmxform.css │ │ │ │ │ │ │ ├── cmxformTemplate.css │ │ │ │ │ │ │ ├── core.css │ │ │ │ │ │ │ ├── reset.css │ │ │ │ │ │ │ └── screen.css │ │ │ │ │ │ ├── custom-messages-metadata-demo.html │ │ │ │ │ │ ├── custom-methods-demo.html │ │ │ │ │ │ ├── dynamic-totals.html │ │ │ │ │ │ ├── errorcontainer-demo.html │ │ │ │ │ │ ├── file_input.html │ │ │ │ │ │ ├── form.php │ │ │ │ │ │ ├── form.phps │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── jquerymobile.html │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ └── chili-1.7.pack.js │ │ │ │ │ │ ├── login/ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── screen.css │ │ │ │ │ │ ├── marketo/ │ │ │ │ │ │ │ ├── emails.php │ │ │ │ │ │ │ ├── emails.phps │ │ │ │ │ │ │ ├── ie6.css │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── jquery.maskedinput.js │ │ │ │ │ │ │ ├── mktSignup.js │ │ │ │ │ │ │ ├── step2.htm │ │ │ │ │ │ │ └── stylesheet.css │ │ │ │ │ │ ├── milk/ │ │ │ │ │ │ │ ├── emails.php │ │ │ │ │ │ │ ├── emails.phps │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── milk.css │ │ │ │ │ │ │ ├── users.php │ │ │ │ │ │ │ └── users.phps │ │ │ │ │ │ ├── multipart/ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ ├── jquery.maskedinput-1.0.js │ │ │ │ │ │ │ │ ├── ui.accordion.js │ │ │ │ │ │ │ │ └── ui.core.js │ │ │ │ │ │ │ └── style.css │ │ │ │ │ │ ├── radio-checkbox-select-demo.html │ │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── themerollered.html │ │ │ │ │ │ └── tinymce/ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── themes/ │ │ │ │ │ │ │ └── simple/ │ │ │ │ │ │ │ ├── editor_template.js │ │ │ │ │ │ │ ├── langs/ │ │ │ │ │ │ │ │ └── en.js │ │ │ │ │ │ │ └── skins/ │ │ │ │ │ │ │ └── default/ │ │ │ │ │ │ │ └── ui.css │ │ │ │ │ │ └── tiny_mce.js │ │ │ │ │ ├── dist/ │ │ │ │ │ │ ├── additional-methods.js │ │ │ │ │ │ └── jquery.validate.js │ │ │ │ │ ├── grunt.js │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── jquery-1.3.2.js │ │ │ │ │ │ ├── jquery-1.4.2.js │ │ │ │ │ │ ├── jquery-1.4.4.js │ │ │ │ │ │ ├── jquery-1.5.2.js │ │ │ │ │ │ ├── jquery-1.6.1.js │ │ │ │ │ │ ├── jquery-1.7.2.js │ │ │ │ │ │ ├── jquery.form.js │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── jquery.metadata.js │ │ │ │ │ │ └── jquery.mockjax.js │ │ │ │ │ ├── localization/ │ │ │ │ │ │ ├── messages_ar.js │ │ │ │ │ │ ├── messages_bg.js │ │ │ │ │ │ ├── messages_ca.js │ │ │ │ │ │ ├── messages_cs.js │ │ │ │ │ │ ├── messages_da.js │ │ │ │ │ │ ├── messages_de.js │ │ │ │ │ │ ├── messages_el.js │ │ │ │ │ │ ├── messages_es.js │ │ │ │ │ │ ├── messages_et.js │ │ │ │ │ │ ├── messages_eu.js │ │ │ │ │ │ ├── messages_fa.js │ │ │ │ │ │ ├── messages_fi.js │ │ │ │ │ │ ├── messages_fr.js │ │ │ │ │ │ ├── messages_he.js │ │ │ │ │ │ ├── messages_hr.js │ │ │ │ │ │ ├── messages_hu.js │ │ │ │ │ │ ├── messages_it.js │ │ │ │ │ │ ├── messages_ja.js │ │ │ │ │ │ ├── messages_ka.js │ │ │ │ │ │ ├── messages_kk.js │ │ │ │ │ │ ├── messages_lt.js │ │ │ │ │ │ ├── messages_lv.js │ │ │ │ │ │ ├── messages_nl.js │ │ │ │ │ │ ├── messages_no.js │ │ │ │ │ │ ├── messages_pl.js │ │ │ │ │ │ ├── messages_pt_BR.js │ │ │ │ │ │ ├── messages_pt_PT.js │ │ │ │ │ │ ├── messages_ro.js │ │ │ │ │ │ ├── messages_ru.js │ │ │ │ │ │ ├── messages_si.js │ │ │ │ │ │ ├── messages_sk.js │ │ │ │ │ │ ├── messages_sl.js │ │ │ │ │ │ ├── messages_sr.js │ │ │ │ │ │ ├── messages_sv.js │ │ │ │ │ │ ├── messages_th.js │ │ │ │ │ │ ├── messages_tr.js │ │ │ │ │ │ ├── messages_uk.js │ │ │ │ │ │ ├── messages_vi.js │ │ │ │ │ │ ├── messages_zh.js │ │ │ │ │ │ ├── messages_zh_TW.js │ │ │ │ │ │ ├── methods_de.js │ │ │ │ │ │ ├── methods_nl.js │ │ │ │ │ │ └── methods_pt.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test/ │ │ │ │ │ ├── events.html │ │ │ │ │ ├── firebug/ │ │ │ │ │ │ ├── firebug.css │ │ │ │ │ │ ├── firebug.html │ │ │ │ │ │ ├── firebug.js │ │ │ │ │ │ └── firebugx.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jquery.js │ │ │ │ │ ├── large.html │ │ │ │ │ ├── messages.js │ │ │ │ │ ├── methods.js │ │ │ │ │ ├── qunit/ │ │ │ │ │ │ ├── qunit.css │ │ │ │ │ │ └── qunit.js │ │ │ │ │ ├── rules.js │ │ │ │ │ ├── selects/ │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── tabs.html │ │ │ │ │ └── test.js │ │ │ │ ├── multiselect/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── multi-select.css │ │ │ │ │ └── js/ │ │ │ │ │ └── jquery.multi-select.js │ │ │ │ ├── pixelmatrix-uniform/ │ │ │ │ │ ├── README.textile │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── uniform.default.css │ │ │ │ │ ├── demo/ │ │ │ │ │ │ └── demo.html │ │ │ │ │ └── jquery.uniform.js │ │ │ │ ├── plupload/ │ │ │ │ │ ├── changelog.txt │ │ │ │ │ ├── docs/ │ │ │ │ │ │ └── api/ │ │ │ │ │ │ ├── class_plupload.File.html │ │ │ │ │ │ ├── class_plupload.QueueProgress.html │ │ │ │ │ │ ├── class_plupload.Runtime.html │ │ │ │ │ │ ├── class_plupload.Uploader.html │ │ │ │ │ │ ├── class_plupload.html │ │ │ │ │ │ ├── class_plupload.runtimes.BrowserPlus.html │ │ │ │ │ │ ├── class_plupload.runtimes.Flash.html │ │ │ │ │ │ ├── class_plupload.runtimes.Gears.html │ │ │ │ │ │ ├── class_plupload.runtimes.Html4.html │ │ │ │ │ │ ├── class_plupload.runtimes.Html5.html │ │ │ │ │ │ ├── class_plupload.runtimes.Silverlight.html │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── general.css │ │ │ │ │ │ │ ├── grids.css │ │ │ │ │ │ │ ├── jquery.treeview.css │ │ │ │ │ │ │ ├── reset.css │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ └── shThemeMoxieDoc.css │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ ├── clipboard.swf │ │ │ │ │ │ │ ├── general.js │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ ├── model.xml │ │ │ │ │ │ └── plupload.vsdoc.js │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── custom.html │ │ │ │ │ │ ├── dump.php │ │ │ │ │ │ ├── jquery/ │ │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ │ ├── jquery_ui_widget.html │ │ │ │ │ │ │ ├── queue_widget.html │ │ │ │ │ │ │ └── s3.php │ │ │ │ │ │ └── upload.php │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ │ └── sv.js │ │ │ │ │ │ ├── jquery.plupload.queue/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── jquery.plupload.queue.css │ │ │ │ │ │ │ └── jquery.plupload.queue.js │ │ │ │ │ │ ├── jquery.ui.plupload/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── jquery.ui.plupload.css │ │ │ │ │ │ │ └── jquery.ui.plupload.js │ │ │ │ │ │ ├── plupload.browserplus.js │ │ │ │ │ │ ├── plupload.flash.js │ │ │ │ │ │ ├── plupload.flash.swf │ │ │ │ │ │ ├── plupload.full.js │ │ │ │ │ │ ├── plupload.gears.js │ │ │ │ │ │ ├── plupload.html4.js │ │ │ │ │ │ ├── plupload.html5.js │ │ │ │ │ │ ├── plupload.js │ │ │ │ │ │ ├── plupload.silverlight.js │ │ │ │ │ │ └── plupload.silverlight.xap │ │ │ │ │ ├── license.txt │ │ │ │ │ └── readme.md │ │ │ │ └── select2/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── component.json │ │ │ │ ├── release.sh │ │ │ │ ├── select2.css │ │ │ │ ├── select2.jquery.json │ │ │ │ ├── select2.js │ │ │ │ ├── select2_locale_de.js │ │ │ │ ├── select2_locale_es.js │ │ │ │ ├── select2_locale_fr.js │ │ │ │ ├── select2_locale_hu.js │ │ │ │ ├── select2_locale_it.js │ │ │ │ ├── select2_locale_nl.js │ │ │ │ ├── select2_locale_pt-BR.js │ │ │ │ ├── select2_locale_pt-PT.js │ │ │ │ ├── select2_locale_ru.js │ │ │ │ └── select2_locale_zh-CN.js │ │ │ ├── maps/ │ │ │ │ ├── jquery-ui-map/ │ │ │ │ │ ├── data/ │ │ │ │ │ │ └── demo.json │ │ │ │ │ └── ui/ │ │ │ │ │ ├── jquery.ui.map.extensions.js │ │ │ │ │ ├── jquery.ui.map.js │ │ │ │ │ ├── jquery.ui.map.microdata.js │ │ │ │ │ ├── jquery.ui.map.microformat.js │ │ │ │ │ ├── jquery.ui.map.overlays.js │ │ │ │ │ ├── jquery.ui.map.rdfa.js │ │ │ │ │ └── jquery.ui.map.services.js │ │ │ │ └── jvectormap/ │ │ │ │ ├── css/ │ │ │ │ │ ├── elements.css │ │ │ │ │ ├── jquery-jvectormap-1.1.1.css │ │ │ │ │ └── jquery-jvectormap-1.2.2.css │ │ │ │ ├── data/ │ │ │ │ │ ├── france-elections.json │ │ │ │ │ ├── gdp-data.js │ │ │ │ │ └── us-unemployment.json │ │ │ │ └── maps/ │ │ │ │ ├── jquery-jvectormap-de-merc-en.js │ │ │ │ ├── jquery-jvectormap-es-merc-en.js │ │ │ │ ├── jquery-jvectormap-fr-merc-en.js │ │ │ │ ├── jquery-jvectormap-us-aea-en.js │ │ │ │ ├── jquery-jvectormap-us-lcc-en.js │ │ │ │ ├── jquery-jvectormap-world-mill-en.js │ │ │ │ └── mall-map.js │ │ │ ├── other/ │ │ │ │ ├── excanvas/ │ │ │ │ │ ├── AUTHORS │ │ │ │ │ ├── COPYING │ │ │ │ │ ├── README │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── example1.html │ │ │ │ │ │ ├── example2.html │ │ │ │ │ │ └── example3.html │ │ │ │ │ ├── excanvas.compiled.js │ │ │ │ │ ├── excanvas.js │ │ │ │ │ └── testcases/ │ │ │ │ │ ├── arc.html │ │ │ │ │ ├── clearpath.html │ │ │ │ │ ├── drawimage.html │ │ │ │ │ ├── gradient.html │ │ │ │ │ ├── gradient2.html │ │ │ │ │ ├── linewidth.html │ │ │ │ │ ├── overflow.html │ │ │ │ │ ├── quadraticcurve.html │ │ │ │ │ ├── resizing.html │ │ │ │ │ ├── saverestorepath.html │ │ │ │ │ ├── stroke-scale-rotate.html │ │ │ │ │ └── stroke-should-not-close-path.html │ │ │ │ ├── google-code-prettify/ │ │ │ │ │ ├── lang-apollo.js │ │ │ │ │ ├── lang-clj.js │ │ │ │ │ ├── lang-css.js │ │ │ │ │ ├── lang-go.js │ │ │ │ │ ├── lang-hs.js │ │ │ │ │ ├── lang-lisp.js │ │ │ │ │ ├── lang-lua.js │ │ │ │ │ ├── lang-ml.js │ │ │ │ │ ├── lang-n.js │ │ │ │ │ ├── lang-proto.js │ │ │ │ │ ├── lang-scala.js │ │ │ │ │ ├── lang-sql.js │ │ │ │ │ ├── lang-tex.js │ │ │ │ │ ├── lang-vb.js │ │ │ │ │ ├── lang-vhdl.js │ │ │ │ │ ├── lang-wiki.js │ │ │ │ │ ├── lang-xq.js │ │ │ │ │ ├── lang-yaml.js │ │ │ │ │ ├── prettify.css │ │ │ │ │ └── prettify.js │ │ │ │ ├── holder/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── component.json │ │ │ │ │ ├── holder.js │ │ │ │ │ └── package.json │ │ │ │ ├── jquery-mousewheel/ │ │ │ │ │ ├── ChangeLog.markdown │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── README.markdown │ │ │ │ │ ├── jquery.mousewheel.js │ │ │ │ │ └── test/ │ │ │ │ │ └── index.html │ │ │ │ ├── jquery-slimScroll/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── allow-page-scroll.html │ │ │ │ │ │ ├── chaining.html │ │ │ │ │ │ ├── disable-fade-out.html │ │ │ │ │ │ ├── dynamic-content.html │ │ │ │ │ │ ├── height-width.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── libs/ │ │ │ │ │ │ │ └── prettify/ │ │ │ │ │ │ │ ├── prettify.css │ │ │ │ │ │ │ └── prettify.js │ │ │ │ │ │ ├── mouse-wheel.html │ │ │ │ │ │ ├── multiple-elements.html │ │ │ │ │ │ ├── navigation.html │ │ │ │ │ │ ├── nested.html │ │ │ │ │ │ ├── programmatic-scrolling.html │ │ │ │ │ │ ├── rail.html │ │ │ │ │ │ ├── scroll-events.html │ │ │ │ │ │ ├── scrollbar.html │ │ │ │ │ │ ├── start-position.html │ │ │ │ │ │ └── style.css │ │ │ │ │ ├── jquery.slimscroll.js │ │ │ │ │ └── slimScroll.jquery.json │ │ │ │ ├── jquery.ba-resize.js │ │ │ │ ├── js-beautify/ │ │ │ │ │ ├── beautify-html.js │ │ │ │ │ └── beautify.js │ │ │ │ ├── json2.js │ │ │ │ └── pageguide/ │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── README.md │ │ │ │ ├── css/ │ │ │ │ │ └── pageguide.css │ │ │ │ ├── js/ │ │ │ │ │ └── pageguide.js │ │ │ │ └── less/ │ │ │ │ └── pageguide.less │ │ │ ├── system/ │ │ │ │ ├── jquery-ui/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── smoothness/ │ │ │ │ │ │ │ └── jquery-ui-1.9.2.custom.css │ │ │ │ │ │ └── ui-lightness/ │ │ │ │ │ │ └── jquery-ui-1.9.2.custom.css │ │ │ │ │ ├── development-bundle/ │ │ │ │ │ │ ├── AUTHORS.txt │ │ │ │ │ │ ├── MIT-LICENSE.txt │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── demos/ │ │ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ │ │ ├── collapsible.html │ │ │ │ │ │ │ │ ├── custom-icons.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── fillspace.html │ │ │ │ │ │ │ │ ├── hoverintent.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── no-auto-height.html │ │ │ │ │ │ │ │ └── sortable.html │ │ │ │ │ │ │ ├── autocomplete/ │ │ │ │ │ │ │ │ ├── categories.html │ │ │ │ │ │ │ │ ├── combobox.html │ │ │ │ │ │ │ │ ├── custom-data.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── folding.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── london.xml │ │ │ │ │ │ │ │ ├── maxheight.html │ │ │ │ │ │ │ │ ├── multiple-remote.html │ │ │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ │ │ ├── remote-jsonp.html │ │ │ │ │ │ │ │ ├── remote-with-cache.html │ │ │ │ │ │ │ │ ├── remote.html │ │ │ │ │ │ │ │ ├── search.php │ │ │ │ │ │ │ │ └── xml.html │ │ │ │ │ │ │ ├── button/ │ │ │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── radio.html │ │ │ │ │ │ │ │ ├── splitbutton.html │ │ │ │ │ │ │ │ └── toolbar.html │ │ │ │ │ │ │ ├── datepicker/ │ │ │ │ │ │ │ │ ├── alt-field.html │ │ │ │ │ │ │ │ ├── animation.html │ │ │ │ │ │ │ │ ├── buttonbar.html │ │ │ │ │ │ │ │ ├── date-formats.html │ │ │ │ │ │ │ │ ├── date-range.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── dropdown-month-year.html │ │ │ │ │ │ │ │ ├── icon-trigger.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── inline.html │ │ │ │ │ │ │ │ ├── localization.html │ │ │ │ │ │ │ │ ├── min-max.html │ │ │ │ │ │ │ │ ├── multiple-calendars.html │ │ │ │ │ │ │ │ ├── other-months.html │ │ │ │ │ │ │ │ └── show-week.html │ │ │ │ │ │ │ ├── demos.css │ │ │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ │ │ ├── animated.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── modal-confirmation.html │ │ │ │ │ │ │ │ ├── modal-form.html │ │ │ │ │ │ │ │ ├── modal-message.html │ │ │ │ │ │ │ │ └── modal.html │ │ │ │ │ │ │ ├── draggable/ │ │ │ │ │ │ │ │ ├── constrain-movement.html │ │ │ │ │ │ │ │ ├── cursor-style.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ │ │ ├── handle.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── revert.html │ │ │ │ │ │ │ │ ├── scroll.html │ │ │ │ │ │ │ │ ├── snap-to.html │ │ │ │ │ │ │ │ ├── sortable.html │ │ │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ │ │ ├── droppable/ │ │ │ │ │ │ │ │ ├── accepted-elements.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── photo-manager.html │ │ │ │ │ │ │ │ ├── propagation.html │ │ │ │ │ │ │ │ ├── revert.html │ │ │ │ │ │ │ │ ├── shopping-cart.html │ │ │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ │ │ ├── effect/ │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── easing.html │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── menu/ │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── position/ │ │ │ │ │ │ │ │ ├── cycler.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── progressbar/ │ │ │ │ │ │ │ │ ├── animated.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── resize.html │ │ │ │ │ │ │ ├── resizable/ │ │ │ │ │ │ │ │ ├── animate.html │ │ │ │ │ │ │ │ ├── aspect-ratio.html │ │ │ │ │ │ │ │ ├── constrain-area.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ │ │ ├── helper.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── max-min.html │ │ │ │ │ │ │ │ ├── snap-to-grid.html │ │ │ │ │ │ │ │ ├── synchronous-resize.html │ │ │ │ │ │ │ │ ├── textarea.html │ │ │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ │ │ ├── selectable/ │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── display-grid.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── serialize.html │ │ │ │ │ │ │ ├── slider/ │ │ │ │ │ │ │ │ ├── colorpicker.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── hotelrooms.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── multiple-vertical.html │ │ │ │ │ │ │ │ ├── range-vertical.html │ │ │ │ │ │ │ │ ├── range.html │ │ │ │ │ │ │ │ ├── rangemax.html │ │ │ │ │ │ │ │ ├── rangemin.html │ │ │ │ │ │ │ │ ├── side-scroll.html │ │ │ │ │ │ │ │ ├── slider-vertical.html │ │ │ │ │ │ │ │ └── steps.html │ │ │ │ │ │ │ ├── sortable/ │ │ │ │ │ │ │ │ ├── connect-lists-through-tabs.html │ │ │ │ │ │ │ │ ├── connect-lists.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ │ │ ├── display-grid.html │ │ │ │ │ │ │ │ ├── empty-lists.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── items.html │ │ │ │ │ │ │ │ ├── placeholder.html │ │ │ │ │ │ │ │ └── portlets.html │ │ │ │ │ │ │ ├── spinner/ │ │ │ │ │ │ │ │ ├── currency.html │ │ │ │ │ │ │ │ ├── decimal.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── latlong.html │ │ │ │ │ │ │ │ ├── overflow.html │ │ │ │ │ │ │ │ └── time.html │ │ │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ │ │ ├── ajax/ │ │ │ │ │ │ │ │ │ ├── content1.html │ │ │ │ │ │ │ │ │ ├── content2.html │ │ │ │ │ │ │ │ │ ├── content3-slow.php │ │ │ │ │ │ │ │ │ └── content4-broken.php │ │ │ │ │ │ │ │ ├── ajax.html │ │ │ │ │ │ │ │ ├── bottom.html │ │ │ │ │ │ │ │ ├── collapsible.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── manipulation.html │ │ │ │ │ │ │ │ ├── mouseover.html │ │ │ │ │ │ │ │ ├── sortable.html │ │ │ │ │ │ │ │ └── vertical.html │ │ │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ │ │ ├── ajax/ │ │ │ │ │ │ │ │ │ ├── content1.html │ │ │ │ │ │ │ │ │ └── content2.html │ │ │ │ │ │ │ │ ├── custom-animation.html │ │ │ │ │ │ │ │ ├── custom-content.html │ │ │ │ │ │ │ │ ├── custom-style.html │ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ │ ├── forms.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ ├── tracking.html │ │ │ │ │ │ │ │ └── video-player.html │ │ │ │ │ │ │ └── widget/ │ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ ├── accordion.html │ │ │ │ │ │ │ ├── autocomplete.html │ │ │ │ │ │ │ ├── blind-effect.html │ │ │ │ │ │ │ ├── bounce-effect.html │ │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ │ ├── clip-effect.html │ │ │ │ │ │ │ ├── datepicker.html │ │ │ │ │ │ │ ├── dialog.html │ │ │ │ │ │ │ ├── draggable.html │ │ │ │ │ │ │ ├── drop-effect.html │ │ │ │ │ │ │ ├── droppable.html │ │ │ │ │ │ │ ├── explode-effect.html │ │ │ │ │ │ │ ├── fade-effect.html │ │ │ │ │ │ │ ├── fold-effect.html │ │ │ │ │ │ │ ├── highlight-effect.html │ │ │ │ │ │ │ ├── jQuery.widget.html │ │ │ │ │ │ │ ├── menu.html │ │ │ │ │ │ │ ├── mouse.html │ │ │ │ │ │ │ ├── position.html │ │ │ │ │ │ │ ├── progressbar.html │ │ │ │ │ │ │ ├── puff-effect.html │ │ │ │ │ │ │ ├── pulsate-effect.html │ │ │ │ │ │ │ ├── resizable.html │ │ │ │ │ │ │ ├── scale-effect.html │ │ │ │ │ │ │ ├── selectable.html │ │ │ │ │ │ │ ├── shake-effect.html │ │ │ │ │ │ │ ├── size-effect.html │ │ │ │ │ │ │ ├── slide-effect.html │ │ │ │ │ │ │ ├── slider.html │ │ │ │ │ │ │ ├── sortable.html │ │ │ │ │ │ │ ├── spinner.html │ │ │ │ │ │ │ ├── tabs.html │ │ │ │ │ │ │ ├── tooltip.html │ │ │ │ │ │ │ └── transfer-effect.html │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ ├── globalize.culture.de-DE.js │ │ │ │ │ │ │ ├── globalize.culture.ja-JP.js │ │ │ │ │ │ │ ├── globalize.js │ │ │ │ │ │ │ ├── jquery.bgiframe-2.1.2.js │ │ │ │ │ │ │ ├── jquery.cookie.js │ │ │ │ │ │ │ ├── jquery.metadata.js │ │ │ │ │ │ │ ├── jquery.mousewheel.js │ │ │ │ │ │ │ ├── jshint.js │ │ │ │ │ │ │ ├── qunit.css │ │ │ │ │ │ │ └── qunit.js │ │ │ │ │ │ ├── grunt.js │ │ │ │ │ │ ├── jquery-1.8.3.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── themes/ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ ├── jquery-ui.css │ │ │ │ │ │ │ │ ├── jquery.ui.accordion.css │ │ │ │ │ │ │ │ ├── jquery.ui.all.css │ │ │ │ │ │ │ │ ├── jquery.ui.autocomplete.css │ │ │ │ │ │ │ │ ├── jquery.ui.base.css │ │ │ │ │ │ │ │ ├── jquery.ui.button.css │ │ │ │ │ │ │ │ ├── jquery.ui.core.css │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker.css │ │ │ │ │ │ │ │ ├── jquery.ui.dialog.css │ │ │ │ │ │ │ │ ├── jquery.ui.menu.css │ │ │ │ │ │ │ │ ├── jquery.ui.progressbar.css │ │ │ │ │ │ │ │ ├── jquery.ui.resizable.css │ │ │ │ │ │ │ │ ├── jquery.ui.selectable.css │ │ │ │ │ │ │ │ ├── jquery.ui.slider.css │ │ │ │ │ │ │ │ ├── jquery.ui.spinner.css │ │ │ │ │ │ │ │ ├── jquery.ui.tabs.css │ │ │ │ │ │ │ │ ├── jquery.ui.theme.css │ │ │ │ │ │ │ │ └── jquery.ui.tooltip.css │ │ │ │ │ │ │ └── ui-lightness/ │ │ │ │ │ │ │ ├── jquery-ui.css │ │ │ │ │ │ │ ├── jquery.ui.accordion.css │ │ │ │ │ │ │ ├── jquery.ui.all.css │ │ │ │ │ │ │ ├── jquery.ui.autocomplete.css │ │ │ │ │ │ │ ├── jquery.ui.base.css │ │ │ │ │ │ │ ├── jquery.ui.button.css │ │ │ │ │ │ │ ├── jquery.ui.core.css │ │ │ │ │ │ │ ├── jquery.ui.datepicker.css │ │ │ │ │ │ │ ├── jquery.ui.dialog.css │ │ │ │ │ │ │ ├── jquery.ui.menu.css │ │ │ │ │ │ │ ├── jquery.ui.progressbar.css │ │ │ │ │ │ │ ├── jquery.ui.resizable.css │ │ │ │ │ │ │ ├── jquery.ui.selectable.css │ │ │ │ │ │ │ ├── jquery.ui.slider.css │ │ │ │ │ │ │ ├── jquery.ui.spinner.css │ │ │ │ │ │ │ ├── jquery.ui.tabs.css │ │ │ │ │ │ │ ├── jquery.ui.theme.css │ │ │ │ │ │ │ └── jquery.ui.tooltip.css │ │ │ │ │ │ ├── ui/ │ │ │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ │ │ ├── jquery-ui-i18n.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-af.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ar-DZ.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ar.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-az.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-bg.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-bs.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ca.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-cs.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-cy-GB.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-da.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-de.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-el.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-en-AU.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-en-GB.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-en-NZ.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-eo.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-es.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-et.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-eu.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-fa.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-fi.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-fo.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-fr-CH.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-fr.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-gl.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-he.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-hi.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-hr.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-hu.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-hy.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-id.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-is.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-it.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ja.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ka.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-kk.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-km.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ko.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-lb.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-lt.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-lv.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-mk.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ml.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ms.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-nl-BE.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-nl.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-no.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-pl.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-pt-BR.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-pt.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-rm.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ro.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ru.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sk.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sl.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sq.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sr-SR.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sr.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-sv.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-ta.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-th.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-tj.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-tr.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-uk.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-vi.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-zh-CN.js │ │ │ │ │ │ │ │ ├── jquery.ui.datepicker-zh-HK.js │ │ │ │ │ │ │ │ └── jquery.ui.datepicker-zh-TW.js │ │ │ │ │ │ │ ├── jquery-ui.custom.js │ │ │ │ │ │ │ ├── jquery.ui.accordion.js │ │ │ │ │ │ │ ├── jquery.ui.autocomplete.js │ │ │ │ │ │ │ ├── jquery.ui.button.js │ │ │ │ │ │ │ ├── jquery.ui.core.js │ │ │ │ │ │ │ ├── jquery.ui.datepicker.js │ │ │ │ │ │ │ ├── jquery.ui.dialog.js │ │ │ │ │ │ │ ├── jquery.ui.draggable.js │ │ │ │ │ │ │ ├── jquery.ui.droppable.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 │ │ │ │ │ │ │ ├── jquery.ui.effect.js │ │ │ │ │ │ │ ├── jquery.ui.menu.js │ │ │ │ │ │ │ ├── jquery.ui.mouse.js │ │ │ │ │ │ │ ├── jquery.ui.position.js │ │ │ │ │ │ │ ├── jquery.ui.progressbar.js │ │ │ │ │ │ │ ├── jquery.ui.resizable.js │ │ │ │ │ │ │ ├── jquery.ui.selectable.js │ │ │ │ │ │ │ ├── jquery.ui.slider.js │ │ │ │ │ │ │ ├── jquery.ui.sortable.js │ │ │ │ │ │ │ ├── jquery.ui.spinner.js │ │ │ │ │ │ │ ├── jquery.ui.tabs.js │ │ │ │ │ │ │ ├── jquery.ui.tooltip.js │ │ │ │ │ │ │ └── jquery.ui.widget.js │ │ │ │ │ │ ├── ui.accordion.jquery.json │ │ │ │ │ │ ├── ui.autocomplete.jquery.json │ │ │ │ │ │ ├── ui.button.jquery.json │ │ │ │ │ │ ├── ui.core.jquery.json │ │ │ │ │ │ ├── ui.datepicker.jquery.json │ │ │ │ │ │ ├── ui.dialog.jquery.json │ │ │ │ │ │ ├── ui.draggable.jquery.json │ │ │ │ │ │ ├── ui.droppable.jquery.json │ │ │ │ │ │ ├── ui.effect-blind.jquery.json │ │ │ │ │ │ ├── ui.effect-bounce.jquery.json │ │ │ │ │ │ ├── ui.effect-clip.jquery.json │ │ │ │ │ │ ├── ui.effect-drop.jquery.json │ │ │ │ │ │ ├── ui.effect-explode.jquery.json │ │ │ │ │ │ ├── ui.effect-fade.jquery.json │ │ │ │ │ │ ├── ui.effect-fold.jquery.json │ │ │ │ │ │ ├── ui.effect-highlight.jquery.json │ │ │ │ │ │ ├── ui.effect-pulsate.jquery.json │ │ │ │ │ │ ├── ui.effect-scale.jquery.json │ │ │ │ │ │ ├── ui.effect-shake.jquery.json │ │ │ │ │ │ ├── ui.effect-slide.jquery.json │ │ │ │ │ │ ├── ui.effect-transfer.jquery.json │ │ │ │ │ │ ├── ui.effect.jquery.json │ │ │ │ │ │ ├── ui.menu.jquery.json │ │ │ │ │ │ ├── ui.mouse.jquery.json │ │ │ │ │ │ ├── ui.position.jquery.json │ │ │ │ │ │ ├── ui.progressbar.jquery.json │ │ │ │ │ │ ├── ui.resizable.jquery.json │ │ │ │ │ │ ├── ui.selectable.jquery.json │ │ │ │ │ │ ├── ui.slider.jquery.json │ │ │ │ │ │ ├── ui.sortable.jquery.json │ │ │ │ │ │ ├── ui.spinner.jquery.json │ │ │ │ │ │ ├── ui.tabs.jquery.json │ │ │ │ │ │ ├── ui.tooltip.jquery.json │ │ │ │ │ │ └── ui.widget.jquery.json │ │ │ │ │ ├── index.html │ │ │ │ │ └── js/ │ │ │ │ │ ├── jquery-1.8.3.js │ │ │ │ │ └── jquery-ui-1.9.2.custom.js │ │ │ │ ├── jquery-ui-touch-punch/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── jquery.ui.touch-punch.js │ │ │ │ ├── jquery.cookie.js │ │ │ │ └── modernizr.js │ │ │ └── tables/ │ │ │ ├── DataTables/ │ │ │ │ ├── docs/ │ │ │ │ │ ├── 34cdb56b2c.html │ │ │ │ │ ├── DataTable.defaults.columns.html │ │ │ │ │ ├── DataTable.defaults.html │ │ │ │ │ ├── DataTable.defaults.oLanguage.html │ │ │ │ │ ├── DataTable.defaults.oLanguage.oAria.html │ │ │ │ │ ├── DataTable.defaults.oLanguage.oPaginate.html │ │ │ │ │ ├── DataTable.defaults.oSearch.html │ │ │ │ │ ├── DataTable.ext.html │ │ │ │ │ ├── DataTable.html │ │ │ │ │ ├── DataTable.models.ext.html │ │ │ │ │ ├── DataTable.models.html │ │ │ │ │ ├── DataTable.models.oColumn.html │ │ │ │ │ ├── DataTable.models.oRow.html │ │ │ │ │ ├── DataTable.models.oSearch.html │ │ │ │ │ ├── DataTable.models.oSettings.html │ │ │ │ │ ├── DataTable.models.oSettings.oBrowser.html │ │ │ │ │ ├── DataTable.models.oSettings.oFeatures.html │ │ │ │ │ ├── DataTable.models.oSettings.oLanguage.html │ │ │ │ │ ├── DataTable.models.oSettings.oPreviousSearch.html │ │ │ │ │ ├── DataTable.models.oSettings.oScroll.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ └── shCore.js │ │ │ │ │ └── license/ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ ├── extras/ │ │ │ │ │ ├── AutoFill/ │ │ │ │ │ │ ├── callbacks.html │ │ │ │ │ │ ├── columns.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── inputs.html │ │ │ │ │ │ ├── media/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── AutoFill.css │ │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ │ ├── 02ff627f40.html │ │ │ │ │ │ │ │ ├── 36456bf45f.html │ │ │ │ │ │ │ │ ├── 47cac4f141.html │ │ │ │ │ │ │ │ ├── 5a72546831.html │ │ │ │ │ │ │ │ ├── 8ee4007a12.html │ │ │ │ │ │ │ │ ├── AutoFill.html │ │ │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ │ │ ├── b44bd4821a.html │ │ │ │ │ │ │ │ ├── c6945fdb4a.html │ │ │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── media/ │ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ │ │ └── license/ │ │ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── AutoFill.js │ │ │ │ │ │ └── scrolling.html │ │ │ │ │ ├── ColReorder/ │ │ │ │ │ │ ├── alt_insert.html │ │ │ │ │ │ ├── col_filter.html │ │ │ │ │ │ ├── colvis.html │ │ │ │ │ │ ├── fixedcolumns.html │ │ │ │ │ │ ├── fixedheader.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── media/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── ColReorder.css │ │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ │ ├── 46848f6f3b.html │ │ │ │ │ │ │ │ ├── 4f1246032c.html │ │ │ │ │ │ │ │ ├── ColReorder.html │ │ │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── media/ │ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ │ │ └── license/ │ │ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── ColReorder.js │ │ │ │ │ │ ├── predefined.html │ │ │ │ │ │ ├── reset.html │ │ │ │ │ │ ├── scrolling.html │ │ │ │ │ │ ├── server_side.html │ │ │ │ │ │ ├── state_save.html │ │ │ │ │ │ └── theme.html │ │ │ │ │ ├── ColVis/ │ │ │ │ │ │ ├── exclude_columns.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── media/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ ├── ColVis.css │ │ │ │ │ │ │ │ └── ColVisAlt.css │ │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ │ ├── ColVis.html │ │ │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ │ │ ├── ccb5a49865.html │ │ │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── media/ │ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ │ │ └── license/ │ │ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── ColVis.js │ │ │ │ │ │ ├── mouseover.html │ │ │ │ │ │ ├── style.html │ │ │ │ │ │ ├── text.html │ │ │ │ │ │ ├── theme.html │ │ │ │ │ │ ├── title_callback.html │ │ │ │ │ │ ├── two_tables.html │ │ │ │ │ │ └── two_tables_identical.html │ │ │ │ │ ├── KeyTable/ │ │ │ │ │ │ ├── datatable.html │ │ │ │ │ │ ├── datatable_scrolling.html │ │ │ │ │ │ ├── editing.html │ │ │ │ │ │ ├── form.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── js/ │ │ │ │ │ │ └── KeyTable.js │ │ │ │ │ ├── Scroller/ │ │ │ │ │ │ ├── api_scrolling.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── large_js_source.html │ │ │ │ │ │ ├── media/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── dataTables.scroller.css │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── 2500.txt │ │ │ │ │ │ │ │ └── server_processing.php │ │ │ │ │ │ │ ├── docs/ │ │ │ │ │ │ │ │ ├── Scroller.html │ │ │ │ │ │ │ │ ├── Scroller.oDefaults.html │ │ │ │ │ │ │ │ ├── baed189d4a.html │ │ │ │ │ │ │ │ ├── c6053fac6b.html │ │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ │ └── media/ │ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ │ │ └── license/ │ │ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── dataTables.scroller.js │ │ │ │ │ │ ├── server-side_processing.html │ │ │ │ │ │ └── state_saving.html │ │ │ │ │ └── TableTools/ │ │ │ │ │ └── media/ │ │ │ │ │ ├── as3/ │ │ │ │ │ │ ├── ZeroClipboard.as │ │ │ │ │ │ └── lib/ │ │ │ │ │ │ └── AlivePDF.swc │ │ │ │ │ └── js/ │ │ │ │ │ ├── TableTools.js │ │ │ │ │ └── ZeroClipboard.js │ │ │ │ └── media/ │ │ │ │ ├── css/ │ │ │ │ │ ├── DT_bootstrap.css │ │ │ │ │ ├── demo_page.css │ │ │ │ │ ├── demo_table.css │ │ │ │ │ ├── demo_table_jui.css │ │ │ │ │ ├── jquery.dataTables.css │ │ │ │ │ └── jquery.dataTables_themeroller.css │ │ │ │ ├── images/ │ │ │ │ │ └── Sorting icons.psd │ │ │ │ ├── js/ │ │ │ │ │ ├── DT_bootstrap.js │ │ │ │ │ ├── jquery.dataTables.js │ │ │ │ │ └── jquery.js │ │ │ │ └── src/ │ │ │ │ ├── DataTables.js │ │ │ │ ├── api/ │ │ │ │ │ ├── api.internal.js │ │ │ │ │ ├── api.methods.js │ │ │ │ │ └── api.static.js │ │ │ │ ├── core/ │ │ │ │ │ ├── core.ajax.js │ │ │ │ │ ├── core.columns.js │ │ │ │ │ ├── core.constructor.js │ │ │ │ │ ├── core.data.js │ │ │ │ │ ├── core.draw.js │ │ │ │ │ ├── core.filter.js │ │ │ │ │ ├── core.info.js │ │ │ │ │ ├── core.init.js │ │ │ │ │ ├── core.length.js │ │ │ │ │ ├── core.page.js │ │ │ │ │ ├── core.processing.js │ │ │ │ │ ├── core.scrolling.js │ │ │ │ │ ├── core.sizing.js │ │ │ │ │ ├── core.sort.js │ │ │ │ │ ├── core.state.js │ │ │ │ │ └── core.support.js │ │ │ │ ├── ext/ │ │ │ │ │ ├── ext.classes.js │ │ │ │ │ ├── ext.paging.js │ │ │ │ │ ├── ext.sorting.js │ │ │ │ │ └── ext.types.js │ │ │ │ └── model/ │ │ │ │ ├── model.column.js │ │ │ │ ├── model.defaults.columns.js │ │ │ │ ├── model.defaults.js │ │ │ │ ├── model.ext.js │ │ │ │ ├── model.row.js │ │ │ │ ├── model.search.js │ │ │ │ └── model.settings.js │ │ │ └── FooTable/ │ │ │ ├── .gitattributes │ │ │ ├── .gitignore │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bootstrap/ │ │ │ │ ├── bootstrap-responsive.css │ │ │ │ ├── bootstrap-tab.js │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrapSwitch.css │ │ │ │ └── bootstrapSwitch.js │ │ │ ├── css/ │ │ │ │ ├── footable-0.1.css │ │ │ │ ├── footable.paginate.css │ │ │ │ └── footable.sortable-0.1.css │ │ │ ├── demo-bootstrapSwitch.htm │ │ │ ├── demo-colspan.htm │ │ │ ├── demo-events.htm │ │ │ ├── demo-filtering-enter-disabled.htm │ │ │ ├── demo-filtering-pagination.htm │ │ │ ├── demo-filtering-via-events.htm │ │ │ ├── demo-filtering.htm │ │ │ ├── demo-group-headers.htm │ │ │ ├── demo-pagination-multiple.htm │ │ │ ├── demo-pagination.htm │ │ │ ├── demo-sorting-filtering-pagination.htm │ │ │ ├── demo-sorting-filtering.htm │ │ │ ├── demo-sorting-pagination.htm │ │ │ ├── demo-sorting.htm │ │ │ ├── demo-toc.htm │ │ │ ├── demo-widthHeightOverride.htm │ │ │ ├── demo-with-bootstrap.htm │ │ │ ├── demo-zebra.htm │ │ │ ├── demo.htm │ │ │ ├── demo2.htm │ │ │ ├── demo3.htm │ │ │ ├── demo4.htm │ │ │ ├── footable.jquery.json │ │ │ ├── js/ │ │ │ │ ├── data-generator.js │ │ │ │ ├── footable.filter.js │ │ │ │ ├── footable.js │ │ │ │ ├── footable.paginate.js │ │ │ │ ├── footable.plugin.template.js │ │ │ │ └── footable.sortable.js │ │ │ ├── responsive-container.htm │ │ │ ├── screenshot.pdn │ │ │ └── test-adding-attribs.htm │ │ └── skins/ │ │ ├── css/ │ │ │ └── blue-gray.css │ │ └── less/ │ │ └── blue-gray.less │ └── test/ │ └── java/ │ └── dao/ │ ├── MongoTemplateTest.java │ └── PersonDaoTest.java └── target/ ├── classes/ │ ├── config.properties │ ├── logback.xml │ ├── mongo.properties │ └── spring/ │ ├── spring-context.xml │ ├── spring-hibernate.xml │ ├── spring-mongo.xml │ └── spring-web.xml └── mongo/ ├── META-INF/ │ └── MANIFEST.MF ├── WEB-INF/ │ ├── classes/ │ │ ├── config.properties │ │ ├── logback.xml │ │ ├── mongo.properties │ │ └── spring/ │ │ ├── spring-context.xml │ │ ├── spring-hibernate.xml │ │ ├── spring-mongo.xml │ │ └── spring-web.xml │ ├── lib/ │ │ ├── antlr-2.7.7.jar │ │ ├── aopalliance-1.0.jar │ │ ├── aspectjrt-1.5.3.jar │ │ ├── aspectjweaver-1.6.11.jar │ │ ├── commons-beanutils-1.8.0.jar │ │ ├── commons-codec-1.10.jar │ │ ├── commons-collections-3.2.2.jar │ │ ├── commons-fileupload-1.3.2.jar │ │ ├── commons-httpclient-3.1.jar │ │ ├── commons-io-2.2.jar │ │ ├── commons-lang-2.5.jar │ │ ├── commons-logging-1.2.jar │ │ ├── dom4j-1.6.jar │ │ ├── druid-1.0.17.jar │ │ ├── ezmorph-1.0.6.jar │ │ ├── fastjson-1.2.7.jar │ │ ├── hibernate-commons-annotations-4.0.4.Final.jar │ │ ├── hibernate-core-4.3.1.Final.jar │ │ ├── hibernate-entitymanager-4.3.1.Final.jar │ │ ├── hibernate-jpa-2.1-api-1.0.0.Final.jar │ │ ├── hibernate-validator-4.3.1.Final.jar │ │ ├── jackson-annotations-2.5.0.jar │ │ ├── jackson-core-2.5.4.jar │ │ ├── jackson-databind-2.5.4.jar │ │ ├── jandex-1.1.0.Final.jar │ │ ├── javassist-3.18.1-GA.jar │ │ ├── jboss-logging-3.1.3.GA.jar │ │ ├── jboss-logging-annotations-1.2.0.Beta1.jar │ │ ├── jboss-transaction-api_1.2_spec-1.0.0.Final.jar │ │ ├── jcl-over-slf4j-1.7.12.jar │ │ ├── json-20160212.jar │ │ ├── json-lib-2.4-jdk15.jar │ │ ├── jstl-1.2.jar │ │ ├── log4j-1.2.16.jar │ │ ├── logback-classic-1.1.1.jar │ │ ├── logback-core-1.1.1.jar │ │ ├── mongo-java-driver-3.2.2.jar │ │ ├── mysql-connector-java-5.1.22.jar │ │ ├── poi-3.12-beta1.jar │ │ ├── slf4j-api-1.7.12.jar │ │ ├── spring-aop-4.1.7.RELEASE.jar │ │ ├── spring-aspects-4.1.7.RELEASE.jar │ │ ├── spring-beans-4.1.7.RELEASE.jar │ │ ├── spring-context-4.1.7.RELEASE.jar │ │ ├── spring-core-4.1.7.RELEASE.jar │ │ ├── spring-data-commons-1.11.0.RELEASE.jar │ │ ├── spring-data-mongodb-1.8.0.RELEASE.jar │ │ ├── spring-expression-4.1.7.RELEASE.jar │ │ ├── spring-jdbc-4.1.7.RELEASE.jar │ │ ├── spring-orm-4.1.7.RELEASE.jar │ │ ├── spring-test-4.1.7.RELEASE.jar │ │ ├── spring-tx-4.1.7.RELEASE.jar │ │ ├── spring-web-4.1.7.RELEASE.jar │ │ ├── spring-webmvc-4.1.7.RELEASE.jar │ │ ├── standard-1.1.2.jar │ │ ├── validation-api-1.0.0.GA.jar │ │ ├── xml-apis-1.0.b2.jar │ │ ├── xmlpull-1.1.3.1.jar │ │ ├── xpp3_min-1.1.4c.jar │ │ └── xstream-1.4.1.jar │ ├── views/ │ │ ├── bsmode/ │ │ │ └── html/ │ │ │ ├── 404.html │ │ │ ├── 500.html │ │ │ ├── about_us.html │ │ │ ├── basic_table.html │ │ │ ├── blank.html │ │ │ ├── blog.html │ │ │ ├── button.html │ │ │ ├── calendar.html │ │ │ ├── chartjs.html │ │ │ ├── contact_us.html │ │ │ ├── draggable_portlet.html │ │ │ ├── dynamic_table.html │ │ │ ├── editable_table.html │ │ │ ├── faq.html │ │ │ ├── flot_chart.html │ │ │ ├── font_awesome.html │ │ │ ├── form_component.html │ │ │ ├── form_layout.html │ │ │ ├── form_validation.html │ │ │ ├── form_wizard.html │ │ │ ├── gallery.html │ │ │ ├── general.html │ │ │ ├── general_portlet.html │ │ │ ├── glyphicons.html │ │ │ ├── grids.html │ │ │ ├── index - 副本.html │ │ │ ├── index.html │ │ │ ├── invoice.html │ │ │ ├── lock.html │ │ │ ├── login.html │ │ │ ├── metro_view.html │ │ │ ├── nestable.html │ │ │ ├── pricing_tables.html │ │ │ ├── profile.html │ │ │ ├── search_result.html │ │ │ ├── slider.html │ │ │ ├── tabs_accordion.html │ │ │ ├── timeline.html │ │ │ ├── tree_view.html │ │ │ └── typography.html │ │ ├── eumode/ │ │ │ ├── inc.jsp │ │ │ ├── index.jsp │ │ │ ├── login.jsp │ │ │ ├── manual/ │ │ │ │ ├── category.jsp │ │ │ │ ├── categoryAdd.jsp │ │ │ │ ├── categoryEdit.jsp │ │ │ │ ├── manual.jsp │ │ │ │ ├── manualAdd.jsp │ │ │ │ └── manualDetail.jsp │ │ │ ├── news/ │ │ │ │ ├── category.jsp │ │ │ │ ├── categoryAdd.jsp │ │ │ │ ├── categoryEdit.jsp │ │ │ │ ├── news.jsp │ │ │ │ ├── newsAdd.jsp │ │ │ │ ├── newsDetail.jsp │ │ │ │ └── newsEdit.jsp │ │ │ └── sys/ │ │ │ ├── dictionary.jsp │ │ │ ├── dictionaryAdd.jsp │ │ │ ├── dictionaryEdit.jsp │ │ │ ├── organization.jsp │ │ │ ├── organizationAdd.jsp │ │ │ ├── organizationEdit.jsp │ │ │ ├── resource.jsp │ │ │ ├── resourceAdd.jsp │ │ │ ├── resourceEdit.jsp │ │ │ ├── role.jsp │ │ │ ├── roleAdd.jsp │ │ │ ├── roleEdit.jsp │ │ │ ├── roleGrant.jsp │ │ │ ├── user.jsp │ │ │ ├── userAdd.jsp │ │ │ ├── userEdit.jsp │ │ │ ├── userEditPwd.jsp │ │ │ └── userManual.jsp │ │ └── mogoList.jsp │ └── web.xml ├── assets/ │ ├── bootstrap/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── bootstrap-fileupload.css │ │ ├── img/ │ │ │ └── Descr.WD3 │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── bootstrap-fileupload.js │ ├── bootstrap-colorpicker/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── colorpicker.css │ │ ├── img/ │ │ │ └── Descr.WD3 │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── bootstrap-colorpicker.js │ ├── bootstrap-datepicker/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── datepicker.css │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── bootstrap-datepicker.js │ ├── bootstrap-daterangepicker/ │ │ ├── Descr.WD3 │ │ ├── date.js │ │ ├── daterangepicker.css │ │ └── daterangepicker.js │ ├── bootstrap-inputmask/ │ │ └── Descr.WD3 │ ├── bootstrap-timepicker/ │ │ ├── compiled/ │ │ │ ├── Descr.WD3 │ │ │ └── timepicker.css │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── bootstrap-timepicker.js │ ├── bootstrap-toggle-buttons/ │ │ └── static/ │ │ ├── js/ │ │ │ ├── Descr.WD3 │ │ │ └── jquery.toggle.buttons.js │ │ └── stylesheets/ │ │ ├── Descr.WD3 │ │ └── bootstrap-toggle-buttons.css │ ├── bootstrap-tree/ │ │ ├── Descr.WD3 │ │ ├── bootstrap-tree/ │ │ │ ├── css/ │ │ │ │ ├── Descr.WD3 │ │ │ │ └── bootstrap-tree.css │ │ │ ├── img/ │ │ │ │ └── Descr.WD3 │ │ │ └── js/ │ │ │ ├── Descr.WD3 │ │ │ └── bootstrap-tree.js │ │ ├── htmlexample.html │ │ ├── img/ │ │ │ ├── Descr.WD3 │ │ │ └── img/ │ │ │ └── Descr.WD3 │ │ ├── jsonexample.json │ │ └── xmlexample.xml │ ├── bootstrap-wizard/ │ │ └── Descr.WD3 │ ├── bootstrap-wysihtml5/ │ │ ├── Descr.WD3 │ │ ├── bootstrap-wysihtml5.css │ │ ├── bootstrap-wysihtml5.js │ │ └── wysihtml5-0.3.0.js │ ├── chart-master/ │ │ ├── Chart.js │ │ └── Descr.WD3 │ ├── chosen-bootstrap/ │ │ └── chosen/ │ │ ├── Descr.WD3 │ │ └── chosen.css │ ├── ckeditor/ │ │ ├── Descr.WD3 │ │ └── ckeditor.js │ ├── clockface/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── clockface.css │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── clockface.js │ ├── data-tables/ │ │ ├── DT_bootstrap.css │ │ ├── DT_bootstrap.js │ │ ├── Descr.WD3 │ │ ├── images/ │ │ │ ├── Descr.WD3 │ │ │ └── img/ │ │ │ ├── Descr.WD3 │ │ │ └── img/ │ │ │ └── Descr.WD3 │ │ └── jquery.dataTables.js │ ├── dropzone/ │ │ ├── Descr.WD3 │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── dropzone.css │ │ ├── deps/ │ │ │ └── emitter/ │ │ │ ├── Descr.WD3 │ │ │ └── index.js │ │ ├── dropzone.js │ │ ├── images/ │ │ │ └── Descr.WD3 │ │ ├── index.js │ │ └── lib/ │ │ ├── Descr.WD3 │ │ └── dropzone.js │ ├── fancybox/ │ │ └── source/ │ │ ├── Descr.WD3 │ │ ├── jquery.fancybox.css │ │ └── jquery.fancybox.pack.js │ ├── flot/ │ │ ├── Descr.WD3 │ │ ├── jquery.flot.crosshair.js │ │ ├── jquery.flot.js │ │ ├── jquery.flot.pie.js │ │ ├── jquery.flot.resize.js │ │ └── jquery.flot.stack.js │ ├── font-awesome/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ ├── M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13053E3D2A0B │ │ │ ├── M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z │ │ │ ├── M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t06C14E9A4A │ │ │ ├── M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -9008AD2B1A63 │ │ │ ├── M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19072F5ECA8B │ │ │ ├── M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t10853ADFA9F │ │ │ ├── M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q03F7DC5A5A │ │ │ ├── M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 0606112A72 │ │ │ ├── M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-0A62DD2A40 │ │ │ ├── M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.03ECFC9A16 │ │ │ ├── M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -064148EA68 │ │ │ ├── font-awesome.css │ │ │ └── img/ │ │ │ ├── Descr.WD3 │ │ │ └── img/ │ │ │ └── Descr.WD3 │ │ └── font/ │ │ ├── Descr.WD3 │ │ ├── fontawesome-webfont.eot@ │ │ ├── fontawesome-webfont.eot@v=3.2.1 │ │ ├── fontawesome-webfont.ttf@v=3.2.1 │ │ ├── fontawesome-webfont.woff@v=3.2.1 │ │ └── img/ │ │ ├── Descr.WD3 │ │ └── img/ │ │ └── Descr.WD3 │ ├── fullcalendar/ │ │ └── fullcalendar/ │ │ ├── Descr.WD3 │ │ └── bootstrap-fullcalendar.css │ ├── gritter/ │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── jquery.gritter.css │ │ ├── images/ │ │ │ └── Descr.WD3 │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── jquery.gritter.js │ ├── jquery-easy-pie-chart/ │ │ ├── Descr.WD3 │ │ ├── jquery.easy-pie-chart.css │ │ └── jquery.easy-pie-chart.js │ ├── jquery-slimscroll/ │ │ └── Descr.WD3 │ ├── jquery-tags-input/ │ │ ├── Descr.WD3 │ │ └── jquery.tagsinput.css │ ├── jquery-ui/ │ │ ├── Descr.WD3 │ │ └── images/ │ │ └── Descr.WD3 │ ├── jqvmap/ │ │ └── jqvmap/ │ │ ├── Descr.WD3 │ │ ├── data/ │ │ │ ├── Descr.WD3 │ │ │ └── jquery.vmap.sampledata.js │ │ ├── jquery.vmap.js │ │ ├── jqvmap.css │ │ └── maps/ │ │ ├── Descr.WD3 │ │ ├── jquery.vmap.europe.js │ │ ├── jquery.vmap.germany.js │ │ ├── jquery.vmap.russia.js │ │ ├── jquery.vmap.usa.js │ │ └── jquery.vmap.world.js │ ├── metr-folio/ │ │ ├── assets/ │ │ │ ├── Descr.WD3 │ │ │ └── tiles/ │ │ │ └── Descr.WD3 │ │ ├── css/ │ │ │ ├── Descr.WD3 │ │ │ └── metro-gallery.css │ │ ├── icons/ │ │ │ └── Descr.WD3 │ │ └── js/ │ │ ├── Descr.WD3 │ │ └── jquery.metro-gal.megafoliopro.js │ ├── nestable/ │ │ ├── Descr.WD3 │ │ ├── jquery.nestable.css │ │ └── jquery.nestable.js │ ├── plugins/ │ │ └── bootstrap-tree/ │ │ └── bootstrap-tree/ │ │ └── img/ │ │ └── Descr.WD3 │ └── uniform/ │ └── Descr.WD3 ├── error/ │ ├── 404.jsp │ ├── 500.jsp │ ├── noSecurity.jsp │ ├── noSession.jsp │ └── noSessionFront.jsp ├── font/ │ ├── Descr.WD3 │ ├── myriadprobold.eot@ │ ├── myriadproit.eot@ │ ├── myriadprolight.eot@ │ └── myriadproregular.eot@ ├── index.jsp ├── jslib/ │ ├── bs_js/ │ │ ├── Descr.WD3 │ │ ├── all-chartjs.js │ │ ├── common-scripts.js │ │ ├── custom-flot-chart.js │ │ ├── draggable-portlet.js │ │ ├── dynamic-table.js │ │ ├── easy-pie-chart.js │ │ ├── editable-table.js │ │ ├── excanvas.js │ │ ├── external-dragging-calendar.js │ │ ├── flot-chart.js │ │ ├── form-component.js │ │ ├── form-validation-script.js │ │ ├── form-wizard.js │ │ ├── gmaps-scripts.js │ │ ├── gmaps.js │ │ ├── gritter.js │ │ ├── home-chartjs.js │ │ ├── home-page-calender.js │ │ ├── jQuery.dualListBox-1.3.js │ │ ├── jquery.blockui.js │ │ ├── jquery.nicescroll.js │ │ ├── jquery.sparkline.js │ │ ├── nestable.js │ │ ├── pulstate.js │ │ ├── respond.js │ │ ├── sliders.js │ │ ├── sparkline-chart.js │ │ ├── tree.js │ │ └── vmaps-scripts.js │ └── eu_js/ │ ├── My97DatePicker/ │ │ ├── WdatePicker.js │ │ ├── calendar.js │ │ ├── lang/ │ │ │ ├── en.js │ │ │ ├── zh-cn.js │ │ │ └── zh-tw.js │ │ └── skin/ │ │ ├── WdatePicker.css │ │ ├── default/ │ │ │ └── datepicker.css │ │ └── whyGreen/ │ │ └── datepicker.css │ ├── easyui1.3.3/ │ │ ├── locale/ │ │ │ ├── easyui-lang-en.js │ │ │ └── easyui-lang-zh_CN.js │ │ └── themes/ │ │ ├── default/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ ├── gray/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ ├── icon.css │ │ ├── metro-blue/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ ├── metro-gray/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ ├── metro-green/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ ├── metro-orange/ │ │ │ ├── accordion.css │ │ │ ├── calendar.css │ │ │ ├── combo.css │ │ │ ├── combobox.css │ │ │ ├── datagrid.css │ │ │ ├── datebox.css │ │ │ ├── dialog.css │ │ │ ├── easyui.css │ │ │ ├── layout.css │ │ │ ├── linkbutton.css │ │ │ ├── menu.css │ │ │ ├── menubutton.css │ │ │ ├── messager.css │ │ │ ├── pagination.css │ │ │ ├── panel.css │ │ │ ├── progressbar.css │ │ │ ├── propertygrid.css │ │ │ ├── searchbox.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── splitbutton.css │ │ │ ├── tabs.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ ├── validatebox.css │ │ │ └── window.css │ │ └── metro-red/ │ │ ├── accordion.css │ │ ├── calendar.css │ │ ├── combo.css │ │ ├── combobox.css │ │ ├── datagrid.css │ │ ├── datebox.css │ │ ├── dialog.css │ │ ├── easyui.css │ │ ├── layout.css │ │ ├── linkbutton.css │ │ ├── menu.css │ │ ├── menubutton.css │ │ ├── messager.css │ │ ├── pagination.css │ │ ├── panel.css │ │ ├── progressbar.css │ │ ├── propertygrid.css │ │ ├── searchbox.css │ │ ├── slider.css │ │ ├── spinner.css │ │ ├── splitbutton.css │ │ ├── tabs.css │ │ ├── tooltip.css │ │ ├── tree.css │ │ ├── validatebox.css │ │ └── window.css │ ├── extEasyUI.js │ ├── extJquery.js │ ├── jquery-1.8.3.js │ ├── lightmvc.js │ └── xheditor/ │ ├── xheditor_emot/ │ │ ├── default/ │ │ │ └── config.txt │ │ ├── ipb/ │ │ │ └── config.txt │ │ └── pidgin/ │ │ └── config.txt │ ├── xheditor_lang/ │ │ ├── en.js │ │ ├── zh-cn.js │ │ └── zh-tw.js │ ├── xheditor_plugins/ │ │ ├── html2markdown.js │ │ ├── htmldomparser.js │ │ ├── multiupload/ │ │ │ ├── multiupload.css │ │ │ ├── multiupload.html │ │ │ ├── multiupload.js │ │ │ └── swfupload/ │ │ │ ├── swfupload.js │ │ │ └── swfupload.swf │ │ ├── showdown.js │ │ └── ubb.js │ └── xheditor_skin/ │ ├── default/ │ │ ├── iframe.css │ │ └── ui.css │ ├── nostyle/ │ │ ├── iframe.css │ │ └── ui.css │ ├── o2007blue/ │ │ ├── iframe.css │ │ └── ui.css │ ├── o2007silver/ │ │ ├── iframe.css │ │ └── ui.css │ └── vista/ │ ├── iframe.css │ └── ui.css └── style/ └── eu/ ├── index/ │ ├── article.css │ ├── comment.css │ ├── commpany.css │ ├── countryside.css │ ├── css.css │ ├── default.css │ ├── detailinputunit.css │ ├── embed.default.css │ ├── expert.css │ ├── information.css │ ├── knowledgedata.css │ ├── login.css │ ├── performance.css │ ├── personalquestionlist.css │ ├── play.css │ ├── themepark.css │ └── thickbox.css └── theme/ ├── css/ │ ├── style-default.css │ └── style-flat.css ├── fonts/ │ ├── font-awesome/ │ │ ├── css/ │ │ │ ├── font-awesome-ie7.css │ │ │ └── font-awesome.css │ │ ├── font/ │ │ │ └── FontAwesome.otf │ │ ├── less/ │ │ │ ├── bootstrap.less │ │ │ ├── core.less │ │ │ ├── extras.less │ │ │ ├── font-awesome-ie7.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ └── variables.less │ │ └── scss/ │ │ ├── _bootstrap.scss │ │ ├── _core.scss │ │ ├── _extras.scss │ │ ├── _icons.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _variables.scss │ │ ├── font-awesome-ie7.scss │ │ └── font-awesome.scss │ └── glyphicons/ │ ├── css/ │ │ └── glyphicons.css │ └── fonts/ │ └── glyphicons-regular.otf ├── less/ │ ├── accordions.less │ ├── alerts.less │ ├── buttons.less │ ├── calendar.less │ ├── choose.less │ ├── documentation.less │ ├── form-wizards.less │ ├── forms.less │ ├── front.less │ ├── gallery.less │ ├── guidedtour.less │ ├── jquery-ui.less │ ├── labels.less │ ├── landings.less │ ├── layout.less │ ├── login.less │ ├── lt-ie9.less │ ├── menus.less │ ├── mixins.less │ ├── modals.less │ ├── notifications.less │ ├── pagination.less │ ├── popovers.less │ ├── progress-bars.less │ ├── responsive.less │ ├── rtl.less │ ├── scaffolding.less │ ├── sliders.less │ ├── style-default.less │ ├── style-flat.less │ ├── tables.less │ ├── tabs.less │ ├── themer.less │ ├── timeline.less │ ├── tooltips.less │ ├── variables.less │ └── widgets.less ├── scripts/ │ ├── demo/ │ │ ├── calendar.js │ │ ├── charts.helper.js │ │ ├── charts.js │ │ ├── choose.js │ │ ├── common.js │ │ ├── contact.js │ │ ├── file_managers.js │ │ ├── finances.js │ │ ├── form_elements.js │ │ ├── form_validator.js │ │ ├── form_wizards.js │ │ ├── google_analytics.js │ │ ├── image_crop.js │ │ ├── index.js │ │ ├── infinite_scroll.js │ │ ├── maps_google.js │ │ ├── maps_vector.js │ │ ├── modals.js │ │ ├── notifications.js │ │ ├── sliders.js │ │ ├── tables.js │ │ ├── tables_responsive.js │ │ ├── themer.js │ │ ├── tour_demo.js │ │ ├── twitter.js │ │ ├── ui.js │ │ └── widgets.js │ └── plugins/ │ ├── charts/ │ │ ├── easy-pie/ │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── examples/ │ │ │ │ ├── excanvas.js │ │ │ │ ├── index.html │ │ │ │ └── style.css │ │ │ ├── jquery.easy-pie-chart.coffee │ │ │ ├── jquery.easy-pie-chart.css │ │ │ └── jquery.easy-pie-chart.js │ │ └── flot/ │ │ ├── API.txt │ │ ├── FAQ.txt │ │ ├── LICENSE.txt │ │ ├── Makefile │ │ ├── NEWS.txt │ │ ├── PLUGINS.txt │ │ ├── README.txt │ │ ├── examples/ │ │ │ ├── ajax.html │ │ │ ├── annotating.html │ │ │ ├── basic.html │ │ │ ├── data-eu-gdp-growth-1.json │ │ │ ├── data-eu-gdp-growth-2.json │ │ │ ├── data-eu-gdp-growth-3.json │ │ │ ├── data-eu-gdp-growth-4.json │ │ │ ├── data-eu-gdp-growth-5.json │ │ │ ├── data-eu-gdp-growth.json │ │ │ ├── data-japan-gdp-growth.json │ │ │ ├── data-usa-gdp-growth.json │ │ │ ├── graph-types.html │ │ │ ├── image.html │ │ │ ├── index.html │ │ │ ├── interacting-axes.html │ │ │ ├── interacting.html │ │ │ ├── layout.css │ │ │ ├── multiple-axes.html │ │ │ ├── navigate.html │ │ │ ├── percentiles.html │ │ │ ├── pie.html │ │ │ ├── realtime.html │ │ │ ├── resize.html │ │ │ ├── selection.html │ │ │ ├── setting-options.html │ │ │ ├── stacking.html │ │ │ ├── symbols.html │ │ │ ├── thresholding.html │ │ │ ├── time.html │ │ │ ├── tracking.html │ │ │ ├── turning-series.html │ │ │ ├── visitors.html │ │ │ └── zooming.html │ │ ├── excanvas.js │ │ ├── jquery.colorhelpers.js │ │ ├── jquery.flot.crosshair.js │ │ ├── jquery.flot.fillbetween.js │ │ ├── jquery.flot.image.js │ │ ├── jquery.flot.js │ │ ├── jquery.flot.navigate.js │ │ ├── jquery.flot.orderBars.js │ │ ├── jquery.flot.pie.js │ │ ├── jquery.flot.resize.js │ │ ├── jquery.flot.selection.js │ │ ├── jquery.flot.stack.js │ │ ├── jquery.flot.symbol.js │ │ ├── jquery.flot.threshold.js │ │ ├── jquery.flot.tooltip.js │ │ └── jquery.js │ ├── color/ │ │ ├── farbtastic/ │ │ │ ├── CHANGELOG.html │ │ │ ├── LICENSE.txt │ │ │ ├── README.html │ │ │ ├── demo1.html │ │ │ ├── demo2.html │ │ │ ├── farbtastic.css │ │ │ └── farbtastic.js │ │ └── jquery-miniColors/ │ │ ├── component.json │ │ ├── index.html │ │ ├── jquery.miniColors.css │ │ ├── jquery.miniColors.js │ │ └── readme.md │ ├── forms/ │ │ ├── bootstrap-datetimepicker/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── css/ │ │ │ │ └── datetimepicker.css │ │ │ └── js/ │ │ │ ├── bootstrap-datetimepicker.js │ │ │ └── locales/ │ │ │ ├── bootstrap-datetimepicker.bg.js │ │ │ ├── bootstrap-datetimepicker.ca.js │ │ │ ├── bootstrap-datetimepicker.cs.js │ │ │ ├── bootstrap-datetimepicker.da.js │ │ │ ├── bootstrap-datetimepicker.de.js │ │ │ ├── bootstrap-datetimepicker.el.js │ │ │ ├── bootstrap-datetimepicker.es.js │ │ │ ├── bootstrap-datetimepicker.fi.js │ │ │ ├── bootstrap-datetimepicker.fr.js │ │ │ ├── bootstrap-datetimepicker.he.js │ │ │ ├── bootstrap-datetimepicker.hr.js │ │ │ ├── bootstrap-datetimepicker.hu.js │ │ │ ├── bootstrap-datetimepicker.id.js │ │ │ ├── bootstrap-datetimepicker.is.js │ │ │ ├── bootstrap-datetimepicker.it.js │ │ │ ├── bootstrap-datetimepicker.ja.js │ │ │ ├── bootstrap-datetimepicker.kr.js │ │ │ ├── bootstrap-datetimepicker.lt.js │ │ │ ├── bootstrap-datetimepicker.lv.js │ │ │ ├── bootstrap-datetimepicker.ms.js │ │ │ ├── bootstrap-datetimepicker.nb.js │ │ │ ├── bootstrap-datetimepicker.nl.js │ │ │ ├── bootstrap-datetimepicker.pl.js │ │ │ ├── bootstrap-datetimepicker.pt-BR.js │ │ │ ├── bootstrap-datetimepicker.pt.js │ │ │ ├── bootstrap-datetimepicker.ro.js │ │ │ ├── bootstrap-datetimepicker.rs-latin.js │ │ │ ├── bootstrap-datetimepicker.rs.js │ │ │ ├── bootstrap-datetimepicker.ru.js │ │ │ ├── bootstrap-datetimepicker.sk.js │ │ │ ├── bootstrap-datetimepicker.sl.js │ │ │ ├── bootstrap-datetimepicker.sv.js │ │ │ ├── bootstrap-datetimepicker.sw.js │ │ │ ├── bootstrap-datetimepicker.th.js │ │ │ ├── bootstrap-datetimepicker.tr.js │ │ │ ├── bootstrap-datetimepicker.uk.js │ │ │ ├── bootstrap-datetimepicker.zh-CN.js │ │ │ └── bootstrap-datetimepicker.zh-TW.js │ │ ├── bootstrap-timepicker/ │ │ │ ├── .bowerrc │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── css/ │ │ │ │ └── bootstrap-timepicker.css │ │ │ ├── js/ │ │ │ │ └── bootstrap-timepicker.js │ │ │ ├── less/ │ │ │ │ └── timepicker.less │ │ │ └── spec/ │ │ │ └── js/ │ │ │ ├── KeyboardEventsSpec.js │ │ │ ├── MouseEventsSpec.js │ │ │ ├── TimepickerSpec.js │ │ │ ├── fixtures/ │ │ │ │ └── timepicker.html │ │ │ └── helpers/ │ │ │ ├── SpecHelper.js │ │ │ └── jasmine-jquery.js │ │ ├── dropzone/ │ │ │ ├── css/ │ │ │ │ ├── basic.css │ │ │ │ └── dropzone.css │ │ │ ├── dropzone.js │ │ │ └── upload.php │ │ ├── jquery-inputmask/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── dist/ │ │ │ │ ├── jquery.inputmask.bundle.js │ │ │ │ └── min/ │ │ │ │ ├── jquery.inputmask.date.extensions.js │ │ │ │ ├── jquery.inputmask.extensions.js │ │ │ │ ├── jquery.inputmask.js │ │ │ │ ├── jquery.inputmask.numeric.extensions.js │ │ │ │ └── jquery.inputmask.regex.extensions.js │ │ │ └── js/ │ │ │ ├── jquery.inputmask.date.extensions.js │ │ │ ├── jquery.inputmask.extensions.js │ │ │ ├── jquery.inputmask.js │ │ │ ├── jquery.inputmask.numeric.extensions.js │ │ │ └── jquery.inputmask.regex.extensions.js │ │ ├── jquery-validation/ │ │ │ ├── README.md │ │ │ ├── changelog.txt │ │ │ ├── demo/ │ │ │ │ ├── ajaxSubmit-intergration-demo.html │ │ │ │ ├── captcha/ │ │ │ │ │ ├── captcha.js │ │ │ │ │ ├── image_req.php │ │ │ │ │ ├── images/ │ │ │ │ │ │ └── image.php │ │ │ │ │ ├── index.php │ │ │ │ │ ├── newsession.php │ │ │ │ │ ├── process.php │ │ │ │ │ ├── rand.php │ │ │ │ │ └── style.css │ │ │ │ ├── css/ │ │ │ │ │ ├── chili.css │ │ │ │ │ ├── cmxform.css │ │ │ │ │ ├── cmxformTemplate.css │ │ │ │ │ ├── core.css │ │ │ │ │ ├── reset.css │ │ │ │ │ └── screen.css │ │ │ │ ├── custom-messages-metadata-demo.html │ │ │ │ ├── custom-methods-demo.html │ │ │ │ ├── dynamic-totals.html │ │ │ │ ├── errorcontainer-demo.html │ │ │ │ ├── file_input.html │ │ │ │ ├── form.php │ │ │ │ ├── form.phps │ │ │ │ ├── index.html │ │ │ │ ├── jquerymobile.html │ │ │ │ ├── js/ │ │ │ │ │ └── chili-1.7.pack.js │ │ │ │ ├── login/ │ │ │ │ │ ├── index.html │ │ │ │ │ └── screen.css │ │ │ │ ├── marketo/ │ │ │ │ │ ├── emails.php │ │ │ │ │ ├── emails.phps │ │ │ │ │ ├── ie6.css │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jquery.maskedinput.js │ │ │ │ │ ├── mktSignup.js │ │ │ │ │ ├── step2.htm │ │ │ │ │ └── stylesheet.css │ │ │ │ ├── milk/ │ │ │ │ │ ├── emails.php │ │ │ │ │ ├── emails.phps │ │ │ │ │ ├── index.html │ │ │ │ │ ├── milk.css │ │ │ │ │ ├── users.php │ │ │ │ │ └── users.phps │ │ │ │ ├── multipart/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── jquery.maskedinput-1.0.js │ │ │ │ │ │ ├── ui.accordion.js │ │ │ │ │ │ └── ui.core.js │ │ │ │ │ └── style.css │ │ │ │ ├── radio-checkbox-select-demo.html │ │ │ │ ├── tabs/ │ │ │ │ │ └── index.html │ │ │ │ ├── themerollered.html │ │ │ │ └── tinymce/ │ │ │ │ ├── index.html │ │ │ │ ├── themes/ │ │ │ │ │ └── simple/ │ │ │ │ │ ├── editor_template.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ └── en.js │ │ │ │ │ └── skins/ │ │ │ │ │ └── default/ │ │ │ │ │ └── ui.css │ │ │ │ └── tiny_mce.js │ │ │ ├── dist/ │ │ │ │ ├── additional-methods.js │ │ │ │ └── jquery.validate.js │ │ │ ├── grunt.js │ │ │ ├── lib/ │ │ │ │ ├── jquery-1.3.2.js │ │ │ │ ├── jquery-1.4.2.js │ │ │ │ ├── jquery-1.4.4.js │ │ │ │ ├── jquery-1.5.2.js │ │ │ │ ├── jquery-1.6.1.js │ │ │ │ ├── jquery-1.7.2.js │ │ │ │ ├── jquery.form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── jquery.metadata.js │ │ │ │ └── jquery.mockjax.js │ │ │ ├── localization/ │ │ │ │ ├── messages_ar.js │ │ │ │ ├── messages_bg.js │ │ │ │ ├── messages_ca.js │ │ │ │ ├── messages_cs.js │ │ │ │ ├── messages_da.js │ │ │ │ ├── messages_de.js │ │ │ │ ├── messages_el.js │ │ │ │ ├── messages_es.js │ │ │ │ ├── messages_et.js │ │ │ │ ├── messages_eu.js │ │ │ │ ├── messages_fa.js │ │ │ │ ├── messages_fi.js │ │ │ │ ├── messages_fr.js │ │ │ │ ├── messages_he.js │ │ │ │ ├── messages_hr.js │ │ │ │ ├── messages_hu.js │ │ │ │ ├── messages_it.js │ │ │ │ ├── messages_ja.js │ │ │ │ ├── messages_ka.js │ │ │ │ ├── messages_kk.js │ │ │ │ ├── messages_lt.js │ │ │ │ ├── messages_lv.js │ │ │ │ ├── messages_nl.js │ │ │ │ ├── messages_no.js │ │ │ │ ├── messages_pl.js │ │ │ │ ├── messages_pt_BR.js │ │ │ │ ├── messages_pt_PT.js │ │ │ │ ├── messages_ro.js │ │ │ │ ├── messages_ru.js │ │ │ │ ├── messages_si.js │ │ │ │ ├── messages_sk.js │ │ │ │ ├── messages_sl.js │ │ │ │ ├── messages_sr.js │ │ │ │ ├── messages_sv.js │ │ │ │ ├── messages_th.js │ │ │ │ ├── messages_tr.js │ │ │ │ ├── messages_uk.js │ │ │ │ ├── messages_vi.js │ │ │ │ ├── messages_zh.js │ │ │ │ ├── messages_zh_TW.js │ │ │ │ ├── methods_de.js │ │ │ │ ├── methods_nl.js │ │ │ │ └── methods_pt.js │ │ │ ├── package.json │ │ │ └── test/ │ │ │ ├── events.html │ │ │ ├── firebug/ │ │ │ │ ├── firebug.css │ │ │ │ ├── firebug.html │ │ │ │ ├── firebug.js │ │ │ │ └── firebugx.js │ │ │ ├── index.html │ │ │ ├── jquery.js │ │ │ ├── large.html │ │ │ ├── messages.js │ │ │ ├── methods.js │ │ │ ├── qunit/ │ │ │ │ ├── qunit.css │ │ │ │ └── qunit.js │ │ │ ├── rules.js │ │ │ ├── selects/ │ │ │ │ └── index.html │ │ │ ├── tabs.html │ │ │ └── test.js │ │ ├── multiselect/ │ │ │ ├── .gitignore │ │ │ ├── LICENSE.txt │ │ │ ├── css/ │ │ │ │ └── multi-select.css │ │ │ └── js/ │ │ │ └── jquery.multi-select.js │ │ ├── pixelmatrix-uniform/ │ │ │ ├── README.textile │ │ │ ├── css/ │ │ │ │ └── uniform.default.css │ │ │ ├── demo/ │ │ │ │ └── demo.html │ │ │ └── jquery.uniform.js │ │ ├── plupload/ │ │ │ ├── changelog.txt │ │ │ ├── docs/ │ │ │ │ └── api/ │ │ │ │ ├── class_plupload.File.html │ │ │ │ ├── class_plupload.QueueProgress.html │ │ │ │ ├── class_plupload.Runtime.html │ │ │ │ ├── class_plupload.Uploader.html │ │ │ │ ├── class_plupload.html │ │ │ │ ├── class_plupload.runtimes.BrowserPlus.html │ │ │ │ ├── class_plupload.runtimes.Flash.html │ │ │ │ ├── class_plupload.runtimes.Gears.html │ │ │ │ ├── class_plupload.runtimes.Html4.html │ │ │ │ ├── class_plupload.runtimes.Html5.html │ │ │ │ ├── class_plupload.runtimes.Silverlight.html │ │ │ │ ├── css/ │ │ │ │ │ ├── general.css │ │ │ │ │ ├── grids.css │ │ │ │ │ ├── jquery.treeview.css │ │ │ │ │ ├── reset.css │ │ │ │ │ ├── shCore.css │ │ │ │ │ └── shThemeMoxieDoc.css │ │ │ │ ├── index.html │ │ │ │ ├── js/ │ │ │ │ │ ├── clipboard.swf │ │ │ │ │ ├── general.js │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ └── shCore.js │ │ │ │ ├── model.xml │ │ │ │ └── plupload.vsdoc.js │ │ │ ├── examples/ │ │ │ │ ├── custom.html │ │ │ │ ├── dump.php │ │ │ │ ├── jquery/ │ │ │ │ │ ├── events.html │ │ │ │ │ ├── jquery_ui_widget.html │ │ │ │ │ ├── queue_widget.html │ │ │ │ │ └── s3.php │ │ │ │ └── upload.php │ │ │ ├── js/ │ │ │ │ ├── i18n/ │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sr.js │ │ │ │ │ └── sv.js │ │ │ │ ├── jquery.plupload.queue/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.plupload.queue.css │ │ │ │ │ └── jquery.plupload.queue.js │ │ │ │ ├── jquery.ui.plupload/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.ui.plupload.css │ │ │ │ │ └── jquery.ui.plupload.js │ │ │ │ ├── plupload.browserplus.js │ │ │ │ ├── plupload.flash.js │ │ │ │ ├── plupload.flash.swf │ │ │ │ ├── plupload.full.js │ │ │ │ ├── plupload.gears.js │ │ │ │ ├── plupload.html4.js │ │ │ │ ├── plupload.html5.js │ │ │ │ ├── plupload.js │ │ │ │ ├── plupload.silverlight.js │ │ │ │ └── plupload.silverlight.xap │ │ │ ├── license.txt │ │ │ └── readme.md │ │ └── select2/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── component.json │ │ ├── release.sh │ │ ├── select2.css │ │ ├── select2.jquery.json │ │ ├── select2.js │ │ ├── select2_locale_de.js │ │ ├── select2_locale_es.js │ │ ├── select2_locale_fr.js │ │ ├── select2_locale_hu.js │ │ ├── select2_locale_it.js │ │ ├── select2_locale_nl.js │ │ ├── select2_locale_pt-BR.js │ │ ├── select2_locale_pt-PT.js │ │ ├── select2_locale_ru.js │ │ └── select2_locale_zh-CN.js │ ├── maps/ │ │ ├── jquery-ui-map/ │ │ │ ├── data/ │ │ │ │ └── demo.json │ │ │ └── ui/ │ │ │ ├── jquery.ui.map.extensions.js │ │ │ ├── jquery.ui.map.js │ │ │ ├── jquery.ui.map.microdata.js │ │ │ ├── jquery.ui.map.microformat.js │ │ │ ├── jquery.ui.map.overlays.js │ │ │ ├── jquery.ui.map.rdfa.js │ │ │ └── jquery.ui.map.services.js │ │ └── jvectormap/ │ │ ├── css/ │ │ │ ├── elements.css │ │ │ ├── jquery-jvectormap-1.1.1.css │ │ │ └── jquery-jvectormap-1.2.2.css │ │ ├── data/ │ │ │ ├── france-elections.json │ │ │ ├── gdp-data.js │ │ │ └── us-unemployment.json │ │ └── maps/ │ │ ├── jquery-jvectormap-de-merc-en.js │ │ ├── jquery-jvectormap-es-merc-en.js │ │ ├── jquery-jvectormap-fr-merc-en.js │ │ ├── jquery-jvectormap-us-aea-en.js │ │ ├── jquery-jvectormap-us-lcc-en.js │ │ ├── jquery-jvectormap-world-mill-en.js │ │ └── mall-map.js │ ├── other/ │ │ ├── excanvas/ │ │ │ ├── AUTHORS │ │ │ ├── COPYING │ │ │ ├── README │ │ │ ├── examples/ │ │ │ │ ├── example1.html │ │ │ │ ├── example2.html │ │ │ │ └── example3.html │ │ │ ├── excanvas.compiled.js │ │ │ ├── excanvas.js │ │ │ └── testcases/ │ │ │ ├── arc.html │ │ │ ├── clearpath.html │ │ │ ├── drawimage.html │ │ │ ├── gradient.html │ │ │ ├── gradient2.html │ │ │ ├── linewidth.html │ │ │ ├── overflow.html │ │ │ ├── quadraticcurve.html │ │ │ ├── resizing.html │ │ │ ├── saverestorepath.html │ │ │ ├── stroke-scale-rotate.html │ │ │ └── stroke-should-not-close-path.html │ │ ├── google-code-prettify/ │ │ │ ├── lang-apollo.js │ │ │ ├── lang-clj.js │ │ │ ├── lang-css.js │ │ │ ├── lang-go.js │ │ │ ├── lang-hs.js │ │ │ ├── lang-lisp.js │ │ │ ├── lang-lua.js │ │ │ ├── lang-ml.js │ │ │ ├── lang-n.js │ │ │ ├── lang-proto.js │ │ │ ├── lang-scala.js │ │ │ ├── lang-sql.js │ │ │ ├── lang-tex.js │ │ │ ├── lang-vb.js │ │ │ ├── lang-vhdl.js │ │ │ ├── lang-wiki.js │ │ │ ├── lang-xq.js │ │ │ ├── lang-yaml.js │ │ │ ├── prettify.css │ │ │ └── prettify.js │ │ ├── holder/ │ │ │ ├── README.md │ │ │ ├── component.json │ │ │ ├── holder.js │ │ │ └── package.json │ │ ├── jquery-mousewheel/ │ │ │ ├── ChangeLog.markdown │ │ │ ├── LICENSE.txt │ │ │ ├── README.markdown │ │ │ ├── jquery.mousewheel.js │ │ │ └── test/ │ │ │ └── index.html │ │ ├── jquery-slimScroll/ │ │ │ ├── README.md │ │ │ ├── examples/ │ │ │ │ ├── allow-page-scroll.html │ │ │ │ ├── chaining.html │ │ │ │ ├── disable-fade-out.html │ │ │ │ ├── dynamic-content.html │ │ │ │ ├── height-width.html │ │ │ │ ├── index.html │ │ │ │ ├── libs/ │ │ │ │ │ └── prettify/ │ │ │ │ │ ├── prettify.css │ │ │ │ │ └── prettify.js │ │ │ │ ├── mouse-wheel.html │ │ │ │ ├── multiple-elements.html │ │ │ │ ├── navigation.html │ │ │ │ ├── nested.html │ │ │ │ ├── programmatic-scrolling.html │ │ │ │ ├── rail.html │ │ │ │ ├── scroll-events.html │ │ │ │ ├── scrollbar.html │ │ │ │ ├── start-position.html │ │ │ │ └── style.css │ │ │ ├── jquery.slimscroll.js │ │ │ └── slimScroll.jquery.json │ │ ├── jquery.ba-resize.js │ │ ├── js-beautify/ │ │ │ ├── beautify-html.js │ │ │ └── beautify.js │ │ ├── json2.js │ │ └── pageguide/ │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── css/ │ │ │ └── pageguide.css │ │ ├── js/ │ │ │ └── pageguide.js │ │ └── less/ │ │ └── pageguide.less │ ├── system/ │ │ ├── jquery-ui/ │ │ │ ├── css/ │ │ │ │ ├── smoothness/ │ │ │ │ │ └── jquery-ui-1.9.2.custom.css │ │ │ │ └── ui-lightness/ │ │ │ │ └── jquery-ui-1.9.2.custom.css │ │ │ ├── development-bundle/ │ │ │ │ ├── AUTHORS.txt │ │ │ │ ├── MIT-LICENSE.txt │ │ │ │ ├── README.md │ │ │ │ ├── demos/ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── collapsible.html │ │ │ │ │ │ ├── custom-icons.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── fillspace.html │ │ │ │ │ │ ├── hoverintent.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── no-auto-height.html │ │ │ │ │ │ └── sortable.html │ │ │ │ │ ├── autocomplete/ │ │ │ │ │ │ ├── categories.html │ │ │ │ │ │ ├── combobox.html │ │ │ │ │ │ ├── custom-data.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── folding.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── london.xml │ │ │ │ │ │ ├── maxheight.html │ │ │ │ │ │ ├── multiple-remote.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ ├── remote-jsonp.html │ │ │ │ │ │ ├── remote-with-cache.html │ │ │ │ │ │ ├── remote.html │ │ │ │ │ │ ├── search.php │ │ │ │ │ │ └── xml.html │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── radio.html │ │ │ │ │ │ ├── splitbutton.html │ │ │ │ │ │ └── toolbar.html │ │ │ │ │ ├── datepicker/ │ │ │ │ │ │ ├── alt-field.html │ │ │ │ │ │ ├── animation.html │ │ │ │ │ │ ├── buttonbar.html │ │ │ │ │ │ ├── date-formats.html │ │ │ │ │ │ ├── date-range.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── dropdown-month-year.html │ │ │ │ │ │ ├── icon-trigger.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── inline.html │ │ │ │ │ │ ├── localization.html │ │ │ │ │ │ ├── min-max.html │ │ │ │ │ │ ├── multiple-calendars.html │ │ │ │ │ │ ├── other-months.html │ │ │ │ │ │ └── show-week.html │ │ │ │ │ ├── demos.css │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── animated.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── modal-confirmation.html │ │ │ │ │ │ ├── modal-form.html │ │ │ │ │ │ ├── modal-message.html │ │ │ │ │ │ └── modal.html │ │ │ │ │ ├── draggable/ │ │ │ │ │ │ ├── constrain-movement.html │ │ │ │ │ │ ├── cursor-style.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ ├── handle.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── revert.html │ │ │ │ │ │ ├── scroll.html │ │ │ │ │ │ ├── snap-to.html │ │ │ │ │ │ ├── sortable.html │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ ├── droppable/ │ │ │ │ │ │ ├── accepted-elements.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── photo-manager.html │ │ │ │ │ │ ├── propagation.html │ │ │ │ │ │ ├── revert.html │ │ │ │ │ │ ├── shopping-cart.html │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ ├── effect/ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── easing.html │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── position/ │ │ │ │ │ │ ├── cycler.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── progressbar/ │ │ │ │ │ │ ├── animated.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── resize.html │ │ │ │ │ ├── resizable/ │ │ │ │ │ │ ├── animate.html │ │ │ │ │ │ ├── aspect-ratio.html │ │ │ │ │ │ ├── constrain-area.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ ├── helper.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── max-min.html │ │ │ │ │ │ ├── snap-to-grid.html │ │ │ │ │ │ ├── synchronous-resize.html │ │ │ │ │ │ ├── textarea.html │ │ │ │ │ │ └── visual-feedback.html │ │ │ │ │ ├── selectable/ │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── display-grid.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── serialize.html │ │ │ │ │ ├── slider/ │ │ │ │ │ │ ├── colorpicker.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── hotelrooms.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── multiple-vertical.html │ │ │ │ │ │ ├── range-vertical.html │ │ │ │ │ │ ├── range.html │ │ │ │ │ │ ├── rangemax.html │ │ │ │ │ │ ├── rangemin.html │ │ │ │ │ │ ├── side-scroll.html │ │ │ │ │ │ ├── slider-vertical.html │ │ │ │ │ │ └── steps.html │ │ │ │ │ ├── sortable/ │ │ │ │ │ │ ├── connect-lists-through-tabs.html │ │ │ │ │ │ ├── connect-lists.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── delay-start.html │ │ │ │ │ │ ├── display-grid.html │ │ │ │ │ │ ├── empty-lists.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── items.html │ │ │ │ │ │ ├── placeholder.html │ │ │ │ │ │ └── portlets.html │ │ │ │ │ ├── spinner/ │ │ │ │ │ │ ├── currency.html │ │ │ │ │ │ ├── decimal.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── latlong.html │ │ │ │ │ │ ├── overflow.html │ │ │ │ │ │ └── time.html │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── ajax/ │ │ │ │ │ │ │ ├── content1.html │ │ │ │ │ │ │ ├── content2.html │ │ │ │ │ │ │ ├── content3-slow.php │ │ │ │ │ │ │ └── content4-broken.php │ │ │ │ │ │ ├── ajax.html │ │ │ │ │ │ ├── bottom.html │ │ │ │ │ │ ├── collapsible.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── manipulation.html │ │ │ │ │ │ ├── mouseover.html │ │ │ │ │ │ ├── sortable.html │ │ │ │ │ │ └── vertical.html │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ ├── ajax/ │ │ │ │ │ │ │ ├── content1.html │ │ │ │ │ │ │ └── content2.html │ │ │ │ │ │ ├── custom-animation.html │ │ │ │ │ │ ├── custom-content.html │ │ │ │ │ │ ├── custom-style.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── forms.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── tracking.html │ │ │ │ │ │ └── video-player.html │ │ │ │ │ └── widget/ │ │ │ │ │ ├── default.html │ │ │ │ │ └── index.html │ │ │ │ ├── docs/ │ │ │ │ │ ├── accordion.html │ │ │ │ │ ├── autocomplete.html │ │ │ │ │ ├── blind-effect.html │ │ │ │ │ ├── bounce-effect.html │ │ │ │ │ ├── button.html │ │ │ │ │ ├── clip-effect.html │ │ │ │ │ ├── datepicker.html │ │ │ │ │ ├── dialog.html │ │ │ │ │ ├── draggable.html │ │ │ │ │ ├── drop-effect.html │ │ │ │ │ ├── droppable.html │ │ │ │ │ ├── explode-effect.html │ │ │ │ │ ├── fade-effect.html │ │ │ │ │ ├── fold-effect.html │ │ │ │ │ ├── highlight-effect.html │ │ │ │ │ ├── jQuery.widget.html │ │ │ │ │ ├── menu.html │ │ │ │ │ ├── mouse.html │ │ │ │ │ ├── position.html │ │ │ │ │ ├── progressbar.html │ │ │ │ │ ├── puff-effect.html │ │ │ │ │ ├── pulsate-effect.html │ │ │ │ │ ├── resizable.html │ │ │ │ │ ├── scale-effect.html │ │ │ │ │ ├── selectable.html │ │ │ │ │ ├── shake-effect.html │ │ │ │ │ ├── size-effect.html │ │ │ │ │ ├── slide-effect.html │ │ │ │ │ ├── slider.html │ │ │ │ │ ├── sortable.html │ │ │ │ │ ├── spinner.html │ │ │ │ │ ├── tabs.html │ │ │ │ │ ├── tooltip.html │ │ │ │ │ └── transfer-effect.html │ │ │ │ ├── external/ │ │ │ │ │ ├── globalize.culture.de-DE.js │ │ │ │ │ ├── globalize.culture.ja-JP.js │ │ │ │ │ ├── globalize.js │ │ │ │ │ ├── jquery.bgiframe-2.1.2.js │ │ │ │ │ ├── jquery.cookie.js │ │ │ │ │ ├── jquery.metadata.js │ │ │ │ │ ├── jquery.mousewheel.js │ │ │ │ │ ├── jshint.js │ │ │ │ │ ├── qunit.css │ │ │ │ │ └── qunit.js │ │ │ │ ├── grunt.js │ │ │ │ ├── jquery-1.8.3.js │ │ │ │ ├── package.json │ │ │ │ ├── themes/ │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── jquery-ui.css │ │ │ │ │ │ ├── jquery.ui.accordion.css │ │ │ │ │ │ ├── jquery.ui.all.css │ │ │ │ │ │ ├── jquery.ui.autocomplete.css │ │ │ │ │ │ ├── jquery.ui.base.css │ │ │ │ │ │ ├── jquery.ui.button.css │ │ │ │ │ │ ├── jquery.ui.core.css │ │ │ │ │ │ ├── jquery.ui.datepicker.css │ │ │ │ │ │ ├── jquery.ui.dialog.css │ │ │ │ │ │ ├── jquery.ui.menu.css │ │ │ │ │ │ ├── jquery.ui.progressbar.css │ │ │ │ │ │ ├── jquery.ui.resizable.css │ │ │ │ │ │ ├── jquery.ui.selectable.css │ │ │ │ │ │ ├── jquery.ui.slider.css │ │ │ │ │ │ ├── jquery.ui.spinner.css │ │ │ │ │ │ ├── jquery.ui.tabs.css │ │ │ │ │ │ ├── jquery.ui.theme.css │ │ │ │ │ │ └── jquery.ui.tooltip.css │ │ │ │ │ └── ui-lightness/ │ │ │ │ │ ├── jquery-ui.css │ │ │ │ │ ├── jquery.ui.accordion.css │ │ │ │ │ ├── jquery.ui.all.css │ │ │ │ │ ├── jquery.ui.autocomplete.css │ │ │ │ │ ├── jquery.ui.base.css │ │ │ │ │ ├── jquery.ui.button.css │ │ │ │ │ ├── jquery.ui.core.css │ │ │ │ │ ├── jquery.ui.datepicker.css │ │ │ │ │ ├── jquery.ui.dialog.css │ │ │ │ │ ├── jquery.ui.menu.css │ │ │ │ │ ├── jquery.ui.progressbar.css │ │ │ │ │ ├── jquery.ui.resizable.css │ │ │ │ │ ├── jquery.ui.selectable.css │ │ │ │ │ ├── jquery.ui.slider.css │ │ │ │ │ ├── jquery.ui.spinner.css │ │ │ │ │ ├── jquery.ui.tabs.css │ │ │ │ │ ├── jquery.ui.theme.css │ │ │ │ │ └── jquery.ui.tooltip.css │ │ │ │ ├── ui/ │ │ │ │ │ ├── i18n/ │ │ │ │ │ │ ├── jquery-ui-i18n.js │ │ │ │ │ │ ├── jquery.ui.datepicker-af.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ar-DZ.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ar.js │ │ │ │ │ │ ├── jquery.ui.datepicker-az.js │ │ │ │ │ │ ├── jquery.ui.datepicker-bg.js │ │ │ │ │ │ ├── jquery.ui.datepicker-bs.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ca.js │ │ │ │ │ │ ├── jquery.ui.datepicker-cs.js │ │ │ │ │ │ ├── jquery.ui.datepicker-cy-GB.js │ │ │ │ │ │ ├── jquery.ui.datepicker-da.js │ │ │ │ │ │ ├── jquery.ui.datepicker-de.js │ │ │ │ │ │ ├── jquery.ui.datepicker-el.js │ │ │ │ │ │ ├── jquery.ui.datepicker-en-AU.js │ │ │ │ │ │ ├── jquery.ui.datepicker-en-GB.js │ │ │ │ │ │ ├── jquery.ui.datepicker-en-NZ.js │ │ │ │ │ │ ├── jquery.ui.datepicker-eo.js │ │ │ │ │ │ ├── jquery.ui.datepicker-es.js │ │ │ │ │ │ ├── jquery.ui.datepicker-et.js │ │ │ │ │ │ ├── jquery.ui.datepicker-eu.js │ │ │ │ │ │ ├── jquery.ui.datepicker-fa.js │ │ │ │ │ │ ├── jquery.ui.datepicker-fi.js │ │ │ │ │ │ ├── jquery.ui.datepicker-fo.js │ │ │ │ │ │ ├── jquery.ui.datepicker-fr-CH.js │ │ │ │ │ │ ├── jquery.ui.datepicker-fr.js │ │ │ │ │ │ ├── jquery.ui.datepicker-gl.js │ │ │ │ │ │ ├── jquery.ui.datepicker-he.js │ │ │ │ │ │ ├── jquery.ui.datepicker-hi.js │ │ │ │ │ │ ├── jquery.ui.datepicker-hr.js │ │ │ │ │ │ ├── jquery.ui.datepicker-hu.js │ │ │ │ │ │ ├── jquery.ui.datepicker-hy.js │ │ │ │ │ │ ├── jquery.ui.datepicker-id.js │ │ │ │ │ │ ├── jquery.ui.datepicker-is.js │ │ │ │ │ │ ├── jquery.ui.datepicker-it.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ja.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ka.js │ │ │ │ │ │ ├── jquery.ui.datepicker-kk.js │ │ │ │ │ │ ├── jquery.ui.datepicker-km.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ko.js │ │ │ │ │ │ ├── jquery.ui.datepicker-lb.js │ │ │ │ │ │ ├── jquery.ui.datepicker-lt.js │ │ │ │ │ │ ├── jquery.ui.datepicker-lv.js │ │ │ │ │ │ ├── jquery.ui.datepicker-mk.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ml.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ms.js │ │ │ │ │ │ ├── jquery.ui.datepicker-nl-BE.js │ │ │ │ │ │ ├── jquery.ui.datepicker-nl.js │ │ │ │ │ │ ├── jquery.ui.datepicker-no.js │ │ │ │ │ │ ├── jquery.ui.datepicker-pl.js │ │ │ │ │ │ ├── jquery.ui.datepicker-pt-BR.js │ │ │ │ │ │ ├── jquery.ui.datepicker-pt.js │ │ │ │ │ │ ├── jquery.ui.datepicker-rm.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ro.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ru.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sk.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sl.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sq.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sr-SR.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sr.js │ │ │ │ │ │ ├── jquery.ui.datepicker-sv.js │ │ │ │ │ │ ├── jquery.ui.datepicker-ta.js │ │ │ │ │ │ ├── jquery.ui.datepicker-th.js │ │ │ │ │ │ ├── jquery.ui.datepicker-tj.js │ │ │ │ │ │ ├── jquery.ui.datepicker-tr.js │ │ │ │ │ │ ├── jquery.ui.datepicker-uk.js │ │ │ │ │ │ ├── jquery.ui.datepicker-vi.js │ │ │ │ │ │ ├── jquery.ui.datepicker-zh-CN.js │ │ │ │ │ │ ├── jquery.ui.datepicker-zh-HK.js │ │ │ │ │ │ └── jquery.ui.datepicker-zh-TW.js │ │ │ │ │ ├── jquery-ui.custom.js │ │ │ │ │ ├── jquery.ui.accordion.js │ │ │ │ │ ├── jquery.ui.autocomplete.js │ │ │ │ │ ├── jquery.ui.button.js │ │ │ │ │ ├── jquery.ui.core.js │ │ │ │ │ ├── jquery.ui.datepicker.js │ │ │ │ │ ├── jquery.ui.dialog.js │ │ │ │ │ ├── jquery.ui.draggable.js │ │ │ │ │ ├── jquery.ui.droppable.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 │ │ │ │ │ ├── jquery.ui.effect.js │ │ │ │ │ ├── jquery.ui.menu.js │ │ │ │ │ ├── jquery.ui.mouse.js │ │ │ │ │ ├── jquery.ui.position.js │ │ │ │ │ ├── jquery.ui.progressbar.js │ │ │ │ │ ├── jquery.ui.resizable.js │ │ │ │ │ ├── jquery.ui.selectable.js │ │ │ │ │ ├── jquery.ui.slider.js │ │ │ │ │ ├── jquery.ui.sortable.js │ │ │ │ │ ├── jquery.ui.spinner.js │ │ │ │ │ ├── jquery.ui.tabs.js │ │ │ │ │ ├── jquery.ui.tooltip.js │ │ │ │ │ └── jquery.ui.widget.js │ │ │ │ ├── ui.accordion.jquery.json │ │ │ │ ├── ui.autocomplete.jquery.json │ │ │ │ ├── ui.button.jquery.json │ │ │ │ ├── ui.core.jquery.json │ │ │ │ ├── ui.datepicker.jquery.json │ │ │ │ ├── ui.dialog.jquery.json │ │ │ │ ├── ui.draggable.jquery.json │ │ │ │ ├── ui.droppable.jquery.json │ │ │ │ ├── ui.effect-blind.jquery.json │ │ │ │ ├── ui.effect-bounce.jquery.json │ │ │ │ ├── ui.effect-clip.jquery.json │ │ │ │ ├── ui.effect-drop.jquery.json │ │ │ │ ├── ui.effect-explode.jquery.json │ │ │ │ ├── ui.effect-fade.jquery.json │ │ │ │ ├── ui.effect-fold.jquery.json │ │ │ │ ├── ui.effect-highlight.jquery.json │ │ │ │ ├── ui.effect-pulsate.jquery.json │ │ │ │ ├── ui.effect-scale.jquery.json │ │ │ │ ├── ui.effect-shake.jquery.json │ │ │ │ ├── ui.effect-slide.jquery.json │ │ │ │ ├── ui.effect-transfer.jquery.json │ │ │ │ ├── ui.effect.jquery.json │ │ │ │ ├── ui.menu.jquery.json │ │ │ │ ├── ui.mouse.jquery.json │ │ │ │ ├── ui.position.jquery.json │ │ │ │ ├── ui.progressbar.jquery.json │ │ │ │ ├── ui.resizable.jquery.json │ │ │ │ ├── ui.selectable.jquery.json │ │ │ │ ├── ui.slider.jquery.json │ │ │ │ ├── ui.sortable.jquery.json │ │ │ │ ├── ui.spinner.jquery.json │ │ │ │ ├── ui.tabs.jquery.json │ │ │ │ ├── ui.tooltip.jquery.json │ │ │ │ └── ui.widget.jquery.json │ │ │ ├── index.html │ │ │ └── js/ │ │ │ ├── jquery-1.8.3.js │ │ │ └── jquery-ui-1.9.2.custom.js │ │ ├── jquery-ui-touch-punch/ │ │ │ ├── README.md │ │ │ └── jquery.ui.touch-punch.js │ │ ├── jquery.cookie.js │ │ └── modernizr.js │ └── tables/ │ ├── DataTables/ │ │ ├── docs/ │ │ │ ├── 34cdb56b2c.html │ │ │ ├── DataTable.defaults.columns.html │ │ │ ├── DataTable.defaults.html │ │ │ ├── DataTable.defaults.oLanguage.html │ │ │ ├── DataTable.defaults.oLanguage.oAria.html │ │ │ ├── DataTable.defaults.oLanguage.oPaginate.html │ │ │ ├── DataTable.defaults.oSearch.html │ │ │ ├── DataTable.ext.html │ │ │ ├── DataTable.html │ │ │ ├── DataTable.models.ext.html │ │ │ ├── DataTable.models.html │ │ │ ├── DataTable.models.oColumn.html │ │ │ ├── DataTable.models.oRow.html │ │ │ ├── DataTable.models.oSearch.html │ │ │ ├── DataTable.models.oSettings.html │ │ │ ├── DataTable.models.oSettings.oBrowser.html │ │ │ ├── DataTable.models.oSettings.oFeatures.html │ │ │ ├── DataTable.models.oSettings.oLanguage.html │ │ │ ├── DataTable.models.oSettings.oPreviousSearch.html │ │ │ ├── DataTable.models.oSettings.oScroll.html │ │ │ ├── index.html │ │ │ └── media/ │ │ │ ├── css/ │ │ │ │ ├── doc.css │ │ │ │ ├── shCore.css │ │ │ │ └── shThemeDataTables.css │ │ │ ├── js/ │ │ │ │ ├── doc.js │ │ │ │ ├── jquery.js │ │ │ │ ├── shBrushJScript.js │ │ │ │ └── shCore.js │ │ │ └── license/ │ │ │ └── Syntax Highlighter │ │ ├── extras/ │ │ │ ├── AutoFill/ │ │ │ │ ├── callbacks.html │ │ │ │ ├── columns.html │ │ │ │ ├── index.html │ │ │ │ ├── inputs.html │ │ │ │ ├── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── AutoFill.css │ │ │ │ │ ├── docs/ │ │ │ │ │ │ ├── 02ff627f40.html │ │ │ │ │ │ ├── 36456bf45f.html │ │ │ │ │ │ ├── 47cac4f141.html │ │ │ │ │ │ ├── 5a72546831.html │ │ │ │ │ │ ├── 8ee4007a12.html │ │ │ │ │ │ ├── AutoFill.html │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ ├── b44bd4821a.html │ │ │ │ │ │ ├── c6945fdb4a.html │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── media/ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ └── license/ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ └── js/ │ │ │ │ │ └── AutoFill.js │ │ │ │ └── scrolling.html │ │ │ ├── ColReorder/ │ │ │ │ ├── alt_insert.html │ │ │ │ ├── col_filter.html │ │ │ │ ├── colvis.html │ │ │ │ ├── fixedcolumns.html │ │ │ │ ├── fixedheader.html │ │ │ │ ├── index.html │ │ │ │ ├── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── ColReorder.css │ │ │ │ │ ├── docs/ │ │ │ │ │ │ ├── 46848f6f3b.html │ │ │ │ │ │ ├── 4f1246032c.html │ │ │ │ │ │ ├── ColReorder.html │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── media/ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ └── license/ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ └── js/ │ │ │ │ │ └── ColReorder.js │ │ │ │ ├── predefined.html │ │ │ │ ├── reset.html │ │ │ │ ├── scrolling.html │ │ │ │ ├── server_side.html │ │ │ │ ├── state_save.html │ │ │ │ └── theme.html │ │ │ ├── ColVis/ │ │ │ │ ├── exclude_columns.html │ │ │ │ ├── index.html │ │ │ │ ├── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── ColVis.css │ │ │ │ │ │ └── ColVisAlt.css │ │ │ │ │ ├── docs/ │ │ │ │ │ │ ├── ColVis.html │ │ │ │ │ │ ├── a69b02bcf2.html │ │ │ │ │ │ ├── ccb5a49865.html │ │ │ │ │ │ ├── global.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── media/ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ └── license/ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ └── js/ │ │ │ │ │ └── ColVis.js │ │ │ │ ├── mouseover.html │ │ │ │ ├── style.html │ │ │ │ ├── text.html │ │ │ │ ├── theme.html │ │ │ │ ├── title_callback.html │ │ │ │ ├── two_tables.html │ │ │ │ └── two_tables_identical.html │ │ │ ├── KeyTable/ │ │ │ │ ├── datatable.html │ │ │ │ ├── datatable_scrolling.html │ │ │ │ ├── editing.html │ │ │ │ ├── form.html │ │ │ │ ├── index.html │ │ │ │ └── js/ │ │ │ │ └── KeyTable.js │ │ │ ├── Scroller/ │ │ │ │ ├── api_scrolling.html │ │ │ │ ├── index.html │ │ │ │ ├── large_js_source.html │ │ │ │ ├── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── dataTables.scroller.css │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── 2500.txt │ │ │ │ │ │ └── server_processing.php │ │ │ │ │ ├── docs/ │ │ │ │ │ │ ├── Scroller.html │ │ │ │ │ │ ├── Scroller.oDefaults.html │ │ │ │ │ │ ├── baed189d4a.html │ │ │ │ │ │ ├── c6053fac6b.html │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ └── media/ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ ├── doc.css │ │ │ │ │ │ │ ├── shCore.css │ │ │ │ │ │ │ └── shThemeDataTables.css │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ ├── doc.js │ │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ │ ├── shBrushJScript.js │ │ │ │ │ │ │ └── shCore.js │ │ │ │ │ │ └── license/ │ │ │ │ │ │ └── Syntax Highlighter │ │ │ │ │ └── js/ │ │ │ │ │ └── dataTables.scroller.js │ │ │ │ ├── server-side_processing.html │ │ │ │ └── state_saving.html │ │ │ └── TableTools/ │ │ │ └── media/ │ │ │ ├── as3/ │ │ │ │ ├── ZeroClipboard.as │ │ │ │ └── lib/ │ │ │ │ └── AlivePDF.swc │ │ │ └── js/ │ │ │ ├── TableTools.js │ │ │ └── ZeroClipboard.js │ │ └── media/ │ │ ├── css/ │ │ │ ├── DT_bootstrap.css │ │ │ ├── demo_page.css │ │ │ ├── demo_table.css │ │ │ ├── demo_table_jui.css │ │ │ ├── jquery.dataTables.css │ │ │ └── jquery.dataTables_themeroller.css │ │ ├── images/ │ │ │ └── Sorting icons.psd │ │ ├── js/ │ │ │ ├── DT_bootstrap.js │ │ │ ├── jquery.dataTables.js │ │ │ └── jquery.js │ │ └── src/ │ │ ├── DataTables.js │ │ ├── api/ │ │ │ ├── api.internal.js │ │ │ ├── api.methods.js │ │ │ └── api.static.js │ │ ├── core/ │ │ │ ├── core.ajax.js │ │ │ ├── core.columns.js │ │ │ ├── core.constructor.js │ │ │ ├── core.data.js │ │ │ ├── core.draw.js │ │ │ ├── core.filter.js │ │ │ ├── core.info.js │ │ │ ├── core.init.js │ │ │ ├── core.length.js │ │ │ ├── core.page.js │ │ │ ├── core.processing.js │ │ │ ├── core.scrolling.js │ │ │ ├── core.sizing.js │ │ │ ├── core.sort.js │ │ │ ├── core.state.js │ │ │ └── core.support.js │ │ ├── ext/ │ │ │ ├── ext.classes.js │ │ │ ├── ext.paging.js │ │ │ ├── ext.sorting.js │ │ │ └── ext.types.js │ │ └── model/ │ │ ├── model.column.js │ │ ├── model.defaults.columns.js │ │ ├── model.defaults.js │ │ ├── model.ext.js │ │ ├── model.row.js │ │ ├── model.search.js │ │ └── model.settings.js │ └── FooTable/ │ ├── .gitattributes │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── bootstrap/ │ │ ├── bootstrap-responsive.css │ │ ├── bootstrap-tab.js │ │ ├── bootstrap.css │ │ ├── bootstrapSwitch.css │ │ └── bootstrapSwitch.js │ ├── css/ │ │ ├── footable-0.1.css │ │ ├── footable.paginate.css │ │ └── footable.sortable-0.1.css │ ├── demo-bootstrapSwitch.htm │ ├── demo-colspan.htm │ ├── demo-events.htm │ ├── demo-filtering-enter-disabled.htm │ ├── demo-filtering-pagination.htm │ ├── demo-filtering-via-events.htm │ ├── demo-filtering.htm │ ├── demo-group-headers.htm │ ├── demo-pagination-multiple.htm │ ├── demo-pagination.htm │ ├── demo-sorting-filtering-pagination.htm │ ├── demo-sorting-filtering.htm │ ├── demo-sorting-pagination.htm │ ├── demo-sorting.htm │ ├── demo-toc.htm │ ├── demo-widthHeightOverride.htm │ ├── demo-with-bootstrap.htm │ ├── demo-zebra.htm │ ├── demo.htm │ ├── demo2.htm │ ├── demo3.htm │ ├── demo4.htm │ ├── footable.jquery.json │ ├── js/ │ │ ├── data-generator.js │ │ ├── footable.filter.js │ │ ├── footable.js │ │ ├── footable.paginate.js │ │ ├── footable.plugin.template.js │ │ └── footable.sortable.js │ ├── responsive-container.htm │ ├── screenshot.pdn │ └── test-adding-attribs.htm └── skins/ ├── css/ │ └── blue-gray.css └── less/ └── blue-gray.less ================================================ FILE CONTENTS ================================================ ================================================ FILE: .idea/artifacts/mongo_war.xml ================================================ $PROJECT_DIR$/target ================================================ FILE: .idea/artifacts/mongo_war_exploded.xml ================================================ $PROJECT_DIR$/target/mongo ================================================ FILE: .idea/compiler.xml ================================================ ================================================ FILE: .idea/copyright/profiles_settings.xml ================================================ ================================================ FILE: .idea/encodings.xml ================================================ ================================================ FILE: .idea/libraries/Maven__antlr_antlr_2_7_7.xml ================================================ ================================================ FILE: .idea/libraries/Maven__aopalliance_aopalliance_1_0.xml ================================================ ================================================ FILE: .idea/libraries/Maven__aspectj_aspectjrt_1_5_3.xml ================================================ ================================================ FILE: .idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__ch_qos_logback_logback_core_1_1_1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_alibaba_druid_1_0_17.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_alibaba_fastjson_1_2_7.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_5_0.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_5_4.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_5_4.xml ================================================ ================================================ FILE: .idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_8_0.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_codec_commons_codec_1_10.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_io_commons_io_2_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_lang_commons_lang_2_5.xml ================================================ ================================================ FILE: .idea/libraries/Maven__commons_logging_commons_logging_1_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__dom4j_dom4j_1_6.xml ================================================ ================================================ FILE: .idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml ================================================ ================================================ FILE: .idea/libraries/Maven__jstl_jstl_1_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__junit_junit_4_11.xml ================================================ ================================================ FILE: .idea/libraries/Maven__log4j_log4j_1_2_16.xml ================================================ ================================================ FILE: .idea/libraries/Maven__mysql_mysql_connector_java_5_1_22.xml ================================================ ================================================ FILE: .idea/libraries/Maven__net_sf_ezmorph_ezmorph_1_0_6.xml ================================================ ================================================ FILE: .idea/libraries/Maven__net_sf_json_lib_json_lib_2_4.xml ================================================ ================================================ FILE: .idea/libraries/Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_apache_poi_poi_3_12_beta1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_aspectj_aspectjweaver_1_6_11.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_4_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hibernate_hibernate_core_4_3_1_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hibernate_hibernate_entitymanager_4_3_1_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hibernate_hibernate_validator_4_3_1_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_javassist_javassist_3_18_1_GA.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_json_json_20160212.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_mongodb_mongo_java_driver_3_2_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_12.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_12.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_data_spring_data_commons_1_11_0_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_data_spring_data_mongodb_1_8_0_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_aop_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_aspects_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_beans_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_context_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_core_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_expression_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_jdbc_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_orm_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_test_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_tx_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_web_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__org_springframework_spring_webmvc_4_1_7_RELEASE.xml ================================================ ================================================ FILE: .idea/libraries/Maven__taglibs_standard_1_1_2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml ================================================ ================================================ FILE: .idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml ================================================ ================================================ FILE: .idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml ================================================ ================================================ FILE: .idea/misc.xml ================================================ ================================================ FILE: .idea/modules.xml ================================================ ================================================ FILE: .idea/vcs.xml ================================================ ================================================ FILE: .idea/workspace.xml ================================================ true DEFINITION_ORDER CSS Java Java language level migration aidsJava Memory issuesJava Performance issuesJava Probable bugsJava Android project 1479107192905 1479184719508 MAVEN com.liad:mongo:1.0-SNAPSHOT com.liad:mongo:1.0-SNAPSHOT junit:junit:jar:4.11 junit:junit:jar:4.11/org.hamcrest:hamcrest-core:jar:1.3 org.slf4j:slf4j-api:jar:1.7.12 ch.qos.logback:logback-core:jar:1.1.1 ch.qos.logback:logback-classic:jar:1.1.1 mysql:mysql-connector-java:jar:5.1.22 taglibs:standard:jar:1.1.2 jstl:jstl:jar:1.2 com.fasterxml.jackson.core:jackson-databind:jar:2.5.4 com.fasterxml.jackson.core:jackson-databind:jar:2.5.4/com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0 com.fasterxml.jackson.core:jackson-databind:jar:2.5.4/com.fasterxml.jackson.core:jackson-core:jar:2.5.4 org.springframework:spring-core:jar:4.1.7.RELEASE org.springframework:spring-core:jar:4.1.7.RELEASE/commons-logging:commons-logging:jar:1.2 org.springframework:spring-beans:jar:4.1.7.RELEASE org.springframework:spring-context:jar:4.1.7.RELEASE org.springframework:spring-context:jar:4.1.7.RELEASE/org.springframework:spring-aop:jar:4.1.7.RELEASE org.springframework:spring-context:jar:4.1.7.RELEASE/org.springframework:spring-aop:jar:4.1.7.RELEASE/aopalliance:aopalliance:jar:1.0 org.springframework:spring-context:jar:4.1.7.RELEASE/org.springframework:spring-expression:jar:4.1.7.RELEASE org.springframework.data:spring-data-mongodb:jar:1.8.0.RELEASE org.springframework.data:spring-data-mongodb:jar:1.8.0.RELEASE/org.springframework.data:spring-data-commons:jar:1.11.0.RELEASE org.springframework.data:spring-data-mongodb:jar:1.8.0.RELEASE/org.slf4j:jcl-over-slf4j:jar:1.7.12 org.mongodb:mongo-java-driver:jar:3.2.2 org.springframework:spring-tx:jar:4.1.7.RELEASE org.springframework:spring-web:jar:4.1.7.RELEASE org.springframework:spring-webmvc:jar:4.1.7.RELEASE org.springframework:spring-test:jar:4.1.7.RELEASE commons-collections:commons-collections:jar:3.2.2 commons-fileupload:commons-fileupload:jar:1.3.2 commons-fileupload:commons-fileupload:jar:1.3.2/commons-io:commons-io:jar:2.2 commons-codec:commons-codec:jar:1.10 com.thoughtworks.xstream:xstream:jar:1.4.1 com.thoughtworks.xstream:xstream:jar:1.4.1/xmlpull:xmlpull:jar:1.1.3.1 com.thoughtworks.xstream:xstream:jar:1.4.1/xpp3:xpp3_min:jar:1.1.4c dom4j:dom4j:jar:1.6 dom4j:dom4j:jar:1.6/xml-apis:xml-apis:jar:1.0.b2 net.sf.json-lib:json-lib:jar:2.4 net.sf.json-lib:json-lib:jar:2.4/commons-beanutils:commons-beanutils:jar:1.8.0 net.sf.json-lib:json-lib:jar:2.4/commons-lang:commons-lang:jar:2.5 net.sf.json-lib:json-lib:jar:2.4/net.sf.ezmorph:ezmorph:jar:1.0.6 commons-httpclient:commons-httpclient:jar:3.1 log4j:log4j:jar:1.2.16 net.sf.json-lib:json-lib:jar:jdk15:2.4 All All mongo:war Spring 1.8 mongo Maven: aopalliance:aopalliance:1.0 ================================================ FILE: mongo.iml ================================================ ================================================ FILE: pom.xml ================================================ 4.0.0 com.liad mongo war 1.0-SNAPSHOT mongo Maven Webapp http://maven.apache.org junit junit 4.11 test org.slf4j slf4j-api 1.7.12 ch.qos.logback logback-core 1.1.3 ch.qos.logback logback-classic 1.1.3 mysql mysql-connector-java 5.1.22 runtime taglibs standard 1.1.2 jstl jstl 1.2 com.fasterxml.jackson.core jackson-databind 2.5.4 org.springframework spring-core 4.1.7.RELEASE org.springframework spring-beans 4.1.7.RELEASE org.springframework spring-context 4.1.7.RELEASE org.springframework.data spring-data-mongodb 1.8.0.RELEASE org.mongodb mongo-java-driver 2.13.2 org.springframework spring-tx 4.1.7.RELEASE org.springframework spring-web 4.1.7.RELEASE org.springframework spring-webmvc 4.1.7.RELEASE org.springframework spring-test 4.1.7.RELEASE org.springframework spring-orm 4.1.7.RELEASE org.springframework spring-aspects 4.1.7.RELEASE commons-collections commons-collections 3.2.2 commons-fileupload commons-fileupload 1.3.2 commons-codec commons-codec 1.10 com.thoughtworks.xstream xstream 1.4.1 dom4j dom4j 1.6 net.sf.json-lib json-lib 2.4 commons-httpclient commons-httpclient 3.1 log4j log4j 1.2.16 net.sf.json-lib json-lib 2.4 jdk15 org.json json 20160212 org.hibernate hibernate-core 4.3.1.Final org.hibernate hibernate-validator 4.3.1.Final org.hibernate hibernate-entitymanager 4.3.1.Final org.apache.poi poi 3.12-beta1 com.alibaba fastjson 1.2.7 com.alibaba druid 1.0.17 org.aspectj aspectjweaver 1.6.11 jar compile aspectj aspectjrt 1.5.3 us.codecraft webmagic-core 0.5.3 us.codecraft webmagic-extension 0.5.3 org.apache.httpcomponents httpclient 4.5.2 org.jsoup jsoup 1.7.2 javax.annotation jsr250-api 1.0 javax.annotation javax.annotation-api 1.2 org.jodd jodd 3.2.6 org.json json 20160212 org.springframework spring-framework-bom ${spring.version} pom import net.sf.ehcache ehcache-core 2.6.9 mongo org.apache.maven.plugins maven-compiler-plugin 1.6 1.6 ================================================ FILE: src/doc/mogodb.txt ================================================ db.mengwei.insert({ title: 'PHP PHP 教程', description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['php'], likes: 200 }) db.mengwei.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['java'], likes: 150 }) db.mengwei.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb'], likes: 100 }) ================================================ FILE: src/main/java/com/lida/mongo/log/Impl/MongoDBAppender.java ================================================ package com.lida.mongo.log.Impl; import ch.qos.logback.classic.spi.ILoggingEvent; import com.lida.mongo.log.MongoDBAppenderBase; import com.mongodb.BasicDBObject; import jodd.datetime.JDateTime; /** * Created by lenovo on 2016/12/7. */ public class MongoDBAppender extends MongoDBAppenderBase { public MongoDBAppender() { super("loggingEvents"); } @Override protected BasicDBObject toMongoDocument(ILoggingEvent eventObject) { final BasicDBObject doc = new BasicDBObject(); doc.append("date", new JDateTime(eventObject.getTimeStamp()).toString("YYYY-MM-DD hh:mm:ss")); doc.append("source", source); doc.append("level", eventObject.getLevel().toString()); doc.append("logger", eventObject.getLoggerName()); doc.append("thread", eventObject.getThreadName()); doc.append("message", eventObject.getFormattedMessage()); if (eventObject.getMdc() != null && !eventObject.getMdc().isEmpty()) doc.append("mdc", eventObject.getMdc()); //... return doc; } } ================================================ FILE: src/main/java/com/lida/mongo/log/MongoDBAppenderBase.java ================================================ package com.lida.mongo.log; import ch.qos.logback.core.UnsynchronizedAppenderBase; import com.mongodb.*; import org.springframework.data.mongodb.core.MongoTemplate; import javax.annotation.Resource; import java.net.UnknownHostException; /** * Created by lenovo on 2016/12/7. */ public abstract class MongoDBAppenderBase extends UnsynchronizedAppenderBase{ private Mongo mongo; private DBCollection eventsCollection; @Resource private MongoTemplate mongoTemplate; private String host = "172.16.31.206"; private int port = 27017; private String dbName = "db"; private String collectionName; private String username; private String password; protected String source; private int connectionsPerHost = 10; private int threadsAllowedToBlockForConnectionMultiplier = 5; private int maxWaitTime = 1000 * 60 * 2; private int connectTimeout; private int socketTimeout; private boolean autoConnectRetry; private boolean slaveOk; private boolean safe; private int w; private int wtimeout; private boolean fsync; protected MongoDBAppenderBase(String collectionName) { this.collectionName = collectionName; } @Override public void start() { try { connectToMongoDB(); super.start(); } catch (UnknownHostException e) { addError( "Error connecting to MongoDB server: " + host + ":" + port, e); } } private void connectToMongoDB() throws UnknownHostException { mongo = new Mongo(new ServerAddress("127.0.0.1", 27017), buildOptions()); DB db = mongo.getDB(dbName); if (username != null && password != null) db.authenticate(username, password.toCharArray()); eventsCollection = db.getCollection(collectionName); } private MongoOptions buildOptions() { final MongoOptions options = new MongoOptions(); options.connectionsPerHost = connectionsPerHost; options.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; options.maxWaitTime = maxWaitTime; options.connectTimeout = connectTimeout; options.socketTimeout = socketTimeout; options.autoConnectRetry = autoConnectRetry; options.slaveOk = slaveOk; options.safe = safe; options.w = w; options.wtimeout = wtimeout; options.fsync = fsync; return options; } protected abstract BasicDBObject toMongoDocument(E event); @Override protected void append(E eventObject) { BasicDBObject basicDBObject = toMongoDocument(eventObject); if(basicDBObject.get("message").toString().indexOf("=")!=-1&&basicDBObject.get("level").equals("INFO")) { eventsCollection.insert(toMongoDocument(eventObject)); } } @Override public void stop() { if (mongo != null) mongo.close(); super.stop(); } public void setHost(String host) { this.host = host; } public void setPort(int port) { this.port = port; } public void setDbName(String dbName) { this.dbName = dbName; } public void setCollectionName(String collectionName) { this.collectionName = collectionName; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setConnectionsPerHost(int connectionsPerHost) { this.connectionsPerHost = connectionsPerHost; } public void setThreadsAllowedToBlockForConnectionMultiplier( int threadsAllowedToBlockForConnectionMultiplier) { this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; } public void setMaxWaitTime(int maxWaitTime) { this.maxWaitTime = maxWaitTime; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; } public void setSocketTimeout(int socketTimeout) { this.socketTimeout = socketTimeout; } public void setAutoConnectRetry(boolean autoConnectRetry) { this.autoConnectRetry = autoConnectRetry; } public void setSlaveOk(boolean slaveOk) { this.slaveOk = slaveOk; } public void setSafe(boolean safe) { this.safe = safe; } public void setW(int w) { this.w = w; } public void setWtimeout(int wtimeout) { this.wtimeout = wtimeout; } public void setFsync(boolean fsync) { this.fsync = fsync; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } } ================================================ FILE: src/main/java/com/lida/mongo/person/controller/MongoController.java ================================================ package com.lida.mongo.person.controller; import com.lida.mongo.log.Impl.MongoDBAppender; import com.lida.mongo.person.mongoDao.PersonMongoImpl; import com.lida.mongo.sensor.dao.impl.SensorMongoImpl; import com.lida.mongo.sensor.service.impl.CalculateAverageImpl; import com.lida.mongo.sensor.service.impl.UpdateDataImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.annotation.Resource; import java.math.BigInteger; import java.text.ParseException; import java.util.Date; /** * Created by DuLida on 2016/10/20. */ @Controller @RequestMapping(value = "/goMongo") public class MongoController { @Resource private PersonMongoImpl personMongo; @Resource private SensorMongoImpl sensorMongo; @Resource private UpdateDataImpl updateData; @Resource private CalculateAverageImpl calculateAverage; private static Logger log = LoggerFactory.getLogger(MongoController.class); @RequestMapping(value = "/list", method = RequestMethod.GET) public String go() throws ParseException { String dateStr = "2016-11-19 19:10:00"; log.info("==========================================="+sensorMongo.findForRequery(BigInteger.valueOf(318861587)).size()); log.info("==========================================="+calculateAverage.calculateAverageOfCo2(dateStr,BigInteger.valueOf(318861587))); return "mogoList"; } } ================================================ FILE: src/main/java/com/lida/mongo/person/dao/PersonDao.java ================================================ package com.lida.mongo.person.dao; import com.lida.mongo.person.entity.Person; import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import java.util.List; /** * Created by DuLida on 2016/10/20. */ public interface PersonDao extends MongoRepository { @Query(value = "{'age' : {'$gte' : ?0, '$lte' : ?1}, 'name':?2 }", fields = "{ 'name' : 1, 'age' : 1}") List findByAge(int age1, int age2, String name); } ================================================ FILE: src/main/java/com/lida/mongo/person/entity/Address.java ================================================ package com.lida.mongo.person.entity; /** * Created by DuLida on 2016/10/20. */ public class Address { private String city; private String street; private int num; public Address() { } public Address(String city, String street, int num) { this.city = city; this.street = street; this.num = num; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } @Override public String toString() { return "Address{" + "city='" + city + '\'' + ", street='" + street + '\'' + ", num=" + num + '}'; } } ================================================ FILE: src/main/java/com/lida/mongo/person/entity/Person.java ================================================ package com.lida.mongo.person.entity; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.io.Serializable; /** * Created by DuLida on 2016/10/20. */ @Document(collection = "person") public class Person implements Serializable { @Id private ObjectId id; private String name; private int age; private Address address; public Person() { } public Person(String name, int age, Address address) { this.name = name; this.age = age; this.address = address; } public ObjectId getId() { return id; } public void setId(ObjectId id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address=" + address + '}'; } } ================================================ FILE: src/main/java/com/lida/mongo/person/mongoDao/PersonMongoDao.java ================================================ package com.lida.mongo.person.mongoDao; import com.lida.mongo.person.entity.Person; import java.util.List; /** * Created by DuLida on 2016/10/21. */ public interface PersonMongoDao { List findAll(); void insertPerson(Person user); void removePerson(String userName); void updatePerson(); List findForRequery(String userName); } ================================================ FILE: src/main/java/com/lida/mongo/person/mongoDao/PersonMongoImpl.java ================================================ package com.lida.mongo.person.mongoDao; import com.lida.mongo.person.entity.Person; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; /** * Created by DuLida on 2016/10/21. */ @Repository("personMongoImpl") public class PersonMongoImpl implements PersonMongoDao { @Resource private MongoTemplate mongoTemplate; @Override public List findAll() { return mongoTemplate.findAll(Person.class, "person"); } @Override public void insertPerson(Person person) { mongoTemplate.insert(person, "person"); } @Override public void removePerson(String userName) { mongoTemplate.remove(Query.query(Criteria.where("name").is(userName)), "person"); } @Override public void updatePerson() { mongoTemplate.updateMulti(Query.query(Criteria.where("age").gt(3).lte(5)), Update.update("age", 3), "person"); } @Override public List findForRequery(String userName) { return mongoTemplate.find(Query.query(Criteria.where("name").is(userName)), Person.class); } } ================================================ FILE: src/main/java/com/lida/mongo/qq/controller/LoginController.java ================================================ package com.lida.mongo.qq.controller; import com.lida.mongo.qq.model.QQUserInfo; import com.lida.mongo.util.QQUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * Created by stevenfen on 2016/12/19. */ @Controller @RequestMapping(value = "/login") public class LoginController { private static Logger log = LoggerFactory.getLogger(LoginController.class); @RequestMapping("/result") public String login_result(String access_token, String openid) { QQUserInfo user = QQUtils.getUserInfo(access_token, openid); log.debug("=========================================="+user+"============================================="); return "mogoList"; } @RequestMapping("/index") public String goIndex(){ return "qq"; } } ================================================ FILE: src/main/java/com/lida/mongo/qq/model/QQUserInfo.java ================================================ package com.lida.mongo.qq.model; /** * Created by stevenfen on 2016/12/22. */ public class QQUserInfo { private String ret; private String msg; private Integer is_lost; private String nickname; private String gender; private String province; private String city; private Integer year; private String figureurl; private String figureurl_1; private String figureurl_2; private String figureurl_qq_1; private String figureurl_qq_2; private Integer is_yellow_vip; private Integer vip; private Integer yellow_vip_level; private Integer level; private Integer is_yellow_year_vip; public String getRet() { return ret; } public void setRet(String ret) { this.ret = ret; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Integer getIs_lost() { return is_lost; } public void setIs_lost(Integer is_lost) { this.is_lost = is_lost; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Integer getYear() { return year; } public void setYear(Integer year) { this.year = year; } public String getFigureurl() { return figureurl; } public void setFigureurl(String figureurl) { this.figureurl = figureurl; } public String getFigureurl_1() { return figureurl_1; } public void setFigureurl_1(String figureurl_1) { this.figureurl_1 = figureurl_1; } public String getFigureurl_2() { return figureurl_2; } public void setFigureurl_2(String figureurl_2) { this.figureurl_2 = figureurl_2; } public String getFigureurl_qq_1() { return figureurl_qq_1; } public void setFigureurl_qq_1(String figureurl_qq_1) { this.figureurl_qq_1 = figureurl_qq_1; } public String getFigureurl_qq_2() { return figureurl_qq_2; } public void setFigureurl_qq_2(String figureurl_qq_2) { this.figureurl_qq_2 = figureurl_qq_2; } public Integer getIs_yellow_vip() { return is_yellow_vip; } public void setIs_yellow_vip(Integer is_yellow_vip) { this.is_yellow_vip = is_yellow_vip; } public Integer getVip() { return vip; } public void setVip(Integer vip) { this.vip = vip; } public Integer getYellow_vip_level() { return yellow_vip_level; } public void setYellow_vip_level(Integer yellow_vip_level) { this.yellow_vip_level = yellow_vip_level; } public Integer getLevel() { return level; } public void setLevel(Integer level) { this.level = level; } public Integer getIs_yellow_year_vip() { return is_yellow_year_vip; } public void setIs_yellow_year_vip(Integer is_yellow_year_vip) { this.is_yellow_year_vip = is_yellow_year_vip; } } ================================================ FILE: src/main/java/com/lida/mongo/qq/package-info.java ================================================ /** * Created by stevenfen on 2016/12/19. */ package com.lida.mongo.qq; ================================================ FILE: src/main/java/com/lida/mongo/sensor/Enum/SerialNum.java ================================================ package com.lida.mongo.sensor.Enum; import java.math.BigInteger; /** * Created by stevenfen on 2016/12/17. */ public enum SerialNum { stationNine("stationNine",BigInteger.valueOf(318861587)), stationSeven("stationSeven",BigInteger.valueOf(318861616)), stationThree("stationThree",BigInteger.valueOf(318861652)), stationFive("stationFive",BigInteger.valueOf(318861653)) ; private String key; private BigInteger value; //自定义的构造函数,参数数量,名字随便自己取 //构造器默认也只能是private, 从而保证构造函数只能在内部使用 private SerialNum(String key, BigInteger value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public BigInteger getValue() { return value; } public void setValue(BigInteger value) { this.value = value; } //重新toString方法,默认的toString方法返回的就是枚举变量的名字,和name()方法返回值一样 @Override public String toString() { return this.key+":"+this.value; } } ================================================ FILE: src/main/java/com/lida/mongo/sensor/Enum/StationType.java ================================================ package com.lida.mongo.sensor.Enum; /** * Created by stevenfen on 2016/12/6. */ public enum StationType { //不需要从云端拉数据的操作 NoNeedUpdate("不需要更新",61L); private String key; private Long value; //自定义的构造函数,参数数量,名字随便自己取 //构造器默认也只能是private, 从而保证构造函数只能在内部使用 private StationType(String key, Long value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Long getValue() { return value; } public void setValue(Long value) { this.value = value; } //重新toString方法,默认的toString方法返回的就是枚举变量的名字,和name()方法返回值一样 @Override public String toString() { return this.key+":"+this.value; } } ================================================ FILE: src/main/java/com/lida/mongo/sensor/dao/SensorMongoDao.java ================================================ package com.lida.mongo.sensor.dao; import com.lida.mongo.sensor.entity.Sensor; import java.math.BigInteger; import java.util.Date; import java.util.List; /** * Created by lenovo on 2016/12/6. */ public interface SensorMongoDao { List findAll(); void insertSensor(Sensor sensor); void batchInsertSensor(List sensors); List findForRequery(BigInteger serialNum); List findByCreateDate(Date startDate,Date endDate,BigInteger serialNum); } ================================================ FILE: src/main/java/com/lida/mongo/sensor/dao/impl/SensorMongoImpl.java ================================================ package com.lida.mongo.sensor.dao.impl; import com.lida.mongo.sensor.dao.SensorMongoDao; import com.lida.mongo.sensor.entity.Sensor; import com.lida.mongo.util.StringUtil; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.math.BigInteger; import java.util.Date; import java.util.List; /** * Created by lenovo on 2016/12/6. */ @Repository("SensorMongoImpl") public class SensorMongoImpl implements SensorMongoDao { @Resource private MongoTemplate mongoTemplate; @Override public List findAll() { return mongoTemplate.findAll(Sensor.class, "sensor"); } @Override public void insertSensor(Sensor sensor) { mongoTemplate.insert(sensor,"sensor"); } @Override public void batchInsertSensor(List sensors) { mongoTemplate.insert(sensors,"sensor"); } @Override public List findForRequery(BigInteger serialNum) { return mongoTemplate.find(Query.query(Criteria.where("serialNum").is(serialNum)),Sensor.class); } @Override public List findByCreateDate(Date startDate,Date endDate,BigInteger serialNum) { return mongoTemplate.find(Query.query(Criteria.where("timeLine").gte(startDate.getTime()).lte(endDate.getTime()).and("serialNum").is(serialNum)),Sensor.class); } } ================================================ FILE: src/main/java/com/lida/mongo/sensor/entity/Sensor.java ================================================ package com.lida.mongo.sensor.entity; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.math.BigInteger; import java.util.Date; /** * Created by lenovo on 2016/12/6. */ @Document(collection = "sensor") public class Sensor { @Id private ObjectId id; /* *传感器是否活跃 */ private Integer Active; private String CreateBy; private Date createDate; private String UpdateBy; private Date updateDate; private Integer Deleted; private Long timeLine; private BigInteger MonitoringNodeId; private BigInteger serialNum; private Integer sensor_ch; private Double sensor1; private Double sensor2; private Double sensor3; private Double sensor4; private Double sensor5; private Double sensor6; private Double sensor7; private Double sensor8; private Double sensor9; private Double sensor10; private Double sensor11; private Double sensor12; private Double sensor13; private Double sensor14; private Double sensor15; private Double sensor16; private Double sensor17; private Double sensor18; private Double sensor19; private Double sensor20; private Double sensor21; private Double sensor22; private Double sensor23; private Double sensor24; private Double sensor25; private Double sensor26; private Double sensor27; private Double sensor28; private Double sensor29; private Double sensor30; public ObjectId getId() { return id; } public void setId(ObjectId id) { this.id = id; } public Integer getActive() { return Active; } public void setActive(Integer active) { Active = active; } public String getCreateBy() { return CreateBy; } public void setCreateBy(String createBy) { CreateBy = createBy; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getUpdateBy() { return UpdateBy; } public void setUpdateBy(String updateBy) { UpdateBy = updateBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Integer getDeleted() { return Deleted; } public void setDeleted(Integer deleted) { Deleted = deleted; } public Long getTimeLine() { return timeLine; } public void setTimeLine(Long timeLine) { this.timeLine = timeLine; } public BigInteger getMonitoringNodeId() { return MonitoringNodeId; } public void setMonitoringNodeId(BigInteger monitoringNodeId) { MonitoringNodeId = monitoringNodeId; } public BigInteger getSerialNum() { return serialNum; } public void setSerialNum(BigInteger serialNum) { this.serialNum = serialNum; } public Integer getSensor_ch() { return sensor_ch; } public void setSensor_ch(Integer sensor_ch) { this.sensor_ch = sensor_ch; } public Double getSensor1() { return sensor1; } public void setSensor1(Double sensor1) { this.sensor1 = sensor1; } public Double getSensor2() { return sensor2; } public void setSensor2(Double sensor2) { this.sensor2 = sensor2; } public Double getSensor3() { return sensor3; } public void setSensor3(Double sensor3) { this.sensor3 = sensor3; } public Double getSensor4() { return sensor4; } public void setSensor4(Double sensor4) { this.sensor4 = sensor4; } public Double getSensor5() { return sensor5; } public void setSensor5(Double sensor5) { this.sensor5 = sensor5; } public Double getSensor6() { return sensor6; } public void setSensor6(Double sensor6) { this.sensor6 = sensor6; } public Double getSensor7() { return sensor7; } public void setSensor7(Double sensor7) { this.sensor7 = sensor7; } public Double getSensor8() { return sensor8; } public void setSensor8(Double sensor8) { this.sensor8 = sensor8; } public Double getSensor9() { return sensor9; } public void setSensor9(Double sensor9) { this.sensor9 = sensor9; } public Double getSensor10() { return sensor10; } public void setSensor10(Double sensor10) { this.sensor10 = sensor10; } public Double getSensor11() { return sensor11; } public void setSensor11(Double sensor11) { this.sensor11 = sensor11; } public Double getSensor12() { return sensor12; } public void setSensor12(Double sensor12) { this.sensor12 = sensor12; } public Double getSensor13() { return sensor13; } public void setSensor13(Double sensor13) { this.sensor13 = sensor13; } public Double getSensor14() { return sensor14; } public void setSensor14(Double sensor14) { this.sensor14 = sensor14; } public Double getSensor15() { return sensor15; } public void setSensor15(Double sensor15) { this.sensor15 = sensor15; } public Double getSensor16() { return sensor16; } public void setSensor16(Double sensor16) { this.sensor16 = sensor16; } public Double getSensor17() { return sensor17; } public void setSensor17(Double sensor17) { this.sensor17 = sensor17; } public Double getSensor18() { return sensor18; } public void setSensor18(Double sensor18) { this.sensor18 = sensor18; } public Double getSensor19() { return sensor19; } public void setSensor19(Double sensor19) { this.sensor19 = sensor19; } public Double getSensor20() { return sensor20; } public void setSensor20(Double sensor20) { this.sensor20 = sensor20; } public Double getSensor21() { return sensor21; } public void setSensor21(Double sensor21) { this.sensor21 = sensor21; } public Double getSensor22() { return sensor22; } public void setSensor22(Double sensor22) { this.sensor22 = sensor22; } public Double getSensor23() { return sensor23; } public void setSensor23(Double sensor23) { this.sensor23 = sensor23; } public Double getSensor24() { return sensor24; } public void setSensor24(Double sensor24) { this.sensor24 = sensor24; } public Double getSensor25() { return sensor25; } public void setSensor25(Double sensor25) { this.sensor25 = sensor25; } public Double getSensor26() { return sensor26; } public void setSensor26(Double sensor26) { this.sensor26 = sensor26; } public Double getSensor27() { return sensor27; } public void setSensor27(Double sensor27) { this.sensor27 = sensor27; } public Double getSensor28() { return sensor28; } public void setSensor28(Double sensor28) { this.sensor28 = sensor28; } public Double getSensor29() { return sensor29; } public void setSensor29(Double sensor29) { this.sensor29 = sensor29; } public Double getSensor30() { return sensor30; } public void setSensor30(Double sensor30) { this.sensor30 = sensor30; } } ================================================ FILE: src/main/java/com/lida/mongo/sensor/service/UpdateData.java ================================================ package com.lida.mongo.sensor.service; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import org.json.JSONArray; import java.text.ParseException; import java.util.List; /** * Created by lenovo on 2016/12/6. */ public interface UpdateData { void updateDataByCloud(Long stationId); } ================================================ FILE: src/main/java/com/lida/mongo/sensor/service/calculateAverage.java ================================================ package com.lida.mongo.sensor.service; import java.math.BigInteger; import java.text.ParseException; /** * Created by stevenfen on 2016/12/17. */ public interface calculateAverage { public Double calculateAverageOfCo2(String dateStr, BigInteger serialNum) throws ParseException; } ================================================ FILE: src/main/java/com/lida/mongo/sensor/service/impl/CalculateAverageImpl.java ================================================ package com.lida.mongo.sensor.service.impl; import com.lida.mongo.sensor.Enum.SerialNum; import com.lida.mongo.sensor.dao.impl.SensorMongoImpl; import com.lida.mongo.sensor.entity.Sensor; import com.lida.mongo.sensor.service.calculateAverage; import com.lida.mongo.util.StringUtil; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.math.BigInteger; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by stevenfen on 2016/12/17. */ @Repository("CalculateAverageImpl") public class CalculateAverageImpl implements calculateAverage { @Resource private SensorMongoImpl sensorMongo; @Override public Double calculateAverageOfCo2(String dateStr, BigInteger serialNum) throws ParseException { Date startDate = StringUtil.string2Date(dateStr); Date endDate = StringUtil.plusOneHour(startDate); List sensors = sensorMongo.findByCreateDate(startDate,endDate,serialNum); Double sumOfCo2 = 0.0; if(serialNum.equals(SerialNum.stationNine.getValue())){ for(Sensor sensor : sensors){ sumOfCo2+=sensor.getSensor6(); } return sumOfCo2<=0?0:sumOfCo2/sensors.size(); } else if(serialNum.equals(SerialNum.stationSeven.getValue())){ for(Sensor sensor : sensors){ sumOfCo2+=sensor.getSensor13(); } return sumOfCo2<=0?0:sumOfCo2/sensors.size(); } else if(serialNum.equals(SerialNum.stationThree.getValue())){ for(Sensor sensor : sensors){ sumOfCo2+=sensor.getSensor24(); } return sumOfCo2<=0?0:sumOfCo2/sensors.size(); } return 0.0; } } ================================================ FILE: src/main/java/com/lida/mongo/sensor/service/impl/SensorService.java ================================================ package com.lida.mongo.sensor.service.impl; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import org.json.JSONArray; import java.text.ParseException; import java.util.List; /** * Created by lenovo on 2016/12/6. */ public interface SensorService { void insertApi(JSONArray dataJson, Station station, List nodeList) throws ParseException; } ================================================ FILE: src/main/java/com/lida/mongo/sensor/service/impl/SensorServiceImpl.java ================================================ package com.lida.mongo.sensor.service.impl; import com.lida.mongo.sensor.dao.impl.SensorMongoImpl; import com.lida.mongo.sensor.entity.Sensor; import com.lida.mongo.util.StringUtil; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.math.BigInteger; import java.text.ParseException; import java.util.ArrayList; import java.util.List; /** * Created by lenovo on 2016/12/6. */ @Repository("SensorServiceImpl") public class SensorServiceImpl implements SensorService{ private static Logger log = LoggerFactory.getLogger(SensorServiceImpl.class); @Resource private SensorMongoImpl sensorMongo; /** * * @param dataJson * @param station * @param nodeList * 批量插入云数据 */ @Override public void insertApi(JSONArray dataJson, Station station, List nodeList) throws ParseException { List sensors = new ArrayList(); for(int i=0;i nodeList = moniService.dataGrid(node, null); sensorService.insertApi(array,station,nodeList); Service.insertApi(array, station,nodeList); //修改下次更新数据 light.mvc.pageModel.sensor.Sensor sLast = Service.getLastSensor(station.getSerialNum()); Date lastDate = new Date(sLast.getCreateDate().getTime()+timeInterval); stationS.updateSensorLastTime(lastDate,stationId); } log.info("更新数据成功==================================================="); } catch (Exception e) { log.error(e.getMessage()); } } public String[] getCookieByLogin(String loginName, String password) { String[] cookieStr= null; String loginURL= GlobalConstant.caipoLoginURL+"?"+GlobalConstant.caipoLoginName+loginName+"&"+GlobalConstant.caipoPasswork+password; BasicCookieStore cookieStore = new BasicCookieStore(); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); try { HttpGet httpget = new HttpGet(loginURL); CloseableHttpResponse response1 = httpclient.execute(httpget); try { HttpEntity entity = response1.getEntity(); EntityUtils.consume(entity); List cookies = cookieStore.getCookies(); cookieStr=new String[cookies.size()]; if (cookies.isEmpty()) { System.out.println("cookie is None"); } else { for (int i = 0; i < cookies.size(); i++) { cookieStr[i]=new String(cookies.get(i).toString() ); System.out.println("\n( getCookieByLogin(String loginURL) )in cookie i="+i+" "+ cookieStr[i]); } } }catch(Exception e){ System.out.println(e); }finally { try { response1.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }catch(Exception e){ System.out.println(e); } finally { try { httpclient.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return cookieStr; } public static String[] cookStringToItemString(String cookieStr){ String temp[]=cookieStr.split("]"); String dest[]=new String[ temp.length ]; for(int i=0; i>> 4) & 0X0F]; ob[1] = digit[b[i] & 0X0F]; resultStr += new String(ob); } return resultStr; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } /* * �������ƣ�register * �� �ܣ�ע�� * �� ������Ӧ���� ʡ�ݣ����У���ҵ����ҵ���ƣ���ϵ�ˣ��绰���ֻ����������䣬���棬��ַ���ʱ� * �� �� ֵ��ע������String�� */ public String register(String province, String city, String trade, String entname, String linkman, String phone, String mobile, String email, String fax, String address, String postcode, String sign) { String result = ""; String soapAction = "http://tempuri.org/Register"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + password + ""; xml += "" + province + ""; xml += "" + city + ""; xml += "" + trade + ""; xml += "" + entname + ""; xml += "" + linkman + ""; xml += "" + phone + ""; xml += "" + mobile + ""; xml += "" + email + ""; xml += "" + fax + ""; xml += "
" + address + "
"; xml += "" + postcode + ""; xml += "" + sign + ""; xml += "
"; xml += "
"; xml += "
"; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); // bout.write(xml.getBytes()); bout.write(xml.getBytes("GBK")); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } in.close(); return new String(result.getBytes(), "utf-8"); } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�chargeFee * �� �ܣ���ֵ * �� ������ֵ���ţ���ֵ���� * �� �� ֵ�����������String�� */ public String chargeFee(String cardno, String cardpwd) { String result = ""; String soapAction = "http://tempuri.org/ChargUp"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + password + ""; xml += "" + cardno + ""; xml += "" + cardpwd + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } in.close(); // return result; return new String(result.getBytes(), "utf-8"); } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�getBalance * �� �ܣ���ȡ��� * �� ������ * �� �� ֵ����String�� */ public String getBalance() { String result = ""; String soapAction = "http://tempuri.org/balance"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + pwd + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } in.close(); return new String(result.getBytes()); } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�mt * �� �ܣ����Ͷ��� ,������ֻ��ž���Ⱥ����һ���ֻ��ž��ǵ����ύ * �� ����mobile,content,ext,stime,rrid(�ֻ��ţ����ݣ���չ�룬��ʱʱ�䣬Ψһ��ʶ) * �� �� ֵ��Ψһ��ʶ���������дrrid������ϵͳ���ɵ� */ public String mt(String mobile, String content, String ext, String stime, String rrid) { String result = ""; String soapAction = "http://tempuri.org/mt"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + pwd + ""; xml += "" + mobile + ""; xml += "" + content + ""; xml += "" + ext + ""; xml += "" + stime + ""; xml += "" + rrid + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); // bout.write(xml.getBytes()); // �������ϵͳ��utf-8,������ij� bout.write(xml.getBytes("GBK")); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern.compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } return result; } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�mo * �� �ܣ����ն��� * �� ������ * �� �� ֵ�����յ�����Ϣ */ public String mo() { String result = ""; String soapAction = "http://tempuri.org/mo"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + pwd + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStream isr = httpconn.getInputStream(); StringBuffer buff = new StringBuffer(); byte[] byte_receive = new byte[10240]; for (int i = 0; (i = isr.read(byte_receive)) != -1; ) { buff.append(new String(byte_receive, 0, i)); } isr.close(); String result_before = buff.toString(); int start = result_before.indexOf(""); int end = result_before.indexOf(""); result = result_before.substring(start + 10, end); return result; } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�gxmt �� �ܣ����͸��Զ��� ��������ͬ���ֻ��ŷ��Ͳ�ͬ�����ݣ��ֻ��ź�������Ӣ�ĵĶ��Ŷ�Ӧ�� * ������mobile,content,ext,stime,rrid(�ֻ��ţ����ݣ���չ�룬��ʱʱ�䣬Ψһ��ʶ) �� �� * ֵ��Ψһ��ʶ���������дrrid������ϵͳ���ɵ� */ public String gxmt(String mobile, String content, String ext, String stime, String rrid) { String result = ""; String soapAction = "http://tempuri.org/gxmt"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + pwd + ""; xml += "" + mobile + ""; xml += "" + content + ""; xml += "" + ext + ""; xml += "" + stime + ""; xml += "" + rrid + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } return result; } catch (Exception e) { e.printStackTrace(); return ""; } } public String UnRegister() { String result = ""; String soapAction = "http://tempuri.org/UnRegister"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + password + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("String"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } in.close(); return new String(result.getBytes()); } catch (Exception e) { e.printStackTrace(); return ""; } } /* * �������ƣ�UDPPwd * �� �ܣ��޸����� * �� ���������� * �� �� ֵ�����������String�� */ public String UDPPwd(String newPwd) { String result = ""; String soapAction = "http://tempuri.org/UDPPwd"; String xml = ""; xml += ""; xml += ""; xml += ""; xml += "" + sn + ""; xml += "" + password + ""; xml += "" + newPwd + ""; xml += ""; xml += ""; xml += ""; URL url; try { url = new URL(serviceURL); URLConnection connection = url.openConnection(); HttpURLConnection httpconn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(xml.getBytes()); byte[] b = bout.toByteArray(); httpconn.setRequestProperty("Content-Length", String .valueOf(b.length)); httpconn.setRequestProperty("Content-Type", "text/xml; charset=gb2312"); httpconn.setRequestProperty("SOAPAction", soapAction); httpconn.setRequestMethod("POST"); httpconn.setDoInput(true); httpconn.setDoOutput(true); OutputStream out = httpconn.getOutputStream(); out.write(b); out.close(); InputStreamReader isr = new InputStreamReader(httpconn .getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while (null != (inputLine = in.readLine())) { Pattern pattern = Pattern .compile("(.*)"); Matcher matcher = pattern.matcher(inputLine); while (matcher.find()) { result = matcher.group(1); } } in.close(); // return result; return new String(result.getBytes(), "utf-8"); } catch (Exception e) { e.printStackTrace(); return ""; } } } ================================================ FILE: src/main/java/com/lida/mongo/util/CommonUtil.java ================================================ package com.lida.mongo.util; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import java.io.*; import java.net.ConnectException; import java.net.URL; /** * ͨ�ù����� */ public class CommonUtil { private static Logger log = LoggerFactory.getLogger(CommonUtil.class); // ƾ֤��ȡ��GET�� public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; /** * ����https���� * * @param requestUrl �����ַ * @param requestMethod ����ʽ��GET��POST�� * @param outputStr �ύ������ * @return JSONObject(ͨ��JSONObject.get(key)�ķ�ʽ��ȡjson���������ֵ) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; try { // ����SSLContext���󣬲�ʹ������ָ�������ι�������ʼ�� TrustManager[] tm = {new MyX509TrustManager()}; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // ������SSLContext�����еõ�SSLSocketFactory���� SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // ��������ʽ��GET/POST�� conn.setRequestMethod(requestMethod); // ��outputStr��Ϊnullʱ�������д���� if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // ע������ʽ outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // ����������ȡ�������� InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader( inputStreamReader); String str = null; StringBuffer buffer = new StringBuffer(); while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // �ͷ���Դ bufferedReader.close(); inputStreamReader.close(); inputStream.close(); inputStream = null; conn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { log.error("���ӳ�ʱ��{}", ce); } catch (Exception e) { log.error("https�����쳣��{}", e); } return jsonObject; } /** * URL���루utf-8�� * * @param source * @return */ public static String urlEncodeUTF8(String source) { String result = source; try { result = java.net.URLEncoder.encode(source, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } // String oauthUrl="http://yw.ysh365.com/coreServlet"; /** * �������������ж��ļ���չ�� * * @param contentType �������� * @return */ public static String getFileExt(String contentType) { String fileExt = ""; if ("image/jpeg".equals(contentType)) fileExt = ".jpg"; else if ("audio/mpeg".equals(contentType)) fileExt = ".mp3"; else if ("audio/amr".equals(contentType)) fileExt = ".amr"; else if ("video/mp4".equals(contentType)) fileExt = ".mp4"; else if ("video/mpeg4".equals(contentType)) fileExt = ".mp4"; return fileExt; } public static void main(String[] args) { String oauthUrl = "http://yw.ysh365.com/oauthServlet"; System.out.println(urlEncodeUTF8(oauthUrl)); } } ================================================ FILE: src/main/java/com/lida/mongo/util/Count.java ================================================ package com.lida.mongo.util; import java.math.BigDecimal; public class Count { //������λС�� public double getnum(String num) { String str; String a = num; if (a.indexOf(".") == -1) str = a + ".00"; else { String b = a.substring(a.indexOf(".")); if (b.length() > 2) str = a.substring(0, a.indexOf(".") + 3); else if (b.length() > 1) str = a + "0"; else str = a + ".00"; } return Double.valueOf(str); } /** * double ��� * * @param d1 * @param d2 * @return */ public double add(double a, double b) { BigDecimal bd1 = new BigDecimal(Double.toString(a)); BigDecimal bd2 = new BigDecimal(Double.toString(b)); return getnum(bd1.add(bd2).toString()); } /** * double ��� * * @param d1 * @param d2 * @return */ public double sub(double d1, double d2) { BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return getnum(bd1.subtract(bd2).toString()); } /** * double ��� * * @param d1 * @param d2 * @return */ public double mul(double a, double b) { BigDecimal bd1 = new BigDecimal(Double.toString(a)); BigDecimal bd2 = new BigDecimal(Double.toString(b)); return getnum(bd1.multiply(bd2).toString()); } /** * double ��� * * @param d1 * @param d2 * @return */ public double divide(double a, double b) { BigDecimal bd1 = new BigDecimal(Double.toString(a)); BigDecimal bd2 = new BigDecimal(Double.toString(b)); return getnum(bd1.divide(bd2).toString()); } } ================================================ FILE: src/main/java/com/lida/mongo/util/HttpClientUtils.java ================================================ package com.lida.mongo.util; 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.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.log4j.Logger; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import java.util.Map; /** * @璇存槑锛欻TTP璇锋眰 */ public class HttpClientUtils { private static final Logger logger = Logger .getLogger(HttpClientUtils.class); /** * 鎵цHTTP GET璇锋眰锛屽弬鏁板皝瑁呭湪URL * * @param url * @return */ public static String httpGet(String url) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); method.getParams().setContentCharset("UTF-8"); String result = null; try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { result = method.getResponseBodyAsString(); } else { logger.info("Method failed: " + method.getStatusLine()); } } catch (HttpException e) { // 鍙戠敓鑷村懡鐨勫紓甯革紝鍙兘鏄崗璁笉瀵规垨鑰呰繑鍥炵殑鍐呭鏈夐棶棰�? logger.info("Please check your provided http address!"); e.printStackTrace(); } catch (IOException e) { // 鍙戠敓缃戠粶寮傚父 logger.info("鍙戠敓缃戠粶寮傚父"); e.printStackTrace(); } finally { // 閲婃斁杩炴帴 if (method != null) method.releaseConnection(); method = null; client = null; } return result; } /** * 鎵цpost璇锋眰 鍙傛暟JSON鏍煎紡 */ public static String postJSON(String strUrl, String param) { // String params=JSONObject.fromObject(param).toString(); try { URL url = new URL(strUrl);// 鍒涘缓杩炴帴 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestMethod("POST"); // 璁剧疆璇锋眰鏂瑰紡 connection.setRequestProperty("Accept", "application/json"); // 璁剧疆鎺ユ敹鏁版嵁鐨勬牸寮�? connection.setRequestProperty("Content-Type", "application/json"); // 璁剧疆鍙戦�佹暟鎹殑鏍煎紡? connection.connect(); OutputStreamWriter out = new OutputStreamWriter( connection.getOutputStream(), "UTF-8"); // utf-8缂栫爜 out.append(param); out.flush(); out.close(); // 璇诲彇鍝嶅簲 int length = (int) connection.getContentLength();// 鑾峰彇闀垮害 InputStream is = connection.getInputStream(); if (length != -1) { byte[] data = new byte[length]; byte[] temp = new byte[512]; int readLen = 0; int destPos = 0; while ((readLen = is.read(temp)) > 0) { System.arraycopy(temp, 0, data, destPos, readLen); destPos += readLen; } String result = new String(data, "UTF-8"); // utf-8缂栫爜 return result; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 鎵цHTTP POST璇锋眰锛屽弬鏁扮敤map瀵硅薄? * * @param url * @param paramMap * @return */ @SuppressWarnings("rawtypes") protected static String httpPost(String url, Map paramMap) { String content = null; if (url == null || url.trim().length() == 0) return null; HttpClient httpClient = new HttpClient(); httpClient.getParams().setContentCharset("UTF-8"); // 璁剧疆header httpClient .getParams() .setParameter( HttpMethodParams.USER_AGENT, "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2"); // 浠g悊璁剧疆 // httpClient.getHostConfiguration().setProxy("128.128.176.74", 808); PostMethod method = new PostMethod(url); if (paramMap != null) { Iterator it = paramMap.keySet().iterator(); while (it.hasNext()) { String key = it.next() + ""; Object o = paramMap.get(key); if (o != null && o instanceof String) { method.addParameter(new NameValuePair(key, o.toString())); } if (o != null && o instanceof String[]) { String[] s = (String[]) o; if (s != null) for (int i = 0; i < s.length; i++) { method.addParameter(new NameValuePair(key, s[i])); } } } } try { logger.info("method.getPath=" + method.getQueryString()); logger.info("getURI=" + method.getURI()); httpClient.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { content = method.getResponseBodyAsString(); } else { logger.info("Method failed: " + method.getStatusLine()); } } catch (HttpException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { if (method != null) method.releaseConnection(); method = null; httpClient = null; } return content; } /** * HTTP GET璇锋眰鍙傛暟灏佽,灏嗗弬鏁版坊鍔犲埌URL * * @param url * @param paramMap * @return */ @SuppressWarnings("rawtypes") public static String urlParamPac(String url, Map paramMap) { StringBuilder stringBuilder = new StringBuilder(url + "?"); Iterator it = paramMap.keySet().iterator(); while (it.hasNext()) { String key = it.next() + ""; Object value = paramMap.get(key); stringBuilder.append(key + "=" + value + "&"); } return stringBuilder.substring(0, stringBuilder.length() - 1); } @SuppressWarnings("rawtypes") protected static String urlParamSet(String url, Map paramMap) { StringBuilder stringBuilder = new StringBuilder(url); Iterator it = paramMap.keySet().iterator(); while (it.hasNext()) { String key = it.next() + ""; Object value = paramMap.get(key); stringBuilder.append(key + "=" + value + "&"); } return stringBuilder.substring(0, stringBuilder.length() - 1); } public static void main(String[] args) { /*// String URL = "http://116.204.64.165:7880/IWMS/PayNotify/ccbpayCallBack"; // Map map = new HashMap(); // map.put("success", true); // map.put("code", "123"); // System.out.println(HttpClientUtils.httpPost(URL, map)); String Url="http://119.79.224.116:20014/JLESServer/POST_SCM_DJ?Type=Post_EsOrder&USERNAME=JLSOFT&PASSWORD=88888&SIGNXML={\"Parms\":\"JSONXML\",\"Sign\":\"4d4d7828d59fd5f797ea7bccae99c9ec\"}&JSONXML={\"OrderId\":\"201312050001\",\"created\":\"2013-11-11\",\"modified\":\"2013-11-11\",\"Pay_time\":\"2013-11-11\",\"end_time\":\"2013-11-11\",\"Status\":\"绛夊緟鍗栧鍙戣揣\",\"shipping_type\":\"express\",\"title\":\"骞跨櫨瀹樻柟鍟嗗煄\",\"seller_nick\":\"骞跨櫨瀹樻柟鍟嗗煄\",\"buyer_nick\":\"lizhiqiang\",\"total_fee\":\"2000\",\"payment\":\"1800\",\"adjust_fee\":\"0\",\"discount_fee\":\"200\",\"point_fee\":\"0\",\"buyer_obtain_point_fee\":\"0\",\"post_fee\":\"100\",\"seller_memo \":\"宸插\",\"buyer_message\":\"璇峰敖蹇畨鎺掔墿娴佸彂璐э紝璋㈣阿\",\"receiver_name\":\"鏉庡織寮篭",\"receiver_state\":\"婀栧寳鐪乗",\"receiver_city\":\"姝︽眽甯俓",\"receiver_district\":\"纭氬彛鍖篭",\"receiver_address\":\"姹夋锟�?90鍙穃",\"receiver_zip\":\"430033\",\"receiver_mobile\":\"13419644646\",\"receiver_phone\":\" \",\"invoice\":\"1\",\"invoice_name\":\"姝︽眽閲戝姏杞欢鏈夐檺鍏徃\",\"SysTemCon\":\"1\",\"SPLIST\":[{\"OrderItemId\":\"20131205000101\",\"sku_id\":\"123456789\",\"ProductID\":\"000001\",\" sp_title \":\"鏍煎姏2鍖圭┖璋僜",\"Price \":\"2000\",\"num\":\"1\",\"total_fee\":\"0\",\" adjust_fee_ITEM\":\"2000\",\"discount_fee_item\":\"200\",\"payment_item\":\"1800,\"WhNo \":\"01019901\" }]}"; System.out.println(HttpClientUtils.httpGet(Url));*/ } } ================================================ FILE: src/main/java/com/lida/mongo/util/HttpRequestUtil.java ================================================ package com.lida.mongo.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; public class HttpRequestUtil { /** * ���� * * @param source * @return */ public static String urlEncode(String source, String encode) { String result = source; try { result = java.net.URLEncoder.encode(source, encode); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return "0"; } return result; } /** * ����http�����ȡ���ؽ�� * * @param requestUrl �����ַ * @return */ public static String httpRequest(String requestUrl) { StringBuffer buffer = new StringBuffer(); try { URL url = new URL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoOutput(false); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); httpUrlConn.setRequestMethod("GET"); httpUrlConn.connect(); // �����ص�������ת�����ַ��� InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // �ͷ���Դ inputStream.close(); inputStream = null; httpUrlConn.disconnect(); } catch (Exception e) { System.out.println(e.getStackTrace()); } return buffer.toString(); } /** * ����http����ȡ�÷��ص������� * * @param requestUrl �����ַ * @return InputStream */ public static InputStream httpRequestIO(String requestUrl) { InputStream inputStream = null; try { URL url = new URL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoInput(true); httpUrlConn.setRequestMethod("GET"); httpUrlConn.connect(); // ��÷��ص������� inputStream = httpUrlConn.getInputStream(); } catch (Exception e) { e.printStackTrace(); } return inputStream; } } ================================================ FILE: src/main/java/com/lida/mongo/util/JsonUtil.java ================================================ package com.lida.mongo.util; import net.sf.json.JSONObject; /** * Created by stevenfen on 2016/12/22. * json工具类 */ public class JsonUtil { public static T fromJson(String resultString,Class beanClass){ JSONObject jsonObject = JSONObject.fromObject(resultString); return (T) JSONObject.toBean(jsonObject, beanClass); } } ================================================ FILE: src/main/java/com/lida/mongo/util/MD5ForDiscuz.java ================================================ package com.lida.mongo.util; import java.security.MessageDigest; /** * md5���� * * @author Administrator */ public class MD5ForDiscuz { public final static String MD5(String s) { char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; try { byte[] btInput = s.getBytes(); // ���MD5ժҪ�㷨�� MessageDigest ���� MessageDigest mdInst = MessageDigest.getInstance("MD5"); // ʹ��ָ�����ֽڸ���ժҪ mdInst.update(btInput); // ������� byte[] md = mdInst.digest(); // ������ת����ʮ�����Ƶ��ַ�����ʽ int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { String aa = "3d7b0@2a"; String bb = "SDK-NSF-010-00039"; MD5ForDiscuz md5 = new MD5ForDiscuz(); String md5aa = md5.MD5(bb + aa); StringBuffer sb = new StringBuffer(); sb.append(md5aa); sb.append(bb); String pwd = sb.toString(); String md5aa1 = md5.MD5(pwd); System.out.println(md5aa); System.out.println(md5aa1); System.out.println(md5aa.toLowerCase()); } } ================================================ FILE: src/main/java/com/lida/mongo/util/MenuManager.java ================================================ package com.lida.mongo.util; import com.lida.mongo.weixin.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * �˵��������� */ public class MenuManager { private static Logger log = LoggerFactory.getLogger(MenuManager.class); public static void main(String[] args) { // �������û�Ψһƾ֤ String appId = "wx796e5452641c1b3e"; // �������û�Ψһƾ֤��Կ String appSecret = "af9ebd266419f224d51e95bde72d727d"; // ���ýӿڻ�ȡaccess_token AccessToken at = WeixinUtil.getAccessToken(appId, appSecret); System.out.println("token:" + at.getToken()); if (null != at) { // ���ýӿڴ����˵� int result = WeixinUtil.createMenu(getMenu(), at.getToken()); // �жϲ˵�������� if (0 == result) log.info("�˵������ɹ���"); else log.info("�˵�����ʧ�ܣ������룺" + result); } } /** * ��װ�˵����� * * @return */ private static Menu getMenu() { CommonButton btn11 = new CommonButton(); btn11.setName("11"); btn11.setType("click"); btn11.setKey("11"); CommonButton btn12 = new CommonButton(); btn12.setName("12"); btn12.setType("click"); btn12.setKey("12"); CommonButton btn13 = new CommonButton(); btn13.setName("13"); btn13.setType("click"); btn13.setKey("13"); CommonButton btn14 = new CommonButton(); btn14.setName("14"); btn14.setType("click"); btn14.setKey("14"); // Scancode_waitmsgButton btn14 = new Scancode_waitmsgButton(); // btn14.setName("ɨһɨ"); // btn14.setType("scancode_push"); // btn14.setKey("14"); // btn14.setSub_button("scancode_push"); // // pic_sysphotoButton btn15 = new pic_sysphotoButton(); // btn15.setName("���ջ�����ᷢͼ"); // btn15.setType("pic_photo_or_album"); // btn15.setKey("15"); CommonButton btn21 = new CommonButton(); btn21.setName("21"); btn21.setType("click"); btn21.setKey("21"); CommonButton btn22 = new CommonButton(); btn22.setName("22"); btn22.setType("click"); btn22.setKey("22"); CommonButton btn23 = new CommonButton(); btn23.setName("23"); btn23.setType("click"); btn23.setKey("23"); CommonButton btn24 = new CommonButton(); btn24.setName("24"); btn24.setType("click"); btn24.setKey("24"); CommonButton btn25 = new CommonButton(); btn25.setName("25"); btn25.setType("click"); btn25.setKey("25"); ViewButton btn31 = new ViewButton(); btn31.setName("31"); btn31.setType("view"); btn31.setUrl("http://160d6436o1.51mypc.cn/mongo/goMongo/list"); ViewButton btn32 = new ViewButton(); btn32.setName("32"); btn32.setType("view"); btn32.setUrl("http://www.m.ysh365.com/article/33.html"); ViewButton btn33 = new ViewButton(); btn33.setName("С��"); btn33.setType("view"); btn33.setUrl("http://www.duopao.com/games/info?game_code=g20140212153040377809"); ViewButton btn34 = new ViewButton(); btn34.setName("����"); btn34.setType("view"); btn34.setUrl("http://www.duopao.com/games/info?game_code=g20140120233048400063"); ViewButton btn35 = new ViewButton(); btn35.setName("��Ȩ"); btn35.setType("view"); btn35.setUrl("https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx55cbb77820db8240&redirect_uri=http%3A%2F%2Fyw.ysh365.com%2FoauthServlet&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"); ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("����"); mainBtn1.setSub_button(new Button[]{btn11, btn12, btn13, btn14}); ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("ɨһɨ"); mainBtn2.setSub_button(new Button[]{btn21, btn22, btn23, btn24, btn25}); ComplexButton mainBtn3 = new ComplexButton(); mainBtn3.setName("����"); mainBtn3.setSub_button(new Button[]{btn31, btn32, btn33, btn34, btn35}); /** * ÿ��һ���˵����ж����˵���
* * ��ij��һ���˵���û�ж����˵��������menu����ζ����أ�
* ���磬������һ���˵���ǡ��������顱����ֱ���ǡ���ĬЦ��������ômenuӦ���������壺
* menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 }); */ Menu menu = new Menu(); menu.setButton(new Button[]{mainBtn1, mainBtn2, mainBtn3}); return menu; } } ================================================ FILE: src/main/java/com/lida/mongo/util/MessageUtil.java ================================================ package com.lida.mongo.util; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.core.util.QuickWriter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppDriver; import com.lida.mongo.weixin.message.resp.Article; import com.lida.mongo.weixin.message.resp.MusicMessage; import com.lida.mongo.weixin.message.resp.NewsMessage; import com.lida.mongo.weixin.message.resp.TextMessage; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import javax.servlet.http.HttpServletRequest; import java.io.InputStream; import java.io.Writer; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Ϣ */ public class MessageUtil { /** * Ϣͣı */ public static final String RESP_MESSAGE_TYPE_TEXT = "text"; /** * Ϣͣ */ public static final String RESP_MESSAGE_TYPE_MUSIC = "music"; /** * Ϣͣͼ */ public static final String RESP_MESSAGE_TYPE_NEWS = "news"; /** * Ϣͣı */ public static final String REQ_MESSAGE_TYPE_TEXT = "text"; /** * ϢͣͼƬ */ public static final String REQ_MESSAGE_TYPE_IMAGE = "image"; /** * Ϣͣ */ public static final String REQ_MESSAGE_TYPE_LINK = "link"; /** * Ϣͣλ */ public static final String REQ_MESSAGE_TYPE_LOCATION = "location"; /** * ϢͣƵ */ public static final String REQ_MESSAGE_TYPE_VOICE = "voice"; /** * Ϣͣ */ public static final String REQ_MESSAGE_TYPE_EVENT = "event"; /** * ¼ͣsubscribe() */ public static final String EVENT_TYPE_SUBSCRIBE = "subscribe"; /** * ¼ͣunsubscribe(ȡ) */ public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; /** * ¼ͣCLICK(Զ˵¼) */ public static final String EVENT_TYPE_CLICK = "CLICK"; /** * ΢ŷXML * * @param request * @return * @throws Exception */ @SuppressWarnings("unchecked") public static Map parseXml(HttpServletRequest request) throws Exception { // 洢HashMap Map map = new HashMap(); // requestȡ InputStream inputStream = request.getInputStream(); // ȡ SAXReader reader = new SAXReader(); Document document = reader.read(inputStream); // õxmlԪ Element root = document.getRootElement(); // õԪصӽڵ List elementList = root.elements(); // ӽڵ for (Element e : elementList) map.put(e.getName(), e.getText()); // ͷԴ inputStream.close(); inputStream = null; return map; } /** * ıϢתxml * * @param textMessage ıϢ * @return xml */ public static String textMessageToXml(com.lida.mongo.weixin.message.resp.TextMessage textMessage) { xstream.alias("xml", textMessage.getClass()); return xstream.toXML(textMessage); } /** * Ϣתxml * * @param musicMessage Ϣ * @return xml */ public static String messageToXml(MusicMessage musicMessage) { xstream.alias("xml", musicMessage.getClass()); return xstream.toXML(musicMessage); } /** * ͼϢתxml * * @param newsMessage ͼϢ * @return xml */ public static String newsMessageToXml(NewsMessage newsMessage) { xstream.alias("xml", newsMessage.getClass()); xstream.alias("item", new Article().getClass()); return xstream.toXML(newsMessage); } /** * չxstreamʹ֧CDATA * * @date 2013-05-19 */ private static XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { // xmlڵתCDATA boolean cdata = true; @SuppressWarnings("unchecked") public void startNode(String name, Class clazz) { super.startNode(name, clazz); } protected void writeText(QuickWriter writer, String text) { if (cdata) { writer.write(""); } else { writer.write(text); } } }; } }); /** * ˵ * * @return */ public static String getMainMenu() { StringBuffer buffer = new StringBuffer(); buffer.append("ãСС갻Ϊظѡ").append("\n\n"); buffer.append("1 ʷϵĽ").append("\n"); buffer.append("2 Ϸ").append("\n"); buffer.append("3 ܱ()").append("\n"); buffer.append("4 ѯ()").append("\n"); buffer.append("6 Ų̊()").append("\n"); buffer.append("7 ѯ()").append("\n"); buffer.append("8 ()").append("\n\n"); buffer.append("ظ?ʾ˰˵"); return buffer.toString(); } public static String youxi() { StringBuffer buffer = new StringBuffer(); buffer.append("ֱӵ").append("\n\n"); buffer.append("1 ׵").append("\n"); buffer.append("2 Flappy BirdС").append("\n"); buffer.append("3 2048Ϸ").append("\n"); return buffer.toString(); } /** * ıϢתxml * * @param textMessage ıϢ * @return xml */ public static String messageToXml(TextMessage textMessage) { xstream.alias("xml", textMessage.getClass()); return xstream.toXML(textMessage); } /** * ͼϢתxml * * @param newsMessage ͼϢ * @return xml */ public static String messageToXml(NewsMessage newsMessage) { xstream.alias("xml", newsMessage.getClass()); xstream.alias("item", new Article().getClass()); return xstream.toXML(newsMessage); } } ================================================ FILE: src/main/java/com/lida/mongo/util/MongodbUtil.java ================================================ package com.lida.mongo.util; import com.lida.mongo.person.entity.Person; import com.lida.mongo.sensor.entity.Sensor; import com.mongodb.*; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by lenovo on 2016/12/7. */ public class MongodbUtil { public static void main(String[] args) throws UnknownHostException { Mongo mongo = new Mongo(new ServerAddress("172.16.31.206", 27017)); //MongoClientURI mongoURI = new MongoClientURI("mongodb://172.16.31.206:27017/mongoLida"); List lists = mongo.getDatabaseNames(); DB db = mongo.getDB("mongoLida"); DBCollection collection = db.getCollection("sensor"); System.out.println(collection.count()); } private static MongoClientOptions getConfOptions() { return new MongoClientOptions.Builder().socketKeepAlive(true) // 是否保持长链接 .connectTimeout(5000) // 链接超时时间 .socketTimeout(5000) // read数据超时时间 .readPreference(ReadPreference.primary()) // 最近优先策略 .autoConnectRetry(false) // 是否重试机制 .connectionsPerHost(30) // 每个地址最大请求数 .maxWaitTime(1000 * 60 * 2) // 长链接的最大等待时间 .threadsAllowedToBlockForConnectionMultiplier(50) // 一个socket最大的等待请求数 .writeConcern(WriteConcern.NORMAL).build(); } } ================================================ FILE: src/main/java/com/lida/mongo/util/MyX509TrustManager.java ================================================ package com.lida.mongo.util; import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; /** * ֤�����ι�����������https���� */ public class MyX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } } ================================================ FILE: src/main/java/com/lida/mongo/util/QQUtils.java ================================================ package com.lida.mongo.util; import com.lida.mongo.qq.model.QQUserInfo; import jdk.nashorn.internal.runtime.GlobalConstants; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by stevenfen on 2016/12/22. */ public class QQUtils { public static String appId = "101375254"; public static String appSecret = "xxx"; public static String baseUrl = "https://graph.qq.com"; protected static final String URL_GET_USERINFO = baseUrl + "/user/get_user_info?access_token=%s&oauth_consumer_key=%s&openid=%s"; protected static final long ACCESS_TIMEOUT = 15; protected static final String DEF_APP_TOKEN_EXPIRE = "3h"; private static Logger log = LoggerFactory.getLogger(QQUtils.class); /** * 获取用户信息 * *
     * http://wiki.connect.qq.com/get_user_info
     *
     *
     * 调用地址:
     * https://graph.qq.com/user/get_user_info
     * 参数
     *   access_token=*************&
     *   oauth_consumer_key=12345&
     *   openid
     *
     * 返回结果如下:
     * {
     *     "ret": 0,
     *     "msg": "",
     *     "is_lost": 0,
     *     "nickname": "小吞",
     *     "gender": "女",
     *     "province": "广东",
     *     "city": "广州",
     *     "year": "1993",
     *     "figureurl": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/30",
     *     "figureurl_1": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/50",
     *     "figureurl_2": "http://qzapp.qlogo.cn/qzapp/101207268/982C9FEADAF7B242C5069B8F390784BF/100",
     *     "figureurl_qq_1": "http://q.qlogo.cn/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/40",
     *     "figureurl_qq_2": "http://q.qlogo.cn/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/100",
     *     "is_yellow_vip": "0",
     *     "vip": "0",
     *     "yellow_vip_level": "0",
     *     "level": "0",
     *     "is_yellow_year_vip": "0"
     * }
     * 
* * @param accessToken * @return */ public static QQUserInfo getUserInfo(String accessToken, String openid) { if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(openid)) { return null; } String url = String.format(URL_GET_USERINFO, accessToken, appId, openid); String resultString = HttpClientUtils.httpGet(url); log.debug("[sso-qq]get userinfo. use url '%s'", url); QQUserInfo userinfo = JsonUtil.fromJson(resultString, QQUserInfo.class); if (userinfo == null ) { log.debug("[sso-qq]get userinfo failed, with result of '%s'", resultString); return null; } log.debug("[sso-qq]get userinfo success, with result of '%s'", resultString); return userinfo; } } ================================================ FILE: src/main/java/com/lida/mongo/util/SignUtil.java ================================================ package com.lida.mongo.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /** * ����У�鹤���� */ public class SignUtil { private static String token = "co3oopVScm6zzoQWb04_Nlss9r04Ag4B8GfBUrbbvgFbxNvXK15WXqNEFjIHO07obMyya_tHkwTw7NJekr-hhMn_dTnVPGN7pMg0oZGcsXh6iBQhoFYUF8cGPKdbtRqYEVYbAGAOFI"; /** * ��֤ǩ�� * * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { String[] arr = new String[]{token, timestamp, nonce}; Arrays.sort(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * ���ֽ�����ת��Ϊʮ�������ַ��� * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * ���ֽ�ת��Ϊʮ�������ַ��� * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; } } ================================================ FILE: src/main/java/com/lida/mongo/util/StringUtil.java ================================================ package com.lida.mongo.util; import com.lida.mongo.sensor.entity.Sensor; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created by lenovo on 2016/12/6. */ public class StringUtil { private static final String format = "yyyy-MM-dd HH:mm:ss"; public static Date string2Date(String dateStr) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(format); Date date=sdf.parse(dateStr); return date; } public static void judgeField(String nodeMap, Double value, Sensor sensor){ if(nodeMap.equals("sensor1")){ sensor.setSensor1(value); } else if(nodeMap.equals("sensor2")){ sensor.setSensor2(value); } else if(nodeMap.equals("sensor3")){ sensor.setSensor3(value); } else if(nodeMap.equals("sensor4")){ sensor.setSensor4(value); } else if(nodeMap.equals("sensor5")){ sensor.setSensor5(value); } else if(nodeMap.equals("sensor6")){ sensor.setSensor6(value); } else if(nodeMap.equals("sensor7")){ sensor.setSensor7(value); } else if(nodeMap.equals("sensor8")){ sensor.setSensor8(value); } else if(nodeMap.equals("sensor9")){ sensor.setSensor9(value); } else if(nodeMap.equals("sensor10")){ sensor.setSensor10(value); } else if(nodeMap.equals("sensor11")){ sensor.setSensor11(value); } else if(nodeMap.equals("sensor12")){ sensor.setSensor12(value); } else if(nodeMap.equals("sensor13")){ sensor.setSensor13(value); } else if(nodeMap.equals("sensor14")){ sensor.setSensor14(value); } else if(nodeMap.equals("sensor15")){ sensor.setSensor15(value); } else if(nodeMap.equals("sensor16")){ sensor.setSensor16(value); } else if(nodeMap.equals("sensor17")){ sensor.setSensor17(value); } else if(nodeMap.equals("sensor18")){ sensor.setSensor18(value); } else if(nodeMap.equals("sensor19")){ sensor.setSensor19(value); } else if(nodeMap.equals("sensor20")){ sensor.setSensor20(value); } } /** * 计算输入日期后的一个小时的时间 * @param date * @return */ public static Date plusOneHour(Date date){ Calendar calendar=Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, 1); return calendar.getTime(); } } ================================================ FILE: src/main/java/com/lida/mongo/util/WeixinUtil.java ================================================ package com.lida.mongo.util; import com.lida.mongo.weixin.model.AccessToken; import com.lida.mongo.weixin.model.Menu; import net.sf.json.JSONException; import net.sf.json.JSONObject; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.URL; /** * ???????????????? */ public class WeixinUtil { // private static Logger log = LoggerFactory.getLogger(WeixinUtil.class); /** * ????https????????? * * @param requestUrl ?????? * @param requestMethod ???????GET??POST?? * @param outputStr ???????? * @return JSONObject(???JSONObject.get(key)???????json??????????) */ public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; StringBuffer buffer = new StringBuffer(); try { // ????SSLContext?????????????????????????????? TrustManager[] tm = {new MyX509TrustManager()}; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // ??????SSLContext???????SSLSocketFactory???? SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); httpUrlConn.setSSLSocketFactory(ssf); httpUrlConn.setDoOutput(true); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // ???????????GET/POST?? httpUrlConn.setRequestMethod(requestMethod); if ("GET".equalsIgnoreCase(requestMethod)) httpUrlConn.connect(); // ?????????????? if (null != outputStr) { OutputStream outputStream = httpUrlConn.getOutputStream(); // ????????????????????? outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // ??????????????????????? InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // ?????? inputStream.close(); inputStream = null; httpUrlConn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { System.out.println("Weixin server connection timed out."); } catch (Exception e) { System.out.println("https request error:{}" + e); } return jsonObject; } // ???access_token????????GET?? ??200????/?? public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; /** * ???access_token * * @param appid ?? * @param appsecret ??? * @return */ public static AccessToken getAccessToken(String appid, String appsecret) { AccessToken accessToken = null; String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret); JSONObject jsonObject = httpRequest(requestUrl, "GET", null); // ????????? if (null != jsonObject) { try { accessToken = new AccessToken(); accessToken.setToken(jsonObject.getString("access_token")); accessToken.setExpiresIn(jsonObject.getInt("expires_in")); System.setProperty("javax.net.debug", "ssl,handshake"); } catch (JSONException e) { accessToken = null; // ???token??? System.out.println("???token??? errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg")); } } return accessToken; } // ?????????POST?? ??100????/?? public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; /** * ??????? * * @param menu ?????? * @param accessToken ????access_token * @return 0??????????????????? */ public static int createMenu(Menu menu, String accessToken) { int result = 0; // ???????????url String url = menu_create_url.replace("ACCESS_TOKEN", accessToken); // ??????????????json????? String jsonMenu = JSONObject.fromObject(menu).toString(); // ???????????? JSONObject jsonObject = httpRequest(url, "POST", jsonMenu); if (null != jsonObject) { if (0 != jsonObject.getInt("errcode")) { result = jsonObject.getInt("errcode"); System.out.println("?????????? errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg")); } } return result; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/controller/WeChatController.java ================================================ package com.lida.mongo.weixin.controller; import com.lida.mongo.weixin.service.CoreService; import com.lida.mongo.util.SignUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** * Created by stevenfen on 2016/11/12. */ @Controller @RequestMapping(value = "wechat") public class WeChatController { @Resource private CoreService coreService; @RequestMapping(method = RequestMethod.GET) public void doget(HttpServletRequest request, HttpServletResponse response, PrintWriter out) { // 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } else { System.out.println("不是微信服务器发来的请求!"); } out.flush(); out.close(); } @RequestMapping(method = {RequestMethod.POST}) public void dopose(HttpServletRequest request, HttpServletResponse response) throws Exception { /* 消息的接收、处理、响应 */ // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 调用核心业务类接收消息、处理消息 String respMessage = coreService.processRequest(request, response); // 响应消息 PrintWriter out = response.getWriter(); out.print(respMessage); out.close(); } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/req/BaseMessage.java ================================================ package com.lida.mongo.weixin.message.req; /** * Ϣࣨͨû -> ʺţ */ public class BaseMessage { // ΢ź private String ToUserName; // ͷʺţһOpenID private String FromUserName; // Ϣʱ ͣ private long CreateTime; // Ϣͣtext/image/location/link private String MsgType; // Ϣid64λ private long MsgId; public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public long getMsgId() { return MsgId; } public void setMsgId(long msgId) { MsgId = msgId; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/req/ImageMessage.java ================================================ package com.lida.mongo.weixin.message.req; /** * ͼƬϢ */ public class ImageMessage extends BaseMessage { // ͼƬ private String PicUrl; public String getPicUrl() { return PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/req/LinkMessage.java ================================================ package com.lida.mongo.weixin.message.req; /** * Ϣ */ public class LinkMessage extends BaseMessage { // Ϣ private String Title; // Ϣ private String Description; // Ϣ private String Url; public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getUrl() { return Url; } public void setUrl(String url) { Url = url; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/req/TextMessage.java ================================================ package com.lida.mongo.weixin.message.req; /** * ıϢ */ public class TextMessage extends BaseMessage { // Ϣ private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/req/VoiceMessage.java ================================================ package com.lida.mongo.weixin.message.req; /** * ƵϢ */ public class VoiceMessage extends BaseMessage { // ýID private String MediaId; // ʽ private String Format; public String getMediaId() { return MediaId; } public void setMediaId(String mediaId) { MediaId = mediaId; } public String getFormat() { return Format; } public void setFormat(String format) { Format = format; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/Article.java ================================================ package com.lida.mongo.weixin.message.resp; /** * ͼmodel */ public class Article { // ͼϢ private String Title; // ͼϢ private String Description; // ͼƬӣ֧JPGPNGʽϺõЧΪͼ640*320Сͼ80*80ͼƬӵҪ뿪дĻеUrlһ private String PicUrl; // ͼϢת private String Url; public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return null == Description ? "" : Description; } public void setDescription(String description) { Description = description; } public String getPicUrl() { return null == PicUrl ? "" : PicUrl; } public void setPicUrl(String picUrl) { PicUrl = picUrl; } public String getUrl() { return null == Url ? "" : Url; } public void setUrl(String url) { Url = url; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/BaseMessage.java ================================================ package com.lida.mongo.weixin.message.resp; /** * ��Ϣ���ࣨ�����ʺ� -> ��ͨ�û��� */ public class BaseMessage { // ���շ��ʺţ��յ���OpenID�� private String ToUserName; // ������΢�ź� private String FromUserName; // ��Ϣ����ʱ�� �����ͣ� private long CreateTime; // ��Ϣ���ͣ�text/music/news�� private String MsgType; // λ0x0001����־ʱ���DZ���յ�����Ϣ private int FuncFlag; public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public int getFuncFlag() { return FuncFlag; } public void setFuncFlag(int funcFlag) { FuncFlag = funcFlag; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/Music.java ================================================ package com.lida.mongo.weixin.message.resp; /** * model */ public class Music { // ֱ private String Title; // private String Description; // private String MusicUrl; // ӣWIFIʹøӲ private String HQMusicUrl; // ͼýidͨϴýļõid private String ThumbMediaId; public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public String getMusicUrl() { return MusicUrl; } public void setMusicUrl(String musicUrl) { MusicUrl = musicUrl; } public String getHQMusicUrl() { return HQMusicUrl; } public void setHQMusicUrl(String musicUrl) { HQMusicUrl = musicUrl; } public String getThumbMediaId() { return ThumbMediaId; } public void setThumbMediaId(String thumbMediaId) { ThumbMediaId = thumbMediaId; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/MusicMessage.java ================================================ package com.lida.mongo.weixin.message.resp; /** * ������Ϣ */ public class MusicMessage extends BaseMessage { // ���� private com.lida.mongo.weixin.message.resp.Music Music; public com.lida.mongo.weixin.message.resp.Music getMusic() { return Music; } public void setMusic(com.lida.mongo.weixin.message.resp.Music music) { Music = music; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/NewsMessage.java ================================================ package com.lida.mongo.weixin.message.resp; import java.util.List; /** * �ı���Ϣ */ public class NewsMessage extends BaseMessage { // ͼ����Ϣ����������Ϊ10������ private int ArticleCount; // ����ͼ����Ϣ��Ϣ��Ĭ�ϵ�һ��itemΪ��ͼ private List
Articles; public int getArticleCount() { return ArticleCount; } public void setArticleCount(int articleCount) { ArticleCount = articleCount; } public List
getArticles() { return Articles; } public void setArticles(List
articles) { Articles = articles; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/message/resp/TextMessage.java ================================================ package com.lida.mongo.weixin.message.resp; /** * ıϢ */ public class TextMessage extends BaseMessage { // ظϢ private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/AccessToken.java ================================================ package com.lida.mongo.weixin.model; /** * ΢��ͨ�ýӿ�ƾ֤ */ public class AccessToken { // ��ȡ����ƾ֤ private String token; // ƾ֤��Чʱ�䣬��λ���� private int expiresIn; public String getToken() { return token; } public void setToken(String token) { this.token = token; } public int getExpiresIn() { return expiresIn; } public void setExpiresIn(int expiresIn) { this.expiresIn = expiresIn; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/BaiduPlace.java ================================================ package com.lida.mongo.weixin.model; /** * ��ַ��Ϣ * * @author liufeng * @date 2013-03-16 */ public class BaiduPlace implements Comparable { // ���� private String name; // ��ϸ��ַ private String address; // ���� private String lng; // γ�� private String lat; // ��ϵ�绰 private String telephone; // ���� private int distance; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getLng() { return lng; } public void setLng(String lng) { this.lng = lng; } public String getLat() { return lat; } public void setLat(String lat) { this.lat = lat; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public int getDistance() { return distance; } public void setDistance(int distance) { this.distance = distance; } public int compareTo(BaiduPlace baiduPlace) { return this.distance - baiduPlace.getDistance(); } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/Button.java ================================================ package com.lida.mongo.weixin.model; /** * ťĻ */ public class Button { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/CommonButton.java ================================================ package com.lida.mongo.weixin.model; /** * ͨťӰť */ public class CommonButton extends Button { private String type; private String key; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/ComplexButton.java ================================================ package com.lida.mongo.weixin.model; /** * ���Ӱ�ť������ť�� */ public class ComplexButton extends Button { private Button[] sub_button; public Button[] getSub_button() { return sub_button; } public void setSub_button(Button[] sub_button) { this.sub_button = sub_button; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/Menu.java ================================================ package com.lida.mongo.weixin.model; /** * �˵� */ public class Menu { private Button[] button; public Button[] getButton() { return button; } public void setButton(Button[] button) { this.button = button; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/SNSUserInfo.java ================================================ package com.lida.mongo.weixin.model; import java.util.List; /** * ͨ����ҳ��Ȩ��ȡ���û���Ϣ */ public class SNSUserInfo { // �û���ʶ private String openId; // �û��dz� private String nickname; // �Ա�1�����ԣ�2��Ů�ԣ�0��δ֪�� private int sex; // ���� private String country; // ʡ�� private String province; // ���� private String city; // �û�ͷ������ private String headImgUrl; // �û���Ȩ��Ϣ private List privilegeList; public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getHeadImgUrl() { return headImgUrl; } public void setHeadImgUrl(String headImgUrl) { this.headImgUrl = headImgUrl; } public List getPrivilegeList() { return privilegeList; } public void setPrivilegeList(List privilegeList) { this.privilegeList = privilegeList; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/UserLocation.java ================================================ package com.lida.mongo.weixin.model; /** * �û�����λ��model */ public class UserLocation { private String openId; private String lng; private String lat; private String bd09Lng; private String bd09Lat; public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; } public String getLng() { return lng; } public void setLng(String lng) { this.lng = lng; } public String getLat() { return lat; } public void setLat(String lat) { this.lat = lat; } public String getBd09Lng() { return bd09Lng; } public void setBd09Lng(String bd09Lng) { this.bd09Lng = bd09Lng; } public String getBd09Lat() { return bd09Lat; } public void setBd09Lat(String bd09Lat) { this.bd09Lat = bd09Lat; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/ViewButton.java ================================================ package com.lida.mongo.weixin.model; /** * view���͵IJ˵� */ public class ViewButton extends Button { private String type; private String url; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/WeixinOauth2Token.java ================================================ package com.lida.mongo.weixin.model; /** * ��ҳ��Ȩ��Ϣ */ public class WeixinOauth2Token { // ��ҳ��Ȩ�ӿڵ���ƾ֤ private String accessToken; // ƾ֤��Чʱ�� private int expiresIn; // ����ˢ��ƾ֤ private String refreshToken; // �û���ʶ private String openId; // �û���Ȩ������ private String scope; public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public int getExpiresIn() { return expiresIn; } public void setExpiresIn(int expiresIn) { this.expiresIn = expiresIn; } public String getRefreshToken() { return refreshToken; } public void setRefreshToken(String refreshToken) { this.refreshToken = refreshToken; } public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/model/WeixinUserInfo.java ================================================ package com.lida.mongo.weixin.model; /** * ΢ûĻϢ */ public class WeixinUserInfo { // ûıʶ private String openId; // ע״̬1ǹע0δעδעʱȡϢ private int subscribe; // ûעʱ䣬Ϊʱûιעȡעʱ private String subscribeTime; // dz private String nickname; // ûԱ1ԣ2Ůԣ0δ֪ private int sex; // ûڹ private String country; // ûʡ private String province; // ûڳ private String city; // ûԣΪzh_CN private String language; // ûͷ private String headImgUrl; public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; } public int getSubscribe() { return subscribe; } public void setSubscribe(int subscribe) { this.subscribe = subscribe; } public String getSubscribeTime() { return subscribeTime; } public void setSubscribeTime(String subscribeTime) { this.subscribeTime = subscribeTime; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public String getHeadImgUrl() { return headImgUrl; } public void setHeadImgUrl(String headImgUrl) { this.headImgUrl = headImgUrl; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/service/CoreService.java ================================================ package com.lida.mongo.weixin.service; import com.lida.mongo.weixin.message.resp.TextMessage; import com.lida.mongo.util.MessageUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.Map; /** * ķ */ @Repository("CoreService") public class CoreService { private static Logger log = LoggerFactory.getLogger(CoreService.class); private static String emoji(int codePoint) { return String.valueOf(Character.toChars(codePoint)); } /** * ΢ŷ * * @param request * @return */ public String processRequest(HttpServletRequest request, HttpServletResponse response) { // ĬϷصıϢ String respMessage = null; try { String respContent = null; Map requestMap = MessageUtil.parseXml(request); String fromUserName = requestMap.get("FromUserName"); String toUserName = requestMap.get("ToUserName"); String msgType = requestMap.get("MsgType"); TextMessage textMessage = new TextMessage(); textMessage.setToUserName(fromUserName); textMessage.setFromUserName(toUserName); textMessage.setCreateTime(new Date().getTime()); textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); textMessage.setFuncFlag(0); String openid = requestMap.get("FromUserName"); String Content = requestMap.get("Content"); if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { if ("1".equals(Content)) { respContent = "ûɶ,İ"; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); // // ͼϢ // NewsMessage newsMessage = new NewsMessage(); // newsMessage.setToUserName(fromUserName); // newsMessage.setFromUserName(toUserName); // newsMessage.setCreateTime(new Date().getTime()); // newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS); // newsMessage.setFuncFlag(0); // // //1 // List
articleList = new ArrayList
(); // Article article1 = new Article(); // article1.setTitle("С"); // article1.setDescription("СϷ"); // article1.setPicUrl("http://resource.duopao.com/sg/image/20140221170627.jpg"); // article1.setUrl("http://www.duopao.com/games/info?game_code=g20140212153040377809"); // //2 // Article article2 = new Article(); // article2.setTitle(""); // article2.setDescription("СϷ"); // article2.setPicUrl("http://resource.duopao.com/sg/image/20140120233041.jpg"); // article2.setUrl("http://www.duopao.com/games/info?game_code=g20140120233048400063"); // // articleList.add(article1); // articleList.add(article2); // newsMessage.setArticleCount(articleList.size()); // newsMessage.setArticles(articleList); // respMessage = MessageUtil.newsMessageToXml(newsMessage); } else if ("2".equals(Content)) { respContent = MessageUtil.youxi(); textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } else if ("".equals(Content) || "?".equals(Content)) { respContent = MessageUtil.getMainMenu(); textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } else { respContent = ""; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } } // ͼƬϢ else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { String MediaId = requestMap.get("MediaId"); respContent = "ͼƬַǣ" + MediaId; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } // λϢ else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { } // Ϣ else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { respContent = "˵в"; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } // ƵϢ else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { respContent = "˵в"; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } // ¼ else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) { // ¼ String eventType = requestMap.get("Event"); // if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { respContent = emoji(0x1F334) + "ллעСС" + MessageUtil.getMainMenu(); textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } // Զ˵¼ else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) { String eventKey = requestMap.get("EventKey"); if (eventKey.equals("11")) { respContent = emoji(0x274C) + "ǰûа˻ֱӻظҵûа󶨡"; textMessage.setContent(respContent); respMessage = MessageUtil.textMessageToXml(textMessage); } else if (eventKey.equals("12")) { } else if (eventKey.equals("13")) { } else if (eventKey.equals("14")) { } else if (eventKey.equals("21")) { } else if (eventKey.equals("22")) { } else if (eventKey.equals("23")) { } else if (eventKey.equals("24")) { } else if (eventKey.equals("31")) { } else if (eventKey.equals("32")) { } } } } catch (Exception e) { e.printStackTrace(); } return respMessage; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/service/TemplateMes.java ================================================ package com.lida.mongo.weixin.service; import com.lida.mongo.weixin.model.AccessToken; import com.lida.mongo.util.HttpClientUtils; import com.lida.mongo.util.WeixinUtil; import java.util.Map; /** * ģϢ * * @author Administrator */ public class TemplateMes { String appId = "wx247b80e8e951fe79"; // ûΨһƾ֤Կ String appSecret = "4fc4112c0abac60c04997c8ac4d87b92"; // ýӿڻȡaccess_token AccessToken at = WeixinUtil.getAccessToken(appId, appSecret); // ¶֪ͨ private static String NEWORDERS = "9x4PdTRa_FehBFX2HCQHMXAGRshlFj5AFg6zUe3MAA4"; // ̶ private static String ORDERSSHIPMENTS = "9x4PdTRa_FehBFX2HCQHMXAGRshlFj5AFg6zUe3MAA4"; // Earnings private static String EARNINGS = "n5BDnJ787UBXuYdBVhZsGdcf-yv51kyz0roptFdC3S8"; // Ʒȱ stockout private static String GOODSSTOCKOUT = "Kfk7pITiatD9GiR84Hi99NU5jAFZ6ttBhI23elmOuIQ"; private static String MESSAGE_TYPE_NEWORDERS = "neworders"; private static String MESSAGE_TYPE_ORDERSSHIPMENTS = "ordersshipments"; private static String MESSAGE_TYPE_EARNINGS = "earnings"; private static String MESSAGE_TYPE_GOODSSTOCKOUT = "goodsstockout"; public String sendWXMes(String type, Map mesinfo) throws Exception { String jsoninfo = null; if (MESSAGE_TYPE_NEWORDERS.equals(type.trim())) { // ֧ɹ֪ͨ jsoninfo = TemplateMes.sendCaptcha(mesinfo); System.out.println(jsoninfo); } else if (MESSAGE_TYPE_ORDERSSHIPMENTS.equals(type.trim())) { // jsoninfo = TemplateMes.sendRebate(mesinfo); System.out.println(jsoninfo); } else if (MESSAGE_TYPE_EARNINGS.equals(type.trim())) { // jsoninfo = TemplateMes.sendgoodcode(mesinfo); System.out.println(jsoninfo); } else if (MESSAGE_TYPE_GOODSSTOCKOUT.equals(type.trim())) { // jsoninfo = TemplateMes.sendgoodsstockout(mesinfo); System.out.println(jsoninfo); } String strUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + at.getToken(); System.out.println(at.getToken()); return HttpClientUtils.postJSON(strUrl, jsoninfo); } // ¶֪ͨ private static String sendCaptcha(Map mesinfo) { String jsoninfo = "{\"template_id\": \"" + NEWORDERS + "\",\"topcolor\": \"#FF0000\",\"touser\": \"" + mesinfo.get("openid") + "\",\"url\": \"" + mesinfo.get("url") + "\", " + "\"data\":" + "{\"first\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("first") + "\" }," + "\"orderno\": {\"color\": \"#173177\",\"value\":\"" + mesinfo.get("orderno") + "\"}, " + "\"refundno\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("refundno") + "\"}," + "\"refundproduct\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("refundproduct") + "\"}," + "\"remark\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("remark") + "\" }}}"; return jsoninfo; } // ̶ private static String sendRebate(Map mesinfo) { String jsoninfo = "{\"template_id\": \"" + ORDERSSHIPMENTS + "\",\"topcolor\": \"#FF0000\",\"touser\": \"" + mesinfo.get("openid") + "\",\"url\": \"" + mesinfo.get("url") + "\", " + "\"data\":" + "{\"first\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("first") + "\" }," + "\"orderno\": {\"color\": \"#173177\",\"value\":\"" + mesinfo.get("orderno") + "\"}, " + "\"refundno\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("refundno") + "\"}," + "\"refundproduct\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("refundproduct") + "\"}," + "\"remark\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("remark") + "\" }}}"; return jsoninfo; } // private static String sendgoodcode(Map mesinfo) { String jsoninfo = "{\"template_id\": \"" + EARNINGS + "\",\"topcolor\": \"#FF0000\",\"touser\": \"" + mesinfo.get("openid") + "\",\"url\": \"" + mesinfo.get("url") + "\", " + "\"data\":" + "{\"first\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("first") + "\" }," + "\"keyword1\": {\"color\": \"#173177\",\"value\":\"" + mesinfo.get("keyword1") + "\"}, " + "\"keyword2\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("keyword2") + "\"}," + "\"keyword3\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("keyword3") + "\"}," + "\"keyword4\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("keyword4") + "\"}," + "\"remark\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("remark") + "\" }}}"; return jsoninfo; } //Ʒȱ private static String sendgoodsstockout(Map mesinfo) { String jsoninfo = "{\"template_id\": \"" + GOODSSTOCKOUT + "\",\"topcolor\": \"#FF0000\",\"touser\": \"" + mesinfo.get("openid") + "\",\"url\": \"" + mesinfo.get("url") + "\", " + "\"data\":" + "{\"first\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("first") + "\" }," + "\"keyword1\": {\"color\": \"#173177\",\"value\":\"" + mesinfo.get("keyword1") + "\"}, " + "\"keyword2\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("keyword2") + "\"}," + "\"remark\": {\"color\": \"#173177\",\"value\": \"" + mesinfo.get("remark") + "\" }}}"; return jsoninfo; } } ================================================ FILE: src/main/java/com/lida/mongo/weixin/service/TemplateMesService.java ================================================ package com.lida.mongo.weixin.service; public class TemplateMesService { /* *//** * ¶ģϢ *//* public void neworders(String order_sn){ //ȡϢ YlOrderInfo ylOrderInfo=ylOrderInfoDao.neworder(order_sn); //ȡ󶨸ҵԱϢ List list=yeEtWxBindDao.getopenid(ylOrderInfo.getService_id()); String goodsnumber=String.valueOf(ylOrderInfo.getGoods_number()); System.out.println(goodsnumber); //ʱת String addtime=yeEtWxBindDao.TimeStamp2Date(ylOrderInfo.getAdd_time()); for(int i=0;i mesinfo = new HashMap(); mesinfo.put("openid", "oETn-sqq2T92ncxeAR_Xvdd12L68");//΢openid oETn-sqq2T92ncxeAR_Xvdd12L68 mesinfo.put("url", "http://m.ysh365.com");//Ժתӵַ mesinfo.put("first", "ã̳յһ¶ȴ"); mesinfo.put("orderno", order_sn);// mesinfo.put("refundno",goodsnumber);//Ʒ mesinfo.put("refundproduct", ylOrderInfo.getOrder_amount()+"Ԫ");//Ʒ mesinfo.put("remark", "µʱ:"+addtime+","+"µ磬СƽһʱΪ"); try { String res= templateMes.sendWXMes("neworders", mesinfo); System.out.println(res); } catch (Exception e) { e.printStackTrace(); } } } *//** * ̷ *//* public void ordersshipments(String order_sn) { Map mesinfo = new HashMap(); //ȡӶϢ YeOrderInfo yeOrderInfo=yeOrderInfoDao.getyeordersn(order_sn); //ѯ󶨵ĻԱ List list=yeEtWxBindDao.getopenid(yeOrderInfo.getSupply_id()); //ʱת String addtime=yeEtWxBindDao.TimeStamp2Date(yeOrderInfo.getAdd_time()); for(int i=0;i list=yeEtWxBindDao.getopenid(yeOrderInfo.getSupply_id()); //ʱת String addtime=yeEtWxBindDao.TimeStamp2Date(yeOrderInfo.getAdd_time()); for(int i=0;i mesinfo = new HashMap(); mesinfo.put("openid", "oETn-sqq2T92ncxeAR_Xvdd12L68");//΢openid mesinfo.put("url", "http://m.ysh365.com");//Ժתӵַ mesinfo.put("first", "𾴵û,һ涩"); mesinfo.put("keyword1", order_sn);// mesinfo.put("keyword2", yeOrderInfo.getOrder_amount()+"");//ѽ mesinfo.put("keyword3", addtime);//֧ʱ mesinfo.put("keyword4", "");// mesinfo.put("remark", "µ~~ֱ΢ԣСƽһʱΪ"); try { String res= templateMes.sendWXMes("earnings", mesinfo); System.out.println(res); } catch (Exception e) { e.printStackTrace(); } } } *//** * ƷȱԤ *//* public void goodsstockout(int product_id) { Map mesinfo = new HashMap(); YeEtSupplyProducts yeEtSupplyProducts=yeEtSupplyProductsDao.stock(product_id); mesinfo.put("openid", "oETn-sqq2T92ncxeAR_Xvdd12L68");//΢openid mesinfo.put("url", "http://m.ysh365.com");//Ժתӵַ mesinfo.put("first", "𾴵Ĺ̻Ա,һƷ汨"); mesinfo.put("keyword1", yeEtSupplyProducts.getGoods_name());//Ʒ mesinfo.put("keyword2", "ʣ"+yeEtSupplyProducts.getStock());//Ч mesinfo.put("remark", "뼰ʱӿ,µ~~ֱ΢ԣСƽһʱΪ"); try { String res= templateMes.sendWXMes("goodsstockout", mesinfo); System.out.println(res); } catch (Exception e) { e.printStackTrace(); } } */ } ================================================ FILE: src/main/java/com/lida/mongo/weixin/service/WeatherService.java ================================================ package com.lida.mongo.weixin.service; import com.lida.mongo.util.HttpRequestUtil; import java.io.UnsupportedEncodingException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class WeatherService { public static String urlEncodeGBK(String source) { String result = source; try { result = java.net.URLEncoder.encode(source, "GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** * ??????????XML????????? * * @param source * @return */ public static String getWeatherXml(String source, int day) { String dst = null; // ????????? String requestUrl = "http://php.weather.sina.com.cn/xml.php?city={keyWord}&password=DJOYnieT8234jlsK&day=" + day; // ?????q???????urlEncode utf-8???? requestUrl = requestUrl.replace("{keyWord}", HttpRequestUtil.urlEncode(source, "GBK")); dst = HttpRequestUtil.httpRequest(requestUrl); return dst; } /** * ???????????????????????????????? * * @param source * @return */ public static String getWeatherInfo(String source) { StringBuffer buffer = new StringBuffer(); buffer.append(source).append(" ??????????????????????\n\n"); for (int i = 0; i < 3; i++) { String weatherXml = getWeatherXml(source, i); if (null == weatherXml || "".equals(weatherXml)) return ""; String status1 = ""; String direction1 = ""; String temperature1 = ""; String temperature2 = ""; String savedate_weather = ""; String ssd_l = ""; String yd_s = ""; Pattern p = Pattern.compile("(.*)()(.*?)()(.*)"); Matcher m = p.matcher(weatherXml); if (m.matches()) status1 = m.group(3); if (null == status1 || "".endsWith(status1)) return ""; p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) direction1 = m.group(3); p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) temperature1 = m.group(3); p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) temperature2 = m.group(3); p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) savedate_weather = m.group(3); p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) ssd_l = m.group(3); p = Pattern.compile("(.*)()(.*?)()(.*)"); m = p.matcher(weatherXml); if (m.matches()) yd_s = m.group(3); buffer.append(savedate_weather).append("\n").append(status1).append(" ").append(direction1).append(" ").append(temperature2) .append("??-").append(temperature1).append("?? ").append(ssd_l).append("\n").append("????????").append(yd_s).append("\n\n"); } return (null == buffer ? "" : buffer.toString()); } /** * @param args */ public static void main(String[] args) { System.out.println(getWeatherInfo("当家花旦")); } } ================================================ FILE: src/main/java/light/mvc/controller/base/BaseController.java ================================================ package light.mvc.controller.base; import light.mvc.utils.StringEscapeEditor; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.text.SimpleDateFormat; import java.util.Date; @Controller @RequestMapping("/base") public class BaseController { protected int page = 1;// 当前页 protected int rows = 10;// 每页显示记录数 protected String sort;// 排序字段 protected String order = "asc";// asc/desc protected String ids;// 主键集合,逗号分割 @InitBinder public void initBinder(ServletRequestDataBinder binder) { /** * 自动转换日期类型的字段格式 */ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true)); binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); /** * 防止XSS攻击 */ binder.registerCustomEditor(String.class, new StringEscapeEditor(true, false)); } /** * 用户跳转JSP页面 * * 此方法不考虑权限控制 * * @param folder * 路径 * @param jspName * JSP名称(不加后缀) * @return 指定JSP页面 */ @RequestMapping("/{folder}/{jspName}") public String redirectJsp(@PathVariable String folder, @PathVariable String jspName) { return "/" + folder + "/" + jspName; } } ================================================ FILE: src/main/java/light/mvc/controller/manual/EFManualCategoryController.java ================================================ package light.mvc.controller.manual; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.manual.EFExpertList; import light.mvc.pageModel.manual.EFmanualCategory; import light.mvc.pageModel.sys.User; import light.mvc.service.manual.EFManualCategoryServiceI; import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.List; @Controller @RequestMapping("/manualCategory") public class EFManualCategoryController extends BaseController{ @Autowired private EFManualCategoryServiceI categoryService; @RequestMapping("/getPage") public String categoryPage(HttpServletRequest request) { List rootList = categoryService.getByPid((long)0); request.setAttribute("rootList", rootList); return "/eumode/manual/category"; } @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(EFmanualCategory category, PageFilter ph) { // spring自动将参数注入到ph对象中 Grid grid = new Grid(); grid.setRows(categoryService.dataGrid(category, ph)); grid.setTotal(categoryService.count(category, ph)); return grid; } @RequestMapping("/treeGrid") @ResponseBody public List treeGrid(EFmanualCategory category, PageFilter ph) { // spring自动将参数注入到ph对象中 return categoryService.treeGrid(category); } @RequestMapping("/getAllManualTree") @ResponseBody public List getAllManualTree() { return categoryService.allTree(); } @RequestMapping("/getManualTreeByCode") @ResponseBody public List getManualTreeByCode(HttpServletRequest request,String categoryRoot) { if(categoryRoot==null) { categoryRoot=""; } return categoryService.getTreeByCode(categoryRoot); } @ResponseBody @RequestMapping("/getExpertByCategory") public List getExpertByCategory(Long id) { EFExpertList expertList =categoryService.getExpertList(id); return expertList.getList(); } @RequestMapping("/delete") @ResponseBody public Json delete(String ids,HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); categoryService.delete(id,request); } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage") public String addPage(HttpServletRequest request,String categoryRoot) { request.setAttribute("categoryRoot", categoryRoot); return "/eumode/manual/categoryAdd"; } @RequestMapping("/editPage") public String getEditPage(HttpServletRequest request,Long id,String categoryRoot) { EFmanualCategory category = categoryService.get(id); request.setAttribute("category", category); request.setAttribute("categoryRoot", categoryRoot); return "/eumode/manual/categoryEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(EFmanualCategory nobj) { Json j = new Json(); try { categoryService.edit(nobj); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/add") @ResponseBody public Json add(EFmanualCategory nobj) { Json j = new Json(); try { categoryService.add(nobj); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/getRootCategory") @ResponseBody public Json getRootCategory() { Json j = new Json(); try { List rootList=categoryService.getByPid((long)0); j.setObj(rootList); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/manual/EFManualContentController.java ================================================ package light.mvc.controller.manual; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.manual.EFmanualCategory; import light.mvc.pageModel.manual.EFmanualContent; import light.mvc.pageModel.manual.EFmanualKeyword; import light.mvc.pageModel.sys.EFResourceMeta; import light.mvc.service.manual.EFManualCategoryServiceI; import light.mvc.service.manual.EFManualContentServiceI; import light.mvc.service.manual.EFManualKeywordServiceI; import light.mvc.service.sys.DictionaryServiceI; import light.mvc.service.sys.ResourceMetaServiceI; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; @Controller @RequestMapping("/manualContent") public class EFManualContentController extends BaseController{ @Autowired private EFManualContentServiceI contentService; @Autowired private EFManualCategoryServiceI categoryService; @Autowired private EFManualKeywordServiceI keywordService; @Autowired private DictionaryServiceI dictService; @Autowired private ResourceMetaServiceI resourceMetaService; @RequestMapping("/getPage") public String get_news_page() { return "/eumode/manual/manual"; } @RequestMapping("/dataGrid") @ResponseBody public Grid data_grid(EFmanualContent content, PageFilter ph) { // spring自动将参数注入到ph对象中 Grid grid = new Grid(); grid.setRows(contentService.dataGrid(content, ph)); grid.setTotal(contentService.count(content, ph)); return grid; } @RequestMapping("/delete") @ResponseBody public Json delete(String ids,HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); EFmanualKeyword kw = new EFmanualKeyword(); kw.setManualContentID(id); List keywordlist = keywordService.getAllKeyword(kw); for(EFmanualKeyword mk : keywordlist){ keywordService.delete(mk.getAutoID()); } List attachmentlist = resourceMetaService.get(id, dictService.getDictionary("ResourceMetaType", "Knowledge").getId()); if(attachmentlist != null && attachmentlist.size() > 0){ for(EFResourceMeta rm : attachmentlist){ resourceMetaService.delete(rm.getAutoID()); } } contentService.delete(id); } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage")//知识库添加 public String addPage(HttpServletRequest request) { request.setAttribute("categoryRoot", "Variety"); return "/eumode/manual/manualAdd"; } @RequestMapping("/addVarietyPage")//知识库添加 public String addVarietyPage(HttpServletRequest request) { request.setAttribute("categoryRoot", "Variety"); return "/eumode/manual/manualAdd"; } @RequestMapping("/addIndustryPage")//知识库添加 public String addIndustryPage(HttpServletRequest request) { request.setAttribute("categoryRoot", "Industry"); return "/eumode/manual/manualAdd"; } @RequestMapping("/addAchievementPage")//知识库添加 public String addAchievementPage(HttpServletRequest request) { request.setAttribute("categoryRoot", "Achievement"); return "/eumode/manual/manualAdd"; } @RequestMapping("/addTechnologyPage")//知识库添加 public String addTechnologyPage(HttpServletRequest request) { request.setAttribute("categoryRoot", "Technology"); return "/eumode/manual/manualAdd"; } @RequestMapping("/detailPage")//知识库详情 public String viewDetailPage(Long id, HttpServletRequest request) { EFmanualKeyword kw = new EFmanualKeyword(); kw.setManualContentID(id); List keywordlist = keywordService.getAllKeyword(kw); EFmanualContent content = contentService.get(id); EFmanualCategory mc = categoryService.get(content.getManualCategoryID()); List mcList = new ArrayList(); while(mc != null){ mcList.add(mc); if(mc.getParentID() != null && mc.getParentID() > 0){ mc = categoryService.get(mc.getParentID()); } else{ mc = null; } } if(mcList.size() > 0){ String categoryList = ""; for(EFmanualCategory category : mcList){ categoryList += category.getCategoryName() + "<--"; } categoryList = categoryList.substring(0, categoryList.length() - 3); request.setAttribute("categoryList", categoryList); } if(content != null){ request.setAttribute("manualContent", content); } if(keywordlist != null && keywordlist.size() > 0){ String keyworddesc = ""; for(EFmanualKeyword mk : keywordlist){ keyworddesc += mk.getKeyword() + ","; } keyworddesc = keyworddesc.substring(0, keyworddesc.length() - 1); request.setAttribute("keywordList", keyworddesc); } if(content.getFilePath() != null && content.getFilePath().length() > 0){ List attachmentlist = resourceMetaService.get(content.getAutoID(), dictService.getDictionary("ResourceMetaType", "Knowledge").getId()); request.setAttribute("attachmentList", attachmentlist); } return "/eumode/manual/manualDetail"; } @RequestMapping("/add") @ResponseBody public Json add(EFmanualContent nobj) { //System.out.println("addnews"); Json j = new Json(); try { nobj.setCategoryCode(categoryService.get(nobj.getManualCategoryID()).getCategoryCode()); Long manualID = null; if(nobj.getAttachmentContent() != null && nobj.getAttachmentContent().length() > 0){ List rmlist = new ArrayList(); String filenamelist = ""; String[] attachmentList = nobj.getAttachmentContent().split(";"); for(String attachment : attachmentList) { if(attachment.length() == 0) continue; String[] arrayList = attachment.split("\\^"); String attachmentName = arrayList[0]; String attachmentPath = arrayList[1]; filenamelist += attachmentName + ";"; EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "Knowledge").getId()); rm.setMetaPath(attachmentPath); rm.setMetaDescription(attachmentName); rmlist.add(rm); } if(filenamelist.length() > 0){ filenamelist = filenamelist.substring(0, filenamelist.length() - 1); } nobj.setFilePath(filenamelist); nobj.setContent(""); manualID = contentService.add(nobj); if(manualID > 0 && rmlist.size() > 0){ for(EFResourceMeta rm : rmlist){ rm.setMetaID(manualID); resourceMetaService.add(rm); } } } else if(nobj.getPageContent() != null && nobj.getPageContent().length() > 0){ nobj.setContent(java.net.URLDecoder.decode(nobj.getPageContent(), "UTF-8")); manualID=contentService.add(nobj); } if(manualID != null && manualID > 0) { if(nobj.getKeywordList()!=null&&nobj.getKeywordList().length()>0) { String[] keywordList= nobj.getKeywordList().split(","); for(String keyword: keywordList) { EFmanualKeyword mk = new EFmanualKeyword(); mk.setCategoryCode(nobj.getCategoryCode()); mk.setCategoryID(nobj.getManualCategoryID()); mk.setKeyword(keyword); mk.setManualContentID(manualID); keywordService.add(mk); } } /* if(nobj.getAttachmentContent() != null && nobj.getAttachmentContent().length() > 0){ String[] attachmentList = nobj.getAttachmentContent().split(";"); for(String attachment : attachmentList) { if(attachment.length() == 0) continue; String[] arrayList = attachment.split("\\^"); String attachmentName = arrayList[0]; String attachmentPath = arrayList[1]; EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(manualID); rm.setMetaPath(attachmentPath); rm.setMetaDescription(attachmentName); resourceMetaService.add(rm); } } */ } j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } //允许上传的文件后缀 private static String fileExt = "jpg,jpeg,bmp,gif,png,pdf"; //上传文件的大小限制,10M private static Long maxSize = 10485760L; // 0:不建目录 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 private static String dirType = "1"; //上传文件存储目录 private static String baseAttachmentDir = "/uploadfile/manual_attachment/"; /* * 上传文件操作 * @param request, response * @return * */ @RequestMapping("/getUploadFile") @ResponseBody public void getUploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); String err = ""; String newFileName = ""; //System.out.println("up"); if ("application/octet-stream".equals(request.getContentType())) { //HTML 5 上传 try { String dispoString = request.getHeader("Content-Disposition"); int iFindStart = dispoString.indexOf("name=\"")+6; int iFindEnd = dispoString.indexOf("\"", iFindStart); iFindStart = dispoString.indexOf("filename=\"")+10; iFindEnd = dispoString.indexOf("\"", iFindStart); String sFileName = dispoString.substring(iFindStart, iFindEnd); int i = request.getContentLength(); byte buffer[] = new byte[i]; int j = 0; while(j < i) { //获取表单的上传文件 int k = request.getInputStream().read(buffer, j, i-j); j += k; } if (buffer.length == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && buffer.length > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(sFileName, request, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 //System.out.println("newFileName:" + request.getSession().getServletContext().getRealPath("") + filepathString); OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(buffer); out.close(); newFileName = request.getContextPath() + filepathString; } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } else{ Boolean mulipart = ServletFileUpload.isMultipartContent(request); if(!mulipart) { printInfo(response, "上传格式错误", ""); return; } //以下部分供上传附件使用 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List fileList = multipartRequest.getFiles("Filedata"); try { for (MultipartFile mf : fileList) { if(mf.isEmpty()){ continue; } CommonsMultipartFile cf= (CommonsMultipartFile)mf; DiskFileItem fi = (DiskFileItem)cf.getFileItem(); String fileNameLong = fi.getName(); //获取文件上传路径名称 fileNameLong = fileNameLong.replaceAll("^", ""); if (mf.getSize() == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && mf.getSize() > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(fileNameLong, request, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(mf.getBytes()); out.close(); newFileName += fileNameLong + "^" + request.getContextPath() + filepathString + ";"; } } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } printInfo(response, err, newFileName); } private String getSaveFilePath(String sFileName, HttpServletRequest request, HttpServletResponse response) throws IOException { /*获取文件扩展名*/ /*索引加1的效果是只取xxx.jpg的jpg*/ String extensionName = sFileName.substring(sFileName.lastIndexOf(".") + 1); extensionName = extensionName.toLowerCase(); //System.out.println("extensionName:" + extensionName); /*检查文件类型*/ if (("," + fileExt.toLowerCase() + ",").indexOf("," + extensionName + ",") < 0){ printInfo(response, "不允许上传此类型的文件", ""); return "不允许上传此类型的文件"; } //0:不建目录, 1:按天存入目录, 2:按月存入目录, 3:按扩展名存目录.建议使用按天存. String fileFolder = ""; if (dirType.equalsIgnoreCase("1")) fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); if (dirType.equalsIgnoreCase("2")) fileFolder = new SimpleDateFormat("yyyyMM").format(new Date()); if (dirType.equalsIgnoreCase("3")) fileFolder = extensionName; /*文件存储的相对路径*/ String saveDirPath = ""; saveDirPath = baseAttachmentDir + fileFolder + "/"; //System.out.println("saveDirPath:" + saveDirPath); /*文件存储在容器中的绝对路径*/ String saveFilePath = request.getSession().getServletContext().getRealPath("") + saveDirPath; //System.out.println("saveFilePath:" + saveFilePath); /*构建文件目录以及目录文件*/ File fileDir = new File(saveFilePath); if (!fileDir.exists()) {fileDir.mkdirs();} /*重命名文件*/ String filename = UUID.randomUUID().toString(); return saveDirPath + filename + "." + extensionName; } /** * 使用I/O流输出 json格式的数据 * @param response * @param err * @param newFileName * @throws IOException */ private void printInfo(HttpServletResponse response, String err, String newFileName) throws IOException { PrintWriter out = response.getWriter(); //String filename = newFileName.substring(newFileName.lastIndexOf("/") + 1); out.println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}"); out.flush(); out.close(); } } ================================================ FILE: src/main/java/light/mvc/controller/news/EFCategoryController.java ================================================ package light.mvc.controller.news; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.news.EFCategory; import light.mvc.pageModel.sys.Dictionary; import light.mvc.service.news.EFCategoryServiceI; import light.mvc.service.sys.DictionaryServiceI; import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.List; @Controller @RequestMapping("/category") public class EFCategoryController extends BaseController{ @Autowired private EFCategoryServiceI categoryService; @Autowired private DictionaryServiceI dictService; /** * 跳转到列表页面 * @return */ @RequestMapping("/getPage") public String categoryPage(HttpServletRequest request) { List typeList = dictService.combox("NewsCategoryType"); request.setAttribute("typeList", typeList); return "/eumode/news/category"; } /** * 获取列表数据 * @param category * @param ph * @return */ @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(EFCategory category, PageFilter ph) { // spring自动将参数注入到ph对象中 Grid grid = new Grid(); List list = categoryService.dataGrid(category, ph); for(EFCategory t : list){ t.setTypeDesc(dictService.get(t.getType()).getText()); } grid.setRows(list); grid.setTotal(categoryService.count(category, ph)); return grid; } @RequestMapping("/delete") @ResponseBody public Json delete(String ids, HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); categoryService.delete(id,request); } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /** * 跳转到新增页面 * @param request * @return */ @RequestMapping("/addPage") public String addPage(HttpServletRequest request) { List typeList = dictService.combox("NewsCategoryType"); request.setAttribute("typeList", typeList); return "/eumode/news/categoryAdd"; } /** * 新增操作 * @param nobj * @return */ @RequestMapping("/add") @ResponseBody public Json add(EFCategory category) { Json j = new Json(); try { categoryService.add(category); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /** * 跳转到编辑页面 * @param request * @param id * @return */ @RequestMapping("/editPage") public String editPage(HttpServletRequest request, Long id) { EFCategory category = categoryService.get(id); request.setAttribute("category", category); List typeList = dictService.combox("NewsCategoryType"); request.setAttribute("typeList", typeList); return "/eumode/news/categoryEdit"; } /** * 更新操作 * @param category * @return */ @RequestMapping("/edit") @ResponseBody public Json update(EFCategory category) { Json j = new Json(); try { categoryService.edit(category); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/news/EFNewsController.java ================================================ package light.mvc.controller.news; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.news.EFCategory; import light.mvc.pageModel.news.EFNews; import light.mvc.pageModel.sys.EFResourceMeta; import light.mvc.service.news.EFCategoryServiceI; import light.mvc.service.news.EFNewsServiceI; import light.mvc.service.sys.DictionaryServiceI; import light.mvc.service.sys.ResourceMetaServiceI; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; @Controller @RequestMapping("/news") public class EFNewsController extends BaseController{ @Autowired private EFNewsServiceI newsService; @Autowired private EFCategoryServiceI categoryService; @Autowired private DictionaryServiceI dictService; @Autowired private ResourceMetaServiceI resourceMetaService; /** * 跳转到列表页面 * @return */ @RequestMapping("/newsPage") public String get_news_page(HttpServletRequest request) { request.setAttribute("categoryTypeID", dictService.getDictionary("NewsCategoryType", "News").getId()); request.setAttribute("categoryList", getCategoryByTypeId(dictService.getDictionary("NewsCategoryType", "News").getId())); return "/eumode/news/news"; } @RequestMapping("/informationPage") public String get_information_page(HttpServletRequest request) { request.setAttribute("categoryTypeID", dictService.getDictionary("NewsCategoryType", "Information").getId()); request.setAttribute("categoryList", getCategoryByTypeId(dictService.getDictionary("NewsCategoryType", "Information").getId())); return "/eumode/news/news"; } @RequestMapping("/reportPage") public String get_report_page(HttpServletRequest request) { request.setAttribute("categoryTypeID", dictService.getDictionary("NewsCategoryType", "Report").getId()); request.setAttribute("categoryList", getCategoryByTypeId(dictService.getDictionary("NewsCategoryType", "Report").getId())); return "/eumode/news/news"; } @RequestMapping("/baseConstructionPage") public String get_baseConstruction(HttpServletRequest request) { request.setAttribute("categoryTypeID", dictService.getDictionary("NewsCategoryType", "BaseConstruction").getId()); request.setAttribute("categoryList", getCategoryByTypeId(dictService.getDictionary("NewsCategoryType", "BaseConstruction").getId())); return "/eumode/news/news"; } private List getCategoryByTypeId(Long id){ EFCategory c = new EFCategory(); c.setType(id); List categoryList = categoryService.getAllData(c); return categoryList; } /** * 获取列表数据 * @param news * @param ph * @return */ @RequestMapping("/dataGrid") @ResponseBody public Grid data_grid(EFNews news, Integer selectPersonal, PageFilter ph,HttpServletRequest request) { Grid grid = new Grid(); SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); news.setPersonalID(sessionInfo.getId()); //默认只搜索出本人添加的记录 if(selectPersonal != null && selectPersonal == 1){ //搜出全部人添加的记录 news.setPersonalID(null); } List list = newsService.dataGrid(news, ph); for(EFNews t : list){ t.setStatusDesc(dictService.get(t.getStatus()).getText()); t.setCategoryName(categoryService.get(t.getCategoryID()).getCategoryName()); } grid.setRows(list); grid.setTotal(newsService.count(news,ph)); return grid; } /** * 删除操作 * @param ids * @param request * @return */ @RequestMapping("/delete") @ResponseBody public Json delete(String ids,HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); newsService.delete(id); //删除相关附件 EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(id); List list = resourceMetaService.dataGrid(rm); for(EFResourceMeta t : list){ resourceMetaService.delete(t.getAutoID()); } } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /** * 删除附件操作 * @param ids * @param request * @return */ @RequestMapping("/deleteAttachment") @ResponseBody public Json deleteAttachment(String id, String newsid, HttpServletRequest request){ Json j = new Json(); try { //删除相关附件 EFResourceMeta rm = resourceMetaService.get(Long.parseLong(id)); if(rm.getType()==dictService.getDictionary("ResourceMetaType", "NewsInformation").getId() && rm.getMetaID() == Long.parseLong(newsid)){ resourceMetaService.delete(rm.getAutoID()); j.setMsg("删除附件成功!"); j.setSuccess(true); } else{ j.setMsg("没有权限删除该附件!"); } } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /** * 跳转到新增页面 * @param request * @return */ @RequestMapping("/addPage") public String addPage(Long categoryTypeID, HttpServletRequest request) { EFCategory c = new EFCategory(); c.setType(categoryTypeID); List categories = categoryService.getAllData(c); for(EFCategory t:categories){ t.setTypeDesc(dictService.get(t.getType()).getText()); } request.setAttribute("categories", categories); if(categoryTypeID == dictService.getDictionary("NewsCategoryType", "Information").getId()){ //通知公告才允许上传附件 request.setAttribute("allowAttachment", true); } return "/eumode/news/newsAdd"; } /** * 新增操作 * @param nobj * @return */ @RequestMapping("/add") @ResponseBody public Json add(EFNews news, HttpServletRequest request) { Json j = new Json(); //添加额外信息 SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); news.setPersonalID(sessionInfo.getId());//发布者ID news.setAuthor(sessionInfo.getName());//作者 news.setReadCount(0);//浏览次数默认为0 news.setStatus(dictService.getDictionary("NewsContentStatus", "Edit").getId());//17:编辑 | 18:发布 try { String fileName = generateTmpArticleFileName(sessionInfo.getId().toString(),request); String saveFilePath = request.getSession().getServletContext().getRealPath(""); writeContentToFile(news.getPageContent(), saveFilePath + fileName); news.setContent(fileName); Long newsId = newsService.add(news); if(newsId != null) { if(news.getAttachmentContent() != null && news.getAttachmentContent().length() > 0){ String[] attachmentList = news.getAttachmentContent().split(";"); for(String attachment : attachmentList) { if(attachment.length() == 0) continue; String[] arrayList = attachment.split("\\^"); String attachmentName = arrayList[0]; String attachmentPath = arrayList[1]; EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(newsId); rm.setMetaPath(attachmentPath); rm.setMetaDescription(attachmentName); resourceMetaService.add(rm); } } } j.setSuccess(true); j.setMsg("保存成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /** * 跳转到详细页面 * @param id * @return */ @RequestMapping("detailPage") public String detailPage(Long id, HttpServletRequest request){ EFNews news = newsService.get(id); if(news != null) { String saveFilePath = request.getSession().getServletContext().getRealPath(""); String fileName = news.getContent(); try { news.setPageContent(readContentFromFile(saveFilePath + fileName)); }catch(Exception ex){ } request.setAttribute("news", news); EFCategory category = categoryService.get(news.getCategoryID()); request.setAttribute("category", category); EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(id); List list = resourceMetaService.dataGrid(rm); if(list.size() > 0) { request.setAttribute("attachmentList", list); } return "/eumode/news/newsDetail"; } else { List categories = categoryService.getAllData(null); request.setAttribute("categories", categories); return "/eumode/news/newsAdd"; } } /** * 跳转到编辑页面 * @param id * @return */ @RequestMapping("editPage") public String editPage(Long id, HttpServletRequest request){ EFNews news = newsService.get(id); if(news != null) { EFCategory category = categoryService.get(news.getCategoryID()); EFCategory c = new EFCategory(); c.setType(category.getType()); List categories = categoryService.getAllData(c); for(EFCategory t:categories){ t.setTypeDesc(dictService.get(t.getType()).getText()); } request.setAttribute("categories", categories); if(category.getType() == dictService.getDictionary("NewsCategoryType", "Information").getId()){ //通知公告才允许上传附件 request.setAttribute("allowAttachment", true); EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(id); List list = resourceMetaService.dataGrid(rm); if(list.size() > 0) { request.setAttribute("attachmentList", list); } } String saveFilePath = request.getSession().getServletContext().getRealPath(""); String fileName = news.getContent(); try { news.setPageContent(readContentFromFile(saveFilePath + fileName)); }catch(Exception ex){ } request.setAttribute("news", news); request.setAttribute("cate", category); return "/eumode/news/newsEdit"; } else { return "/eumode/news/newsAdd"; } } /** * 更新操作 * @param nobj * @return */ @RequestMapping("/edit") @ResponseBody public Json edit(EFNews news, HttpServletRequest request) { Json j = new Json(); SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); EFNews oldnews = newsService.get(news.getAutoID()); try { String fileName = oldnews.getContent(); String saveFilePath = request.getSession().getServletContext().getRealPath(""); writeContentToFile(news.getPageContent(), saveFilePath + fileName); news.setContent(oldnews.getContent()); newsService.edit(news); if(news.getAttachmentContent() != null && news.getAttachmentContent().length() > 0){ String[] attachmentList = news.getAttachmentContent().split(";"); for(String attachment : attachmentList) { if(attachment.length() == 0) continue; String[] arrayList = attachment.split("\\^"); String attachmentName = arrayList[0]; String attachmentPath = arrayList[1]; EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictService.getDictionary("ResourceMetaType", "NewsInformation").getId()); rm.setMetaID(news.getAutoID()); rm.setMetaPath(attachmentPath); rm.setMetaDescription(attachmentName); resourceMetaService.add(rm); } } j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/publish") @ResponseBody public Json publish(Long id, HttpServletRequest request){ Json j = new Json(); Long publishFlagVal = dictService.getDictionary("NewsContentStatus", "Publish").getId(); try { String saveFilePath = request.getSession().getServletContext().getRealPath(""); EFNews news = newsService.get(id); String fileName = news.getContent(); String pageContent = readContentFromFile(saveFilePath + fileName); pageContent = java.net.URLDecoder.decode(pageContent, "UTF-8"); String template = "%s%s"; pageContent = String.format(template, news.getTitle(), pageContent); String webFileName = ""; if(news.getWebPath() == null || news.getWebPath().length() == 0){ webFileName = generateWebSitePath(request); } else{ webFileName = news.getWebPath(); } writeContentToFile(pageContent, saveFilePath + webFileName); news.setWebPath(webFileName); news.setStatus(publishFlagVal); newsService.publish(news); j.setSuccess(true); j.setMsg("发布成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/unPublish") @ResponseBody public Json unPublish(Long id){ Json j = new Json(); Long unPublishFlagVal = dictService.getDictionary("NewsContentStatus", "Edit").getId(); EFNews news = newsService.get(id); try { news.setStatus(unPublishFlagVal); newsService.unPublish(news); j.setSuccess(true); j.setMsg("撤回成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } //允许上传的文件后缀 private static String fileExt = "jpg,jpeg,bmp,gif,png,doc,docx,xls,xlsx,pdf"; //上传文件的大小限制,5M private static Long maxSize = 5242880L; // 0:不建目录 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 private static String dirType = "1"; //上传文件存储目录 private static String baseImageDir = "/uploadfile/article_image/"; //上传文件存储目录 private static String baseAttachmentDir = "/uploadfile/article_attachment/"; /* * 上传文件操作 * @param request, response * @return * */ @RequestMapping("/getUploadFile") @ResponseBody public void getUploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); String err = ""; String newFileName = ""; if ("application/octet-stream".equals(request.getContentType())) { //HTML 5 上传 try { String dispoString = request.getHeader("Content-Disposition"); int iFindStart = dispoString.indexOf("name=\"")+6; int iFindEnd = dispoString.indexOf("\"", iFindStart); iFindStart = dispoString.indexOf("filename=\"")+10; iFindEnd = dispoString.indexOf("\"", iFindStart); String sFileName = dispoString.substring(iFindStart, iFindEnd); int i = request.getContentLength(); byte buffer[] = new byte[i]; int j = 0; while(j < i) { //获取表单的上传文件 int k = request.getInputStream().read(buffer, j, i-j); j += k; } if (buffer.length == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && buffer.length > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(sFileName, request, response, 1); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 //System.out.println("newFileName:" + request.getSession().getServletContext().getRealPath("") + filepathString); OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(buffer); out.close(); newFileName = request.getContextPath() + filepathString; } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } else{ Boolean mulipart = ServletFileUpload.isMultipartContent(request); if(!mulipart) { printInfo(response, "上传格式错误", ""); return; } //以下部分供上传附件使用 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List fileList = multipartRequest.getFiles("Filedata"); try { for (MultipartFile mf : fileList) { if(mf.isEmpty()){ continue; } CommonsMultipartFile cf= (CommonsMultipartFile)mf; DiskFileItem fi = (DiskFileItem)cf.getFileItem(); String fileNameLong = fi.getName(); //获取文件上传路径名称 fileNameLong = fileNameLong.replaceAll("^", ""); if (mf.getSize() == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && mf.getSize() > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(fileNameLong, request, response, 2); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(mf.getBytes()); out.close(); newFileName += fileNameLong + "^" + request.getContextPath() + filepathString + ";"; } } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } printInfo(response, err, newFileName); } private String getSaveFilePath(String sFileName, HttpServletRequest request, HttpServletResponse response, int type) throws IOException { /*获取文件扩展名*/ /*索引加1的效果是只取xxx.jpg的jpg*/ String extensionName = sFileName.substring(sFileName.lastIndexOf(".") + 1); extensionName = extensionName.toLowerCase(); //System.out.println("extensionName:" + extensionName); /*检查文件类型*/ if (("," + fileExt.toLowerCase() + ",").indexOf("," + extensionName + ",") < 0){ printInfo(response, "不允许上传此类型的文件", ""); return "不允许上传此类型的文件"; } //0:不建目录, 1:按天存入目录, 2:按月存入目录, 3:按扩展名存目录.建议使用按天存. String fileFolder = ""; if (dirType.equalsIgnoreCase("1")) fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); if (dirType.equalsIgnoreCase("2")) fileFolder = new SimpleDateFormat("yyyyMM").format(new Date()); if (dirType.equalsIgnoreCase("3")) fileFolder = extensionName; /*文件存储的相对路径*/ String saveDirPath = ""; if(type == 1){ //文章中的图片 saveDirPath = baseImageDir + fileFolder + "/"; } else if(type == 2){ //文章中的附件 saveDirPath = baseAttachmentDir + fileFolder + "/"; } //System.out.println("saveDirPath:" + saveDirPath); /*文件存储在容器中的绝对路径*/ String saveFilePath = request.getSession().getServletContext().getRealPath("") + saveDirPath; //System.out.println("saveFilePath:" + saveFilePath); /*构建文件目录以及目录文件*/ File fileDir = new File(saveFilePath); if (!fileDir.exists()) {fileDir.mkdirs();} /*重命名文件*/ String filename = UUID.randomUUID().toString(); return saveDirPath + filename + "." + extensionName; } /** * 使用I/O流输出 json格式的数据 * @param response * @param err * @param newFileName * @throws IOException */ private void printInfo(HttpServletResponse response, String err, String newFileName) throws IOException { PrintWriter out = response.getWriter(); //String filename = newFileName.substring(newFileName.lastIndexOf("/") + 1); out.println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}"); out.flush(); out.close(); } //未发布的新闻公告文件 private static String tmpArticleDir = "/tmpArticle/"; private static String tmpArticleExt = ".tmparticle"; /** * 创建临时文件名称 */ private String generateTmpArticleFileName(String authorid, HttpServletRequest request) { String fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); /*文件存储的相对路径*/ String saveDirPath = tmpArticleDir + authorid + "/" + fileFolder + "/"; String saveFilePath = request.getSession().getServletContext().getRealPath("") + saveDirPath; /*构建文件目录以及目录文件*/ File fileDir = new File(saveFilePath); if (!fileDir.exists()) {fileDir.mkdirs();} /*重命名文件*/ String filename = UUID.randomUUID().toString(); return saveDirPath + filename + tmpArticleExt; } /** * 将字符串写入文件 * @param 绝对路径 */ private void writeContentToFile(String content, String fileName) throws IOException { try { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8"); osw.write(content); osw.close(); }catch (IOException e) { e.printStackTrace(); } } /** * 从文件读取字符串 * @param 绝对路径 */ private String readContentFromFile(String fileName) throws IOException { String content = ""; BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); String data = null; while((data = br.readLine())!=null) { content += data; } return content; } //发布的新闻公告文件 private static String webSitePath = "/Article/"; /** * 创建html文件名 */ private String generateWebSitePath(HttpServletRequest request) { String fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); /*文件存储的相对路径*/ String saveDirPath = webSitePath + fileFolder + "/"; String saveFilePath = request.getSession().getServletContext().getRealPath("") + saveDirPath; /*构建文件目录以及目录文件*/ File fileDir = new File(saveFilePath); if (!fileDir.exists()) {fileDir.mkdirs();} /*重命名文件*/ String filename = new SimpleDateFormat("hhmmssSSS").format(new Date()); return saveDirPath + filename + ".html"; } } ================================================ FILE: src/main/java/light/mvc/controller/sensor/apiSensorController.java ================================================ package light.mvc.controller.sensor; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.sensor.Sensor; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import light.mvc.service.sensor.monitoringNodeServiceI; import light.mvc.service.sensor.pestSensorServiceI; import light.mvc.service.sensor.stationServiceI; import org.apache.http.HttpEntity; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Controller @RequestMapping("/sensorUpdate") public class apiSensorController { @Autowired private monitoringNodeServiceI moniService; @Autowired private stationServiceI stationS; @Autowired private pestSensorServiceI Service; @RequestMapping("/updateStation") @ResponseBody public Json Update(Long stationId) { Json j = new Json(); try { Station station = stationS.get(stationId); if(station.getType()!=61) { j.setSuccess(true); j.setMsg("该节点无需更新"); return j; } Date startUpdateDate = station.getSensorDateUpdate(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startDateStr=dateFormat.format(startUpdateDate); startDateStr=startDateStr.replace(' ', 'T'); String[] cookiesByLogin=getCookieByLogin(station.getLoginName(),station.getPassword()); for(String cookieStr:cookiesByLogin) { String[] coookieInfo=cookStringToItemString(cookieStr); String getStationDateURL=GlobalConstant.caipoStationDateURL+"?serial="+station.getSerialNum().toString()+"&group=0&limit=100&verb=FromDate&dtfirst="; String getData=getStationInfo(getStationDateURL+startDateStr,coookieInfo); JSONObject jsonObj = new JSONObject(getData); Long serialNum=jsonObj.getLong("serial_number"); if(!serialNum.equals(station.getSerialNum())) { continue; } JSONArray array = jsonObj.getJSONArray("data"); monitoringNode node = new monitoringNode(); node.setStation(stationId); List nodeList= moniService.dataGrid(node, null); Service.insertApi(array, station,nodeList); Sensor sLast = Service.getLastSensor(station.getSerialNum()); Date lastDate = new Date(sLast.getCreateDate().getTime()+1000); stationS.updateSensorLastTime(lastDate,stationId); } j.setSuccess(true); j.setMsg("更新成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } public String[] getCookieByLogin(String loginName, String password) { String[] cookieStr= null; String loginURL= GlobalConstant.caipoLoginURL+"?"+GlobalConstant.caipoLoginName+loginName+"&"+GlobalConstant.caipoPasswork+password; BasicCookieStore cookieStore = new BasicCookieStore(); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); try { HttpGet httpget = new HttpGet(loginURL); CloseableHttpResponse response1 = httpclient.execute(httpget); try { HttpEntity entity = response1.getEntity(); EntityUtils.consume(entity); List cookies = cookieStore.getCookies(); cookieStr=new String[cookies.size()]; if (cookies.isEmpty()) { System.out.println("cookie is None"); } else { for (int i = 0; i < cookies.size(); i++) { cookieStr[i]=new String(cookies.get(i).toString() ); System.out.println("\n( getCookieByLogin(String loginURL) )in cookie i="+i+" "+ cookieStr[i]); } } }catch(Exception e){ System.out.println(e); }finally { try { response1.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }catch(Exception e){ System.out.println(e); } finally { try { httpclient.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return cookieStr; } public static String[] cookStringToItemString(String cookieStr){ String temp[]=cookieStr.split("]"); String dest[]=new String[ temp.length ]; for(int i=0; i monitoringNode = moniService.dataGrid(data, ph); for(monitoringNode m : monitoringNode){ model.addAttribute(m.getMap(),m.getName()); } return "/eumode/MoniNode/MoniNodeList"; } @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(monitoringNode data, PageFilter ph) { // spring自动将参数注入到ph对象中 Grid grid = new Grid(); grid.setRows(moniService.dataGrid(data, ph)); grid.setTotal(moniService.count(data, ph)); return grid; } @RequestMapping("/getnodeinfo") @ResponseBody public List getNodeInfo(@RequestBody JSONObject monitoringNode){ monitoringNode data = new monitoringNode(); data.setStation(monitoringNode.getLong("station")); PageFilter ph = new PageFilter(); ph.setPage(1); ph.setSort("type"); ph.setRows(50); ph.setOrder("asc"); List monitoringNodeList = moniService.dataGrid(data, ph); return monitoringNodeList; } @RequestMapping("/delete") @ResponseBody public Json delete(String ids,HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); moniService.delete(id); } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage") public String addPage() { return "/eumode/MoniNode/MoniNodeAdd"; } @RequestMapping("/add") @ResponseBody public Json add(monitoringNode nobj) { Json j = new Json(); try { moniService.add(nobj); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } /* @RequestMapping("/getMoniNodeInfo") public String getNodeInfo(HttpServletResponse response,HttpServletRequest request) { long nid=Integer.parseInt(request.getParameter("idString")); monitoringNode n=moniService.get(nid); request.setAttribute("moniNode_info", n); List data= pestDataService.getAlldataFromNodeId(nid); request.setAttribute("node_data", data); return "/admin/pestMoniNode/MoniNodeInfo"; } @RequestMapping("/getMoniNodeLocation") public void getNodeLocation(HttpServletResponse response) throws JSONException//暂时使用该方法 { List moniN = moniService.getAllData(); PrintWriter out = null; response.setContentType("text/json"); response.setCharacterEncoding("UTF-8"); JSONArray jsonArray = new JSONArray(); for(int i=0;i moniNodeList = null; if(data.getStation()!=null&&data.getStation()!=0) { Station s = stationS.get(data.getStation()); data.setSerialNum(s.getSerialNum()); // monitoringNode node =new monitoringNode(); // node.setStation(data.getStation()); // moniNodeList =moniService.dataGrid(node, ph); } // request.setAttribute("moniNodeList", moniNodeList); grid.setRows(Service.dataGrid(data, ph)); grid.setTotal(Service.count(data, ph)); return grid; } @RequestMapping("/delete") @ResponseBody public Json delete(String ids,HttpServletRequest request) { JSONArray jsonIds; Json j = new Json(); try { jsonIds = new JSONArray(ids); for (int i = 0; i < jsonIds.length(); i++) { long id = jsonIds.getLong(i); Service.delete(id,request); } j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage") public String addPage() { return "/eumode/news/newsAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Sensor nobj) { Json j = new Json(); try { Service.add(nobj); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/getSearchPage") public String getSearchPage() { return "/eumode/sensor/sensorSearch"; } @RequestMapping("/search") @ResponseBody public Json search(Object nobj) { Json j = new Json(); try { //Service.add(nobj); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sensor/stationController.java ================================================ package light.mvc.controller.sensor; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sensor.Station; import light.mvc.service.base.ServiceException; import light.mvc.service.sensor.stationServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.List; @Controller @RequestMapping("/station") public class stationController extends BaseController{ @Autowired private stationServiceI stationS; @RequestMapping("/getPage") public String getPage() { return "/eumode/station/station"; } @RequestMapping("/treeGrid") @ResponseBody public List treeGrid() { return stationS.treeGrid(); } @RequestMapping("/tree") @ResponseBody public List tree(HttpSession session) { return stationS.tree(); } @RequestMapping("/addPage") public String addPage() { return "/eumode/station/stationAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Station station) { Json j = new Json(); try { stationS.add(station); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/get") @ResponseBody public Station get(Long id) { return stationS.get(id); } @RequestMapping("/editPage") public String editPage(HttpServletRequest request,Long id) { Station o = stationS.get(id); request.setAttribute("station", o); return "/eumode/station/pestMoniNodeEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(Station org) throws InterruptedException { Json j = new Json(); try { stationS.edit(org); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { stationS.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (ServiceException e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/DictionaryController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.Dictionary; import light.mvc.service.sys.DictionaryServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.List; @Controller @RequestMapping("/dictionary") public class DictionaryController extends BaseController { @Autowired private DictionaryServiceI dictionaryService; @RequestMapping("/manager") public String manager() { return "/eumode/sys/dictionary"; } @RequestMapping("/combox") @ResponseBody public List combox(String code) { return dictionaryService.combox(code); } @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(Dictionary dictionary, PageFilter ph) { Grid grid = new Grid(); grid.setRows(dictionaryService.dataGrid(dictionary, ph)); grid.setTotal(dictionaryService.count(dictionary, ph)); return grid; } @RequestMapping("/addPage") public String addPage(HttpServletRequest request) { request.setAttribute("stateList", GlobalConstant.statelist); return "/eumode/sys/dictionaryAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Dictionary dictionary) { Json j = new Json(); Dictionary dic = dictionaryService.checkUnique(dictionary); if(dic==null){ try { dictionaryService.add(dictionary); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } }else{ j.setMsg("编码不能重复"); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { dictionaryService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/get") @ResponseBody public Dictionary get(Long id) { return dictionaryService.get(id); } @RequestMapping("/editPage") public String editPage(HttpServletRequest request,Long id) { Dictionary dic = dictionaryService.get(id); request.setAttribute("dictionary", dic); request.setAttribute("stateList", GlobalConstant.statelist); return "/eumode/sys/dictionaryEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(Dictionary dictionary) { Json j = new Json(); try { dictionaryService.edit(dictionary); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/DictionarytypeController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Dictionarytype; import light.mvc.service.sys.DictionarytypeServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; import java.util.List; @Controller @RequestMapping("/dictionarytype") public class DictionarytypeController extends BaseController { @Autowired private DictionarytypeServiceI dictionarytypeService; @RequestMapping("/tree") @ResponseBody public List tree(HttpSession session) { return dictionarytypeService.tree(); } @RequestMapping("/add") @ResponseBody public Json add(Dictionarytype dictionarytype) { Json j = new Json(); try { dictionarytypeService.add(dictionarytype); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); dictionarytypeService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); return j; } @RequestMapping("/get") @ResponseBody public Dictionarytype get(Long id) { return dictionarytypeService.get(id); } @RequestMapping("/edit") @ResponseBody public Json edit(Dictionarytype dictionarytype) { Json j = new Json(); try { dictionarytypeService.edit(dictionarytype); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/IndexController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.sys.User; import light.mvc.service.sys.ResourceServiceI; import light.mvc.service.sys.UserServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller @RequestMapping("/admin") public class IndexController extends BaseController { @Autowired private UserServiceI userService; @Autowired private ResourceServiceI resourceService; @RequestMapping("/index") public String index(HttpServletRequest request) { SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO_ADMIN); request.setAttribute("sessionInfo", sessionInfo); if ((sessionInfo != null) && (sessionInfo.getId() != null)) { return "/eumode/index"; } request.setAttribute("originUrl", "/admin/index"); return "/eumode/login"; } @ResponseBody @RequestMapping("/login") public Json login(User user, HttpSession session) { Json j = new Json(); User sysuser = userService.login(user); if (sysuser != null) { j.setSuccess(true); j.setMsg("登陆成功!"); SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setId(sysuser.getAutoID()); sessionInfo.setLoginname(sysuser.getLoginName()); sessionInfo.setName(sysuser.getRealName()); // user.setIp(IpUtil.getIpAddr(getRequest())); sessionInfo.setResourceList(userService.resourceList(sysuser.getAutoID())); sessionInfo.setResourceAllList(resourceService.resourceAllList()); session.setAttribute(GlobalConstant.SESSION_INFO_ADMIN, sessionInfo); sessionInfo.setSessionId(session.getId()); // 获取管理员的role类型name属性,回传给客户端进行分类,这里我们认为每个管理员的role类型都只有一个 sessionInfo.setRoleType(sysuser.getRoleNames()); j.setObj(sessionInfo); } else { j.setMsg("用户名或密码错误!"); } return j; } @ResponseBody @RequestMapping("/logout") public Json logout(HttpSession session) { Json j = new Json(); if (session != null) { session.invalidate(); } j.setSuccess(true); j.setMsg("注销成功!"); return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/OrganizationController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Organization; import light.mvc.service.base.ServiceException; import light.mvc.service.sys.OrganizationServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.List; @Controller @RequestMapping("/organization") public class OrganizationController extends BaseController { @Autowired private OrganizationServiceI organizationService; @RequestMapping("/manager") public String manager() { return "/eumode/sys/organization"; } @RequestMapping("/treeGrid") @ResponseBody public List treeGrid() { return organizationService.treeGrid(); } @RequestMapping("/tree") @ResponseBody public List tree(HttpSession session) { return organizationService.tree(); } @RequestMapping("/addPage") public String addPage() { return "/eumode/sys/organizationAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Organization organization) { Json j = new Json(); try { organizationService.add(organization); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/get") @ResponseBody public Organization get(Long id) { return organizationService.get(id); } @RequestMapping("/editPage") public String editPage(HttpServletRequest request,Long id) { Organization o = organizationService.get(id); request.setAttribute("organization", o); return "/eumode/sys/organizationEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(Organization org) throws InterruptedException { Json j = new Json(); try { organizationService.edit(org); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { organizationService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (ServiceException e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/PictureCheckCode.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.SessionInfo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; @Controller @RequestMapping("/baseUtil") public class PictureCheckCode extends BaseController{ private static final long serialVersionUID = 1L; /*该方法主要作用是获得随机生成的颜色*/ public Color getRandColor(int s,int e){ Random random=new Random (); if(s>255) s=255; if(e>255) e=255; int r,g,b; r=s+random.nextInt(e-s); //随机生成RGB颜色中的r值 g=s+random.nextInt(e-s); //随机生成RGB颜色中的g值 b=s+random.nextInt(e-s); //随机生成RGB颜色中的b值 return new Color(r,g,b); } @RequestMapping("/getCheckCode") @ResponseBody public void getCheckCode(HttpSession session,HttpServletRequest request, HttpServletResponse response) throws IOException { SessionInfo sessionInfo = (SessionInfo) session.getAttribute(GlobalConstant.SESSION_INFO_ADMIN); //设置不缓存图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); //指定生成的响应图片,一定不能缺少这句话,否则错误. response.setContentType("image/jpeg"); int width=86,height=22; //指定生成验证码的宽度和高度 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 设定字体 g.setFont(new Font("Times New Roman", Font.PLAIN, 24)); // 画边框 g.setColor(getRandColor(160, 200)); g.drawRect(0, 0, width - 1, height - 1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取随机产生的认证码(4位数字) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 14, 20); } // 将认证码存入SESSION session.setAttribute("vcode", sRand); System.out.println(sRand); // 图象生效 g.dispose(); // 输出图象到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); } @RequestMapping("/CheckCode") @ResponseBody public Json checkCode(HttpSession session,String ValidateCode) { Json j = new Json(); String code =(String) session.getAttribute("vcode"); if(ValidateCode.equals(code)) { j.setSuccess(true); } else { j.setSuccess(false); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/ResourceController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Resource; import light.mvc.service.sys.ResourceServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.List; @Controller @RequestMapping("/resource") public class ResourceController extends BaseController { @Autowired private ResourceServiceI resourceService; @RequestMapping("/manager") public String manager() { return "/eumode/sys/resource"; } @RequestMapping("/tree") @ResponseBody public List tree(HttpSession session) { SessionInfo sessionInfo = (SessionInfo) session.getAttribute(GlobalConstant.SESSION_INFO_ADMIN); return resourceService.tree(sessionInfo); } @RequestMapping("/allTree") @ResponseBody public List allTree(boolean flag) {//true获取全部资源,false只获取菜单资源 return resourceService.allTree(flag); } @RequestMapping("/treeGrid") @ResponseBody public List treeGrid() { return resourceService.treeGrid(); } @RequestMapping("/get") @ResponseBody public Resource get(Long id) { return resourceService.get(id); } @RequestMapping("/editPage") public String editPage(HttpServletRequest request,Long id) { Resource r = resourceService.get(id); request.setAttribute("resource", r); return "/eumode/sys/resourceEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(Resource resource) throws InterruptedException { Json j = new Json(); try { resourceService.edit(resource); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { resourceService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage") public String addPage() { return "/eumode/sys/resourceAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Resource resource) { Json j = new Json(); try { resourceService.add(resource); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/RoleController.java ================================================ package light.mvc.controller.sys; import light.mvc.controller.base.BaseController; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Role; import light.mvc.service.sys.RoleServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.List; @Controller @RequestMapping("/role") public class RoleController extends BaseController { @Autowired private RoleServiceI roleService; @RequestMapping("/manager") public String manager() { return "/eumode/sys/role"; } @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(Role role, PageFilter ph) { // spring自动将参数注入到ph对象中 Grid grid = new Grid(); grid.setRows(roleService.dataGrid(role, ph)); grid.setTotal(roleService.count(role, ph)); return grid; } @RequestMapping("/tree") @ResponseBody public List tree() { return roleService.tree(); } @RequestMapping("/addPage") public String addPage() { return "/eumode/sys/roleAdd"; } @RequestMapping("/add") @ResponseBody public Json add(Role role) { Json j = new Json(); try { roleService.add(role); j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { roleService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/get") @ResponseBody public Role get(Long id) { return roleService.get(id); } @RequestMapping("/editPage") public String editPage(HttpServletRequest request, Long id) { Role r = roleService.get(id); request.setAttribute("role", r); return "/eumode/sys/roleEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(Role role) { Json j = new Json(); try { if(role.getIsdefault()==1) { Role r2=new Role(); r2.setIsdefault(1); PageFilter ph = new PageFilter(); if(roleService.count(r2, ph)>0) { j.setSuccess(false); j.setMsg("不能存在多于2个默认角色"); return j; } } roleService.edit(role); j.setSuccess(true); j.setMsg("编辑成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/grantPage") public String grantPage(HttpServletRequest request, Long id) { Role r = roleService.get(id); request.setAttribute("role", r); return "/eumode/sys/roleGrant"; } @RequestMapping("/grant") @ResponseBody public Json grant(Role role) { Json j = new Json(); try { roleService.grant(role); j.setMsg("授权成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } } ================================================ FILE: src/main/java/light/mvc/controller/sys/UserController.java ================================================ package light.mvc.controller.sys; import com.alibaba.fastjson.JSON; import light.mvc.controller.base.BaseController; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.Grid; import light.mvc.pageModel.base.Json; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.sys.EFResourceMeta; import light.mvc.pageModel.sys.User; import light.mvc.service.base.ServiceException; import light.mvc.service.sys.DictionaryServiceI; import light.mvc.service.sys.ResourceMetaServiceI; import light.mvc.service.sys.UserServiceI; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; @Controller @RequestMapping("/user") public class UserController extends BaseController { @Autowired private UserServiceI userService; @Autowired private DictionaryServiceI dictionaryService; @Autowired private ResourceMetaServiceI resourceMetaService; @RequestMapping("/manager") public String manager(HttpServletRequest request) { request.setAttribute("usertypeJson", JSON.toJSONString(dictionaryService.combox("usertype"))); return "/eumode/sys/user"; } @RequestMapping("/dataGrid") @ResponseBody public Grid dataGrid(User user, PageFilter ph) { Grid grid = new Grid(); grid.setRows(userService.dataGrid(user, ph)); grid.setTotal(userService.count(user, ph)); return grid; } @RequestMapping("/editPwdPage") public String editPwdPage(HttpServletRequest request) { return "/eumode/sys/userEditPwd"; } @RequestMapping("/editUserPwd") @ResponseBody public Json editUserPwd(HttpServletRequest request,String oldPwd, String pwd) { SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO_ADMIN); Json j = new Json(); try { if(userService.editUserPwd(sessionInfo, oldPwd, pwd)){ j.setSuccess(true); j.setMsg("密码修改成功!"); }else{ j.setSuccess(false); j.setMsg("原密码输入错误!"); } } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/addPage") public String addPage(HttpServletRequest request) { request.setAttribute("sexList", GlobalConstant.sexlist); request.setAttribute("needPublishList", GlobalConstant.needPublishList); return "/eumode/sys/userAdd"; } @RequestMapping("/add") @ResponseBody public Json add(User user) { Json j = new Json(); User u = userService.getByLoginName(user); if(u!=null){ j.setMsg("用户名已存在!"); }else{ try { Long personalid = userService.add(user); if(personalid != null && personalid > 0){ if(user.getImagePath() != null && user.getImagePath().length() > 0){ String[] arrayList = user.getImagePath().split("\\^"); String imageName = arrayList[0]; String imagePath = arrayList[1]; EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictionaryService.getDictionary("ResourceMetaType", "Expert").getId()); rm.setMetaID(personalid); rm.setMetaPath(imagePath); rm.setMetaDescription(imageName); resourceMetaService.add(rm); } } j.setSuccess(true); j.setMsg("添加成功!"); } catch (Exception e) { j.setMsg(e.getMessage()); } } return j; } @RequestMapping("/get") @ResponseBody public User get(Long id) { return userService.get(id); } @RequestMapping("/delete") @ResponseBody public Json delete(Long id) { Json j = new Json(); try { userService.delete(id); j.setMsg("删除成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/editPage") public String editPage(HttpServletRequest request, Long id) { User u = userService.get(id); request.setAttribute("user", u); request.setAttribute("sexList", GlobalConstant.sexlist); request.setAttribute("needPublishList", GlobalConstant.needPublishList); List rmList = resourceMetaService.get(u.getAutoID(), dictionaryService.getDictionary("ResourceMetaType", "Expert").getId()); if(rmList != null && rmList.size() > 0){ u.setImagePath(rmList.get(0).getMetaPath()); } return "/eumode/sys/userEdit"; } @RequestMapping("/edit") @ResponseBody public Json edit(User user) { Json j = new Json(); try { userService.edit(user); if(user.getImagePath() != null && user.getImagePath().length() > 0){ String[] arrayList = user.getImagePath().split("\\^"); String imageName = arrayList[0]; String imagePath = arrayList[1]; List rmList = resourceMetaService.get(user.getAutoID(), dictionaryService.getDictionary("ResourceMetaType", "Expert").getId()); if(rmList != null && rmList.size() > 0){ //更换图片 EFResourceMeta rm = rmList.get(0); rm.setMetaPath(imagePath); rm.setMetaDescription(imageName); resourceMetaService.edit(rm); } else{ //新增图片 EFResourceMeta rm = new EFResourceMeta(); rm.setType(dictionaryService.getDictionary("ResourceMetaType", "Expert").getId()); rm.setMetaID(user.getAutoID()); rm.setMetaPath(imagePath); rm.setMetaDescription(imageName); resourceMetaService.add(rm); } } j.setSuccess(true); j.setMsg("编辑成功!"); } catch (ServiceException e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/getExpertByManual") @ResponseBody public Json getExpertByManual(User user) { Json j= new Json(); try{ userService.setManual(user); j.setMsg("授权成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } @RequestMapping("/manualPage") public String manualPage(HttpServletRequest request, Long id) { User u = userService.get(id); request.setAttribute("user", u); return "/eumode/sys/userManual"; } @RequestMapping("/setManual") @ResponseBody public Json setManual(User user) { Json j= new Json(); try{ userService.setManual(user); j.setMsg("授权成功!"); j.setSuccess(true); } catch (Exception e) { j.setMsg(e.getMessage()); } return j; } //允许上传的文件后缀 private static String fileExt = "jpg,jpeg,bmp,gif,png"; //上传文件的大小限制,5M private static Long maxSize = 5242880L; // 0:不建目录 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 private static String dirType = "0"; //上传文件存储目录 private static String userImageDir = "/uploadfile/user_image/"; /* * 上传文件操作 * @param request, response * @return * */ @RequestMapping("/getUploadFile") @ResponseBody public void getUploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); String err = ""; String newFileName = ""; if ("application/octet-stream".equals(request.getContentType())) { //HTML 5 上传 try { String dispoString = request.getHeader("Content-Disposition"); int iFindStart = dispoString.indexOf("name=\"")+6; int iFindEnd = dispoString.indexOf("\"", iFindStart); iFindStart = dispoString.indexOf("filename=\"")+10; iFindEnd = dispoString.indexOf("\"", iFindStart); String sFileName = dispoString.substring(iFindStart, iFindEnd); int i = request.getContentLength(); byte buffer[] = new byte[i]; int j = 0; while(j < i) { //获取表单的上传文件 int k = request.getInputStream().read(buffer, j, i-j); j += k; } if (buffer.length == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && buffer.length > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(sFileName, request, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 //System.out.println("newFileName:" + request.getSession().getServletContext().getRealPath("") + filepathString); OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(buffer); out.close(); newFileName = request.getContextPath() + filepathString; } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } else{ Boolean mulipart = ServletFileUpload.isMultipartContent(request); if(!mulipart) { printInfo(response, "上传格式错误", ""); return; } //以下部分供上传附件使用 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List fileList = multipartRequest.getFiles("Filedata"); try { for (MultipartFile mf : fileList) { if(mf.isEmpty()){ continue; } CommonsMultipartFile cf= (CommonsMultipartFile)mf; DiskFileItem fi = (DiskFileItem)cf.getFileItem(); String fileNameLong = fi.getName(); //获取文件上传路径名称 fileNameLong = fileNameLong.replaceAll("^", ""); if (mf.getSize() == 0) { //文件是否为空 printInfo(response, "上传文件不能为空", ""); return; } if (maxSize > 0 && mf.getSize() > maxSize) { //检查文件大小 printInfo(response, "上传文件的大小超出限制", ""); return; } String filepathString = getSaveFilePath(fileNameLong, request, response); if ("不允许上传此类型的文件".equals(filepathString)) return; //检查文件类型 OutputStream out=new BufferedOutputStream(new FileOutputStream(request.getSession().getServletContext().getRealPath("") + filepathString,true)); out.write(mf.getBytes()); out.close(); newFileName += fileNameLong + "^" + request.getContextPath() + filepathString + ";"; } } catch (Exception ex) { System.out.println(ex.getMessage()); newFileName = ""; err = "错误: " + ex.getMessage(); } } printInfo(response, err, newFileName); } private String getSaveFilePath(String sFileName, HttpServletRequest request, HttpServletResponse response) throws IOException { /*获取文件扩展名*/ /*索引加1的效果是只取xxx.jpg的jpg*/ String extensionName = sFileName.substring(sFileName.lastIndexOf(".") + 1); extensionName = extensionName.toLowerCase(); //System.out.println("extensionName:" + extensionName); /*检查文件类型*/ if (("," + fileExt.toLowerCase() + ",").indexOf("," + extensionName + ",") < 0){ printInfo(response, "不允许上传此类型的文件", ""); return "不允许上传此类型的文件"; } //0:不建目录, 1:按天存入目录, 2:按月存入目录, 3:按扩展名存目录.建议使用按天存. String fileFolder = ""; if (dirType.equalsIgnoreCase("1")) fileFolder = new SimpleDateFormat("yyyyMMdd").format(new Date()); if (dirType.equalsIgnoreCase("2")) fileFolder = new SimpleDateFormat("yyyyMM").format(new Date()); if (dirType.equalsIgnoreCase("3")) fileFolder = extensionName; /*文件存储的相对路径*/ String saveDirPath = userImageDir + fileFolder + "/"; //System.out.println("saveDirPath:" + saveDirPath); /*文件存储在容器中的绝对路径*/ String saveFilePath = request.getSession().getServletContext().getRealPath("") + saveDirPath; //System.out.println("saveFilePath:" + saveFilePath); /*构建文件目录以及目录文件*/ File fileDir = new File(saveFilePath); if (!fileDir.exists()) {fileDir.mkdirs();} /*重命名文件*/ String filename = UUID.randomUUID().toString(); return saveDirPath + filename + "." + extensionName; } /** * 使用I/O流输出 json格式的数据 * @param response * @param err * @param newFileName * @throws IOException */ private void printInfo(HttpServletResponse response, String err, String newFileName) throws IOException { PrintWriter out = response.getWriter(); //String filename = newFileName.substring(newFileName.lastIndexOf("/") + 1); out.println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}"); out.flush(); out.close(); } } ================================================ FILE: src/main/java/light/mvc/dao/BaseDaoI.java ================================================ package light.mvc.dao; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.math.BigInteger; import java.util.List; import java.util.Map; public interface BaseDaoI { public Serializable save(T o); public void delete(T o); public void update(T o); public void saveOrUpdate(T o); public T get(Class c, Serializable id); public T get(String hql); public T get(String hql, Map params); public List find(String hql); public List find(String hql, Map params); public List find(String hql, int page, int rows); public List find(String hql, Map params, int page, int rows); public Long count(String hql); public Long count(String hql, Map params); public int executeHql(String hql); public int executeHql(String hql, Map params); public List findBySql(String sql); public List findBySql(String sql, int page, int rows); public List findBySql(String sql, Map params); public List findBySql(String sql, Map params, int page, int rows); public int executeSql(String sql); public int executeSql(String sql, Map params); public BigInteger countBySql(String sql); public BigInteger countBySql(String sql, Map params); public void deleteFile(String filePath, HttpServletRequest request);//通过request获取网站根目录的绝对路径 } ================================================ FILE: src/main/java/light/mvc/dao/impl/BaseDaoImpl.java ================================================ package light.mvc.dao.impl; import light.mvc.dao.BaseDaoI; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.Serializable; import java.math.BigInteger; import java.util.List; import java.util.Map; @Repository public class BaseDaoImpl implements BaseDaoI { @Autowired private SessionFactory sessionFactory; /** * 获得当前事物的session * * @return org.hibernate.Session */ public Session getCurrentSession() { return this.sessionFactory.getCurrentSession(); } @Override public Serializable save(T o) { if (o != null) { return this.getCurrentSession().save(o); } return null; } @Override public T get(Class c, Serializable id) { return (T) this.getCurrentSession().get(c, id); } @Override public T get(String hql) { Query q = this.getCurrentSession().createQuery(hql); List l = q.list(); if ((l != null) && (l.size() > 0)) { return l.get(0); } return null; } @Override public T get(String hql, Map params) { Query q = this.getCurrentSession().createQuery(hql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } List l = q.list(); if ((l != null) && (l.size() > 0)) { return l.get(0); } return null; } @Override public void delete(T o) { if (o != null) { this.getCurrentSession().delete(o); } } @Override public void update(T o) { if (o != null) { this.getCurrentSession().update(o); } } @Override public void saveOrUpdate(T o) { if (o != null) { this.getCurrentSession().saveOrUpdate(o); } } @Override public List find(String hql) { Query q = this.getCurrentSession().createQuery(hql); return q.list(); } @Override public List find(String hql, Map params) { Query q = this.getCurrentSession().createQuery(hql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.list(); } @Override public List find(String hql, Map params, int page, int rows) { Query q = this.getCurrentSession().createQuery(hql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); } @Override public List find(String hql, int page, int rows) { Query q = this.getCurrentSession().createQuery(hql); return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); } @Override public Long count(String hql) { Query q = this.getCurrentSession().createQuery(hql); return (Long) q.uniqueResult(); } @Override public Long count(String hql, Map params) { Query q = this.getCurrentSession().createQuery(hql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return (Long) q.uniqueResult(); } @Override public int executeHql(String hql) { Query q = this.getCurrentSession().createQuery(hql); return q.executeUpdate(); } @Override public int executeHql(String hql, Map params) { Query q = this.getCurrentSession().createQuery(hql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.executeUpdate(); } @Override public List findBySql(String sql) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); return q.list(); } @Override public List findBySql(String sql, int page, int rows) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); } @Override public List findBySql(String sql, Map params) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.list(); } @Override public List findBySql(String sql, Map params, int page, int rows) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); } @Override public int executeSql(String sql) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); return q.executeUpdate(); } @Override public int executeSql(String sql, Map params) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return q.executeUpdate(); } @Override public BigInteger countBySql(String sql) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); return (BigInteger) q.uniqueResult(); } @Override public BigInteger countBySql(String sql, Map params) { SQLQuery q = this.getCurrentSession().createSQLQuery(sql); if ((params != null) && !params.isEmpty()) { for (String key : params.keySet()) { q.setParameter(key, params.get(key)); } } return (BigInteger) q.uniqueResult(); } @Override public void deleteFile(String filePath,HttpServletRequest request) { String proPath=request.getSession().getServletContext().getRealPath("/"); File file=new File(proPath+filePath); if(file.exists()){ file.delete(); } } } ================================================ FILE: src/main/java/light/mvc/framework/constant/GlobalConstant.java ================================================ package light.mvc.framework.constant; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; public class GlobalConstant { public static final String caipoLoginURL ="http://123.127.143.37/caipoweb/UserModel/Login"; public static final String caipoLoginName ="login_name="; public static final String caipoPasswork ="password="; public static final String caipoStationDateURL ="http://123.127.143.37/caipoweb/DataModel/list"; public static final String ACCESS_TOKEN_TEST = "ACCESS_TOKEN";//专家 public static final String USERCODE="wsnwsn640"; public static final String USERSECRET="wsnwsn640"; public static final String SECRET="wsnwsn640"; // 专家和普通用户类型字符串 public static final String EXPERT = "expert";//专家 public static final String MEMBER = "member";//普通用户 // 系统各种类型的用户session字段设置 public static final String SESSION_INFO_ADMIN = "sessionInfo";//管理员session常量 public static final String SESSION_INFO_EXPERT = "sessionInfo";//专家用户session常量 public static final String SESSION_INFO_MEMBER = "sessionInfo";//专家用户session常量 public static final String SESSION_INFO_USER = "sessionInfo";//专家用户session常量 public static final Integer ENABLE = 0; // 启用 public static final Integer DISABLE = 1; // 禁用 public static final Integer DEFAULT = 0; // 默认 public static final Integer NOT_DEFAULT = 1; // 非默认 public static final Map sexlist = new HashMap(){{ put("0", "男"); put("1", "女");} }; public static final Map needPublishList = new HashMap(){{ put("0", "不发布"); put("1", "发布");} }; public static final Map statelist = new HashMap(){{ put("1", "启用"); put("0", "停用");} }; public static final Map statuslist = new HashMap(){{ put("0", "待审核"); put("1", "通过"); put("-1", "不通过");} }; public static final String uploadFolder = "/uploadfile"; public static final String uploadThumbFolder = "/uploadfile/thumb"; // xx_resource表中资源type的类别定义 public static final String PICTURETYPE = "picture"; public static final String VIDEOTYPE = "video"; public static final SimpleDateFormat myFmt1=new SimpleDateFormat("yyyy-MM-dd"); } ================================================ FILE: src/main/java/light/mvc/framework/interceptors/SecurityInterceptor.java ================================================ package light.mvc.framework.interceptors; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.SessionInfo; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * 权限拦截器 * */ public class SecurityInterceptor implements HandlerInterceptor { private List excludeUrls;// 不需要拦截的资源 public List getExcludeUrls() { return excludeUrls; } public void setExcludeUrls(List excludeUrls) { this.excludeUrls = excludeUrls; } /** * 完成页面的render后调用 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { } /** * 在调用controller具体方法后拦截 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView) throws Exception { } /** * 在调用controller具体方法前拦截 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { String requestUri = request.getRequestURI(); String contextPath = request.getContextPath(); String url = requestUri.substring(contextPath.length()); SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO_ADMIN); //判断访问的资源是否不需要验证身份,排除url是/front/**的情况 if ((url.indexOf("/admin/") > -1) || (url.indexOf("/front/") > -1)|| (url.indexOf("/baseUtil/") > -1)||excludeUrls.contains(url)) {// 如果要访问的资源是不需要验证的 return true; } // 验证管理员身份 if ((sessionInfo == null) || (sessionInfo.getId() == null)) {// 如果没有登录或登录超时 request.setAttribute("msg", "您还没有登录或登录已超时,请重新登录,然后再刷新本功能!"); request.getRequestDispatcher("/error/noSession.jsp").forward(request, response); return false; } // 不是本系统的有的url if(!sessionInfo.getResourceAllList().contains(url)){ return true; } if (!sessionInfo.getResourceList().contains(url)) {// 如果当前用户没有访问此资源的权限 request.setAttribute("msg", "您没有访问此资源的权限!
请联系超管赋予您
[" + url + "]
的资源访问权限!"); request.getRequestDispatcher("/error/noSecurity.jsp").forward(request, response); return false; } return true; } } ================================================ FILE: src/main/java/light/mvc/framework/interceptors/SecurityInterceptorFront.java ================================================ package light.mvc.framework.interceptors; import light.mvc.framework.constant.GlobalConstant; import light.mvc.pageModel.base.SessionInfo; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * 权限拦截器 * */ public class SecurityInterceptorFront implements HandlerInterceptor { private List excludeUrls;// 不需要拦截的资源 public List getExcludeUrls() { return excludeUrls; } public void setExcludeUrls(List excludeUrls) { this.excludeUrls = excludeUrls; } /** * 完成页面的render后调用 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { } /** * 在调用controller具体方法后拦截 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView) throws Exception { } /** * 在调用controller具体方法前拦截 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { String requestUri = request.getRequestURI(); String contextPath = request.getContextPath(); String url = requestUri.substring(contextPath.length()); SessionInfo sessionInfoExpert = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO_EXPERT); SessionInfo sessionInfoMember = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO_MEMBER); if (excludeUrls.contains(url)|| (url.indexOf("/baseUtil/") > -1) || ((url.indexOf("/front") > -1)&&(url.indexOf("/base") > -1))||url.indexOf("/mobile/")>-1) {// 如果要访问的资源是不需要验证的 return true; } if (((sessionInfoExpert == null) || (sessionInfoExpert.getId() == null))&&((sessionInfoMember == null) || (sessionInfoMember.getId() == null))) {// 如果没有登录或登录超时 request.getRequestDispatcher("/WEB-INF/views//front/login.jsp").forward(request, response); return false; } return true; } } ================================================ FILE: src/main/java/light/mvc/model/base/IdEntity.java ================================================ package light.mvc.model.base; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; /** * 统一定义id的entity基类. * * 基类统一定义id的属性名称、数据类型、列名映射及生成策略. * Oracle需要每个Entity独立定义id的SEQUCENCE时,不继承于本类而改为实现一个Idable的接口。 * * @author 鸵鸟 */ @MappedSuperclass public abstract class IdEntity { protected Long id; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } } ================================================ FILE: src/main/java/light/mvc/model/base/IdEntityORACLE.java ================================================ package light.mvc.model.base; import javax.persistence.*; /** * 支持oracle 拿用户来说,这个还没想好,怎么样切换方便一点 * 建表语句要创建sequence * create sequence SEQ_USER start with 100 increment by 20; * */ @MappedSuperclass public abstract class IdEntityORACLE { protected Long id; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "UserSequence") @SequenceGenerator(name = "UserSequence", sequenceName = "SEQ_USER", allocationSize = 20) public Long getId() { return id; } public void setId(Long id) { this.id = id; } } ================================================ FILE: src/main/java/light/mvc/model/base/baseEntity.java ================================================ package light.mvc.model.base; import javax.persistence.*; import java.util.Date; /** * 统一定义各表的基本属性的entity基类. * * 基类统一定义id的属性名称、数据类型、列名映射及生成策略. * Oracle需要每个Entity独立定义id的SEQUCENCE时,不继承于本类而改为实现一个Idable的接口。 * * createDate * createBy * updateDate * updateBy * Active * Deleted * TS * 等公共字段的基本属性名称、数据类型、咧映射及生成策略 * * 编写日期:2016-8-8 * * 特别注意:尚未完善 * * @author yeyaowen */ @MappedSuperclass public abstract class baseEntity { protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getAutoID() { return autoID; } public void setAutoID(Long id) { this.autoID = id; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } @Temporal(TemporalType.TIMESTAMP) public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } } ================================================ FILE: src/main/java/light/mvc/model/manual/TEFmanualCategory.java ================================================ package light.mvc.model.manual; import light.mvc.model.base.baseEntity; import light.mvc.model.sys.TEFPersonalInfo; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "manualcategory") @DynamicInsert(true) @DynamicUpdate(true) public class TEFmanualCategory extends baseEntity implements java.io.Serializable{ private String categoryName; private String categoryCode; private String categoryDescription; private Set users= new HashSet(0); private TEFmanualCategory parent; public TEFmanualCategory(String categoryName, String categoryCode, String categoryDescription, TEFmanualCategory parent) { super(); this.categoryName = categoryName; this.categoryCode = categoryCode; this.categoryDescription = categoryDescription; this.parent = parent; } public TEFmanualCategory() { super(); // TODO Auto-generated constructor stub } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getCategoryCode() { return categoryCode; } public void setCategoryCode(String categoryCode) { this.categoryCode = categoryCode; } public String getCategoryDescription() { return categoryDescription; } public void setCategoryDescription(String categoryDescription) { this.categoryDescription = categoryDescription; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ParentID") public TEFmanualCategory getParent() { return parent; } public void setParent(TEFmanualCategory parent) { this.parent = parent; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "personalmanual", joinColumns = { @JoinColumn(name = "ManualCategoryID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "PersonalID", nullable = false, updatable = false) }) @OrderBy("AutoID ASC") public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } } ================================================ FILE: src/main/java/light/mvc/model/manual/TEFmanualContent.java ================================================ package light.mvc.model.manual; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "manualcontent") @DynamicInsert(true) @DynamicUpdate(true) public class TEFmanualContent extends baseEntity implements java.io.Serializable{ private Long manualCategoryID; private String categoryCode; private String content; private String title; private String filePath; public TEFmanualContent() { super(); // TODO Auto-generated constructor stub } public TEFmanualContent(Long manualCategoryID, String categoryCode, String content, String title, String filePath) { super(); this.manualCategoryID = manualCategoryID; this.categoryCode = categoryCode; this.content = content; this.title = title; this.filePath = filePath; } public Long getManualCategoryID() { return manualCategoryID; } public void setManualCategoryID(Long manualCategoryID) { this.manualCategoryID = manualCategoryID; } public String getCategoryCode() { return categoryCode; } public void setCategoryCode(String categoryCode) { this.categoryCode = categoryCode; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } } ================================================ FILE: src/main/java/light/mvc/model/manual/TEFmanualKeyword.java ================================================ package light.mvc.model.manual; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "manualkeyword") @DynamicInsert(true) @DynamicUpdate(true) public class TEFmanualKeyword extends baseEntity implements java.io.Serializable { private Long manualContentID; private Long categoryID; private String categoryCode; private String keyword; public TEFmanualKeyword() { super(); // TODO Auto-generated constructor stub } public TEFmanualKeyword(Long manualCategoryID, Long categoryID, String categoryCode, String keyword) { super(); this.manualContentID = manualCategoryID; this.categoryID = categoryID; this.categoryCode = categoryCode; this.keyword = keyword; } public Long getManualContentID(){ return manualContentID; } public void setManualContentID(Long manualContentID){ this.manualContentID = manualContentID; } public Long getCategoryID(){ return categoryID; } public void setCategoryID(Long categoryID){ this.categoryID = categoryID; } public String getCategoryCode(){ return categoryCode; } public void setCategoryCode(String categoryCode){ this.categoryCode = categoryCode; } public String getKeyword(){ return keyword; } public void setKeyword(String keyword){ this.keyword = keyword; } } ================================================ FILE: src/main/java/light/mvc/model/news/TEFcategory.java ================================================ package light.mvc.model.news; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "newscategory") @DynamicInsert(true) @DynamicUpdate(true) public class TEFcategory extends baseEntity implements java.io.Serializable{ private String categoryName; private String categoryDescription; private Long type; public TEFcategory() { super(); } public TEFcategory(String categoryName, String categoryDescription, Long type) { super(); this.categoryName = categoryName; this.categoryDescription = categoryDescription; this.type = type; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getCategoryDescription() { return categoryDescription; } public void setCategoryDescription(String categoryDescription) { this.categoryDescription = categoryDescription; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } } ================================================ FILE: src/main/java/light/mvc/model/news/TEFnews.java ================================================ package light.mvc.model.news; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; import java.util.Date; @Entity @Table(name = "newscontent") @DynamicInsert(true) @DynamicUpdate(true) public class TEFnews extends baseEntity implements java.io.Serializable { private Long personalID; private String author; private String title; private String content; private String webPath; private Date publishDate; private Integer readCount; private Long status; private Long categoryID; public TEFnews() { super(); } public TEFnews(Long personalID, String author, String title, String content, String webPath, Date publishDate, Integer readCount, Long status, Long categoryID) { super(); this.personalID = personalID; this.author = author; this.title = title; this.content = content; this.webPath = webPath; this.publishDate = publishDate; this.readCount = readCount; this.status = status; this.categoryID = categoryID; } public Long getPersonalID() { return personalID; } public void setPersonalID(Long personalID) { this.personalID = personalID; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } public Date getPublishDate() { return publishDate; } public void setPublishDate(Date publishDate) { this.publishDate = publishDate; } public Integer getReadCount() { return readCount; } public void setReadCount(Integer readCount) { this.readCount = readCount; } public Long getStatus() { return status; } public void setStatus(Long status) { this.status = status; } public Long getCategoryID() { return categoryID; } public void setCategoryID(Long categoryID) { this.categoryID = categoryID; } } ================================================ FILE: src/main/java/light/mvc/model/sensor/TmonitoringNode.java ================================================ package light.mvc.model.sensor; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "monitoringnode") @DynamicInsert(true) @DynamicUpdate(true) public class TmonitoringNode extends baseEntity implements java.io.Serializable{ private String name; private String code; private Double locationX; private Double locationY; private Long type; private Long station; private Integer fps; private String address;//保留字段 private String description; private Integer sensor_ch; private String map; private String dataKey; public TmonitoringNode() { super(); } public TmonitoringNode(String name, String code, Double locationX, Double locationY, Long type, Long station, Integer fps, String address, String description, Integer sensor_ch, String map, String dataKey) { super(); this.name = name; this.code = code; this.locationX = locationX; this.locationY = locationY; this.type = type; this.station = station; this.fps = fps; this.address = address; this.description = description; this.sensor_ch = sensor_ch; this.map = map; this.dataKey = dataKey; } public String getDataKey() { return dataKey; } public void setDataKey(String dataKey) { this.dataKey = dataKey; } public Integer getSensor_ch() { return sensor_ch; } public void setSensor_ch(Integer sensor_ch) { this.sensor_ch = sensor_ch; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Double getLocationX() { return locationX; } public void setLocationX(Double locationX) { this.locationX = locationX; } public Double getLocationY() { return locationY; } public void setLocationY(Double locationY) { this.locationY = locationY; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getStation() { return station; } public void setStation(Long station) { this.station = station; } public Integer getFps() { return fps; } public void setFps(Integer fps) { this.fps = fps; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getMap() { return map; } public void setMap(String map) { this.map = map; } } ================================================ FILE: src/main/java/light/mvc/model/sensor/TpestData.java ================================================ package light.mvc.model.sensor; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "pestdata") @DynamicInsert(true) @DynamicUpdate(true) public class TpestData extends baseEntity implements java.io.Serializable{ private String name; private Long type; private Long monitoringNodeId; // private Long sensorId; private Long imgId; private Integer count; private Integer realCount; private String description; public TpestData() { super(); // TODO Auto-generated constructor stub } public TpestData(String name, Long type, Long monitoringNodeId, Long imgId, Integer count, Integer realCount, String description) { super(); this.name = name; this.type = type; this.monitoringNodeId = monitoringNodeId; this.imgId = imgId; this.count = count; this.realCount = realCount; this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getMonitoringNodeId() { return monitoringNodeId; } public void setMonitoringNodeId(Long monitoringNodeId) { this.monitoringNodeId = monitoringNodeId; } public Long getImgId() { return imgId; } public void setImgId(Long imgId) { this.imgId = imgId; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Integer getRealCount() { return realCount; } public void setRealCount(Integer realCount) { this.realCount = realCount; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } ================================================ FILE: src/main/java/light/mvc/model/sensor/Tsensor.java ================================================ package light.mvc.model.sensor; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "sensor") @DynamicInsert(true) @DynamicUpdate(true) public class Tsensor extends baseEntity implements java.io.Serializable{ private Long monitoringNodeId; private Long serialNum; private Integer sensor_ch; private Double sensor1; private Double sensor2; private Double sensor3; private Double sensor4; private Double sensor5; private Double sensor6; private Double sensor7; private Double sensor8; private Double sensor9; private Double sensor10; private Double sensor11; private Double sensor12; private Double sensor13; private Double sensor14; private Double sensor15; private Double sensor16; private Double sensor17; private Double sensor18; private Double sensor19; private Double sensor20; public Tsensor() { super(); // TODO Auto-generated constructor stub } public Tsensor(Long monitoringNodeId, Long serialNum, Integer sensor_ch, Double sensor1, Double sensor2, Double sensor3, Double sensor4, Double sensor5, Double sensor6, Double sensor7, Double sensor8, Double sensor9, Double sensor10, Double sensor11, Double sensor12, Double sensor13, Double sensor14, Double sensor15, Double sensor16, Double sensor17, Double sensor18, Double sensor19, Double sensor20) { super(); this.monitoringNodeId = monitoringNodeId; this.serialNum = serialNum; this.sensor_ch = sensor_ch; this.sensor1 = sensor1; this.sensor2 = sensor2; this.sensor3 = sensor3; this.sensor4 = sensor4; this.sensor5 = sensor5; this.sensor6 = sensor6; this.sensor7 = sensor7; this.sensor8 = sensor8; this.sensor9 = sensor9; this.sensor10 = sensor10; this.sensor11 = sensor11; this.sensor12 = sensor12; this.sensor13 = sensor13; this.sensor14 = sensor14; this.sensor15 = sensor15; this.sensor16 = sensor16; this.sensor17 = sensor17; this.sensor18 = sensor18; this.sensor19 = sensor19; this.sensor20 = sensor20; } public Long getSerialNum() { return serialNum; } public void setSerialNum(Long serialNum) { this.serialNum = serialNum; } public Integer getSensor_ch() { return sensor_ch; } public void setSensor_ch(Integer sensor_ch) { this.sensor_ch = sensor_ch; } public Long getMonitoringNodeId() { return monitoringNodeId; } public void setMonitoringNodeId(Long monitoringNodeId) { this.monitoringNodeId = monitoringNodeId; } public Double getSensor1() { return sensor1; } public void setSensor1(Double sensor1) { this.sensor1 = sensor1; } public Double getSensor2() { return sensor2; } public void setSensor2(Double sensor2) { this.sensor2 = sensor2; } public Double getSensor3() { return sensor3; } public void setSensor3(Double sensor3) { this.sensor3 = sensor3; } public Double getSensor4() { return sensor4; } public void setSensor4(Double sensor4) { this.sensor4 = sensor4; } public Double getSensor5() { return sensor5; } public void setSensor5(Double sensor5) { this.sensor5 = sensor5; } public Double getSensor6() { return sensor6; } public void setSensor6(Double sensor6) { this.sensor6 = sensor6; } public Double getSensor7() { return sensor7; } public void setSensor7(Double sensor7) { this.sensor7 = sensor7; } public Double getSensor8() { return sensor8; } public void setSensor8(Double sensor8) { this.sensor8 = sensor8; } public Double getSensor9() { return sensor9; } public void setSensor9(Double sensor9) { this.sensor9 = sensor9; } public Double getSensor10() { return sensor10; } public void setSensor10(Double sensor10) { this.sensor10 = sensor10; } public Double getSensor11() { return sensor11; } public void setSensor11(Double sensor11) { this.sensor11 = sensor11; } public Double getSensor12() { return sensor12; } public void setSensor12(Double sensor12) { this.sensor12 = sensor12; } public Double getSensor13() { return sensor13; } public void setSensor13(Double sensor13) { this.sensor13 = sensor13; } public Double getSensor14() { return sensor14; } public void setSensor14(Double sensor14) { this.sensor14 = sensor14; } public Double getSensor15() { return sensor15; } public void setSensor15(Double sensor15) { this.sensor15 = sensor15; } public Double getSensor16() { return sensor16; } public void setSensor16(Double sensor16) { this.sensor16 = sensor16; } public Double getSensor17() { return sensor17; } public void setSensor17(Double sensor17) { this.sensor17 = sensor17; } public Double getSensor18() { return sensor18; } public void setSensor18(Double sensor18) { this.sensor18 = sensor18; } public Double getSensor19() { return sensor19; } public void setSensor19(Double sensor19) { this.sensor19 = sensor19; } public Double getSensor20() { return sensor20; } public void setSensor20(Double sensor20) { this.sensor20 = sensor20; } } ================================================ FILE: src/main/java/light/mvc/model/sensor/Tstation.java ================================================ package light.mvc.model.sensor; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import java.util.Date; @Entity @Table(name = "station") @DynamicInsert(true) @DynamicUpdate(true) public class Tstation extends baseEntity implements java.io.Serializable{ private String name; private String address; private String code; private Long type; private Tstation station; private String linkPeople; private String linkPhone; private String Description; private Long serialNum; private String loginName; private String password; private Date sensorDateUpdate; public Tstation() { super(); // TODO Auto-generated constructor stub } public Tstation(String name, String address, String code, Long type, Tstation station, String linkPeople, String linkPhone, String description, Long serialNum, String loginName, String password, Date sensorDateUpdate) { super(); this.name = name; this.address = address; this.code = code; this.type = type; this.station = station; this.linkPeople = linkPeople; this.linkPhone = linkPhone; Description = description; this.serialNum = serialNum; this.loginName = loginName; this.password = password; this.sensorDateUpdate = sensorDateUpdate; } public Date getSensorDateUpdate() { return sensorDateUpdate; } public void setSensorDateUpdate(Date sensorDateUpdate) { this.sensorDateUpdate = sensorDateUpdate; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid") public Tstation getStation() { return station; } public void setStation(Tstation station) { this.station = station; } public String getLinkPeople() { return linkPeople; } public void setLinkPeople(String linkPeople) { this.linkPeople = linkPeople; } public String getLinkPhone() { return linkPhone; } public void setLinkPhone(String linkPhone) { this.linkPhone = linkPhone; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } public Long getSerialNum() { return serialNum; } public void setSerialNum(Long serialNum) { this.serialNum = serialNum; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFDictionary.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import javax.validation.constraints.NotNull; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "dictionary", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class TEFDictionary extends baseEntity implements java.io.Serializable{ private String code; private String text; private TEFDictionaryCategory dictionaryCategory; private Integer seq; private Integer isDefault; // 是否默认 public TEFDictionary(){ } public TEFDictionary(String code, String text, TEFDictionaryCategory dictionaryCategory, Integer seq, Integer state, Integer isdefault) { super(); this.code = code; this.text = text; this.dictionaryCategory = dictionaryCategory; this.seq = seq; this.isDefault = isdefault; } @NotBlank public String getCode() { return code; } public void setCode(String code) { this.code = code; } @NotBlank public String getText() { return text; } public void setText(String text) { this.text = text; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "DictionaryCategoryID") public TEFDictionaryCategory getDictionaryCategory() { return dictionaryCategory; } public void setDictionaryCategory(TEFDictionaryCategory dictionaryCategory) { this.dictionaryCategory = dictionaryCategory; } public Integer getIsDefault() { return isDefault; } public void setIsDefault(Integer isDefault) { this.isDefault = isDefault; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFDictionaryCategory.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "dictionarycategory", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class TEFDictionaryCategory extends baseEntity implements java.io.Serializable{ private String code; private String name; private Integer seq; private String description; private TEFDictionaryCategory dictionaryCategory; public TEFDictionaryCategory() { super(); // TODO Auto-generated constructor stub } public TEFDictionaryCategory(String code, String name, Integer seq, String description) { super(); this.code = code; this.name = name; this.seq = seq; this.description = description; } @NotBlank public String getCode() { return code; } public void setCode(String code) { this.code = code; } @NotBlank public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ParentID") public TEFDictionaryCategory getDictionaryCategory() { return dictionaryCategory; } public void setDictionaryCategory(TEFDictionaryCategory dictionaryCategory) { this.dictionaryCategory = dictionaryCategory; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFLoginUser.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import javax.validation.constraints.NotNull; import java.util.Date; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "loginuser") @DynamicInsert(true) @DynamicUpdate(true) public class TEFLoginUser extends baseEntity implements java.io.Serializable { private String loginName; // 登录名 private String password; // 密码 private Date lastLoginTime; // 创建时间 private Integer status; // 状态 private TEFPersonalInfo personalInfo; public TEFLoginUser() { super(); // TODO Auto-generated constructor stub } public TEFLoginUser(String loginName, String password, Date lastLoginTime, Integer status, TEFPersonalInfo personalInfo) { super(); this.loginName = loginName; this.password = password; this.lastLoginTime = lastLoginTime; this.status = status; this.personalInfo = personalInfo; } @NotBlank public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getLastLoginTime() { return lastLoginTime; } public void setLastLoginTime(Date lastLoginTime) { this.lastLoginTime = lastLoginTime; } public Integer getStatus() { return status; } public void setStatus(Integer states) { this.status = states; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PersonalID") public TEFPersonalInfo getPersonalInfo() { return personalInfo; } public void setPersonalInfo(TEFPersonalInfo personalInfo) { this.personalInfo = personalInfo; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFNotice.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import javax.validation.constraints.NotNull; @Entity @Table(name = "notice") @DynamicInsert(true) @DynamicUpdate(true) public class TEFNotice extends baseEntity implements java.io.Serializable { private TEFDictionary type; private Long metaID; private TEFPersonalInfo personal; private String content; private Integer isNotice; public TEFNotice() { super(); // TODO Auto-generated constructor stub } public TEFNotice(TEFDictionary type, Long metaID, TEFPersonalInfo personal, String content, Integer isNotice) { super(); this.type = type; this.metaID = metaID; this.personal = personal; this.content = content; this.isNotice = isNotice; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "Type") public TEFDictionary getDictionary() { return type; } public void setDictionary(TEFDictionary dictionary) { this.type = dictionary; } public Long getMetaID() { return metaID; } public void setMetaID(Long metaID) { this.metaID = metaID; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PersonalID") public TEFPersonalInfo getPersonal() { return personal; } public void setPersonal(TEFPersonalInfo personal) { this.personal = personal; } public Integer getIsNotice() { return isNotice; } public void setIsNotice(Integer isNotice) { this.isNotice = isNotice; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFOrganization.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import java.util.HashSet; import java.util.Set; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "organization", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class TEFOrganization extends baseEntity implements java.io.Serializable{ private String departmentName; private String address; private String departmentCode; private String icon; private Integer seq; private TEFOrganization organization; private Set organizations = new HashSet(0); public TEFOrganization() { super(); // TODO Auto-generated constructor stub } public TEFOrganization(String departmentName, String address, String departmentCode, String icon, Integer seq, TEFOrganization organization, Set organizations) { super(); this.departmentName = departmentName; this.address = address; this.departmentCode = departmentCode; this.icon = icon; this.seq = seq; this.organization = organization; this.organizations = organizations; } @NotBlank public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getDepartmentCode() { return departmentCode; } public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ParentID") public TEFOrganization getOrganization() { return organization; } public void setOrganization(TEFOrganization organization) { this.organization = organization; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "organization") public Set getOrganizations() { return organizations; } public void setOrganizations(Set organizations) { this.organizations = organizations; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFPersonalInfo.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import light.mvc.model.manual.TEFmanualCategory; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import javax.validation.constraints.NotNull; import java.util.HashSet; import java.util.Set; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "personalinfo", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class TEFPersonalInfo extends baseEntity implements java.io.Serializable{ private String realName; private String phoneNumber; private Integer sex; private Integer age; private String email; private String address; private String techType; private String description; private String techTitle; private Integer needPublish; private TEFOrganization organization; private TEFRole role; private Set manualCategorys= new HashSet(0); public TEFPersonalInfo() { super(); // TODO Auto-generated constructor stub } public TEFPersonalInfo(String realName, String phoneNumber, Integer sex, Integer age, String email, String address, String techType, String description, String techTitle, Integer needPublish, TEFOrganization organization, TEFRole role) { super(); this.realName = realName; this.phoneNumber = phoneNumber; this.sex = sex; this.age = age; this.email = email; this.address = address; this.techType = techType; this.description = description; this.techTitle = techTitle; this.needPublish = needPublish; this.organization = organization; this.role = role; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTechType() { return techType; } public void setTechType(String techType) { this.techType = techType; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "OrganizationID") public TEFOrganization getOrganization() { return organization; } public void setOrganization(TEFOrganization organization) { this.organization = organization; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "RoleID") public TEFRole getRole() { return role; } public void setRole(TEFRole role) { this.role = role; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "personalmanual", joinColumns = { @JoinColumn(name = "PersonalID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "ManualCategoryID", nullable = false, updatable = false) }) @OrderBy("AutoID ASC") public Set getManualCategorys() { return manualCategorys; } public void setManualCategorys(Set manualCategorys) { this.manualCategorys = manualCategorys; } public String getTechTitle() { return techTitle; } public void setTechTitle(String techTitle) { this.techTitle = techTitle; } public Integer getNeedPublish(){ return needPublish; } public void setNeedPublish(Integer needPublish) { this.needPublish = needPublish; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFResource.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import java.util.HashSet; import java.util.Set; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "resource") @DynamicInsert(true) @DynamicUpdate(true) public class TEFResource extends baseEntity implements java.io.Serializable{ private String resourceName; // 名称 private String url; // 菜单路径 private String description; // 描述 private String icon; // 图标 private Integer seq; // 排序号 private Integer resourceType; // 资源类型, 0菜单 1功能 private TEFResource parentResource; // 父级 private Set roles = new HashSet(0); private Set resources = new HashSet(0); public TEFResource() { super(); // TODO Auto-generated constructor stub } public TEFResource(String resourceName, String url, String description, String icon, Integer seq, Integer resourceType, TEFResource parentResource) { super(); this.resourceName = resourceName; this.url = url; this.description = description; this.icon = icon; this.seq = seq; this.resourceType = resourceType; this.parentResource = parentResource; } public String getResourceName() { return resourceName; } public void setResourceName(String resourceName) { this.resourceName = resourceName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getResourceType() { return resourceType; } public void setResourceType(Integer resourceType) { this.resourceType = resourceType; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ParentID") public TEFResource getParentResource() { return parentResource; } public void setParentResource(TEFResource parentResource) { this.parentResource = parentResource; } // @yeyaowen problem @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "roleresource", joinColumns = { @JoinColumn(name = "ResourceID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "RoleID", nullable = false, updatable = false) }) @OrderBy("id ASC") public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentResource") public Set getResources() { return resources; } public void setResources(Set resources) { this.resources = resources; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFResourceMeta.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import javax.validation.constraints.NotNull; @Entity @Table(name = "resourceMeta") @DynamicInsert(true) @DynamicUpdate(true) public class TEFResourceMeta extends baseEntity implements java.io.Serializable { private TEFDictionary dictionary; private Long metaID; private String metaPath; private String thumbMetaPath; private String metaDescription; public TEFResourceMeta() { super(); } public TEFResourceMeta(TEFDictionary dictionary, Long metaID, String metaPath, String thumbMetaPath, String metaDescription) { super(); this.dictionary = dictionary; this.metaID = metaID; this.metaPath = metaPath; this.thumbMetaPath = thumbMetaPath; this.metaDescription = metaDescription; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "Type") public TEFDictionary getDictionary() { return dictionary; } public void setDictionary(TEFDictionary dictionary) { this.dictionary = dictionary; } public Long getMetaID() { return metaID; } public void setMetaID(Long metaID) { this.metaID = metaID; } public String getMetaPath() { return metaPath; } public void setMetaPath(String metaPath) { this.metaPath = metaPath; } public String getThumbMetaPath() { return thumbMetaPath; } public void setThumbMetaPath(String thumbMetaPath) { this.thumbMetaPath = thumbMetaPath; } public String getMetaDescription() { return metaDescription; } public void setMetaDescription(String metaDescription) { this.metaDescription = metaDescription; } } ================================================ FILE: src/main/java/light/mvc/model/sys/TEFRole.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.baseEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import java.util.HashSet; import java.util.Set; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Entity @Table(name = "role") @DynamicInsert(true) @DynamicUpdate(true) public class TEFRole extends baseEntity implements java.io.Serializable { private String roleName; // 角色名称 private String description; // 备注 private Integer isDefault; private Set resources = new HashSet(0); private Set users = new HashSet(0); public TEFRole() { super(); // TODO Auto-generated constructor stub } public TEFRole(String roleName, String description, Integer isDefault) { super(); this.roleName = roleName; this.description = description; this.isDefault = isDefault; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Integer getIsDefault() { return isDefault; } public void setIsDefault(Integer isDefault) { this.isDefault = isDefault; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "roleresource", joinColumns = { @JoinColumn(name = "RoleID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "ResourceID", nullable = false, updatable = false) }) @OrderBy("id ASC") public Set getResources() { return resources; } public void setResources(Set resources) { this.resources = resources; } @OneToMany @JoinColumn(name="RoleID") public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Tdictionary.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import javax.validation.constraints.NotNull; @Entity @Table(name = "sys_dictionary", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class Tdictionary extends IdEntity implements java.io.Serializable{ private String code; private String text; private Tdictionarytype dictionarytype; private Integer seq; private Integer state; // 状态 0启用 1停用 private Integer isdefault; // 是否默认 public Tdictionary(){ } public Tdictionary(String code, String text, Tdictionarytype dictionarytype, Integer seq, Integer state, Integer isdefault) { super(); this.code = code; this.text = text; this.dictionarytype = dictionarytype; this.seq = seq; this.state = state; this.isdefault = isdefault; } @NotBlank public String getCode() { return code; } public void setCode(String code) { this.code = code; } @NotBlank public String getText() { return text; } public void setText(String text) { this.text = text; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dictionarytype_id") public Tdictionarytype getDictionarytype() { return dictionarytype; } public void setDictionarytype(Tdictionarytype dictionarytype) { this.dictionarytype = dictionarytype; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public Integer getIsdefault() { return isdefault; } public void setIsdefault(Integer isdefault) { this.isdefault = isdefault; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Tdictionarytype.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; @Entity @Table(name = "sys_dictionarytype", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class Tdictionarytype extends IdEntity implements java.io.Serializable{ private String code; private String name; private Integer seq; private String description; private Tdictionarytype dictionarytype; public Tdictionarytype(){ } public Tdictionarytype(String code, String name, Integer seq, String description) { super(); this.code = code; this.name = name; this.seq = seq; this.description = description; } @NotBlank public String getCode() { return code; } public void setCode(String code) { this.code = code; } @NotBlank public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid") public Tdictionarytype getDictionarytype() { return dictionarytype; } public void setDictionarytype(Tdictionarytype dictionarytype) { this.dictionarytype = dictionarytype; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Torganization.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import java.util.Date; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "sys_organization", schema = "") @DynamicInsert(true) @DynamicUpdate(true) public class Torganization extends IdEntity implements java.io.Serializable { private Date createdatetime; private String name; private String address; private String code; private String icon; private Integer seq; private Torganization organization; private Set organizations = new HashSet(0); public Torganization() { super(); } public Torganization(Date createdatetime, String name, String address, String code, String icon, Integer seq, Torganization organization, Set organizations) { super(); this.createdatetime = createdatetime; this.name = name; this.address = address; this.code = code; this.icon = icon; this.seq = seq; this.organization = organization; this.organizations = organizations; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid") public Torganization getOrganization() { return organization; } public void setOrganization(Torganization organization) { this.organization = organization; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "createdatetime", length = 19) public Date getCreatedatetime() { return createdatetime; } public void setCreatedatetime(Date createdatetime) { this.createdatetime = createdatetime; } @NotBlank public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public String getCode() { return this.code; } public void setCode(String code) { this.code = code; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getSeq() { return this.seq; } public void setSeq(Integer seq) { this.seq = seq; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "organization") public Set getOrganizations() { return organizations; } public void setOrganizations(Set organizations) { this.organizations = organizations; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Tresource.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import java.util.Date; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "sys_resource") @DynamicInsert(true) @DynamicUpdate(true) public class Tresource extends IdEntity implements java.io.Serializable { private Date createdatetime; // 创建时间 private String name; // 名称 private String url; // 菜单路径 private String description; // 描述 private String icon; // 图标 private Integer seq; // 排序号 private Integer resourcetype; // 资源类型, 0菜单 1功能 private Tresource resource; // 父级 private Integer state; // 状态 0启用 1停用 private Set roles = new HashSet(0); private Set resources = new HashSet(0); public Tresource() { } public Tresource(Long id, Date createdatetime, String name, String url, String description, String icon, Integer seq, Integer resourcetype, Tresource resource, Integer state) { super(); this.id = id; this.createdatetime = createdatetime; this.name = name; this.url = url; this.description = description; this.icon = icon; this.seq = seq; this.resourcetype = resourcetype; this.resource = resource; this.state = state; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "CREATEDATETIME", length = 19) public Date getCreatedatetime() { return createdatetime; } public void setCreatedatetime(Date createdatetime) { this.createdatetime = createdatetime; } @NotBlank public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getResourcetype() { return resourcetype; } public void setResourcetype(Integer resourcetype) { this.resourcetype = resourcetype; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid") public Tresource getResource() { return resource; } public void setResource(Tresource resource) { this.resource = resource; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } //@yeyaoewn problem @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "sys_role_resource", joinColumns = { @JoinColumn(name = "resource_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) }) @OrderBy("id ASC") public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "resource") public Set getResources() { return resources; } public void setResources(Set resources) { this.resources = resources; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Trole.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "sys_role") @DynamicInsert(true) @DynamicUpdate(true) public class Trole extends IdEntity implements java.io.Serializable { private String name; // 角色名称 private Integer seq; // 排序号 private Integer isdefault; // 是否默认 private String description; // 备注 private Set resources = new HashSet(0); private Set users = new HashSet(0); @NotBlank public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getIsdefault() { return isdefault; } public void setIsdefault(Integer isdefault) { this.isdefault = isdefault; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "sys_role_resource", joinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "resource_id", nullable = false, updatable = false) }) @OrderBy("id ASC") public Set getResources() { return resources; } public void setResources(Set resources) { this.resources = resources; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "sys_user_role", joinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }) @OrderBy("id ASC") public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } } ================================================ FILE: src/main/java/light/mvc/model/sys/Tuser.java ================================================ package light.mvc.model.sys; import light.mvc.model.base.IdEntity; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.validator.constraints.NotBlank; import javax.persistence.*; import javax.validation.constraints.NotNull; import java.util.Date; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "sys_user") @DynamicInsert(true) @DynamicUpdate(true) public class Tuser extends IdEntity implements java.io.Serializable { private String loginname; // 登录名 private String password; // 密码 private String name; // 姓名 private Integer sex; // 性别 private Integer age; // 年龄 private Date createdatetime; // 创建时间 private Integer usertype; // 用户类型 private Integer isdefault; // 是否默认 private Integer state; // 状态 private Torganization organization; private Set roles = new HashSet(0); public Tuser() { super(); } public Tuser(String loginname, String password, String name, Integer sex, Integer age, Date createdatetime, Integer usertype, Integer isdefault, Integer state) { super(); this.loginname = loginname; this.password = password; this.name = name; this.sex = sex; this.age = age; this.createdatetime = createdatetime; this.usertype = usertype; this.isdefault = isdefault; this.state = state; } @NotBlank public String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @NotBlank public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "CREATEDATETIME", length = 19) public Date getCreatedatetime() { return createdatetime; } public void setCreatedatetime(Date createdatetime) { this.createdatetime = createdatetime; } public Integer getUsertype() { return usertype; } public void setUsertype(Integer usertype) { this.usertype = usertype; } public Integer getIsdefault() { return isdefault; } public void setIsdefault(Integer isdefault) { this.isdefault = isdefault; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "sys_user_role", joinColumns = { @JoinColumn(name = "user_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) }) public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "organization_id") public Torganization getOrganization() { return organization; } public void setOrganization(Torganization organization) { this.organization = organization; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/Grid.java ================================================ package light.mvc.pageModel.base; import java.util.ArrayList; import java.util.List; public class Grid implements java.io.Serializable { private Long total = 0L; private List rows = new ArrayList(); public Long getTotal() { return total; } public void setTotal(Long total) { this.total = total; } public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/Json.java ================================================ package light.mvc.pageModel.base; public class Json implements java.io.Serializable { private boolean success = false; private String msg = ""; private Object obj = null; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/JsonAPI.java ================================================ package light.mvc.pageModel.base; public class JsonAPI implements java.io.Serializable{ private boolean success= false; private String errcode; private String errmsg; private String access_token; private int limit; private Object obj; public JsonAPI() { super(); // TODO Auto-generated constructor stub } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getErrcode() { return errcode; } public void setErrcode(String errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public int getLimit() { return limit; } public void setLimit(int i) { this.limit = i; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/JsonToMobile.java ================================================ package light.mvc.pageModel.base; public class JsonToMobile implements java.io.Serializable{ private Result result; private Notice notice; private Object obj; public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } public Notice getNotice() { return notice; } public void setNotice(Notice notice) { this.notice = notice; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/Notice.java ================================================ package light.mvc.pageModel.base; public class Notice implements java.io.Serializable{ private int msgCount;//系统消息个数 } ================================================ FILE: src/main/java/light/mvc/pageModel/base/PageFilter.java ================================================ package light.mvc.pageModel.base; public class PageFilter implements java.io.Serializable { private int page;// 当前页 private int rows;// 每页显示记录数 private String sort;// 排序字段 private String order;// asc/desc public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public String getSort() { return sort; } public void setSort(String sort) { this.sort = sort; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/Result.java ================================================ package light.mvc.pageModel.base; public class Result implements java.io.Serializable{ private String errorCode; private String errorMessage; private long limit; private boolean success= false; public String getErrorCode() { return errorCode; } public void setErrorCode(String errorCode) { this.errorCode = errorCode; } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public long getLimit() { return limit; } public void setLimit(long limit) { this.limit = limit; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/SessionInfo.java ================================================ package light.mvc.pageModel.base; import java.util.List; public class SessionInfo implements java.io.Serializable { private Long id;// 用户personalID private String loginname;// 登录名 private String name;// 姓名 private String roleType; //用户角色类型,例如管理员分department和final等。 public String getRoleType() { return roleType; } public void setRoleType(String roleType) { this.roleType = roleType; } private String ip;// 用户IP private String sessionId;//服务器传送给客户端cookie的JSESSIONID public String getSessionId() { return sessionId; } public void setSessionId(String sessionId) { this.sessionId = sessionId; } private List resourceList;// 用户可以访问的资源地址列表 private List resourceAllList; public List getResourceList() { return resourceList; } public void setResourceList(List resourceList) { this.resourceList = resourceList; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public List getResourceAllList() { return resourceAllList; } public void setResourceAllList(List resourceAllList) { this.resourceAllList = resourceAllList; } @Override public String toString() { return this.name; } } ================================================ FILE: src/main/java/light/mvc/pageModel/base/Tree.java ================================================ package light.mvc.pageModel.base; import java.util.List; public class Tree implements java.io.Serializable { private String id; private String text; private String state = "open";// open,closed private boolean checked = false; private Object attributes; private List children; private String iconCls; private String pid; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getState() { return state; } public void setState(String state) { this.state = state; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public Object getAttributes() { return attributes; } public void setAttributes(Object attributes) { this.attributes = attributes; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } public String getIconCls() { return iconCls; } public void setIconCls(String iconCls) { this.iconCls = iconCls; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } } ================================================ FILE: src/main/java/light/mvc/pageModel/manual/EFExpertList.java ================================================ package light.mvc.pageModel.manual; import light.mvc.pageModel.sys.User; import java.util.List; public class EFExpertList implements java.io.Serializable{ private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } } ================================================ FILE: src/main/java/light/mvc/pageModel/manual/EFmanualCategory.java ================================================ package light.mvc.pageModel.manual; import java.util.Date; public class EFmanualCategory implements java.io.Serializable{ protected Long id; protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer Deleted; protected Date TS; private String categoryName; private String categoryCode; private String categoryDescription; private Integer isParent; private String childIds; private String childNames; private Long parentID; private String expertIds; private String expertNames; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return Deleted; } public void setDeleted(Integer deleted) { Deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getCategoryCode() { return categoryCode; } public void setCategoryCode(String categoryCode) { this.categoryCode = categoryCode; } public String getCategoryDescription() { return categoryDescription; } public void setCategoryDescription(String categoryDescription) { this.categoryDescription = categoryDescription; } public Long getParentID() { return parentID; } public void setParentID(Long parentID) { this.parentID = parentID; } public String getExpertIds() { return expertIds; } public void setExpertIds(String expertIds) { this.expertIds = expertIds; } public String getExpertNames() { return expertNames; } public void setExpertNames(String expertNames) { this.expertNames = expertNames; } public Integer getIsParent() { return isParent; } public void setIsParent(Integer isParent) { this.isParent = isParent; } public String getChildIds() { return childIds; } public void setChildIds(String childIds) { this.childIds = childIds; } public String getChildNames() { return childNames; } public void setChildNames(String childNames) { this.childNames = childNames; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } } ================================================ FILE: src/main/java/light/mvc/pageModel/manual/EFmanualCategoryList.java ================================================ package light.mvc.pageModel.manual; import java.util.List; public class EFmanualCategoryList implements java.io.Serializable{ List list ; private Integer isParent; public List getList() { return list; } public void setList(List list) { this.list = list; } public Integer getIsParent() { return isParent; } public void setIsParent(Integer isParent) { this.isParent = isParent; } } ================================================ FILE: src/main/java/light/mvc/pageModel/manual/EFmanualContent.java ================================================ package light.mvc.pageModel.manual; import light.mvc.pageModel.sys.EFResourceMeta; import java.util.Date; import java.util.List; public class EFmanualContent implements java.io.Serializable{ private Long autoID; private Integer active; // 状态 private Date createDate; // 创建时间 private Long createBy; private Date updateDate; private Long updateBy; private Integer Deleted; private Date TS; private Long manualCategoryID; private String categoryCode; private String content; private String shortContent; private String title; private String filePath; private String attachmentContent; private String pageContent; //临时存储网页的内容 private String keywordList; private String imgContent; //预览图字符串信息 private List resourceList; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return Deleted; } public void setDeleted(Integer deleted) { Deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public Long getManualCategoryID() { return manualCategoryID; } public void setManualCategoryID(Long manualCategoryID) { this.manualCategoryID = manualCategoryID; } public String getCategoryCode() { return categoryCode; } public void setCategoryCode(String categoryCode) { this.categoryCode = categoryCode; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public String getAttachmentContent() { return attachmentContent; } public void setAttachmentContent(String attachmentContent) { this.attachmentContent = attachmentContent; } public String getPageContent() { return pageContent; } public void setPageContent(String pageContent) { this.pageContent = pageContent; } public String getKeywordList() { return keywordList; } public void setKeywordList(String keywordList) { this.keywordList = keywordList; } public String getShortContent(){ return shortContent; } public void setShortContent(String shortContent){ this.shortContent = shortContent; } public String getImgContent(){ return imgContent; } public void setImgContent(String imgContent){ this.imgContent = imgContent; } public List getResourceList(){ return resourceList; } public void setResourceList(List resourceList){ this.resourceList = resourceList; } } ================================================ FILE: src/main/java/light/mvc/pageModel/manual/EFmanualKeyword.java ================================================ package light.mvc.pageModel.manual; import java.util.Date; public class EFmanualKeyword { private Long autoID; private Integer active; // 状态 private Date createDate; // 创建时间 private Long createBy; private Date updateDate; private Long updateBy; private Integer Deleted; private Date TS; private Long manualContentID; private Long categoryID; private String categoryCode; private String keyword; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return Deleted; } public void setDeleted(Integer deleted) { Deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public Long getManualContentID() { return manualContentID; } public void setManualContentID(Long manualContentID) { this.manualContentID = manualContentID; } public Long getCategoryID() { return categoryID; } public void setCategoryID(Long categoryID) { this.categoryID = categoryID; } public String getCategoryCode() { return categoryCode; } public void setCategoryCode(String categoryCode) { this.categoryCode = categoryCode; } public String getKeyword() { return keyword; } public void setKeyword(String keyword) { this.keyword = keyword; } } ================================================ FILE: src/main/java/light/mvc/pageModel/news/EFCategory.java ================================================ package light.mvc.pageModel.news; public class EFCategory implements java.io.Serializable { private Long autoID; private String categoryName; private String categoryDescription; private Long type; private String typeDesc; private String shortCategoryName; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getCategoryDescription() { return categoryDescription; } public void setCategoryDescription(String categoryDescription) { this.categoryDescription = categoryDescription; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public String getTypeDesc() { return typeDesc; } public void setTypeDesc(String typeDesc) { this.typeDesc = typeDesc; } public String getShortCategoryName(){ return shortCategoryName; } public void setShortCategoryName(String shortCategoryName){ this.shortCategoryName = shortCategoryName; } } ================================================ FILE: src/main/java/light/mvc/pageModel/news/EFNews.java ================================================ package light.mvc.pageModel.news; import light.mvc.pageModel.sys.EFResourceMeta; import java.util.Date; import java.util.List; public class EFNews implements java.io.Serializable { private Long autoID; private Long personalID; private String author; private String title; private String content; private String webPath; private Date publishDate; private Integer readCount; private Long status;//17:编辑|18:发布 private String statusDesc; private Long categoryID; private String categoryName; private String pageContent; //临时存储网页的内容 private Date searchStartDate; private Date searchEndDate; private String attachmentContent; private Long categoryTypeID; private String categoryTypeDesc; private String shortTitle; List resourceList; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Long getPersonalID() { return personalID; } public void setPersonalID(Long personalID) { this.personalID = personalID; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } public Date getPublishDate() { return publishDate; } public void setPublishDate(Date publishDate) { this.publishDate = publishDate; } public Integer getReadCount() { return readCount; } public void setReadCount(Integer readCount) { this.readCount = readCount; } public Long getStatus() { return status; } public void setStatus(Long status) { this.status = status; } public String getStatusDesc() { return statusDesc; } public void setStatusDesc(String statusDesc) { this.statusDesc = statusDesc; } public Long getCategoryID() { return categoryID; } public void setCategoryID(Long categoryID) { this.categoryID = categoryID; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getPageContent() { return pageContent; } public void setPageContent(String pageContent) { this.pageContent = pageContent; } public Date getSearchStartDate() { return searchStartDate; } public void setSearchStartDate(Date searchStartDate) { this.searchStartDate = searchStartDate; } public Date getSearchEndDate() { return searchEndDate; } public void setSearchEndDate(Date searchEndDate) { this.searchEndDate = searchEndDate; } public String getAttachmentContent() { return attachmentContent; } public void setAttachmentContent(String attachmentContent) { this.attachmentContent = attachmentContent; } public Long getCategoryTypeID() { return categoryTypeID; } public void setCategoryTypeID(Long categoryTypeID) { this.categoryTypeID = categoryTypeID; } public String getCategoryTypeDesc() { return categoryTypeDesc; } public void setCategoryTypeDesc(String categoryTypeDesc) { this.categoryTypeDesc = categoryTypeDesc; } public String getShortTitle(){ return shortTitle; } public void setShortTitle(String shortTitle){ this.shortTitle = shortTitle; } public List getResourceList() { return resourceList; } public void setResourceList(List resourceList) { this.resourceList = resourceList; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sensor/Sensor.java ================================================ package light.mvc.pageModel.sensor; import java.util.Date; public class Sensor implements java.io.Serializable{ private Long monitoringNodeId; protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; private Long serialNum; private Integer sensor_ch; private Long station; private Double sensor1; private Double sensor2; private Double sensor3; private Double sensor4; private Double sensor5; private Double sensor6; private Double sensor7; private Double sensor8; private Double sensor9; private Double sensor10; private Double sensor11; private Double sensor12; private Double sensor13; private Double sensor14; private Double sensor15; private Double sensor16; private Double sensor17; private Double sensor18; private Double sensor19; private Double sensor20; public Long getStation() { return station; } public void setStation(Long station) { this.station = station; } public Long getMonitoringNodeId() { return monitoringNodeId; } public void setMonitoringNodeId(Long monitoringNodeId) { this.monitoringNodeId = monitoringNodeId; } public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public Double getSensor1() { return sensor1; } public void setSensor1(Double sensor1) { this.sensor1 = sensor1; } public Double getSensor2() { return sensor2; } public void setSensor2(Double sensor2) { this.sensor2 = sensor2; } public Double getSensor3() { return sensor3; } public void setSensor3(Double sensor3) { this.sensor3 = sensor3; } public Double getSensor4() { return sensor4; } public void setSensor4(Double sensor4) { this.sensor4 = sensor4; } public Double getSensor5() { return sensor5; } public void setSensor5(Double sensor5) { this.sensor5 = sensor5; } public Double getSensor6() { return sensor6; } public void setSensor6(Double sensor6) { this.sensor6 = sensor6; } public Double getSensor7() { return sensor7; } public void setSensor7(Double sensor7) { this.sensor7 = sensor7; } public Double getSensor8() { return sensor8; } public void setSensor8(Double sensor8) { this.sensor8 = sensor8; } public Double getSensor9() { return sensor9; } public void setSensor9(Double sensor9) { this.sensor9 = sensor9; } public Double getSensor10() { return sensor10; } public void setSensor10(Double sensor10) { this.sensor10 = sensor10; } public Double getSensor11() { return sensor11; } public void setSensor11(Double sensor11) { this.sensor11 = sensor11; } public Double getSensor12() { return sensor12; } public void setSensor12(Double sensor12) { this.sensor12 = sensor12; } public Double getSensor13() { return sensor13; } public void setSensor13(Double sensor13) { this.sensor13 = sensor13; } public Double getSensor14() { return sensor14; } public void setSensor14(Double sensor14) { this.sensor14 = sensor14; } public Double getSensor15() { return sensor15; } public void setSensor15(Double sensor15) { this.sensor15 = sensor15; } public Double getSensor16() { return sensor16; } public void setSensor16(Double sensor16) { this.sensor16 = sensor16; } public Double getSensor17() { return sensor17; } public void setSensor17(Double sensor17) { this.sensor17 = sensor17; } public Double getSensor18() { return sensor18; } public void setSensor18(Double sensor18) { this.sensor18 = sensor18; } public Double getSensor19() { return sensor19; } public void setSensor19(Double sensor19) { this.sensor19 = sensor19; } public Double getSensor20() { return sensor20; } public void setSensor20(Double sensor20) { this.sensor20 = sensor20; } public Long getSerialNum() { return serialNum; } public void setSerialNum(Long serialNum) { this.serialNum = serialNum; } public Integer getSensor_ch() { return sensor_ch; } public void setSensor_ch(Integer sensor_ch) { this.sensor_ch = sensor_ch; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sensor/Station.java ================================================ package light.mvc.pageModel.sensor; import java.util.Date; public class Station implements java.io.Serializable{ protected Long id; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; private String name; private String address; private String code; private Long type; private Long pid; private String linkPeople; private String linkPhone; private String Description; private String pname; private Long serialNum; private String loginName; private String password; private Date sensorDateUpdate; public Date getSensorDateUpdate() { return sensorDateUpdate; } public void setSensorDateUpdate(Date sensorDateUpdate) { this.sensorDateUpdate = sensorDateUpdate; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Long getSerialNum() { return serialNum; } public void setSerialNum(Long serialNum) { this.serialNum = serialNum; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public String getLinkPeople() { return linkPeople; } public void setLinkPeople(String linkPeople) { this.linkPeople = linkPeople; } public String getLinkPhone() { return linkPhone; } public void setLinkPhone(String linkPhone) { this.linkPhone = linkPhone; } public String getDescription() { return Description; } public void setDescription(String description) { Description = description; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sensor/monitoringNode.java ================================================ package light.mvc.pageModel.sensor; import java.util.Date; public class monitoringNode { protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; private String name; private String code; private String map; private Double locationX; private Double locationY; private Long type; private Long station; private Integer fps; private String address;//保留字段 private String description; private Integer sensor_ch; private String dataKey; public String getDataKey() { return dataKey; } public void setDataKey(String dataKey) { this.dataKey = dataKey; } public String getMap() { return map; } public void setMap(String map) { this.map = map; } public Integer getSensor_ch() { return sensor_ch; } public void setSensor_ch(Integer sensor_ch) { this.sensor_ch = sensor_ch; } public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Double getLocationX() { return locationX; } public void setLocationX(Double locationX) { this.locationX = locationX; } public Double getLocationY() { return locationY; } public void setLocationY(Double locationY) { this.locationY = locationY; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getStation() { return station; } public void setStation(Long station) { this.station = station; } public Integer getFps() { return fps; } public void setFps(Integer fps) { this.fps = fps; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sensor/pestAndSensorDate.java ================================================ package light.mvc.pageModel.sensor; import java.util.Date; public class pestAndSensorDate { protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; private String name; private Long type; private Long monitoringNodeId; private Long sensorId; private Long imgId; private Integer count; private Integer realCount; private String description; private Double sensor1; private Double sensor2; private Double sensor3; private Double sensor4; private Double sensor5; private Double sensor6; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getMonitoringNodeId() { return monitoringNodeId; } public void setMonitoringNodeId(Long monitoringNodeId) { this.monitoringNodeId = monitoringNodeId; } public Long getSensorId() { return sensorId; } public void setSensorId(Long sensorId) { this.sensorId = sensorId; } public Long getImgId() { return imgId; } public void setImgId(Long imgId) { this.imgId = imgId; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Integer getRealCount() { return realCount; } public void setRealCount(Integer realCount) { this.realCount = realCount; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Double getSensor1() { return sensor1; } public void setSensor1(Double sensor1) { this.sensor1 = sensor1; } public Double getSensor2() { return sensor2; } public void setSensor2(Double sensor2) { this.sensor2 = sensor2; } public Double getSensor3() { return sensor3; } public void setSensor3(Double sensor3) { this.sensor3 = sensor3; } public Double getSensor4() { return sensor4; } public void setSensor4(Double sensor4) { this.sensor4 = sensor4; } public Double getSensor5() { return sensor5; } public void setSensor5(Double sensor5) { this.sensor5 = sensor5; } public Double getSensor6() { return sensor6; } public void setSensor6(Double sensor6) { this.sensor6 = sensor6; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sensor/pestData.java ================================================ package light.mvc.pageModel.sensor; import java.util.Date; public class pestData implements java.io.Serializable{ protected Long autoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer deleted; protected Date TS; private String name; private Long type; private Long monitoringNodeId; private Long sensorId; private Long imgId; private Integer count; private Integer realCount; private String description; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getMonitoringNodeId() { return monitoringNodeId; } public void setMonitoringNodeId(Long monitoringNodeId) { this.monitoringNodeId = monitoringNodeId; } public Long getSensorId() { return sensorId; } public void setSensorId(Long sensorId) { this.sensorId = sensorId; } public Long getImgId() { return imgId; } public void setImgId(Long imgId) { this.imgId = imgId; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Integer getRealCount() { return realCount; } public void setRealCount(Integer realCount) { this.realCount = realCount; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/Dictionary.java ================================================ package light.mvc.pageModel.sys; public class Dictionary implements java.io.Serializable{ private Long id; private String code; private String text; private Long dictionarytypeId; private String dictionarytypeName; private Integer seq; private Integer active; // 状态 0启用 1停用 private Integer isDefault; // 是否默认 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Long getDictionarytypeId() { return dictionarytypeId; } public void setDictionarytypeId(Long dictionarytypeId) { this.dictionarytypeId = dictionarytypeId; } public String getDictionarytypeName() { return dictionarytypeName; } public void setDictionarytypeName(String dictionarytypeName) { this.dictionarytypeName = dictionarytypeName; } public Integer getIsDefault() { return isDefault; } public void setIsDefault(Integer isDefault) { this.isDefault = isDefault; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/Dictionarytype.java ================================================ package light.mvc.pageModel.sys; public class Dictionarytype implements java.io.Serializable{ private Long id; private String code; private String name; private Integer seq; private String description; private String pid; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public String getDescription() { return description; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public void setDescription(String description) { this.description = description; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/EFNotice.java ================================================ package light.mvc.pageModel.sys; import java.util.Date; public class EFNotice { private Long autoID; private Integer active; // 状态 private Date createDate; // 创建时间 private Long createBy; private Date updateDate; private Long updateBy; private Integer deleted; private Date ts; private Long type; private String typeName; private Long metaID; private Long personalID; private String personalName; private String content; private Integer isNotice; public EFNotice() { super(); // TODO Auto-generated constructor stub } public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return deleted; } public void setDeleted(Integer deleted) { this.deleted = deleted; } public Date getTS() { return ts; } public void setTS(Date tS) { this.ts = tS; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public Long getMetaID() { return metaID; } public void setMetaID(Long metaID) { this.metaID = metaID; } public Long getPersonalID() { return personalID; } public void setPersonalID(Long personalID) { this.personalID = personalID; } public String getPersonalName() { return personalName; } public void setPersonalName(String personalName) { this.personalName = personalName; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Integer getIsNotice() { return isNotice; } public void setIsNotice(Integer isNotice) { this.isNotice = isNotice; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/EFResourceMeta.java ================================================ package light.mvc.pageModel.sys; import java.util.Date; public class EFResourceMeta implements java.io.Serializable{ private Long autoID; private Long type; private Long metaID; private String typeName; private String metaPath; private String thumbMetaPath; private String metaDescription; private Date createDate; private Date updateDate; private String createDateDesc; private Integer count; private String address; private String description; public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Long getMetaID() { return metaID; } public void setMetaID(Long metaID) { this.metaID = metaID; } public String getMetaPath() { return metaPath; } public void setMetaPath(String metaPath) { this.metaPath = metaPath; } public String getThumbMetaPath() { return thumbMetaPath; } public void setThumbMetaPath(String thumbMetaPath) { this.thumbMetaPath = thumbMetaPath; } public String getMetaDescription() { return metaDescription; } public void setMetaDescription(String metaDescription) { this.metaDescription = metaDescription; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public Date getCreateDate(){ return createDate; } public void setCreateDate(Date createDate){ this.createDate = createDate; } public String getCreateDateDesc(){ return createDateDesc; } public void setCreateDateDesc(String createDateDesc){ this.createDateDesc = createDateDesc; } public Integer getCount(){ return count; } public void setCount(Integer count){ this.count = count; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/Organization.java ================================================ package light.mvc.pageModel.sys; import java.util.Date; public class Organization implements java.io.Serializable { private Long id; private Date createDate; private String departmentName; private String address; private String departmentCode; private String iconCls; private String icon; private Integer seq; private Long pid; private String pname; public Organization() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public String getIconCls() { return iconCls; } public void setIconCls(String iconCls) { this.iconCls = iconCls; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Integer getSeq() { return this.seq; } public void setSeq(Integer seq) { this.seq = seq; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Date getCreatedatetime() { return createDate; } public void setCreatedatetime(Date createdatetime) { this.createDate = createdatetime; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public String getDepartmentCode() { return departmentCode; } public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/Resource.java ================================================ package light.mvc.pageModel.sys; import java.util.Date; public class Resource implements java.io.Serializable { private Long pid; private String pname; private Long id; private Date createDate; // 创建时间 private String name; // 名称 private String url; // 菜单路径 private String description; // 描述 private String iconCls; // 图标 private Integer seq; // 排序号 private Integer resourcetype; // 资源类型, 0菜单 1功能 private Integer cstate; // 状态 0启用 1停用 private String icon; public Resource() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public Date getCreatedatetime() { return createDate; } public void setCreatedatetime(Date createdatetime) { this.createDate = createdatetime; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getIconCls() { return iconCls; } public void setIconCls(String iconCls) { this.iconCls = iconCls; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getResourcetype() { return resourcetype; } public void setResourcetype(Integer resourcetype) { this.resourcetype = resourcetype; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Integer getCstate() { return cstate; } public void setCstate(Integer cstate) { this.cstate = cstate; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/Role.java ================================================ package light.mvc.pageModel.sys; public class Role implements java.io.Serializable { private Long id; private String name; // 角色名称 private Integer seq; // 排序号 private Integer isdefault; // 是否默认 private String description; // 备注 private String resourceIds; private String resourceNames; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSeq() { return seq; } public void setSeq(Integer seq) { this.seq = seq; } public Integer getIsdefault() { return isdefault; } public void setIsdefault(Integer isdefault) { this.isdefault = isdefault; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getResourceIds() { return resourceIds; } public void setResourceIds(String resourceIds) { this.resourceIds = resourceIds; } public String getResourceNames() { return resourceNames; } public void setResourceNames(String resourceNames) { this.resourceNames = resourceNames; } } ================================================ FILE: src/main/java/light/mvc/pageModel/sys/User.java ================================================ package light.mvc.pageModel.sys; import java.util.Date; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public class User implements java.io.Serializable { //autoID为personalinfo表的AutoID private Long autoID; //loginAutoID为loginuser表的AutoID private Long loginAutoID; protected Integer active; // 状态 protected Date createDate; // 创建时间 protected Long createBy; protected Date updateDate; protected Long updateBy; protected Integer Deleted; protected Date TS; private String loginName; // 登录名 private String password; // 密码 private Date lastLoginTime; // 上次登录时间 private Integer states; // 状态 private Integer isdefault; private String realName; private String phoneNumber; private Integer sex; private Integer age; private String email; private String address; private String techType; private String description; private String techTitle; private Integer needPublish; private Long organizationId; private String organizationName; private Long roleIds; private String roleNames; private String manualIDs; private String manualNames; private String searchKey; private String searchValue; private boolean auditor; private String imagePath; //用户图像路径 public User() { super(); } public Long getAutoID() { return autoID; } public void setAutoID(Long autoID) { this.autoID = autoID; } public Long getLoginAutoID() { return loginAutoID; } public void setLoginAutoID(Long loginAutoID) { this.loginAutoID = loginAutoID; } public Integer getActive() { return active; } public void setActive(Integer active) { this.active = active; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Long getUpdateBy() { return updateBy; } public void setUpdateBy(Long updateBy) { this.updateBy = updateBy; } public Integer getDeleted() { return Deleted; } public void setDeleted(Integer deleted) { Deleted = deleted; } public Date getTS() { return TS; } public void setTS(Date tS) { TS = tS; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getLastLoginTime() { return lastLoginTime; } public void setLastLoginTime(Date lastLoginTime) { this.lastLoginTime = lastLoginTime; } public Integer getStates() { return states; } public void setStates(Integer states) { this.states = states; } public Integer getIsdefault() { return isdefault; } public void setIsdefault(Integer isdefault) { this.isdefault = isdefault; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTechType() { return techType; } public void setTechType(String techType) { this.techType = techType; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Long getOrganizationId() { return organizationId; } public void setOrganizationId(Long organizationId) { this.organizationId = organizationId; } public String getOrganizationName() { return organizationName; } public void setOrganizationName(String organizationName) { this.organizationName = organizationName; } public Long getRoleIds() { return roleIds; } public void setRoleIds(Long roleIds) { this.roleIds = roleIds; } public String getRoleNames() { return roleNames; } public void setRoleNames(String roleNames) { this.roleNames = roleNames; } public String getManualIDs() { return manualIDs; } public void setManualIDs(String manualIDs) { this.manualIDs = manualIDs; } public String getManualNames() { return manualNames; } public void setManualNames(String manualNames) { this.manualNames = manualNames; } public String getTechTitle() { return techTitle; } public void setTechTitle(String techTitle) { this.techTitle = techTitle; } public Integer getNeedPublish(){ return needPublish; } public void setNeedPublish(Integer needPublish) { this.needPublish = needPublish; } public String getSearchKey() { return searchKey; } public void setSearchKey(String searchKey) { this.searchKey = searchKey; } public String getSearchValue() { return searchValue; } public void setSearchValue(String searchValue) { this.searchValue = searchValue; } public boolean isAuditor() { return auditor; } public void setAuditor(boolean auditor) { this.auditor = auditor; } public String getImagePath(){ return imagePath; } public void setImagePath(String imagePath){ this.imagePath = imagePath; } } ================================================ FILE: src/main/java/light/mvc/service/base/ServiceException.java ================================================ package light.mvc.service.base; /** * Service层公用的Exception. * * 继承自RuntimeException, 从由Spring管理事务的函数中抛出时会触发事务回滚. * */ public class ServiceException extends RuntimeException { private static final long serialVersionUID = 1401593546385403720L; public ServiceException() { super(); } public ServiceException(String message) { super(message); } public ServiceException(Throwable cause) { super(cause); } public ServiceException(String message, Throwable cause) { super(message, cause); } } ================================================ FILE: src/main/java/light/mvc/service/impl/manual/EFManualCategoryServiceImpl.java ================================================ package light.mvc.service.impl.manual; import light.mvc.dao.BaseDaoI; import light.mvc.model.manual.TEFmanualCategory; import light.mvc.model.sys.TEFPersonalInfo; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.manual.EFExpertList; import light.mvc.pageModel.manual.EFmanualCategory; import light.mvc.pageModel.manual.EFmanualCategoryList; import light.mvc.pageModel.sys.User; import light.mvc.service.manual.EFManualCategoryServiceI; import light.mvc.utils.coder; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.*; @Service public class EFManualCategoryServiceImpl implements EFManualCategoryServiceI { @Autowired private BaseDaoI categoryDao; @Override public void add(EFmanualCategory category) { // TODO Auto-generated method stub TEFmanualCategory t = new TEFmanualCategory(); if(category.getParentID()==null) { category.setParentID((long)0); } BeanUtils.copyProperties(category,t); if(category.getParentID()!=null) { coder c= new coder(); t.setParent(categoryDao.get(TEFmanualCategory.class, category.getParentID())); String pre=t.getParent().getCategoryCode(); Map params = new HashMap(); String sql = " select count(*) from manualcategory t where t.deleted=0 and t.parentid=:parentid"; params.put("parentid", category.getParentID()); Long count= categoryDao.countBySql(sql, params).longValue(); t.setCategoryCode(coder.getCoder(pre, count + 1)); } categoryDao.save(t); } @Override public List dataGrid(EFmanualCategory category, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFmanualCategory t "; List l = categoryDao.find(hql +whereHql(category, params)+ orderHql(ph), params, ph.getPage(), ph.getRows()); if ((l != null) && (l.size() > 0)) { for (TEFmanualCategory t : l) { EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } ul.add(u); } } return ul; } @Override public List getAllData() { // TODO Auto-generated method stub String hql = " from TEFmanualCategory t "; List l = categoryDao.find(hql); List ul = new ArrayList(); if ((l != null) && (l.size() > 0)) { for (TEFmanualCategory t : l) { EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } ul.add(u); } } return ul; } @Override public Long count(EFmanualCategory category, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFmanualCategory t "; return categoryDao.count("select count(*) " + hql + whereHql(category, params), params); } @Override public void delete(Long id, HttpServletRequest request) { // TODO Auto-generated method stub TEFmanualCategory t= categoryDao.get(TEFmanualCategory.class,id); t.setUpdateDate(new Date()); t.setDeleted(1); categoryDao.update(t); } @Override public EFmanualCategory get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFmanualCategory t = categoryDao.get("from TEFmanualCategory t where t.autoID = :id", params); EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } Set s=t.getUsers(); if ((s != null) && !s.isEmpty()) { boolean b = false; String ids = ""; String names = ""; for(TEFPersonalInfo tr:s) { if (b) { ids += ","; names += ","; } else { b = true; } ids+=tr.getAutoID(); names+=tr.getRealName(); } u.setExpertIds(ids); u.setExpertNames(names); } return u; } @Override public void edit(EFmanualCategory data) { // TODO Auto-generated method stub TEFmanualCategory t=categoryDao.get(TEFmanualCategory.class, data.getAutoID()); t.setCategoryCode(data.getCategoryCode()); t.setCategoryDescription(data.getCategoryDescription()); t.setCategoryName(data.getCategoryName()); if(data.getParentID()!=0) { TEFmanualCategory category=categoryDao.get(TEFmanualCategory.class, data.getParentID()); t.setParent(category); } categoryDao.update(t); } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFmanualCategory category, Map params) {//待修改 String hql = ""; if (category != null) { hql += " where t.deleted=0 "; if(category.getCategoryCode()!=null) { hql+="and t.categoryCode like :categoryCode"; params.put("categoryCode",category.getCategoryCode()+"%%"); } } return hql; } @Override public List tree() { // TODO Auto-generated method stub List l=null; List lt = new ArrayList(); Map params = new HashMap(); l= categoryDao.find("from TEFmanualCategory t"); if(l!=null && (l.size()>0)) { for(TEFmanualCategory r: l) { Tree tree= new Tree(); tree.setId(r.getAutoID().toString()); if(r.getParent()!=null) { tree.setPid(r.getParent().getAutoID().toString()); }else { tree.setState("closed"); } tree.setText(r.getCategoryName()); Map code = new HashMap(); code.put("code", r.getCategoryCode()); tree.setAttributes(code); lt.add(tree); } } return lt; } @Override public List allTree() { // TODO Auto-generated method stub List l=null; List lt = new ArrayList(); Map params = new HashMap(); l= categoryDao.find("select distinct t from TEFmanualCategory t left join fetch t.parent "); if(l!=null && (l.size()>0)) { for(TEFmanualCategory r: l) { Tree tree= new Tree(); tree.setId(r.getAutoID().toString()); if(r.getParent()!=null) { tree.setPid(r.getParent().getAutoID().toString()); } tree.setText(r.getCategoryName()); Map code = new HashMap(); code.put("code", r.getCategoryCode()); tree.setAttributes(code); lt.add(tree); } } return lt; } @Override public EFmanualCategory getExpertAndChild(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFmanualCategory t = categoryDao.get("from TEFmanualCategory t where t.autoID = :id", params); EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } Set s=t.getUsers(); if ((s != null) && !s.isEmpty()) { boolean b = false; String ids = ""; String names = ""; for(TEFPersonalInfo tr:s) { if (b) { ids += ","; names += ","; } else { b = true; } ids+=tr.getAutoID(); names+=tr.getRealName(); } u.setExpertIds(ids); u.setExpertNames(names); } String hql="from TEFmanualCategory t where t.parent.autoID =:id"; List trs = categoryDao.find(hql, params); if((trs!=null)&&(trs.size()>0)) { u.setIsParent(1); boolean b = false; String ids = ""; String names = ""; for(TEFmanualCategory tt:trs) { if (b) { ids += ","; names += ","; } else { b = true; } ids+=tt.getAutoID(); names+=tt.getCategoryName(); } u.setChildIds(ids); u.setChildNames(names); } return u; } @Override public EFmanualCategoryList getChild(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); //System.out.println(id); params.put("id", id); String hql="from TEFmanualCategory t where t.parent.autoID =:id"; List l = categoryDao.find(hql,params); List ul = new ArrayList(); EFmanualCategoryList list= new EFmanualCategoryList(); if ((l != null) && (l.size() > 0)) { list.setIsParent(1); for (TEFmanualCategory t : l) { EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } long childPid=t.getAutoID(); Map params2 = new HashMap(); params2.put("childPid", childPid); String hql2 = " select count(*) from TEFmanualCategory t where t.parent.autoID =:childPid"; if(categoryDao.count(hql2, params2)>0) { u.setIsParent(1); } else { u.setIsParent(0); } ul.add(u); } } list.setList(ul); return list; } @Override public EFExpertList getExpertList(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFmanualCategory t = categoryDao.get("from TEFmanualCategory t where t.autoID = :id", params); Set s=t.getUsers(); List ul = new ArrayList(); EFExpertList list = new EFExpertList(); if ((s != null) && !s.isEmpty()) { for(TEFPersonalInfo tr:s) { User u= new User(); BeanUtils.copyProperties(tr, u); ul.add(u); } } list.setList(ul); return list; } @Override public List getByPid(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); List ul = new ArrayList(); List l; //System.out.println(id); if(id!=0) { params.put("id", id); String hql="from TEFmanualCategory t where t.parent.autoID =:id and t.deleted=0"; l = categoryDao.find(hql,params); } else { String hql="from TEFmanualCategory t where t.parent= null and t.deleted=0"; l = categoryDao.find(hql); } if ((l != null) && (l.size() > 0)) { for (TEFmanualCategory t : l) { EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); ul.add(u); } } return ul; } @Override public List getTreeByCode(String categoryCode) { // TODO Auto-generated method stub List l=null; List lt = new ArrayList(); Map params = new HashMap(); params.put("categoryCode", "%%"+categoryCode+"%%"); l= categoryDao.find("select distinct t from TEFmanualCategory t left join fetch t.parent where t.categoryCode like :categoryCode and t.deleted=0",params); if(l!=null && (l.size()>0)) { for(TEFmanualCategory r: l) { Tree tree= new Tree(); tree.setId(r.getAutoID().toString()); if(r.getParent()!=null) { tree.setPid(r.getParent().getAutoID().toString()); } tree.setText(r.getCategoryName()); Map code = new HashMap(); code.put("code", r.getCategoryCode()); tree.setAttributes(code); lt.add(tree); } } //System.out.println(l.size()); return lt; } @Override public List treeGrid(EFmanualCategory category) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " select distinct t from TEFmanualCategory t left join fetch t.parent "; if(category.getCategoryCode()!=null) { params.put("categoryCode", "%%"+category.getCategoryCode()+"%%"); hql+="where t.categoryCode like :categoryCode and t.deleted=0"; } List l = categoryDao.find(hql, params); if ((l != null) && (l.size() > 0)) { for (TEFmanualCategory t : l) { EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); u.setId(t.getAutoID()); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } ul.add(u); } } return ul; } @Override public EFmanualCategory getByCode(String code) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("code", code); TEFmanualCategory t = categoryDao.get("from TEFmanualCategory t where t.categoryCode = :code", params); EFmanualCategory u = new EFmanualCategory(); BeanUtils.copyProperties(t, u); if(t.getParent()!=null) { u.setParentID(t.getParent().getAutoID()); } Set s=t.getUsers(); if ((s != null) && !s.isEmpty()) { boolean b = false; String ids = ""; String names = ""; for(TEFPersonalInfo tr:s) { if (b) { ids += ","; names += ","; } else { b = true; } ids+=tr.getAutoID(); names+=tr.getRealName(); } u.setExpertIds(ids); u.setExpertNames(names); } return u; } } ================================================ FILE: src/main/java/light/mvc/service/impl/manual/EFManualContentServiceImpl.java ================================================ package light.mvc.service.impl.manual; import light.mvc.dao.BaseDaoI; import light.mvc.model.manual.TEFmanualContent; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.manual.EFmanualContent; import light.mvc.service.manual.EFManualContentServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class EFManualContentServiceImpl implements EFManualContentServiceI { @Autowired private BaseDaoI manualDao; @Override public Long add(EFmanualContent m) { // TODO Auto-generated method stub TEFmanualContent t = new TEFmanualContent(); BeanUtils.copyProperties(m,t); manualDao.save(t); return t.getAutoID(); } @Override public List dataGrid(EFmanualContent news, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFmanualContent t "; List l = manualDao.find(hql + whereHql(news, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFmanualContent t : l) { EFmanualContent u = new EFmanualContent(); BeanUtils.copyProperties(t, u); //eed.setAsText(u.getContent()); //u.setContent(eed.getAsText()); ul.add(u); } return ul; } @Override public Long count(EFmanualContent news, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFmanualContent t "; return manualDao.count("select count(*) " + hql + whereHql(news, params), params); } @Override public void delete(Long id) { // TODO Auto-generated method stub TEFmanualContent t= manualDao.get(TEFmanualContent.class,id); t.setDeleted(1); t.setUpdateDate(new Date()); manualDao.update(t); } @Override public EFmanualContent get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFmanualContent t = manualDao.get("from TEFmanualContent t where t.autoID = :id", params); EFmanualContent u = new EFmanualContent(); BeanUtils.copyProperties(t, u); return u; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFmanualContent news, Map params) {//待修改 String hql = ""; if (news != null) { hql += " where t.deleted=0 "; if(news.getCategoryCode() != null && news.getCategoryCode().length() > 0){ hql += " and t.categoryCode like :categoryCode"; params.put("categoryCode", news.getCategoryCode()+"%%"); } if(news.getTitle() != null && news.getTitle().length() > 0){ hql += " and t.title like :searchKey"; params.put("searchKey", "%%"+news.getTitle()+"%%"); } if(news.getManualCategoryID()!=null) { hql += " and t.manualCategoryID = :manualCategoryID "; params.put("manualCategoryID", news.getManualCategoryID()); } } return hql; } @Override public void edit(EFmanualContent data) { // TODO Auto-generated method stub TEFmanualContent t=manualDao.get(TEFmanualContent.class,data.getAutoID()); t.setCategoryCode(data.getCategoryCode()); t.setTitle(data.getTitle()); t.setContent(data.getContent()); t.setManualCategoryID(data.getManualCategoryID()); manualDao.update(t); } @Override public List getAllData() { // TODO Auto-generated method stub String hql = " from TEFmanualContent t "; List l=manualDao.find(hql); return l; } @Override public List getBYCategoryCode(String categoryCode) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); params.put("categoryCode", categoryCode+"%%"); String hql = " from TEFmanualContent t where t.categoryCode like :categoryCode"; List l = manualDao.find(hql); for (TEFmanualContent t : l) { EFmanualContent u = new EFmanualContent(); BeanUtils.copyProperties(t, u); String theString =t.getContent().replace("<br />", "
"); theString=this.HtmlDecode(theString); u.setContent(theString); ul.add(u); } return ul; } @Override public List getBYCategoryCode(String categoryCode, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); params.put("categoryCode", categoryCode+"%%"); String hql = " from TEFmanualContent t where t.categoryCode like :categoryCode"; List l = manualDao.find(hql+ orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFmanualContent t : l) { EFmanualContent u = new EFmanualContent(); BeanUtils.copyProperties(t, u); String theString =t.getContent().replace("<br />", "
"); theString=this.HtmlDecode(theString); u.setContent(theString); ul.add(u); } return ul; } @Override public List getBYCategoryCode(String categoryCode, PageFilter ph, String searchKey) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFmanualContent t"; EFmanualContent search = new EFmanualContent(); if(categoryCode != null && categoryCode.length() > 0){ search.setCategoryCode(categoryCode); } if(searchKey != null && searchKey.length() > 0){ search.setTitle(searchKey); } List l = manualDao.find(hql + whereHql(search, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFmanualContent t : l) { EFmanualContent u = new EFmanualContent(); BeanUtils.copyProperties(t, u); String theString =t.getContent().replace("<br />", "
"); theString=this.HtmlDecode(theString); u.setContent(theString); ul.add(u); } return ul; } public String HtmlEncode(String theString) { theString=theString.replace(">", ">"); theString=theString.replace("<", "<"); theString=theString.replace(" ", " "); theString=theString.replace("/", """); theString=theString.replace("/n", "
"); return theString; } public String HtmlDecode(String theString) { theString=theString.replace(">", ">"); theString=theString.replace("<", "<"); theString=theString.replace(" ", " "); theString=theString.replace("&nbsp;", " "); return theString; } } ================================================ FILE: src/main/java/light/mvc/service/impl/manual/EFManualKeywordServiceImpl.java ================================================ package light.mvc.service.impl.manual; import light.mvc.dao.BaseDaoI; import light.mvc.model.manual.TEFmanualKeyword; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.manual.EFmanualKeyword; import light.mvc.service.manual.EFManualKeywordServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class EFManualKeywordServiceImpl implements EFManualKeywordServiceI { @Autowired private BaseDaoI keywordDao; @Override public List dataGrid(EFmanualKeyword keyword, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFmanualKeyword t "; List l= keywordDao.find(hql +whereHql(keyword, params)+ orderHql(ph), params, ph.getPage(), ph.getRows()); if ((l != null) && (l.size() > 0)) { for(TEFmanualKeyword t:l) { EFmanualKeyword u= new EFmanualKeyword(); BeanUtils.copyProperties(t, u); ul.add(u); } } return ul; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFmanualKeyword keyword, Map params) {//待修改 String hql = ""; if (keyword != null) { hql += " where t.deleted=0 "; if(keyword.getManualContentID() != null && keyword.getManualContentID() > 0){ hql += " and t.manualContentID=:manualContentID"; params.put("manualContentID", keyword.getManualContentID()); } if(keyword.getCategoryID() != null && keyword.getCategoryID() > 0){ hql += " and t.categoryID=:categoryID"; params.put("categoryID", keyword.getCategoryID()); } if(keyword.getKeyword() != null && keyword.getKeyword().length() > 0){ hql += " and t.keyword like :keyword"; params.put("keyword", "%%" + keyword.getKeyword() + "%%"); } if(keyword.getCategoryCode() != null && keyword.getCategoryCode().length() > 0){ hql += " and t.categoryCode like :categoryCode"; params.put("categoryCode", keyword.getCategoryCode() + "%%"); } } return hql; } @Override public Long count(EFmanualKeyword keyword, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFmanualKeyword t "; return keywordDao.count("select count(*) " + hql + whereHql(keyword, params), params); } @Override public void delete(Long id) { // TODO Auto-generated method stub TEFmanualKeyword t = keywordDao.get(TEFmanualKeyword.class,id); t.setDeleted(1); t.setUpdateDate(new Date()); keywordDao.update(t); } @Override public EFmanualKeyword get(Long id) { // TODO Auto-generated method stub TEFmanualKeyword t = keywordDao.get(TEFmanualKeyword.class,id); EFmanualKeyword u= new EFmanualKeyword(); BeanUtils.copyProperties(t, u); return u; } @Override public void edit(EFmanualKeyword keyword) { // TODO Auto-generated method stub TEFmanualKeyword t = keywordDao.get(TEFmanualKeyword.class,keyword.getAutoID()); BeanUtils.copyProperties(keyword, t); t.setUpdateDate(new Date()); keywordDao.update(t); } @Override public void add(EFmanualKeyword keyword) { // TODO Auto-generated method stub TEFmanualKeyword t = new TEFmanualKeyword(); BeanUtils.copyProperties(keyword, t); t.setCreateDate(new Date()); t.setUpdateDate(new Date()); keywordDao.save(t); } @Override public List getAllKeyword(EFmanualKeyword keyword){ List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFmanualKeyword t "; List l= keywordDao.find(hql + whereHql(keyword, params) + " order by t.keyword asc", params); if ((l != null) && (l.size() > 0)) { for(TEFmanualKeyword t:l) { EFmanualKeyword u= new EFmanualKeyword(); BeanUtils.copyProperties(t, u); ul.add(u); } } return ul; } } ================================================ FILE: src/main/java/light/mvc/service/impl/news/EFCategoryServiceImpl.java ================================================ package light.mvc.service.impl.news; import light.mvc.dao.BaseDaoI; import light.mvc.model.news.TEFcategory; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.news.EFCategory; import light.mvc.service.news.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class EFCategoryServiceImpl implements EFCategoryServiceI{ @Autowired private BaseDaoI categoryDao; @Override public void add(EFCategory m) { // TODO Auto-generated method stub TEFcategory t= new TEFcategory(); BeanUtils.copyProperties(m,t); categoryDao.save(t); } @Override public List dataGrid(EFCategory category, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFcategory t "; List l = categoryDao.find(hql + whereHql(category, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFcategory t : l) { EFCategory u = new EFCategory(); BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public Long count(EFCategory category, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFcategory t "; return categoryDao.count("select count(*) " + hql + whereHql(category, params), params); } @Override public void delete(Long id, HttpServletRequest request) { // TODO Auto-generated method stub TEFcategory t= categoryDao.get(TEFcategory.class,id); if(t != null){ t.setDeleted(1); } categoryDao.update(t); } @Override public EFCategory get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFcategory t = categoryDao.get("from TEFcategory t where t.deleted=0 and t.id = :id", params); EFCategory u = null; if(t != null) { u = new EFCategory(); BeanUtils.copyProperties(t, u); } BeanUtils.copyProperties(t, u); return u; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFCategory category, Map params) {//待修改 String hql = " where t.deleted=0 "; if (category != null) { if(category.getCategoryName() != null){ hql += " and t.categoryName like :categoryName"; params.put("categoryName", "%" + category.getCategoryName() + "%"); } if(category.getType() != null){ hql += " and t.type = :type"; params.put("type", category.getType()); } } return hql; } @Override public void edit(EFCategory data) { // TODO Auto-generated method stub TEFcategory t = categoryDao.get(TEFcategory.class, data.getAutoID()); BeanUtils.copyProperties(data, t); categoryDao.update(t); } @Override public List getAllData(EFCategory c) { // TODO Auto-generated method stub List categories = new ArrayList(); Map params = new HashMap(); String hql = " from TEFcategory t "; List l = categoryDao.find(hql + whereHql(c,params), params); for(TEFcategory cFcategory : l){ EFCategory category = new EFCategory(); BeanUtils.copyProperties(cFcategory, category); categories.add(category); } return categories; } } ================================================ FILE: src/main/java/light/mvc/service/impl/news/EFNewsServiceImpl.java ================================================ package light.mvc.service.impl.news; import light.mvc.dao.BaseDaoI; import light.mvc.model.news.TEFnews; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.news.EFNews; import light.mvc.service.news.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.*; @Service public class EFNewsServiceImpl implements EFNewsServiceI{ @Autowired private BaseDaoI newsDao; @Override public Long add(EFNews m) { // TODO Auto-generated method stub TEFnews t = new TEFnews(); BeanUtils.copyProperties(m,t); Serializable id = newsDao.save(t); return (Long)id; } @Override public List dataGrid(EFNews news, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " select t.AutoID,t.PersonalID,t.Author,t.Title,t.Content,t.WebPath,t.PublishDate,t.ReadCount,t.Status,t.CategoryID from newscontent t "; if(news.getCategoryTypeID() != null){ hql += " join newscategory c on t.categoryID=c.AutoID and c.type=:categoryType "; params.put("categoryType", news.getCategoryTypeID()); } List l = newsDao.findBySql(hql + whereHql(news, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); //List l = newsDao.find(hql + whereHql(news, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (Object[] obj : l) { EFNews u = new EFNews(); u.setAutoID(Long.parseLong(obj[0].toString())); u.setPersonalID(Long.parseLong(obj[1].toString())); u.setAuthor((String)obj[2]); u.setTitle((String)obj[3]); u.setContent((String)obj[4]); u.setWebPath((String)obj[5]); u.setPublishDate((Date)obj[6]); u.setReadCount(Integer.parseInt(obj[7].toString())); u.setStatus(Long.parseLong(obj[8].toString())); u.setCategoryID(Long.parseLong(obj[9].toString())); //BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public Long count(EFNews news, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " select count(t.autoid) from newscontent t "; if(news.getCategoryTypeID() != null){ hql += " join newscategory c on t.categoryID=c.AutoID and c.type=:categoryType "; params.put("categoryType", news.getCategoryTypeID()); } hql += whereHql(news, params); return newsDao.countBySql(hql, params).longValue(); } @Override public void delete(Long id) { // TODO Auto-generated method stub TEFnews t= newsDao.get(TEFnews.class,id); if(t != null){ t.setDeleted(1); } newsDao.update(t); } @Override public EFNews get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFnews t = newsDao.get("from TEFnews t where t.deleted=0 and t.id = :id", params); EFNews u = null; if(t != null) { u = new EFNews(); BeanUtils.copyProperties(t, u); } return u; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFNews news, Map params) {//待修改 String hql = " where t.deleted=0 "; if (news != null) { if(news.getStatus() != null){ hql += " and t.status=:status "; params.put("status", news.getStatus()); } if(news.getCategoryID() != null){ hql += " and t.categoryID=:categoryID "; params.put("categoryID", news.getCategoryID()); } if(news.getTitle() != null){ hql += " and t.title like :title "; params.put("title", "%" + news.getTitle() + "%"); } if(news.getPersonalID() != null){ hql += " and t.personalID=:personalID "; params.put("personalID", news.getPersonalID()); } if(news.getSearchStartDate() != null){ hql += " and t.publishDate >= :searchStDate "; params.put("searchStDate", news.getSearchStartDate()); } if(news.getSearchEndDate() != null){ hql += " and t.publishDate < :searchEndDate "; params.put("searchEndDate", news.getSearchEndDate()); } } return hql; } @Override public void edit(EFNews news) { TEFnews t = newsDao.get(TEFnews.class, news.getAutoID()); t.setTitle(news.getTitle()); t.setContent(news.getContent()); t.setCategoryID(news.getCategoryID()); newsDao.update(t); } @Override public void publish(EFNews news){ TEFnews t = newsDao.get(TEFnews.class, news.getAutoID()); t.setWebPath(news.getWebPath()); t.setStatus(news.getStatus()); t.setPublishDate(new Date()); newsDao.update(t); } @Override public void unPublish(EFNews news){ TEFnews t = newsDao.get(TEFnews.class, news.getAutoID()); t.setPublishDate(null); t.setStatus(news.getStatus()); newsDao.update(t); } @Override public void updateReadCount(Long id) { String hql = "update TEFnews set readCount = readCount + 1 where autoID = :autoID"; Map params = new HashMap(); params.put("autoID", id); newsDao.executeHql(hql, params); } } ================================================ FILE: src/main/java/light/mvc/service/manual/EFManualCategoryServiceI.java ================================================ package light.mvc.service.manual; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.manual.EFExpertList; import light.mvc.pageModel.manual.EFmanualCategory; import light.mvc.pageModel.manual.EFmanualCategoryList; import javax.servlet.http.HttpServletRequest; import java.util.List; public interface EFManualCategoryServiceI { public void add(EFmanualCategory category); public List dataGrid(EFmanualCategory category, PageFilter ph); public List treeGrid(EFmanualCategory category); public List getAllData(); public Long count(EFmanualCategory category, PageFilter ph); public void delete(Long id, HttpServletRequest request); public EFmanualCategory get(Long id); public EFmanualCategory getByCode(String code); public EFmanualCategory getExpertAndChild(Long id); public EFmanualCategoryList getChild(Long id); public List getByPid(Long id); public EFExpertList getExpertList(Long id); public void edit(EFmanualCategory data); public List tree(); public List allTree(); public List getTreeByCode(String categoryCode); } ================================================ FILE: src/main/java/light/mvc/service/manual/EFManualContentServiceI.java ================================================ package light.mvc.service.manual; import light.mvc.model.manual.TEFmanualContent; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.manual.EFmanualContent; import java.util.List; public interface EFManualContentServiceI { public Long add(EFmanualContent category); public List dataGrid(EFmanualContent category, PageFilter ph); public List getAllData(); public Long count(EFmanualContent category, PageFilter ph); public void delete(Long id); public EFmanualContent get(Long id); public void edit(EFmanualContent data); public List getBYCategoryCode(String categoryCode); public List getBYCategoryCode(String categoryCode, PageFilter ph); public List getBYCategoryCode(String categoryCode, PageFilter ph, String searchKey); } ================================================ FILE: src/main/java/light/mvc/service/manual/EFManualKeywordServiceI.java ================================================ package light.mvc.service.manual; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.manual.EFmanualKeyword; import java.util.List; public interface EFManualKeywordServiceI { public List dataGrid(EFmanualKeyword keyword, PageFilter ph); public Long count(EFmanualKeyword keyword, PageFilter ph); public void delete(Long id); public EFmanualKeyword get(Long id); public void edit(EFmanualKeyword keyword); public void add(EFmanualKeyword keyword); public List getAllKeyword(EFmanualKeyword keyword); } ================================================ FILE: src/main/java/light/mvc/service/news/EFCategoryServiceI.java ================================================ package light.mvc.service.news; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.news.EFCategory; import javax.servlet.http.HttpServletRequest; import java.util.List; public interface EFCategoryServiceI { public void add(EFCategory category); public List dataGrid(EFCategory category, PageFilter ph); public List getAllData(EFCategory c); public Long count(EFCategory category, PageFilter ph); public void delete(Long id, HttpServletRequest request); public EFCategory get(Long id); public void edit(EFCategory data); } ================================================ FILE: src/main/java/light/mvc/service/news/EFNewsServiceI.java ================================================ package light.mvc.service.news; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.news.EFNews; import java.util.List; public interface EFNewsServiceI { public Long add(EFNews xxnews); public List dataGrid(EFNews news, PageFilter ph); public Long count(EFNews news, PageFilter ph); public void delete(Long id); public EFNews get(Long id); public void edit(EFNews data); public void publish(EFNews news); public void unPublish(EFNews news); public void updateReadCount(Long id); } ================================================ FILE: src/main/java/light/mvc/service/sensor/impl/monitoringNodeServiceImpl.java ================================================ package light.mvc.service.sensor.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sensor.TmonitoringNode; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.monitoringNode; import light.mvc.service.sensor.monitoringNodeServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class monitoringNodeServiceImpl implements monitoringNodeServiceI { @Autowired private BaseDaoI nodeDao; @Override public monitoringNode add(monitoringNode node) { // TODO Auto-generated method stub TmonitoringNode t = new TmonitoringNode(); BeanUtils.copyProperties(node,t); nodeDao.save(t); BeanUtils.copyProperties(t,node); return node; } @Override public List dataGrid(monitoringNode node, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql="from TmonitoringNode t"; List l; if(ph!=null) { l= nodeDao.find(hql+ whereHql(node, params) + orderHql(ph), params,ph.getPage(), ph.getRows()); } else { l= nodeDao.find(hql+ whereHql(node, params),params); } if(l!=null&&l.size()>0) { for(TmonitoringNode t:l) { monitoringNode u = new monitoringNode(); BeanUtils.copyProperties(t, u); ul.add(u); } } return ul; } @Override public Long count(monitoringNode node, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TmonitoringNode t "; return nodeDao.count("select count(*) " + hql + whereHql(node, params), params); } @Override public void delete(Long id) { // TODO Auto-generated method stub TmonitoringNode t = nodeDao.get(TmonitoringNode.class, id); if(t!=null) { t.setDeleted(1); } } @Override public monitoringNode get(Long id) { // TODO Auto-generated method stub TmonitoringNode t = nodeDao.get(TmonitoringNode.class, id); monitoringNode u = new monitoringNode(); BeanUtils.copyProperties(t, u); return u; } @Override public void edit(monitoringNode node) { // TODO Auto-generated method stub TmonitoringNode t = nodeDao.get(TmonitoringNode.class, node.getAutoID()); if(t!=null) { if(node.getCode()!=null&&node.getCode()!="") { t.setCode(node.getCode()); } if(node.getAddress()!=null&&node.getAddress()!="") { t.setAddress(node.getAddress()); } if(node.getDescription()!=null&&node.getDescription()!="") { t.setDescription(node.getDescription()); } if(node.getFps()!=null&&node.getFps()!=0) { t.setFps(node.getFps()); } if(node.getLocationX()!=null&&node.getLocationX()!=0) { t.setLocationX(node.getLocationX()); } if(node.getLocationY()!=null&&node.getLocationY()!=0) { t.setLocationY(node.getLocationY()); } if(node.getName()!=null&&node.getName()!="") { t.setName(node.getName()); } if(node.getStation()!=null&&node.getStation()!=0) { t.setStation(node.getStation()); } if(node.getType()!=null&&node.getType()!=0) { t.setType(node.getType()); } t.setTS(new Date()); t.setUpdateDate(new Date()); nodeDao.update(t); } } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(monitoringNode node, Map params) { String hql = " where t.deleted=0 "; if (node != null) { if(node.getCode() != null&&node.getCode()!=""){ hql += " and t.code=:code "; params.put("code", node.getCode()); } if(node.getAddress()!=null&&node.getAddress()!="") { hql += " and t.address=:address "; params.put("address", node.getAddress()); } if(node.getDescription()!=null&&node.getDescription()!="") { hql += " and t.description=:description "; params.put("description", node.getDescription()); } if(node.getFps()!=null&&node.getFps()!=0) { hql += " and t.fps=:fps "; params.put("fps", node.getFps()); } if(node.getName()!=null&&node.getName()!="") { hql += " and t.name=:name "; params.put("name", node.getName()); } if(node.getStation()!=null&&node.getStation()!=0) { hql += " and t.station=:station "; params.put("station", node.getStation()); } if(node.getType()!=null&&node.getType()!=0) { hql += " and t.type=:type "; params.put("type", node.getType()); } } return hql; } } ================================================ FILE: src/main/java/light/mvc/service/sensor/impl/pestDataServiceImpl.java ================================================ package light.mvc.service.sensor.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sensor.TpestData; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.pestData; import light.mvc.service.sensor.pestDataServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class pestDataServiceImpl implements pestDataServiceI { @Autowired private BaseDaoI pestDao; @Override public pestData add(pestData u) { // TODO Auto-generated method stub TpestData t = new TpestData(); BeanUtils.copyProperties(u, t); pestDao.save(t); BeanUtils.copyProperties(t, u); return u; } @Override public List dataGrid(pestData pest, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql="from TpestData t"; List l= pestDao.find(hql+ whereHql(pest, params) + orderHql(ph), params,ph.getPage(), ph.getRows()); if(l!=null&&l.size()>0) { for(TpestData t:l) { pestData u = new pestData(); BeanUtils.copyProperties(t, u); ul.add(u); } } return ul; } @Override public Long count(pestData u, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql="from TpestData t"; return pestDao.count("select count(*) " + hql + whereHql(u, params), params); } @Override public void delete(Long id) { // TODO Auto-generated method stub TpestData t = pestDao.get(TpestData.class, id); if(t!=null) { t.setDeleted(1); } } @Override public pestData get(Long id) { // TODO Auto-generated method stub TpestData t = pestDao.get(TpestData.class, id); pestData u = new pestData(); BeanUtils.copyProperties(t, u); return u; } @Override public void edit(pestData u) { // TODO Auto-generated method stub TpestData t = pestDao.get(TpestData.class,u.getAutoID()); if(t!=null) { if(u.getCount()!=null) { t.setCount(u.getCount()); } if(u.getDescription()!=null&&u.getDescription()!="") { t.setDescription(u.getDescription()); } if(u.getImgId()!=null&&u.getImgId()!=0) { t.setImgId(u.getImgId()); } if(u.getMonitoringNodeId()!=null&&u.getMonitoringNodeId()!=0) { t.setMonitoringNodeId(u.getMonitoringNodeId()); } if(u.getName()!=null&&u.getName()!="") { t.setName(u.getName()); } if(u.getRealCount()!=null) { t.setRealCount(u.getRealCount()); } if(u.getType()!=null&&u.getType()!=0) { t.setType(u.getType()); } t.setUpdateDate(new Date()); } } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(pestData u, Map params) { String hql = " where t.deleted=0 "; if (u != null) { if(u.getDescription()!=null&&u.getDescription()!="") { hql += " and t.description=:description "; params.put("description", u.getDescription()); } if(u.getName()!=null&&u.getName()!="") { hql += " and t.name=:name "; params.put("name", u.getName()); } if(u.getType()!=null&&u.getType()!=0) { hql += " and t.type=:type "; params.put("type", u.getType()); } if(u.getImgId()!=null&&u.getImgId()!=0) { hql += " and t.imgId=:imgId "; params.put("imgId", u.getImgId()); } if(u.getMonitoringNodeId()!=null&&u.getMonitoringNodeId()!=0) { hql += " and t.monitoringNodeId=:monitoringNodeId "; params.put("monitoringNodeId", u.getMonitoringNodeId()); } if(u.getSensorId()!=null&&u.getSensorId()!=0) { hql += " and t.sensorId=:sensorId "; params.put("sensorId", u.getSensorId()); } } return hql; } } ================================================ FILE: src/main/java/light/mvc/service/sensor/impl/pestSensorServiceImpl.java ================================================ package light.mvc.service.sensor.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sensor.TmonitoringNode; import light.mvc.model.sensor.Tsensor; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.Sensor; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import light.mvc.service.sensor.*; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class pestSensorServiceImpl implements pestSensorServiceI{ @Autowired private BaseDaoI nodeDao; @Autowired private BaseDaoI Dao; @Override public void add(Sensor data) { // TODO Auto-generated method stub Tsensor t= new Tsensor(); BeanUtils.copyProperties(data,t); Dao.save(t); } @Override public List dataGrid(Sensor data, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from Tsensor t "; List l = Dao.find(hql + whereHql(data, params)+ orderHql(ph), params, ph.getPage(), ph.getRows()); for (Tsensor t : l) { Sensor u = new Sensor(); BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public Long count(Sensor data, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from Tsensor t "; return Dao.count("select count(*) " + hql + whereHql(data, params), params); } @Override public void delete(Long id, HttpServletRequest request) { // TODO Auto-generated method stub Tsensor t= Dao.get(Tsensor.class,id); Dao.delete(t); } @Override public Sensor get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); Tsensor t = Dao.get("from Tsensor t where t.autoId = :id", params); Sensor u = new Sensor(); BeanUtils.copyProperties(t, u); return u; } @Override public void edit(Sensor data) { // TODO Auto-generated method stub Tsensor t=Dao.get(Tsensor.class, data.getAutoID()); Dao.update(t); } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(Sensor data, Map params) {//待修改 String hql = " where t.deleted=0 "; if (data != null) { if(data.getMonitoringNodeId()!=null&&data.getMonitoringNodeId()!=0) { hql+=" and t.monitoringNodeId = :monitoringNodeId "; params.put("monitoringNodeId", data.getMonitoringNodeId()); } if(data.getSerialNum()!=null) { hql+=" and t.serialNum = :serialNum "; params.put("serialNum", data.getSerialNum()); } } return hql; } @Override public List getPredictChart(int moniNodeId, String startTime, String endTime) { // TODO Auto-generated method stub String hql="SELECT DATE_FORMAT(createDate,'%m-%d'),avg(sensor1),avg(sensor2),avg(sensor3),avg(sensor4),avg(sensor5),avg(sensor6) FROM t_sensor as t where t.createDate between'"+startTime+"' and '"+ endTime+"' group by year(createDate) , month(createDate) , day(createDate)"; List obj= Dao.findBySql(hql); return obj; } @Override public void insertApi(JSONArray dataJson, Station station, List nodeList) throws JSONException { // TODO Auto-generated method stub String sqlPre = " INSERT INTO sensor "; String left =" ( "; String right= " ) "; String sqlMid=" VALUES "; String columsName =""; String value = ""; for(int i=0;i params = new HashMap(); JSONObject jo = (JSONObject)dataJson.get(i); String dateStr=jo.getString("date"); dateStr= dateStr.replace("T", " "); columsName+=" "+"createDate"+","; //value+=" :"+"createDate"+","; //params.put("createDate", dateStr); value+=" '"+dateStr+"',"; for(int j=0 ; j params = new HashMap(); params.put("serialNum", serialNum); List l = Dao.find("from Tsensor t where t.deleted=0 and t.serialNum = :serialNum order by t.createDate Desc", params,1,1); if(l!=null&&l.size()>0) { Tsensor t = l.get(0); Sensor u = new Sensor(); BeanUtils.copyProperties(t, u); return u; } return null; } } ================================================ FILE: src/main/java/light/mvc/service/sensor/impl/stationServiceImpl.java ================================================ package light.mvc.service.sensor.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sensor.Tstation; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sensor.Station; import light.mvc.service.sensor.stationServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class stationServiceImpl implements stationServiceI{ @Autowired private BaseDaoI stationDao; @Override public List treeGrid() { // TODO Auto-generated method stub List lr = new ArrayList(); List l = stationDao.find("from Tstation t left join fetch t.station where t.deleted=0"); if(l!=null&&l.size()>0) { for(Tstation t:l) { Station r = new Station(); BeanUtils.copyProperties(t, r); r.setId(t.getAutoID()); if (t.getStation() != null) { r.setPid(t.getStation().getAutoID()); r.setPname(t.getStation().getName()); } lr.add(r); } } return lr; } @Override public void add(Station station) { // TODO Auto-generated method stub Tstation t = new Tstation(); BeanUtils.copyProperties(station, t); if(station.getPid()!=null&&!"".equals(station.getPid())) { t.setStation(stationDao.get(Tstation.class, station.getPid())); } t.setCreateDate(new Date()); t.setSensorDateUpdate(new Date()); stationDao.save(t); } @Override public void delete(Long id) { // TODO Auto-generated method stub } @Override public void edit(Station station) { // TODO Auto-generated method stub Tstation t = stationDao.get(Tstation.class, station.getId()); t.setName(station.getName()); t.setCode(station.getCode()); if(station.getPid()!=null&&!"".equals(station.getPid())) { t.setStation(stationDao.get(Tstation.class, station.getId())); } stationDao.update(t); } @Override public Station get(Long id) { // TODO Auto-generated method stub Tstation t= stationDao.get(Tstation.class, id); if(t!=null&&t.getDeleted()==0) { Station r = new Station(); BeanUtils.copyProperties(t, r); r.setId(t.getAutoID()); if (t.getStation() != null) { r.setPid(t.getStation().getAutoID()); r.setPname(t.getStation().getName()); } return r; } return null; } @Override public List tree() { // TODO Auto-generated method stub List l = null; List lt = new ArrayList(); l= stationDao.find("select distinct t from Tstation t where t.deleted= 0"); if ((l != null) && (l.size() > 0)) { for (Tstation r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); if (r.getStation() != null) { tree.setPid(r.getStation().getAutoID().toString()); } tree.setText(r.getName()); lt.add(tree); } } return lt; } @Override public List getAuditPath(Long stationId) { // TODO Auto-generated method stub List result = new ArrayList(); Station r = get(stationId); if(r!=null) { result.add(r); while(r.getPid() != null && r.getPid() > 0) { r = get(r.getPid()); if(r != null) result.add(r); } } return result; } @Override public void update(Station station) { // TODO Auto-generated method stub } @Override public void updateSensorLastTime(Date lastDate,Long stationId) { // TODO Auto-generated method stub Tstation t= stationDao.get(Tstation.class, stationId); if(t!=null) { if(t.getDeleted()==0) { t.setSensorDateUpdate(lastDate); } stationDao.update(t); } } } ================================================ FILE: src/main/java/light/mvc/service/sensor/monitoringNodeServiceI.java ================================================ package light.mvc.service.sensor; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.monitoringNode; import java.util.List; public interface monitoringNodeServiceI { public monitoringNode add(monitoringNode node); public List dataGrid(monitoringNode node, PageFilter ph); public Long count(monitoringNode node, PageFilter ph); public void delete(Long id); public monitoringNode get(Long id); public void edit(monitoringNode node); } ================================================ FILE: src/main/java/light/mvc/service/sensor/pestDataServiceI.java ================================================ package light.mvc.service.sensor; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.pestData; import java.util.List; public interface pestDataServiceI { public pestData add(pestData u); public List dataGrid(pestData u, PageFilter ph); public Long count(pestData u, PageFilter ph); public void delete(Long id); public pestData get(Long id); public void edit(pestData u); } ================================================ FILE: src/main/java/light/mvc/service/sensor/pestSensorServiceI.java ================================================ package light.mvc.service.sensor; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sensor.Sensor; import light.mvc.pageModel.sensor.Station; import light.mvc.pageModel.sensor.monitoringNode; import org.json.JSONArray; import org.json.JSONException; import javax.servlet.http.HttpServletRequest; import java.util.List; public interface pestSensorServiceI { public void add(Sensor data); public List dataGrid(Sensor data, PageFilter ph); public Long count(Sensor data, PageFilter ph); public void delete(Long id, HttpServletRequest request); public Sensor get(Long id); public void edit(Sensor data); public List getPredictChart(int moniNodeId, String startTime, String endTime); public void insertApi(JSONArray dataJson, Station station, List nodeList) throws JSONException; public Sensor getLastSensor(long serialNum); } ================================================ FILE: src/main/java/light/mvc/service/sensor/stationServiceI.java ================================================ package light.mvc.service.sensor; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sensor.Station; import java.util.Date; import java.util.List; public interface stationServiceI { public List treeGrid(); public void add(Station station); public void delete(Long id); public void edit(Station station); public Station get(Long id); public List tree(); public List getAuditPath(Long stationId); public void update(Station station); public void updateSensorLastTime(Date lastDate, Long stationId); } ================================================ FILE: src/main/java/light/mvc/service/sys/DictionaryServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.Dictionary; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface DictionaryServiceI { public List dataGrid(Dictionary dictionary, PageFilter ph); public Long count(Dictionary dictionary, PageFilter ph); public void add(Dictionary dictionary); public void delete(Long id); public void edit(Dictionary dictionary); public Dictionary get(Long id); public List combox(String code); public List getDictionaryByCategoryCode(String code); public List getDictionaryByCategoryID(Long id); public Dictionary checkUnique(Dictionary dictionary); public Dictionary getDefaultDictionary(String categoryCode); public Dictionary getDictionary(String categoryCode, String contentCode); } ================================================ FILE: src/main/java/light/mvc/service/sys/DictionarytypeServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Dictionarytype; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface DictionarytypeServiceI { public void add(Dictionarytype dictionarytype); public void delete(Long id); public void edit(Dictionarytype dictionarytype); public Dictionarytype get(Long id); public List tree(); } ================================================ FILE: src/main/java/light/mvc/service/sys/EFNoticeServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.EFNotice; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface EFNoticeServiceI { public List dataGrid(EFNotice notice, PageFilter ph); public Long count(EFNotice notice, PageFilter ph); public Long add(EFNotice notice); public void delete(Long id); public void edit(EFNotice notice); public EFNotice get(Long id); public List gethaveNotice(Long personalID); public List gethaveNotNotice(Long personalID); public List gethaveNotice(Long personalID, PageFilter ph); public List gethaveNotNotice(Long personalID, PageFilter ph); public void setNotice(Long id); } ================================================ FILE: src/main/java/light/mvc/service/sys/OrganizationServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Organization; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface OrganizationServiceI { public List treeGrid(); public void add(Organization organization); public void delete(Long id); public void edit(Organization organization); public Organization get(Long id); public List tree(); public List getAuditPath(Long organizationId); } ================================================ FILE: src/main/java/light/mvc/service/sys/ResourceMetaServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.EFResourceMeta; import java.util.Date; import java.util.List; import java.util.Map; public interface ResourceMetaServiceI { public List dataGrid(EFResourceMeta resourceMeta); public List dataGrid(EFResourceMeta resourceMeta, PageFilter ph); public Long count(EFResourceMeta resourceMeta); public Long add(EFResourceMeta resourceMeta); public void delete(Long id); public void edit(EFResourceMeta resourceMeta); public EFResourceMeta get(Long id); public List get(Long metaID, Long typeID); public Map getDateCount(Long metaID, Long typeID); } ================================================ FILE: src/main/java/light/mvc/service/sys/ResourceServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Resource; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface ResourceServiceI { public List treeGrid(); public void add(Resource resource); public void delete(Long id); public void edit(Resource resource); public Resource get(Long id); public List tree(SessionInfo sessionInfo); public List allTree(boolean flag); public List resourceAllList(); } ================================================ FILE: src/main/java/light/mvc/service/sys/RoleServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Role; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface RoleServiceI { public List dataGrid(Role role, PageFilter ph); public Long count(Role role, PageFilter ph); public void add(Role role); public void delete(Long id); public void edit(Role role); public Role get(Long id); public void grant(Role role); public List tree(); } ================================================ FILE: src/main/java/light/mvc/service/sys/UserServiceI.java ================================================ package light.mvc.service.sys; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.sys.User; import java.util.List; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ public interface UserServiceI { public List dataGrid(User user, PageFilter ph); public List getAllExpert(); public Long count(User user, PageFilter ph); public Long add(User user); public void delete(Long id); public void edit(User user); public User get(Long personalID); public User login(User user); public List resourceList(Long id); public boolean editUserPwd(SessionInfo sessionInfo, String oldPwd, String pwd); public boolean editUserPwd(long autoID, String oldPwd, String pwd); public User getByLoginName(User user); public void setManual(User user); } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/DictionaryServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.framework.constant.GlobalConstant; import light.mvc.model.sys.TEFDictionary; import light.mvc.model.sys.TEFDictionaryCategory; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.Dictionary; import light.mvc.service.sys.DictionaryServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class DictionaryServiceImpl implements DictionaryServiceI{ @Autowired private BaseDaoI dictionaryDao; @Autowired private BaseDaoI dictionarytypeDao; @Override public void add(Dictionary r) { TEFDictionary t = new TEFDictionary(); t.setIsDefault(GlobalConstant.NOT_DEFAULT); t.setActive(GlobalConstant.ENABLE); t.setCode(r.getCode()); t.setText(r.getText()); t.setSeq(r.getSeq()); t.setDictionaryCategory(dictionarytypeDao.get(TEFDictionaryCategory.class, r.getDictionarytypeId())); dictionaryDao.save(t); } @Override public void delete(Long id) { TEFDictionary t = dictionaryDao.get(TEFDictionary.class, id); t.setDeleted(1); dictionaryDao.update(t); } @Override public void edit(Dictionary r) { TEFDictionary t = dictionaryDao.get(TEFDictionary.class, r.getId()); t.setText(r.getText()); t.setSeq(r.getSeq()); t.setCode(r.getCode()); t.setActive(r.getActive()); t.setDictionaryCategory(dictionarytypeDao.get(TEFDictionaryCategory.class, r.getDictionarytypeId())); dictionaryDao.update(t); } @Override public Dictionary get(Long id) { TEFDictionary t = dictionaryDao.get(TEFDictionary.class, id); Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); return r; } @Override public List dataGrid(Dictionary dictionary, PageFilter ph) { List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFDictionary t "; List l = dictionaryDao.find(hql + whereHql(dictionary, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFDictionary t : l) { Dictionary u = new Dictionary(); BeanUtils.copyProperties(t, u); u.setId(t.getAutoID()); if(t.getDictionaryCategory()!=null){ u.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); u.setDictionarytypeName(t.getDictionaryCategory().getName()); } ul.add(u); } return ul; } @Override public Long count(Dictionary dictionary, PageFilter ph) { Map params = new HashMap(); String hql = " from TEFDictionary t "; return dictionaryDao.count("select count(*) " + hql + whereHql(dictionary, params), params); } private String whereHql(Dictionary dictionary, Map params) { String hql = ""; if (dictionary != null) { hql += " where t.deleted=0"; if (dictionary.getText() != null) { hql += " and t.name like :name"; params.put("name", "%%" + dictionary.getText() + "%%"); } if(dictionary.getDictionarytypeId()!=null){ hql += " and t.dictionaryCategory.id = :dictionarytypeId"; params.put("dictionarytypeId", dictionary.getDictionarytypeId()); } } return hql; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } @Override public List combox(String code) { List ld = new ArrayList(); List lt = dictionaryDao.find("from TEFDictionary t where t.active=1 and t.dictionaryCategory.code='"+code+"' order by t.seq"); if(lt!=null&<.size()>0){ for (int i = 0; i < lt.size(); i++) { if(lt.get(i).getActive()==1 && lt.get(i).getDeleted()==0){ Dictionary d = new Dictionary(); d.setId(lt.get(i).getAutoID()); d.setCode(lt.get(i).getCode()); d.setText(lt.get(i).getText()); ld.add(d); } } } return ld; } @Override public Dictionary checkUnique(Dictionary dictionary) { String query = "from TEFDictionary t where t.code = :code and t.dictionaryCategory.autoID = :categoryid"; Map params = new HashMap(); params.put("code", dictionary.getCode()); params.put("categoryid", dictionary.getDictionarytypeId()); TEFDictionary t = dictionaryDao.get(query, params); if(t!=null){ Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); return r; }else{ return null; } } @Override public Dictionary getDefaultDictionary(String categoryCode){ if(categoryCode.isEmpty()){ return null; } String query = "from TEFDictionary t where t.dictionaryCategory.code = : categorycode and t.isDefault=1"; Map params = new HashMap(); params.put("categorycode", categoryCode); TEFDictionary t = dictionaryDao.get(query, params); if(t != null){ Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); return r; } else{ return null; } } @Override public Dictionary getDictionary(String categoryCode, String contentCode){ if(categoryCode.isEmpty() || contentCode.isEmpty()){ return null; } String query = "from TEFDictionary t where t.dictionaryCategory.code = :categorycode and t.code = :contentcode"; Map params = new HashMap(); params.put("categorycode", categoryCode); params.put("contentcode", contentCode); TEFDictionary t = dictionaryDao.get(query, params); if(t != null){ Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); return r; } else{ return null; } } @Override public List getDictionaryByCategoryCode(String code) { // TODO Auto-generated method stub if(code.isEmpty() ){ return null; } String hql = "from TEFDictionary t where t.deleted=0 and t.dictionaryCategory.code = :code"; Map params = new HashMap(); params.put("code", code); List lt = dictionaryDao.find(hql, params); List dl = new ArrayList(); if(lt!=null&<.size()>0) { for(TEFDictionary t:lt) { Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); dl.add(r); } } return dl; } @Override public List getDictionaryByCategoryID(Long id) { // TODO Auto-generated method stub if(id==null||id==0 ){ return null; } String hql = "from TEFDictionary t where t.deleted=0 and t.dictionaryCategory.autoID = :id"; Map params = new HashMap(); params.put("autoID", id); List lt = dictionaryDao.find(hql, params); List dl = new ArrayList(); if(lt!=null&<.size()>0) { for(TEFDictionary t:lt) { Dictionary r = new Dictionary(); r.setId(t.getAutoID()); r.setIsDefault(t.getIsDefault()); r.setText(t.getText()); r.setSeq(t.getSeq()); r.setCode(t.getCode()); if(t.getDictionaryCategory()!=null){ r.setDictionarytypeId(t.getDictionaryCategory().getAutoID()); r.setDictionarytypeName(t.getDictionaryCategory().getName()); } r.setActive(t.getActive()); dl.add(r); } } return dl; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/DictionarytypeServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFDictionaryCategory; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Dictionarytype; import light.mvc.service.sys.DictionarytypeServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class DictionarytypeServiceImpl implements DictionarytypeServiceI { @Autowired private BaseDaoI dictionarytypeDao; @Override public void add(Dictionarytype r) { TEFDictionaryCategory t = new TEFDictionaryCategory(); t.setName(r.getName()); t.setSeq(r.getSeq()); t.setDescription(r.getDescription()); dictionarytypeDao.save(t); } @Override public void delete(Long id) { TEFDictionaryCategory t = dictionarytypeDao.get(TEFDictionaryCategory.class, id); dictionarytypeDao.delete(t); } @Override public void edit(Dictionarytype r) { TEFDictionaryCategory t = dictionarytypeDao.get(TEFDictionaryCategory.class, r.getId()); t.setDescription(r.getDescription()); t.setName(r.getName()); t.setSeq(r.getSeq()); dictionarytypeDao.update(t); } @Override public Dictionarytype get(Long id) { TEFDictionaryCategory t = dictionarytypeDao.get(TEFDictionaryCategory.class, id); Dictionarytype r = new Dictionarytype(); r.setDescription(t.getDescription()); r.setId(t.getAutoID()); r.setName(t.getName()); r.setSeq(t.getSeq()); return r; } @Override public List tree() { List l = null; List lt = new ArrayList(); l = dictionarytypeDao.find("select distinct t from TEFDictionaryCategory t order by t.seq"); if ((l != null) && (l.size() > 0)) { for (TEFDictionaryCategory r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); if (r.getDictionaryCategory() != null) { tree.setPid(r.getDictionaryCategory().getAutoID().toString()); tree.setIconCls("icon_folder"); }else{ tree.setIconCls("icon_company"); } tree.setText(r.getName()); lt.add(tree); } } return lt; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/EFNoticeServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFDictionary; import light.mvc.model.sys.TEFNotice; import light.mvc.model.sys.TEFPersonalInfo; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.EFNotice; import light.mvc.service.sys.EFNoticeServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.*; @Service public class EFNoticeServiceImpl implements EFNoticeServiceI { @Autowired private BaseDaoI noticeDao; @Autowired private BaseDaoI dictionaryDao; @Autowired private BaseDaoI personalDao; @Override public Long add(EFNotice notice) { // TODO Auto-generated method stub TEFNotice t = new TEFNotice(); BeanUtils.copyProperties(notice, t); t.setDictionary(dictionaryDao.get(TEFDictionary.class, notice.getType())); t.setPersonal(personalDao.get(TEFPersonalInfo.class, notice.getPersonalID())); Serializable id = noticeDao.save(t); return (Long)id; } @Override public List dataGrid(EFNotice notice, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFNotice t "; List l = null; if(ph != null){ l = noticeDao.find(hql + whereHql(notice, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); } else{ l = noticeDao.find(hql + whereHql(notice, params) + " order by t.updateDate desc"); } for (TEFNotice t : l) { EFNotice u = new EFNotice(); BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public Long count(EFNotice notice, PageFilter ph) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFNotice t "; return noticeDao.count("select count(*) " + hql + whereHql(notice, params), params); } @Override public void delete(Long id) { // TODO Auto-generated method stub TEFNotice t = noticeDao.get(TEFNotice.class, id); if(t != null){ t.setUpdateDate(new Date()); t.setDeleted(1); } noticeDao.update(t); } @Override public EFNotice get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFNotice t = noticeDao.get("from TEFNotice t where t.deleted=0 and t.id = :id", params); EFNotice u = null; if(t != null) { u = new EFNotice(); BeanUtils.copyProperties(t, u); u.setPersonalID(t.getPersonal().getAutoID()); u.setPersonalName(t.getPersonal().getRealName()); } return u; } @Override public List gethaveNotNotice(Long personalID, PageFilter ph) { // TODO Auto-generated method stub return null; } public void edit(EFNotice notice) { // TODO Auto-generated method stub TEFNotice t = noticeDao.get(TEFNotice.class, notice.getAutoID()); if(notice.getContent() != null) t.setContent(notice.getContent()); t.setUpdateDate(new Date()); noticeDao.update(t); } @Override public void setNotice(Long id) { TEFNotice t = noticeDao.get(TEFNotice.class, id); if(t != null && t.getIsNotice() == 0){ t.setIsNotice(1); t.setUpdateDate(new Date()); } noticeDao.update(t); } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFNotice t, Map params) {//待修改 String hql = " where t.deleted=0 "; if (t != null) { if(t.getPersonalID() != null && t.getPersonalID() > 0){ hql += " and t.personal.autoID = :autoID"; params.put("autoID", t.getPersonalID()); } if(t.getType() != null){ hql += " and t.type = :type"; params.put("type", t.getType()); } if(t.getMetaID() != null){ hql += " and t.metaID = :metaID"; params.put("metaID", t.getMetaID()); } if(t.getIsNotice() != null){ hql += " and t.isNotice = :isNotice"; params.put("isNotice", t.getIsNotice()); } } return hql; } @Override public List gethaveNotice(Long personalID) { // TODO Auto-generated method stub return null; } @Override public List gethaveNotNotice(Long personalID) { // TODO Auto-generated method stub return null; } @Override public List gethaveNotice(Long personalID, PageFilter ph) { // TODO Auto-generated method stub return null; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/OrganizationServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFLoginUser; import light.mvc.model.sys.TEFOrganization; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Organization; import light.mvc.service.base.ServiceException; import light.mvc.service.sys.OrganizationServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class OrganizationServiceImpl implements OrganizationServiceI { @Autowired private BaseDaoI userDao; @Autowired private BaseDaoI organizationDao; @Override public List treeGrid() { List lr = new ArrayList(); List l = organizationDao .find("from TEFOrganization t left join fetch t.organization where t.deleted= 0 order by t.seq"); if ((l != null) && (l.size() > 0)) { for (TEFOrganization t : l) { Organization r = new Organization(); BeanUtils.copyProperties(t, r); r.setId(t.getAutoID()); if (t.getOrganization() != null) { r.setPid(t.getOrganization().getAutoID()); r.setPname(t.getOrganization().getDepartmentName()); } r.setIconCls(t.getIcon()); lr.add(r); } } return lr; } @Override public void add(Organization org) { TEFOrganization t = new TEFOrganization(); BeanUtils.copyProperties(org, t); if ((org.getPid() != null) && !"".equals(org.getPid())) { t.setOrganization(organizationDao.get(TEFOrganization.class, org.getPid())); } t.setCreateDate(new Date()); organizationDao.save(t); } @Override public void delete(Long id) { TEFOrganization t = organizationDao.get(TEFOrganization.class, id); del(t); } private void del(TEFOrganization t) { List list = userDao.find("from TEFPersonalInfo t left join t.organization org where org.autoID="+t.getAutoID()); if(list!=null&&list.size()>0){ throw new ServiceException("该部门已经被用户使用"); }else{ if ((t.getOrganizations() != null) && (t.getOrganizations().size() > 0)) { for (TEFOrganization r : t.getOrganizations()) { del(r); } } t.setDeleted(1); organizationDao.update(t); } } @Override public void edit(Organization r) { TEFOrganization t = organizationDao.get(TEFOrganization.class, r.getId()); t.setDepartmentCode(r.getDepartmentCode()); t.setIcon(r.getIcon()); t.setDepartmentName(r.getDepartmentName()); t.setSeq(r.getSeq()); if ((r.getPid() != null) && !"".equals(r.getPid())) { t.setOrganization(organizationDao.get(TEFOrganization.class, r.getPid())); } organizationDao.update(t); } @Override public Organization get(Long id) { TEFOrganization t = organizationDao.get(TEFOrganization.class, id); if(t != null && t.getDeleted() == 0){ Organization r = new Organization(); BeanUtils.copyProperties(t, r); r.setId(t.getAutoID()); if (t.getOrganization() != null) { r.setPid(t.getOrganization().getAutoID()); r.setPname(t.getOrganization().getDepartmentName()); } return r; } return null; } @Override public List tree() { List l = null; List lt = new ArrayList(); l = organizationDao.find("select distinct t from TEFOrganization t where t.deleted= 0 order by t.seq"); if ((l != null) && (l.size() > 0)) { for (TEFOrganization r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); if (r.getOrganization() != null) { tree.setPid(r.getOrganization().getAutoID().toString()); } tree.setText(r.getDepartmentName()); tree.setIconCls(r.getIcon()); lt.add(tree); } } return lt; } //获取审核的部门组织路径,每一个上级部门都包含其中 @Override public List getAuditPath(Long organizationId) { List result = new ArrayList(); Organization r = get(organizationId); if(r != null) { result.add(r); while(r.getPid() != null && r.getPid() > 0) { r = get(r.getPid()); if(r != null) result.add(r); } } return result; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/ResourceMetaImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFDictionary; import light.mvc.model.sys.TEFResourceMeta; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.sys.EFResourceMeta; import light.mvc.service.sys.ResourceMetaServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.*; @Service public class ResourceMetaImpl implements ResourceMetaServiceI{ @Autowired private BaseDaoI dictionaryDao; @Autowired private BaseDaoI resourceMetaDao; @Override public List dataGrid(EFResourceMeta resourceMeta) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFResourceMeta t "; List l = resourceMetaDao.find(hql + whereHql(resourceMeta, params), params); for (TEFResourceMeta t : l) { EFResourceMeta u = new EFResourceMeta(); BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public List dataGrid(EFResourceMeta resourceMeta, PageFilter ph) { // TODO Auto-generated method stub List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFResourceMeta t "; List l = resourceMetaDao.find(hql + whereHql(resourceMeta, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFResourceMeta t : l) { EFResourceMeta u = new EFResourceMeta(); BeanUtils.copyProperties(t, u); ul.add(u); } return ul; } @Override public Long count(EFResourceMeta resourceMeta) { // TODO Auto-generated method stub Map params = new HashMap(); String hql = " from TEFResourceMeta t "; return resourceMetaDao.count("select count(*) " + hql + whereHql(resourceMeta, params), params); } @Override public Long add(EFResourceMeta resourceMeta) { // TODO Auto-generated method stub TEFResourceMeta t = new TEFResourceMeta(); BeanUtils.copyProperties(resourceMeta, t); t.setDictionary(dictionaryDao.get(TEFDictionary.class, resourceMeta.getType())); t.setUpdateDate(new Date()); Serializable id = resourceMetaDao.save(t); return (Long)id; } @Override public void delete(Long id) { // TODO Auto-generated method stub TEFResourceMeta t = resourceMetaDao.get(TEFResourceMeta.class, id); if(t != null){ t.setDeleted(1); t.setUpdateDate(new Date()); } resourceMetaDao.update(t); } @Override public void edit(EFResourceMeta resourceMeta) { // TODO Auto-generated method stub TEFResourceMeta t = resourceMetaDao.get(TEFResourceMeta.class, resourceMeta.getAutoID()); t.setMetaPath(resourceMeta.getMetaPath()); t.setMetaDescription(resourceMeta.getMetaDescription()); t.setThumbMetaPath(resourceMeta.getThumbMetaPath()); resourceMetaDao.update(t); } @Override public EFResourceMeta get(Long id) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("id", id); TEFResourceMeta t = resourceMetaDao.get("from TEFResourceMeta t where t.deleted=0 and t.autoID = :id", params); EFResourceMeta u = null; if(t != null) { u = new EFResourceMeta(); BeanUtils.copyProperties(t, u); u.setType(t.getDictionary().getAutoID()); } return u; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } private String whereHql(EFResourceMeta t, Map params) {//待修改 String hql = " where t.deleted=0 "; if (t != null) { if(t.getType() != null){ hql += " and t.dictionary.autoID = :type"; params.put("type", t.getType()); } if(t.getMetaID() != null){ hql += " and t.metaID = :metaID"; params.put("metaID", t.getMetaID()); } if(t.getCreateDate() != null){ hql += " and (t.createDate >= :startCreateDate and t.createDate < :endCreateDate )"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(t.getCreateDate()); cal.add(Calendar.DATE, 1); params.put("startCreateDate", t.getCreateDate()); params.put("endCreateDate", cal.getTime()); } } return hql; } @Override public List get(Long metaID, Long typeID) { // TODO Auto-generated method stub List ul= new ArrayList(); Map params = new HashMap(); params.put("metaID", metaID); params.put("typeID",typeID); String hql="from TEFResourceMeta t where t.deleted = 0 and t.metaID = :metaID and t.dictionary.autoID= :typeID order by t.autoID"; List l=resourceMetaDao.find(hql, params); if((l!=null)&&(l.size()>0)) { for(TEFResourceMeta t: l) { EFResourceMeta resource = new EFResourceMeta(); BeanUtils.copyProperties(t, resource); resource.setType(t.getDictionary().getAutoID()); resource.setTypeName(t.getDictionary().getText()); if(t.getMetaDescription()!=null) { String[] strd=t.getMetaDescription().split(";@;"); //System.out.println(strd.length); if(strd.length==2) { resource.setDescription(strd[0]); resource.setAddress(strd[1]); } } ul.add(resource); } return ul; } return null; } //按天获取指定项目资源的数量 @Override public Map getDateCount(Long metaID, Long typeID){ Map ul= new HashMap(); Map params = new HashMap(); params.put("metaID", metaID); params.put("typeID",typeID); String hql = "select date(t.CreateDate) as 'date', count(t.AutoID) as 'count' from resourcemeta t where t.deleted=0 and t.MetaID = :metaID and t.Type = :typeID group by date(t.CreateDate)"; List l=resourceMetaDao.findBySql(hql, params); for (Object[] obj : l) { ul.put((Date)obj[0], Integer.parseInt(obj[1].toString())); } return ul; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/ResourceServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFResource; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Resource; import light.mvc.service.sys.ResourceServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class ResourceServiceImpl implements ResourceServiceI { @Autowired private BaseDaoI resourceDao; @Override public List treeGrid() { List lr = new ArrayList(); List l = resourceDao .find("select distinct t from TEFResource t left join fetch t.parentResource order by t.seq"); if ((l != null) && (l.size() > 0)) { for (TEFResource t : l) { Resource r = new Resource(); BeanUtils.copyProperties(t, r); r.setName(t.getResourceName()); r.setResourcetype(t.getResourceType()); r.setCstate(t.getActive()); r.setId(t.getAutoID()); if (t.getParentResource() != null) { r.setPid(t.getParentResource().getAutoID()); r.setPname(t.getParentResource().getResourceName()); } r.setIconCls(t.getIcon()); lr.add(r); } } return lr; } @Override public void add(Resource r) { TEFResource t = new TEFResource(); t.setCreateDate(new Date()); t.setDescription(r.getDescription()); t.setIcon(r.getIcon()); t.setResourceName(r.getName()); if ((r.getPid() != null) && !"".equals(r.getPid())) { t.setParentResource(resourceDao.get(TEFResource.class, r.getPid())); } t.setResourceType(r.getResourcetype()); t.setSeq(r.getSeq()); t.setActive(r.getCstate()); t.setUrl(r.getUrl()); resourceDao.save(t); } @Override public void delete(Long id) { TEFResource t = resourceDao.get(TEFResource.class, id); del(t); } private void del(TEFResource t) { if ((t.getResources() != null) && (t.getResources().size() > 0)) { for (TEFResource r : t.getResources()) { del(r); } } resourceDao.delete(t); } @Override public void edit(Resource r) { TEFResource t = resourceDao.get(TEFResource.class, r.getId()); t.setDescription(r.getDescription()); t.setIcon(r.getIcon()); t.setResourceName(r.getName()); if ((r.getPid() != null) && !"".equals(r.getPid())) { t.setParentResource(resourceDao.get(TEFResource.class, r.getPid())); } t.setResourceType(r.getResourcetype()); t.setSeq(r.getSeq()); t.setActive(r.getCstate()); t.setUrl(r.getUrl()); resourceDao.update(t); } @Override public Resource get(Long id) { TEFResource t = resourceDao.get(TEFResource.class, id); Resource r = new Resource(); BeanUtils.copyProperties(t, r); r.setCstate(t.getActive()); r.setResourcetype(t.getResourceType()); r.setName(t.getResourceName()); r.setId(t.getAutoID()); r.setDescription(t.getDescription()); if (t.getParentResource() != null) { r.setPid(t.getParentResource().getAutoID()); r.setPname(t.getParentResource().getResourceName()); } return r; } @Override public List tree(SessionInfo sessionInfo) { List l = null; List lt = new ArrayList(); Map params = new HashMap(); params.put("resourceType", 0);// 菜单类型的资源 if (sessionInfo != null) { if("admin".equals(sessionInfo.getLoginname())){ l = resourceDao .find("select distinct t from TEFResource t where t.resourceType = :resourceType order by t.seq", params); }else{ params.put("userId", Long.valueOf(sessionInfo.getId()));// 自查自己有权限的资源 l = resourceDao .find("select distinct t from TEFResource t join fetch t.roles role join role.users user where t.resourceType = :resourceType and user.autoID = :userId order by t.seq", params); } } else { return null; } if ((l != null) && (l.size() > 0)) { for (TEFResource r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); if (r.getParentResource() != null) { tree.setPid(r.getParentResource().getAutoID().toString()); }else{ tree.setState("closed"); } tree.setText(r.getResourceName()); tree.setIconCls(r.getIcon()); Map attr = new HashMap(); attr.put("url", r.getUrl()); tree.setAttributes(attr); lt.add(tree); } } return lt; } @Override public List allTree(boolean flag) { List l = null; List lt = new ArrayList(); if(flag){ l = resourceDao.find("select distinct t from TEFResource t left join fetch t.parentResource order by t.seq"); }else{ l = resourceDao.find("select distinct t from TEFResource t left join fetch t.parentResource where t.resourceType =0 order by t.seq"); } if ((l != null) && (l.size() > 0)) { for (TEFResource r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); if (r.getParentResource() != null) { tree.setPid(r.getParentResource().getAutoID().toString()); } tree.setText(r.getResourceName()); tree.setIconCls(r.getIcon()); Map attr = new HashMap(); attr.put("url", r.getUrl()); tree.setAttributes(attr); lt.add(tree); } } return lt; } @Override public List resourceAllList() { List resourceList = new ArrayList(); List l = resourceDao.find("select distinct t from TEFResource t left join fetch t.parentResource order by t.seq"); for (int i = 0; i < l.size(); i++) { resourceList.add(l.get(i).getUrl()); } return resourceList; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/RoleServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.model.sys.TEFResource; import light.mvc.model.sys.TEFRole; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.Tree; import light.mvc.pageModel.sys.Role; import light.mvc.service.sys.RoleServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class RoleServiceImpl implements RoleServiceI { @Autowired private BaseDaoI roleDao; @Autowired private BaseDaoI resourceDao; @Override public void add(Role r) { TEFRole t = new TEFRole(); t.setIsDefault(0); t.setRoleName(r.getName()); ////t.setSeq(r.getSeq()); t.setDescription(r.getDescription()); roleDao.save(t); } @Override public void delete(Long id) { TEFRole t = roleDao.get(TEFRole.class, id); roleDao.delete(t); } @Override public void edit(Role r) { TEFRole t = roleDao.get(TEFRole.class, r.getId()); t.setDescription(r.getDescription()); t.setRoleName(r.getName()); t.setIsDefault(r.getIsdefault()); //t(r.getSeq()); roleDao.update(t); } @Override public Role get(Long id) { TEFRole t = roleDao.get(TEFRole.class, id); Role r = new Role(); r.setDescription(t.getDescription()); r.setId(t.getAutoID()); r.setIsdefault(t.getIsDefault()); r.setName(t.getRoleName()); //r.setSeq(t.getSeq()); Set s = t.getResources(); if ((s != null) && !s.isEmpty()) { boolean b = false; String ids = ""; String names = ""; for (TEFResource tr : s) { if (b) { ids += ","; names += ","; } else { b = true; } ids += tr.getAutoID(); names += tr.getResourceName(); } r.setResourceIds(ids); r.setResourceNames(names); } return r; } @Override public List dataGrid(Role role, PageFilter ph) { List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFRole t "; List l = roleDao.find(hql + whereHql(role, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for (TEFRole t : l) { Role u = new Role(); BeanUtils.copyProperties(t, u); u.setId(t.getAutoID()); u.setName(t.getRoleName()); u.setIsdefault(t.getIsDefault()); ul.add(u); } return ul; } @Override public Long count(Role role, PageFilter ph) { Map params = new HashMap(); String hql = " from TEFRole t "; return roleDao.count("select count(*) " + hql + whereHql(role, params), params); } private String whereHql(Role role, Map params) { String hql = ""; if (role != null) { hql += " where 1=1 "; if (role.getName() != null) { hql += " and t.name like :name"; params.put("name", "%%" + role.getName() + "%%"); } if(role.getIsdefault()!=null) { hql+="and t.isDefault= :isDefault"; params.put("isDefault", role.getIsdefault()); } } return hql; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t." + ph.getSort() + " " + ph.getOrder(); } return orderString; } @Override public void grant(Role role) { TEFRole t = roleDao.get(TEFRole.class, role.getId()); if ((role.getResourceIds() != null) && !role.getResourceIds().equalsIgnoreCase("")) { String ids = ""; boolean b = false; for (String id : role.getResourceIds().split(",")) { if (b) { ids += ","; } else { b = true; } ids += id; } t.setResources(new HashSet(resourceDao.find("select distinct t from TEFResource t where t.id in (" + ids + ")"))); } else { t.setResources(null); } } @Override public List tree() { List l = null; List lt = new ArrayList(); l = roleDao.find("select distinct t from TEFRole t"); if ((l != null) && (l.size() > 0)) { for (TEFRole r : l) { Tree tree = new Tree(); tree.setId(r.getAutoID().toString()); tree.setText(r.getRoleName()); lt.add(tree); } } return lt; } } ================================================ FILE: src/main/java/light/mvc/service/sys/impl/UserServiceImpl.java ================================================ package light.mvc.service.sys.impl; import light.mvc.dao.BaseDaoI; import light.mvc.framework.constant.GlobalConstant; import light.mvc.model.manual.TEFmanualCategory; import light.mvc.model.sys.*; import light.mvc.pageModel.base.PageFilter; import light.mvc.pageModel.base.SessionInfo; import light.mvc.pageModel.sys.User; import light.mvc.service.sys.UserServiceI; import light.mvc.utils.MD5Util; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /* * @author: yeyaowen * 编写日期:2016-8-9 * 特别注意:初步编写,尚未测试 * */ @Service public class UserServiceImpl implements UserServiceI { @Autowired private BaseDaoI userDao; @Autowired private BaseDaoI userInfoDao; @Autowired private BaseDaoI roleDao; @Autowired private BaseDaoI organizationDao; @Autowired private BaseDaoI categoryDao; @Override public List dataGrid(User user, PageFilter ph) { // Author:yeyaowen 2016-8-9 List ul = new ArrayList(); Map params = new HashMap(); String hql = " from TEFLoginUser t "; List l= userDao.find(hql + whereHql(user, params) + orderHql(ph), params, ph.getPage(), ph.getRows()); for(TEFLoginUser t:l) { User u= new User(); BeanUtils.copyProperties(t, u); TEFPersonalInfo tp= t.getPersonalInfo(); BeanUtils.copyProperties(tp, u); TEFRole role=tp.getRole(); if(role!=null) { u.setRoleIds(role.getAutoID()); u.setRoleNames(role.getRoleName()); } if(tp.getOrganization()!=null) { u.setOrganizationId(tp.getOrganization().getAutoID()); u.setOrganizationName(tp.getOrganization().getDepartmentName()); } ul.add(u); } return ul; } @Override public Long count(User user, PageFilter ph) { Map params = new HashMap(); String hql = " from TEFLoginUser t "; return userDao.count("select count(*) " + hql + whereHql(user, params), params); } @Override public Long add(User u) { // TODO Auto-generated method stub // @author:yeyaowen 2016-8-9 // des: 初步设计 TEFLoginUser t= new TEFLoginUser(); BeanUtils.copyProperties(u, t); TEFPersonalInfo tp = new TEFPersonalInfo(); BeanUtils.copyProperties(u, tp); if(u.getOrganizationId()!=null) { tp.setOrganization(organizationDao.get(TEFOrganization.class, u.getOrganizationId())); } tp.setRole(roleDao.get(TEFRole.class, u.getRoleIds())); t.setPersonalInfo(tp); t.setPassword(MD5Util.md5(u.getPassword())); t.setStatus(GlobalConstant.ENABLE); t.setCreateDate(new Date()); Long returnid = (Long)userInfoDao.save(tp); userDao.save(t); return returnid; } @Override public void delete(Long id) { // Author:yeyaowen 2016-8-9 TEFLoginUser t= userDao.get(TEFLoginUser.class, id); TEFPersonalInfo tp =userInfoDao.get(TEFPersonalInfo.class, id); if(t!=null&&tp!=null) { t.setActive(0); tp.setActive(0); t.setDeleted(1); tp.setDeleted(1); } } @Override public void edit(User u) { /*@author : yeyaowen 2016-8-9 * * */ Map params = new HashMap(); params.put("autoID", u.getAutoID()); TEFLoginUser t = userDao.get("from TEFLoginUser l where l.personalInfo.autoID = :autoID and l.active=1 and l.deleted=0", params); TEFPersonalInfo tp = t.getPersonalInfo(); if(u.getPassword()!=null&&!"".equals(u.getPassword())){ t.setPassword(MD5Util.md5(u.getPassword())); } if(u.getLoginName() != null && u.getLoginName().length() > 0){ t.setLoginName(u.getLoginName()); } if(u.getRealName() != null && u.getRealName().length() > 0){ tp.setRealName(u.getRealName()); //姓名不保存空值 } if(u.getAddress() != null && u.getAddress().length() > 0){ tp.setAddress(u.getAddress()); //地址不保存空值 } tp.setPhoneNumber(u.getPhoneNumber()); tp.setEmail(u.getEmail()); tp.setAge(u.getAge()); tp.setSex(u.getSex()); tp.setTechType(u.getTechType()); //专长 tp.setTechTitle(u.getTechTitle()); //职称 tp.setNeedPublish(u.getNeedPublish()); //是否发布 tp.setDescription(u.getDescription()); if(u.getOrganizationId() != null && u.getOrganizationId() > 0){ tp.setOrganization(organizationDao.get(TEFOrganization.class, u.getOrganizationId())); } if(u.getRoleIds() != null && u.getRoleIds() > 0){ tp.setRole(roleDao.get(TEFRole.class, u.getRoleIds())); } userDao.update(t); userInfoDao.update(tp); } @Override public User get(Long personalID) { // TODO Auto-generated method stub Map params = new HashMap(); params.put("autoID", personalID); //System.out.println(id); TEFLoginUser loginUser = userDao.get("from TEFLoginUser l where l.personalInfo.autoID = :autoID and l.active=1 and l.deleted=0", params); TEFPersonalInfo t = userInfoDao.get("from TEFPersonalInfo t left join fetch t.role role where t.autoID = :autoID and t.active=1 and t.deleted=0", params); if(loginUser == null || t == null){ return null; } User u = new User(); BeanUtils.copyProperties(t, u); u.setLoginName(loginUser.getLoginName()); u.setLoginAutoID(loginUser.getAutoID()); //登录表的AutoID if(t.getOrganization()!=null){ u.setOrganizationId(t.getOrganization().getAutoID()); u.setOrganizationName(t.getOrganization().getDepartmentName()); } if (t.getRole() != null ) { u.setRoleIds(t.getRole().getAutoID()); u.setRoleNames(t.getRole().getRoleName()); } Set s = t.getManualCategorys(); if ((s != null) && !s.isEmpty()) { boolean b = false; String ids = ""; String names = ""; for(TEFmanualCategory tr:s) { if (b) { ids += ","; names += ","; } else { b = true; } ids+=tr.getAutoID(); names+=tr.getCategoryName(); } u.setManualIDs(ids); u.setManualNames(names); } return u; } @Override public User login(User user) { // TODO Auto-generated method stub // Author:yeyaowen 2016-8-9 Map params = new HashMap(); params.put("loginName", user.getLoginName()); params.put("password", MD5Util.md5(user.getPassword())); TEFLoginUser t= userDao.get("from TEFLoginUser t where t.loginName = :loginName and t.password = :password", params); if (t != null && t.getPersonalInfo() != null) { User u = get(t.getPersonalInfo().getAutoID()); return u; } return null; } //EFPersonalInfo t = userInfoDao.get("from EFPersonalInfo t left join fetch t.role role where t.autoID = :autoID", params); @Override public List resourceList(Long id) { // TODO Auto-generated method stub List resourceList = new ArrayList(); Map params = new HashMap(); params.put("autoID", id); //System.out.println(id); TEFPersonalInfo t = userInfoDao.get( "from TEFPersonalInfo t join fetch t.role role join fetch role.resources resource where t.autoID = :autoID", params); if (t != null) { //System.out.println("test1"); TEFRole roles = t.getRole(); if ((roles != null)) { Set resources = roles.getResources(); if ((resources != null) && !resources.isEmpty()) { for (TEFResource resource : resources) { if ((resource != null) && (resource.getUrl() != null)) { resourceList.add(resource.getUrl()); } } } } return resourceList; } return null; } @Override public boolean editUserPwd(SessionInfo sessionInfo, String oldPwd, String pwd) { // TODO Auto-generated method stub // Author:yeyaowen 2016-8-9 TEFLoginUser u= userDao.get(TEFLoginUser.class, sessionInfo.getId()); if(u.getPassword().equalsIgnoreCase(MD5Util.md5(oldPwd))) { u.setPassword(MD5Util.md5(pwd)); return true; } return false; } @Override public boolean editUserPwd(long autoID,String oldPwd, String pwd) { // TODO Auto-generated method stub // Author:yeyaowen 2016-8-9 TEFLoginUser u= userDao.get(TEFLoginUser.class, autoID); if(u.getPassword().equalsIgnoreCase(MD5Util.md5(oldPwd))) { u.setPassword(MD5Util.md5(pwd)); return true; } return false; } @Override public User getByLoginName(User user) { // TODO Auto-generated method stub TEFLoginUser t= userDao.get("from TEFLoginUser t where t.loginName = '"+user.getLoginName()+"'"); User u =new User(); if(t!=null){ u = get(t.getPersonalInfo().getAutoID()); //BeanUtils.copyProperties(t, u); }else{ return null; } return u; } private String whereHql(User user, Map params) { // author:yeyaowen 暂未完成的方法 String hql = ""; if (user != null) { hql += " where 1=1 "; if (user.getRealName() != null) { hql += " and t.personalInfo.realName like :name"; params.put("name", "%%" + user.getRealName() + "%%"); } if(user.getOrganizationId()!=null){ hql += " and t.personalInfo.organization.autoID ="+user.getOrganizationId(); } if(user.getSearchKey()!=null&&user.getSearchValue()!=null) { hql +="and t.personalInfo."+user.getSearchKey()+" like :searchValue"; params.put("searchValue","%%" + user.getSearchValue() + "%%"); } } return hql; } private String orderHql(PageFilter ph) { String orderString = ""; if ((ph.getSort() != null) && (ph.getOrder() != null)) { orderString = " order by t.personalInfo." + ph.getSort() + " " + ph.getOrder(); } return orderString; } @Override public List getAllExpert() { // TODO Auto-generated method stub List ul = new ArrayList(); String hql = " from TEFPersonalInfo t where t.role.autoID=2"; List l= userInfoDao.find(hql); if ((l != null) && (l.size() > 0)) { for(TEFPersonalInfo tp:l) { User u= get(tp.getAutoID()); /* BeanUtils.copyProperties(tp, u); TEFRole role=tp.getRole(); if(role!=null) { u.setRoleIds(role.getAutoID()); u.setRoleNames(role.getRoleName()); } if(tp.getOrganization()!=null) { u.setOrganizationId(tp.getOrganization().getAutoID()); u.setOrganizationName(tp.getOrganization().getDepartmentName()); }*/ ul.add(u); } return ul; } return null; } @Override public void setManual(User user) { // TODO Auto-generated method stub TEFPersonalInfo t = userInfoDao.get(TEFPersonalInfo.class,user.getAutoID()); if((user.getManualIDs()!=null)&&!user.getManualIDs().equals("")){ String ids=""; boolean b= false; for(String id:user.getManualIDs().split(",")){ if(b){ ids+=","; }else{ b = true; } ids+=id; } t.setManualCategorys(new HashSet(categoryDao.find("select distinct t from TEFmanualCategory t where t.autoID in(" + ids + ")"))); }else{ t.setManualCategorys(null); } } } ================================================ FILE: src/main/java/light/mvc/utils/DateTimeUtil.java ================================================ package light.mvc.utils; import java.math.BigInteger; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by ChenHehong on 2016/5/4. */ public class DateTimeUtil { public static String getCurrentDateStr(String format){ if (format==null||format.length()==0){ format = "yyyy-MM-dd";//定义默认格式 } Date today = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(today); } public static Date getCurrentDate(String format){ if (format==null||format.length()==0){ format = "yyyy-MM-dd";//定义默认格式 } Date today = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(format); String todayString = sdf .format (today); Date todayFormat = null; try { todayFormat = sdf. parse(todayString); } catch (ParseException e) { e.printStackTrace(); } return todayFormat; } // 获取当前时间几天前的日期时间 public static Date getPreDate(int preDate,String format){ if (format==null||format.length()==0){ format = "yyyy-MM-dd";//定义默认格式 } long preDateTime = System.currentTimeMillis()-preDate*24*60*60; SimpleDateFormat sdf = new SimpleDateFormat(format); String d = sdf.format(preDateTime); Date date = null; try { date = sdf.parse(d); } catch (ParseException e) { e.printStackTrace(); } return date; } public static String getPreDateStr(int preDate,String format){ if (format==null||format.length()==0){ format = "yyyy-MM-dd";//定义默认格式 } BigInteger now = BigInteger.valueOf(System.currentTimeMillis()); BigInteger preDateBig = BigInteger.valueOf(preDate); BigInteger dateTimeMillis = BigInteger.valueOf(24*60*60*1000); BigInteger gap = preDateBig.multiply(dateTimeMillis); BigInteger preDateTime = now. subtract(gap); SimpleDateFormat sdf = new SimpleDateFormat(format); String d = sdf.format(preDateTime); return d; } } ================================================ FILE: src/main/java/light/mvc/utils/ExcelUtil.java ================================================ package light.mvc.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.util.List; import java.util.Map; /** * 导出Excel文档工具类 * @author 那位先生 * @date 2014-8-6 * */ public class ExcelUtil { /** * 创建excel文档, * @param list 数据 * @param keys list中map的key数组集合 * @param columnNames excel的列名 * */ public static Workbook createWorkBook(List> list, String []keys, String columnNames[]) { // 创建excel工作簿 Workbook wb = new HSSFWorkbook(); // 创建第一个sheet(页),并命名 Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。 for(int i=0;i { public final static Charset UTF8 = Charset.forName("UTF-8"); private Charset charset = UTF8; private SerializerFeature[] serializerFeature; @Override protected boolean supports(Class clazz) { return true; } @Override protected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream in = inputMessage.getBody(); byte[] buf = new byte[1024]; for (;;) { int len = in.read(buf); if (len == -1) { break; } if (len > 0) { baos.write(buf, 0, len); } } byte[] bytes = baos.toByteArray(); if (charset == UTF8) { return JSON.parseObject(bytes, clazz); } else { return JSON.parseObject(bytes, 0, bytes.length, charset.newDecoder(), clazz); } } @Override protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { OutputStream out = outputMessage.getBody(); byte[] bytes; if (charset == UTF8) { if (serializerFeature != null) { bytes = JSON.toJSONBytes(obj, serializerFeature); } else { bytes = JSON.toJSONBytes(obj, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); } } else { String text; if (serializerFeature != null) { text = JSON.toJSONString(obj, serializerFeature); } else { text = JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); } bytes = text.getBytes(charset); } out.write(bytes); } } ================================================ FILE: src/main/java/light/mvc/utils/MD5Util.java ================================================ package light.mvc.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { public static void main(String[] args) { String s = "admin"; System.out.println(md5(s)); } /** * md5加密 * * @param str * @return */ public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte[] byteDigest = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (byte element : byteDigest) { i = element; if (i < 0) { i += 256; } if (i < 16) { buf.append("0"); } buf.append(Integer.toHexString(i)); } // 32位加密 return buf.toString(); // 16位的加密 // return buf.toString().substring(8, 24); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } } ================================================ FILE: src/main/java/light/mvc/utils/MyImageUtil.java ================================================ package light.mvc.utils; import com.sun.image.codec.jpeg.ImageFormatException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; /** * * @author WQ * * @date 2011-01-14 * @versions 1.0 图片压缩工具类 提供的方法中可以设定生成的 缩略图片的大小尺寸、压缩尺寸的比例、图片的质量等 */ public class MyImageUtil { /** * * 图片文件读取 * * @param srcImgPath * @return */ private static BufferedImage InputImage(String srcImgPath) { BufferedImage srcImage = null; try { // 构造BufferedImage对象 File file = new File(srcImgPath); FileInputStream in = new FileInputStream(file); byte[] b = new byte[5]; in.read(b); srcImage = javax.imageio.ImageIO.read(file); in.close();//记得要关闭流 } catch (IOException e) { System.out.println("读取图片文件出错!" + e.getMessage()); e.printStackTrace(); } return srcImage; } /** * * 将图片按照指定的图片尺寸、源图片质量压缩(默认质量为1) * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param new_w * :压缩后的图片宽 * @param new_h * :压缩后的图片高 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, int new_w, int new_h) { Tosmallerpic(srcImgPath, outImgPath, new_w, new_h, 1F); } /** * 将图片按照指定的尺寸比例、源图片质量压缩(默认质量为1) * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param ratio * :压缩后的图片尺寸比例 * @param per * :百分比 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, float ratio) { Tosmallerpic(srcImgPath, outImgPath, ratio, 1F); } /** * 将图片按照指定长或者宽的最大值来压缩图片(默认质量为1) * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param maxLength * :长或者宽的最大值 * @param per * :图片质量 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, int maxLength) { Tosmallerpic(srcImgPath, outImgPath, maxLength, 1F); } /** * * 将图片按照指定的图片尺寸、图片质量压缩 * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param new_w * :压缩后的图片宽 * @param new_h * :压缩后的图片高 * @param per * :百分比 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, int new_w, int new_h, float per) { // 得到图片 BufferedImage src = InputImage(srcImgPath); int old_w = src.getWidth(); // 得到源图宽 int old_h = src.getHeight(); // 得到源图长 // 根据原图的大小生成空白画布 BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB); // 在新的画布上生成原图的缩略图 Graphics2D g = tempImg.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, old_w, old_h); g.drawImage(src, 0, 0, old_w, old_h, Color.white, null); g.dispose(); BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null); // 调用方法输出图片文件 OutImage(outImgPath, newImg, per); } /** * * 将图片按照指定的尺寸比例、图片质量压缩 * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param ratio * :压缩后的图片尺寸比例 * @param per * :百分比 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, float ratio, float per) { // 得到图片 BufferedImage src = InputImage(srcImgPath); int old_w = src.getWidth(); // 得到源图宽 int old_h = src.getHeight(); // 得到源图长 int new_w = 0; // 新图的宽 int new_h = 0; // 新图的长 BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB); Graphics2D g = tempImg.createGraphics(); g.setColor(Color.white); // 从原图上取颜色绘制新图g.fillRect(0, 0, old_w, old_h); g.drawImage(src, 0, 0, old_w, old_h, Color.white, null); g.dispose(); // 根据图片尺寸压缩比得到新图的尺寸new_w = (int) Math.round(old_w * ratio); new_h = (int) Math.round(old_h * ratio); BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null); // 调用方法输出图片文件 OutImage(outImgPath, newImg, per); } /** * * 指定长或者宽的最大值来压缩图片 * * @param srcImgPath * :源图片路径 * @param outImgPath * :输出的压缩图片的路径 * @param maxLength * :长或者宽的最大值 * @param per * :图片质量 */ public static void Tosmallerpic(String srcImgPath, String outImgPath, int maxLength, float per) { // 得到图片 BufferedImage src = InputImage(srcImgPath); int old_w = src.getWidth(); // 得到源图宽 int old_h = src.getHeight(); // 得到源图长 int new_w = 0; // 新图的宽 int new_h = 0; // 新图的长 BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB); Graphics2D g = tempImg.createGraphics(); g.setColor(Color.white); // 从原图上取颜色绘制新图 g.fillRect(0, 0, old_w, old_h); g.drawImage(src, 0, 0, old_w, old_h, Color.white, null); g.dispose(); // 根据图片尺寸压缩比得到新图的尺寸 if (old_w > old_h) { // 图片要缩放的比例 new_w = maxLength; new_h = (int) Math.round(old_h * ((float) maxLength / old_w)); } else { new_w = (int) Math.round(old_w * ((float) maxLength / old_h)); new_h = maxLength; } BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null); // 调用方法输出图片文件 OutImage(outImgPath, newImg, per); } /** * * 将图片文件输出到指定的路径,并可设定压缩质量 * * @param outImgPath * @param newImg * @param per */ private static void OutImage(String outImgPath, BufferedImage newImg, float per) { // 判断输出的文件夹路径是否存在,不存在则创建 File file = new File(outImgPath); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); }// 输出到文件流 try { FileOutputStream newimage = new FileOutputStream(outImgPath); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage); JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(newImg); // 压缩质量 jep.setQuality(per, true); encoder.encode(newImg, jep); newimage.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch blocke.printStackTrace(); } catch (ImageFormatException e) { // TODO Auto-generated catch blocke.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch blocke.printStackTrace(); } } } ================================================ FILE: src/main/java/light/mvc/utils/PropertiesLoader.java ================================================ package light.mvc.utils; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import java.io.IOException; import java.io.InputStream; import java.util.NoSuchElementException; import java.util.Properties; /** * Properties文件载入工具类. 可载入多个properties文件, 相同的属性在最后载入的文件中的值将会覆盖之前的值,但以System的Property优先. * * @author 鸵鸟 */ public class PropertiesLoader { private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class); private static ResourceLoader resourceLoader = new DefaultResourceLoader(); private final Properties properties; public PropertiesLoader(String... resourcesPaths) { properties = loadProperties(resourcesPaths); } public Properties getProperties() { return properties; } /** * 取出Property。 */ private String getValue(String key) { String systemProperty = System.getProperty(key); if (systemProperty != null) { return systemProperty; } return properties.getProperty(key); } /** * 取出String类型的Property,如果都為Null则抛出异常. */ public String getProperty(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return value; } /** * 取出String类型的Property.如果都為Null則返回Default值. */ public String getProperty(String key, String defaultValue) { String value = getValue(key); return value != null ? value : defaultValue; } /** * 取出Integer类型的Property.如果都為Null或内容错误则抛出异常. */ public Integer getInteger(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Integer.valueOf(value); } /** * 取出Integer类型的Property.如果都為Null則返回Default值,如果内容错误则抛出异常 */ public Integer getInteger(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Integer.valueOf(value) : defaultValue; } /** * 取出Double类型的Property.如果都為Null或内容错误则抛出异常. */ public Double getDouble(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Double.valueOf(value); } /** * 取出Double类型的Property.如果都為Null則返回Default值,如果内容错误则抛出异常 */ public Double getDouble(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Double.valueOf(value) : defaultValue; } /** * 取出Boolean类型的Property.如果都為Null抛出异常,如果内容不是true/false则返回false. */ public Boolean getBoolean(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Boolean.valueOf(value); } /** * 取出Boolean类型的Propert.如果都為Null則返回Default值,如果内容不为true/false则返回false. */ public Boolean getBoolean(String key, boolean defaultValue) { String value = getValue(key); return value != null ? Boolean.valueOf(value) : defaultValue; } /** * 载入多个文件, 文件路径使用Spring Resource格式. */ private Properties loadProperties(String... resourcesPaths) { Properties props = new Properties(); for (String location : resourcesPaths) { logger.debug("Loading properties file from path:{}", location); InputStream is = null; try { Resource resource = resourceLoader.getResource(location); is = resource.getInputStream(); props.load(is); } catch (IOException ex) { logger.info("Could not load properties from path:{}, {} ", location, ex.getMessage()); } finally { IOUtils.closeQuietly(is); } } return props; } } ================================================ FILE: src/main/java/light/mvc/utils/StringEscapeEditor.java ================================================ package light.mvc.utils; import org.springframework.web.util.HtmlUtils; import org.springframework.web.util.JavaScriptUtils; import java.beans.PropertyEditorSupport; public class StringEscapeEditor extends PropertyEditorSupport { private boolean escapeHTML;// 编码HTML private boolean escapeJavaScript;// 编码javascript public StringEscapeEditor() { super(); } public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript) { super(); this.escapeHTML = escapeHTML; this.escapeJavaScript = escapeJavaScript; } @Override public String getAsText() { Object value = getValue(); return value != null ? value.toString() : ""; } @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null) { setValue(null); } else { String value = text; if (escapeHTML) { value = HtmlUtils.htmlEscape(value); } if (escapeJavaScript) { value = JavaScriptUtils.javaScriptEscape(value); } setValue(value); } } } ================================================ FILE: src/main/java/light/mvc/utils/StringUnEscapeEditor.java ================================================ package light.mvc.utils; import org.springframework.web.util.HtmlUtils; import org.springframework.web.util.JavaScriptUtils; import java.beans.PropertyEditorSupport; public class StringUnEscapeEditor extends PropertyEditorSupport { private boolean escapeHTML;// 编码HTML private boolean escapeJavaScript;// 编码javascript public StringUnEscapeEditor() { super(); } public StringUnEscapeEditor(boolean escapeHTML, boolean escapeJavaScript) { super(); this.escapeHTML = escapeHTML; this.escapeJavaScript = escapeJavaScript; } @Override public String getAsText() { Object value = getValue(); return value != null ? value.toString() : ""; } @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null) { setValue(null); } else { String value = text; if (escapeHTML) { value = HtmlUtils.htmlUnescape(value); } if (escapeJavaScript) { value = JavaScriptUtils.javaScriptEscape(value); } setValue(value); } } } ================================================ FILE: src/main/java/light/mvc/utils/StringUtil.java ================================================ package light.mvc.utils; public class StringUtil { /** * 格式化字符串 * * 例:formateString("xxx{0}bbb",1) = xxx1bbb * * @param str * @param params * @return */ public static String formateString(String str, String... params) { for (int i = 0; i < params.length; i++) { str = str.replace("{" + i + "}", params[i] == null ? "" : params[i]); } return str; } } ================================================ FILE: src/main/java/light/mvc/utils/coder.java ================================================ package light.mvc.utils; public class coder { public static String getCoder(String pre, long count) { String code=pre; String tmp=""; if(count<10) { tmp="000"+count; } if(count>9&&count<100) { tmp="00"+count; } if(count>99&&count<1000) { tmp="0"+count; } code=pre+tmp; return code; } } ================================================ FILE: src/main/resources/config.properties ================================================ #hibernate.dialect=sy.util.Oracle10gDialect #driverClassName=oracle.jdbc.driver.OracleDriver #validationQuery=SELECT 1 FROM DUAL #jdbc_url=jdbc:oracle:thin:@localhost:1521:orcl #jdbc_username=bjlyjoa #jdbc_password=bjlyjoa hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect driverClassName=com.mysql.jdbc.Driver validationQuery=SELECT 1 jdbc_url=jdbc\:mysql\://localhost\:3306/wsn640?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull jdbc_username=root jdbc_password=13713393809 #hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect #driverClassName=net.sourceforge.jtds.jdbc.Driver #validationQuery=SELECT 1 #jdbc_url=jdbc:jtds:sqlserver://127.0.0.1:1433/qx #jdbc_username=sa #jdbc_password=123456 hibernate.hbm2ddl.auto=none hibernate.show_sql=false hibernate.format_sql=false hibernate.use_sql_comments=false mongo.hostport=127.0.0.1:27017 mongo.connectionsPerHost=8 mongo.threadsAllowedToBlockForConnectionMultiplier=4 mongo.connectTimeout=1000 mongo.maxWaitTime=1500 mongo.socketTimeout=1500 ================================================ FILE: src/main/resources/log4j.properties ================================================ log4j.rootLogger=WARN, stdout,DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n ================================================ FILE: src/main/resources/logback.xml ================================================ UTF-8 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n UTF-8 ${LOG_HOME}/myApp.log.%d{yyyy-MM-dd}.log 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 10MB 172.16.31.206 27017 mongoLida logdb XXX ================================================ FILE: src/main/resources/spring/spring-context.xml ================================================ classpath:config.properties text/html;charset=UTF-8 /resource/tree ================================================ FILE: src/main/resources/spring/spring-hibernate.xml ================================================ ${hibernate.hbm2ddl.auto} ${hibernate.dialect} ${hibernate.show_sql} ${hibernate.format_sql} ${hibernate.use_sql_comments} light.mvc.model ================================================ FILE: src/main/resources/spring/spring-mongo.xml ================================================ ================================================ FILE: src/main/resources/spring/spring-web.xml ================================================ ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/404.html ================================================  Metro风格响应式后台管理系统模板MetroAdmin 404错误页面 - JS代码网
OOPS!
4
0
4
Page Not Found
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/500.html ================================================  Metro风格响应式后台管理系统模板MetroAdmin 500页面 - JS代码网

Ouch!

Looks like something went wrong

5
0
0

For Updates follow us on twitter , Very soon we will fix the issue. Return Home

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/about_us.html ================================================  Metro By xmfdsh
主题颜色:

控制台

About Us

Here is an example of how you can decorate your about us page.
Here you will able to present your team list and their skills.

Our Philosophy

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.

Mission & Vision

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.

Our Skills

Web Design

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Wordpress

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Jquery

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

HTML

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

CSS

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

PHP

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Content Management

Etiam eget mi enim, non ultricies nisi voluptatem, illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo nemo enim ipsam voluptatem.

Web Design 35%
Wordpress 40%
Web Design 35%
Jquery55%
HTML85%
CSS67%
PHP 45%
Content Management50%

Our Team

Here is an example of how you can decorate your about us page.
You will able to present your team details as well.

Jonathan Smith

Chief Executive Officer

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

Anjelina Joe

Managing Director

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

Franklin Mosa

system enginner

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

Ahmed Yousuf

Creative Designer

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/basic_table.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Basic Table

# First Name Last Name Username
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter

Striped Table

# First Name Last Name Username
1 Mark Otto @mdo
2 Jacob Thornton @fat
3 Larry the Bird @twitter

Border Table

# First Name Last Name Username
1 Mark Otto @mdo
Mark Otto @TwBootstrap
2 Jacob Thornton @fat
3 Larry the Bird @twitter

Hover Table

# First Name Last Name Username
1 Mark Otto @mdo
2 Jhone Otto @mdo
3 Jacob Thornton @fat
4 Larry the Bird @twitter

Advanced Table

Company Descrition Profit Status
Vector Ltd Lorem Ipsum dorolo imit 12120.00$ Due
Adimin co Lorem Ipsum dorolo 56456.00$ Due
boka soka Lorem Ipsum dorolo 14400.00$ Paid
salbal llb Lorem Ipsum dorolo 2323.50$ Paid
Vector Ltd Lorem Ipsum dorolo imit 12120.00$ Due
Adimin co Lorem Ipsum dorolo 56456.00$ Due
Vector Ltd Lorem Ipsum dorolo imit 12120.00$ Due
Adimin co Lorem Ipsum dorolo 56456.00$ Due
Vector Ltd Lorem Ipsum dorolo imit 12120.00$ Due
Adimin co Lorem Ipsum dorolo 56456.00$ Due
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/blank.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/blog.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Suspendisse et mauris nisi, in semper justo.

BY METRO LAB | MONDAY, 12:30 PM

Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fring. Aliquam ac... Continue Reading

Suspendisse et mauris nisi, in semper justo.

BY METRO LAB | MONDAY, 12:30 PM

Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fring. Aliquam ac... Continue Reading

Suspendisse et mauris nisi, in semper justo.

BY METRO LAB | MONDAY, 12:30 PM

Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fring. Aliquam ac... Continue Reading

Suspendisse et mauris nisi, in semper justo.

BY METRO LAB | MONDAY, 12:30 PM

Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fringilla ut vel ipsum. Aliquam ac magna metus. Nam sed arcu non tellus fringilla fring. Aliquam ac... Continue Reading

Latest blog

02 MAY 2013

Nam sed arcu non tellus fringilla fringilla ut vel ipsum.

02 MAY 2013

Nam sed arcu non tellus fringilla fringilla ut vel ipsum.

02 MAY 2013

Nam sed arcu non tellus fringilla fringilla ut vel ipsum.

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/button.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Buttons

Dropdown Buttons

Buttons with Icons

Group Buttons

Horizontal Group Button

Vertical Group Button

Toolbar icon example

Star Rating Example

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/calendar.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/chartjs.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/contact_us.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Contact Us

Our Contacts

Location

Jonathon Smith
House 31, Road 12, Sector 4
Dream Town, Dreamland 1230
Phone: +966 1 000000
Fax : 1234 5678 909

Online

Email : info@vectorlab.com
Support : support@vectorlab.com
Live Chat : live@vectorlab.com
Skype : skype@vectorlab.com
Fax : 1234 5678 909

Social Network

Facebook : www.facebook.com/vectorlab1
Twitter : www.twitter.com/vectorlab1
Google + : www.googleplus.com/vectorlab1

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/draggable_portlet.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Portlet 1

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 2

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 3

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 1

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 2

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 3

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 1

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 2

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.

Portlet 3

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis.
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/dynamic_table.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Dynamic Table

Username Email Points Joined
Jhone doe jhone-doe@gmail.com 10 02.03.2013 Approved
gada gada-lal@gmail.com 34 08.03.2013 Suspended
soa bal soa bal@yahoo.com 33 1.12.2013 Approved
ram sag soa bal@gmail.com 33 7.2.2013 Blocked
durlab test@gmail.com 33 03.07.2013 Approved
durlab lorem-ip@gmail.com 33 05.04.2013 Approved
sumon lorem-ip@gmail.com 33 05.04.2013 Approved
bombi lorem-ip@gmail.com 33 05.04.2013 Approved
ABC ho lorem-ip@gmail.com 33 05.04.2013 Approved
test lorem-ip@gmail.com 33 05.04.2013 Approved
soa bal soa bal@gmail.com 33 03.07.2013 Blocked
test test@gmail.com 33 03.07.2013 Approved
goop lorem-ip@gmail.com 33 05.04.2013 Approved
sumon lorem-ip@gmail.com 33 01.07.2013 Blocked
woeri lorem-ip@gmail.com 33 09.10.2013 Approved
soa bal soa bal@gmail.com 33 9.12.2013 Blocked
woeri test@gmail.com 33 14.12.2013 Approved
uirer lorem-ip@gmail.com 33 13.11.2013 Suspended
samsu lorem-ip@gmail.com 33 17.11.2013 Approved
dipsdf lorem-ip@gmail.com 33 05.04.2013 Approved
soa bal soa bal@gmail.com 33 03.07.2013 Blocked
hilor test@gmail.com 33 03.07.2013 Approved
test lorem-ip@gmail.com 33 19.12.2013 Approved
botu lorem-ip@gmail.com 33 17.12.2013 Approved
sumon lorem-ip@gmail.com 33 15.11.2011 Approved
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/editable_table.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Editable Table

Username Full Name Points Notes Edit Delete
Jondi Rose Alfred Jondi Rose 1234 super user Edit Delete
Dulal Jonathan Smith 434 new user Edit Delete
Sumon Sumon Ahmed 232 super user Edit Delete
vectorlab dk mosa 132 elite user Edit Delete
Admin Admin lab 462 new user Edit Delete
Rafiqul Rafiqul dulal 62 new user Edit Delete
Jhon Doe Jhon Doe 1234 super user Edit Delete
Dulal Jonathan Smith 434 new user Edit Delete
Sumon Sumon Ahmed 232 super user Edit Delete
vectorlab dk mosa 132 elite user Edit Delete
Admin Admin lab 462 new user Edit Delete
Rafiqul Rafiqul dulal 62 new user Edit Delete
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/faq.html ================================================  Metro By xmfdsh
主题颜色:

控制台

FAQ

General Questions

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/flot_chart.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/font_awesome.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Font Awesome Icons

icon-compass
icon-collapse
icon-collapse-top
icon-expand
icon-eur
icon-euro (alias)
icon-gbp
icon-usd
icon-dollar (alias)
icon-inr
icon-rupee (alias)
icon-jpy
icon-yen (alias)
icon-cny
icon-renminbi (alias)
icon-krw
icon-won (alias)
icon-btc
icon-bitcoin (alias)
icon-file
icon-file-text
icon-sort-by-alphabet
icon-sort-by-alphabet-alt
icon-sort-by-attributes
icon-sort-by-attributes-alt
icon-sort-by-order
icon-sort-by-order-alt
icon-thumbs-up
icon-thumbs-down
icon-youtube-sign
icon-youtube
icon-xing
icon-xing-sign
icon-youtube-play
icon-dropbox
icon-stackexchange
icon-instagram
icon-flickr
icon-adn
icon-bitbucket
icon-bitbucket-sign
icon-tumblr
icon-tumblr-sign
icon-long-arrow-down
icon-long-arrow-up
icon-long-arrow-left
icon-long-arrow-right
icon-apple
icon-windows
icon-android
icon-linux
icon-dribbble
icon-skype
icon-foursquare
icon-trello
icon-female
icon-male
icon-gittip
icon-sun
icon-moon
icon-archive
icon-bug
icon-vk
icon-weibo
icon-renren
icon-adjust
icon-anchor
icon-archive
icon-asterisk
icon-ban-circle
icon-bar-chart
icon-barcode
icon-beaker
icon-beer
icon-bell
icon-bell-alt
icon-bolt
icon-book
icon-bookmark
icon-bookmark-empty
icon-briefcase
icon-bug
icon-building
icon-bullhorn
icon-bullseye
icon-calendar
icon-calendar-empty
icon-camera
icon-camera-retro
icon-certificate
icon-check
icon-check-empty
icon-check-minus
icon-check-sign
icon-circle
icon-circle-blank
icon-cloud
icon-cloud-download
icon-cloud-upload
icon-code
icon-code-fork
icon-coffee
icon-cog
icon-cogs
icon-collapse
icon-collapse-alt
icon-collapse-top
icon-comment
icon-comment-alt
icon-comments
icon-comments-alt
icon-compass
icon-credit-card
icon-crop
icon-dashboard
icon-desktop
icon-download
icon-download-alt
icon-edit
icon-edit-sign
icon-ellipsis-horizontal
icon-ellipsis-vertical
icon-envelope
icon-envelope-alt
icon-eraser
icon-exchange
icon-exclamation
icon-exclamation-sign
icon-expand
icon-expand-alt
icon-external-link
icon-external-link-sign
icon-eye-close
icon-eye-open
icon-facetime-video
icon-female
icon-fighter-jet
icon-film
icon-filter
icon-firev
icon-fire-extinguisher
icon-flag
icon-flag-alt
icon-flag-checkered
icon-folder-close
icon-folder-close-alt
icon-folder-open
icon-folder-open-alt
icon-food
icon-frown
icon-gamepad
icon-gear (alias)
icon-gears (alias)
icon-gift
icon-glass
icon-globe
icon-group
icon-hdd
icon-headphones
icon-heart
icon-heart-empty
icon-home
icon-inbox
icon-info
icon-info-sign
icon-key
icon-keyboard
icon-laptop
icon-leaf
icon-legal
icon-lemon
icon-level-down
icon-level-up
icon-lightbulb
icon-location-arrow
icon-lock
icon-magic
icon-magnet
icon-mail-forward (alias)
icon-mail-reply (alias)
icon-mail-reply-all
icon-male
icon-map-marker
icon-meh
icon-microphone
icon-microphone-off
icon-minus
icon-minus-sign
icon-minus-sign-alt
icon-mobile-phone
icon-money
icon-moon
icon-move
icon-music
icon-off
icon-ok
icon-ok-circle
icon-ok-sign
icon-pencil
icon-phone
icon-phone-sign
icon-picture
icon-plane
icon-plus
icon-plus-sign
icon-plus-sign-alt
icon-power-off (alias)
icon-print
icon-pushpin
icon-puzzle-piece
icon-qrcode
icon-question
icon-question-sign
icon-quote-left
icon-quote-right
icon-randomv
icon-refresh
icon-remove
icon-remove-circle
icon-remove-sign
icon-reorder
icon-reply
icon-reply-all
icon-resize-horizontal
icon-resize-vertical
icon-retweet
icon-road
icon-rocket
icon-rss
icon-rss-sign
icon-screenshot
icon-search
icon-share
icon-share-alt
icon-share-sign
icon-shield
icon-shopping-cart
icon-sign-blank
icon-signal
icon-signin
icon-signout
icon-sitemap
icon-smile
icon-sort
icon-sort-by-alphabet
icon-sort-by-alphabet-alt
icon-sort-by-attributes
icon-sort-by-attributes-alt
icon-sort-by-order
icon-sort-by-order-alt
icon-sort-down
icon-sort-up
icon-spinner
icon-star
icon-star-empty
icon-star-half
icon-star-half-empty
icon-star-half-full (alias)
icon-subscript
icon-suitcase
icon-sun
icon-superscript
icon-tablet
icon-tag
icon-tags
icon-tasks
icon-terminal
icon-thumbs-down
icon-thumbs-down-alt
icon-thumbs-up
icon-thumbs-up-alt
icon-ticket
icon-time
icon-tint
icon-trash
icon-trophy
icon-truck
icon-umbrella
icon-unchecked (alias)
icon-unlock
icon-unlock-alt
icon-upload
icon-upload-alt
icon-user
icon-volume-down
icon-volume-off
icon-volume-up
icon-warning-sign
icon-wrench
icon-zoom-in
icon-zoom-out
icon-bitcoin (alias)
icon-btc
icon-cny
icon-dollar (alias)
icon-eur
icon-euro (alias)
icon-gbp
icon-inr
icon-jpy
icon-krw
icon-renminbi (alias)
icon-rupee (alias)
icon-usd
icon-won (alias)
icon-yen (alias)
icon-align-center
icon-align-justify
icon-align-left
icon-align-right
icon-bold
icon-columns
icon-copy
icon-cut
icon-eraser
icon-file
icon-file-alt
icon-file-text
icon-file-text-alt
icon-font
icon-indent-left
icon-indent-right
icon-italic
icon-link
icon-list
icon-list-alt
icon-list-ol
icon-list-ul
icon-paper-clip
icon-paperclip (alias)
icon-paste
icon-repeat
icon-rotate-left (alias)
icon-rotate-right (alias)
icon-save
icon-strikethrough
icon-table
icon-text-height
icon-text-width
icon-th
icon-th-large
icon-th-list
icon-underline
icon-undo
icon-unlink
icon-angle-down
icon-angle-left
icon-angle-right
icon-angle-up
icon-arrow-down
icon-arrow-left
icon-arrow-right
icon-arrow-up
icon-caret-down
icon-caret-left
icon-caret-right
icon-caret-up
icon-chevron-down
icon-chevron-left
icon-chevron-right
icon-chevron-sign-down
icon-chevron-sign-left
icon-chevron-sign-right
icon-chevron-sign-up
icon-chevron-up
icon-circle-arrow-down
icon-circle-arrow-left
icon-circle-arrow-right
icon-circle-arrow-up
icon-double-angle-down
icon-double-angle-left
icon-double-angle-right
icon-double-angle-up
icon-hand-down
icon-hand-left
icon-hand-right
icon-hand-up
icon-long-arrow-down
icon-long-arrow-left
icon-long-arrow-right
icon-long-arrow-up
icon-backward
icon-eject
icon-fast-backward
icon-fast-forward
icon-forward
icon-fullscreen
icon-pause
icon-play
icon-play-circle
icon-play-sign
icon-resize-full
icon-resize-small
icon-step-backward
icon-step-forward
icon-stop
icon-youtube-play
icon-adn
icon-android
icon-apple
icon-bitbucket
icon-bitbucket-sign
icon-bitcoin (alias)
icon-btc
icon-css3
icon-dribbble
icon-dropbox
icon-facebook
icon-facebook-sign
icon-flickr
icon-foursquare
icon-github
icon-github-alt
icon-github-sign
icon-gittip
icon-google-plus
icon-google-plus-sign
icon-html5
icon-instagram
icon-linkedin
icon-linkedin-sign
icon-linux
icon-maxcdn
icon-pinterest
icon-pinterest-sign
icon-renren
icon-skype
icon-stackexchange
icon-trello
icon-tumblr
icon-tumblr-sign
icon-twitter
icon-twitter-sign
icon-vk
icon-weibo
icon-windows
icon-xing
icon-xing-sign
icon-youtube
icon-youtube-play
icon-youtube-sign
icon-ambulance
icon-h-sign
icon-hospital
icon-medkit
icon-plus-sign-alt
icon-stethoscope
icon-user-md
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/form_component.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Sample Form

Some hint here
Some hint here
Some hint here

Start typing to auto complete!. E.g: Florida

@
$.00

Dual Select

Filter:

Filter:

Tags Input

Masked inputs

999-99-999-9999-9
999 99 999 9999 9
999/99/999/9999/9
192.168.110.310
4deg:1340:6547:2:540:h8je:ve73:98pd
99-9999999
(999) 999-9999
$ 999,999,999.99
dd/mm/yyyy
dd-mm-yyyy

Color Pickers

Time Pickers

Timepicker inside a modal

Clockface Time Pickers

Date Pickers

Date Range Pickers

 

Switch Buttons

File Upload

Select file Change Remove
Select file Change ×
Select image Change Remove
NOTE! Attached image thumbnail is supported in Latest Firefox, Chrome, Opera, Safari and Internet Explorer 10 only

CKEditor

WYSIWYG Editor

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/form_layout.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Form Layouts

Some hint here
Some hint here
Some hint here
Some hint here
Some hint here
Some hint here
Some hint here
Some hint here

Label above input (grid)

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/form_validation.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Basic validations

Successfully done
Aha you gave a wrong info
Something went wrong

Form Validation

Advanced form Validation

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/form_wizard.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Wizard With Progress Bar Step 1 of Step 4

Fill up step 1

Give your username
Give your Email

Fill up step 2

Give your First Name
Give your Last Name
Give your phone number

Fill up step 3

Final step

Jhon Doe
dkmosa@gmail.com
123456789
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/gallery.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Gallery

ALL
CATEGORY ONE
CATEGORY TWO
CATEGORY THREE
CATEGORY FOUR
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/general.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Notifications

Warning!

Best check yo self, you're not looking too good. Nulla vi

<div class="alert alert-block alert-warning fade in">
    <button data-dismiss="alert" class="close" type="button">×</button>
    <h4 class="alert-heading">Warning!</h4>
    <p>
        Best check yo self, you're not looking too good. Nulla vi
    </p>
</div>

Success!

Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

<div class="alert alert-block alert-success fade in">
    <button data-dismiss="alert" class="close" type="button">×</button>
    <h4 class="alert-heading">Success!</h4>
    <p>
        Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
    </p>
</div>

Info!

Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

<div class="alert alert-block alert-info fade in">
    <button data-dismiss="alert" class="close" type="button">×</button>
    <h4 class="alert-heading">Info!</h4>
    <p>
        Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
    </p>
</div>

Error!

Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

<div class="alert alert-block alert-error fade in">
    <button data-dismiss="alert" class="close" type="button">×</button>
    <h4 class="alert-heading">Error!</h4>
    <p>
        Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
    </p>
</div>

Navigation

<div class="bs-docs-example">
    <h4>Basic navbar</h4>
    <div class="navbar navbar-static" id="">
        <div class="navbar-inner">
            <div style="width: auto;" class="container">
                <a href="#" class="brand">Vector Lab</a>
                <ul role="navigation" class="nav">
                    <li class="active">
                        <a href="#">Home</a>
                    </li>
                    <li>
                        <a href="#">Link</a>
                    </li>
                    <li>
                        <a href="#">Link</a>
                    </li>
                    <li>
                        <a href="#">Link</a>
                    </li>
                </ul>
                <ul class="nav pull-right">
                    <li>
                        <a href="#">Sing In</a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>
<!--BEGIN DROPDOWN NAV-->
<div class="bs-docs-example">
    <h4>Dropdown navbar</h4>
    <div class="navbar navbar-static" id="navbar-example">
        <div class="navbar-inner">
            <div style="width: auto;" class="container">
                <a href="#" class="brand">Vector Lab</a>
                <ul role="navigation" class="nav">
                    <li class="dropdown">
                        <a data-toggle="dropdown" class="dropdown-toggle" role="button" href="#" id="drop1">Dropdown <b class="caret"></b></a>
                        <ul aria-labelledby="drop1" role="menu" class="dropdown-menu">
                            <li role="presentation"><a href="../../../../google.com/default.htm" tabindex="-1" role="menuitem">Action</a></li>
                            <li role="presentation"><a href="#anotherAction" tabindex="-1" role="menuitem">Another action</a></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                            <li class="divider" role="presentation"></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
                        </ul>
                    </li>
                    <li class="dropdown">
                        <a data-toggle="dropdown" class="dropdown-toggle" role="button" id="drop2" href="#">Dropdown 2 <b class="caret"></b></a>
                        <ul aria-labelledby="drop2" role="menu" class="dropdown-menu">
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Action</a></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Another action</a></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                            <li class="divider" role="presentation"></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
                        </ul>
                    </li>
                </ul>
                <ul class="nav pull-right">
                    <li class="dropdown" id="fat-menu">
                        <a data-toggle="dropdown" class="dropdown-toggle" role="button" id="drop3" href="#">Dropdown 3 <b class="caret"></b></a>
                        <ul aria-labelledby="drop3" role="menu" class="dropdown-menu">
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Action</a></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Another action</a></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                            <li class="divider" role="presentation"></li>
                            <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>
<!--END DROPDOWN NAV-->
<!--BEGIN RESPONSIVE NAV-->
<div class="bs-docs-example">
    <h4>Responsive navbar</h4>
    <div class="navbar">
        <div class="navbar-inner">
            <div class="container">
                <a data-target=".navbar-responsive-collapse" data-toggle="collapse" class="btn btn-navbar">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </a>
                <a href="#" class="brand">Vector Lab</a>
                <div class="nav-collapse collapse navbar-responsive-collapse">
                    <ul class="nav">
                        <li class="active"><a href="#">Home</a></li>
                        <li><a href="#">Link</a></li>
                        <li><a href="#">Link</a></li>
                        <li class="dropdown">
                            <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
                            <ul class="dropdown-menu">
                                <li><a href="#">Action</a></li>
                                <li><a href="#">Another action</a></li>
                                <li><a href="#">Something else here</a></li>
                                <li class="divider"></li>
                                <li class="nav-header">Nav header</li>
                                <li><a href="#">Separated link</a></li>
                                <li><a href="#">One more separated link</a></li>
                            </ul>
                        </li>
                    </ul>
                    <form action="" class="navbar-search pull-left">
                        <input type="text" placeholder="Search" class="search-query input-medium">
                    </form>
                    <ul class="nav pull-right">
                        <li><a href="#">Link</a></li>
                        <li class="divider-vertical"></li>
                        <li class="dropdown">
                            <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
                            <ul class="dropdown-menu">
                                <li><a href="#">Action</a></li>
                                <li><a href="#">Another action</a></li>
                                <li><a href="#">Something else here</a></li>
                                <li class="divider"></li>
                                <li><a href="#">Separated link</a></li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>
<!--BEGIN PILLS NAV-->
<div class="bs-docs-example">
    <h4>Pills navbar</h4>
    <ul class="nav nav-pills">
        <li class="active"><a href="#">Regular link</a></li>
        <li class="dropdown">
            <a href="#" data-toggle="dropdown" role="button" id="drop4" class="dropdown-toggle">Dropdown <b class="caret"></b></a>
            <ul aria-labelledby="drop4" role="menu" class="dropdown-menu" id="menu1">
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Another action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                <li class="divider" role="presentation"></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
            </ul>
        </li>
        <li class="dropdown">
            <a href="#" data-toggle="dropdown" role="button" id="drop5" class="dropdown-toggle">Dropdown 2 <b class="caret"></b></a>
            <ul aria-labelledby="drop5" role="menu" class="dropdown-menu" id="menu2">
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Another action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                <li class="divider" role="presentation"></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
            </ul>
        </li>
        <li class="dropdown">
            <a href="#" data-toggle="dropdown" role="button" id="drop6" class="dropdown-toggle">Dropdown 3 <b class="caret"></b></a>
            <ul aria-labelledby="drop5" role="menu" class="dropdown-menu" id="menu3">
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Another action</a></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Something else here</a></li>
                <li class="divider" role="presentation"></li>
                <li role="presentation"><a href="#" tabindex="-1" role="menuitem">Separated link</a></li>
            </ul>
        </li>
    </ul>
</div>
<!--END PILLS NAV-->

Alerts

Warning! Best check yo self, you're not looking too good.
<div class="alert">
    <button class="close" data-dismiss="alert">×</button>
    <strong>Warning!</strong> Best check yo self, you're not looking too good.
</div>
Success! Best check yo self, you're not looking too good.
<div class="alert alert-success">
    <button class="close" data-dismiss="alert">×</button>
    <strong>Success!</strong> Best check yo self, you're not looking too good.
</div>
Info! Best check yo self, you're not looking too good.
<div class="alert alert-info">
    <button class="close" data-dismiss="alert">×</button>
    <strong>Info!</strong> Best check yo self, you're not looking too good.
</div>
Error! Best check yo self, you're not looking too good.
<div class="alert alert-error">
    <button class="close" data-dismiss="alert">×</button>
    <strong>Error!</strong> Best check yo self, you're not looking too good.
</div>

Basic Progress Bars

<div class="progress">
    <div style="width: 20%;" class="bar"></div>
</div>
<div class="progress progress-success">
    <div style="width: 40%;" class="bar"></div>
</div>
<div class="progress progress-warning">
    <div style="width: 60%;" class="bar"></div>
</div>
<div class="progress progress-danger">
    <div style="width: 80%;" class="bar"></div>
</div>

Stacked

<div class="progress">
    <div class="bar bar-success" style="width: 25%;"></div>
    <div class="bar bar-warning" style="width: 30%;"></div>
    <div class="bar bar-danger" style="width: 15%;"></div>
</div>
<div class="progress progress-striped">
    <div class="bar bar-success" style="width: 25%;"></div>
    <div class="bar bar-warning" style="width: 30%;"></div>
    <div class="bar bar-danger" style="width: 15%;"></div>
</div>
<div class="progress progress-striped active">
    <div class="bar bar-success" style="width: 25%;"></div>
    <div class="bar bar-warning" style="width: 30%;"></div>
    <div class="bar bar-danger" style="width: 15%;"></div>
</div>

Striped Progress Bars

<div class="progress progress-striped">
    <div style="width: 20%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-success">
    <div style="width: 40%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-warning">
    <div style="width: 60%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-danger">
    <div style="width: 80%;" class="bar"></div>
</div>

Animated Progress Bars

<div class="progress progress-striped active">
    <div style="width: 20%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-success active">
    <div style="width: 40%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-warning active">
    <div style="width: 60%;" class="bar"></div>
</div>
<div class="progress progress-striped progress-danger active">
    <div style="width: 80%;" class="bar"></div>
</div>

Tooltips

Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. have a terry richardson vinyl chambray. twitter handle freegan cred raw denim single-origin coffee viral.

<p>
    Tight pants next level keffiyeh
    <a href="#" class="tooltips" data-original-title="Default tooltips">you probably</a> haven't heard of them.
    Photo booth beard raw denim letterpress vegan messenger bag stumptown.
    <a href="#" class="tooltips" data-original-title="Another tooltips">have a</a>
    terry richardson vinyl chambray.
    <a href="#" class="tooltips" data-original-title="The last tip!">twitter handle</a>
    freegan cred raw denim single-origin coffee viral.
</p>
<p class="">
    <button class="btn tooltips" data-placement="top" data-original-title="tooltips in top">Top</button>
    <button class="btn tooltips" data-placement="left" data-original-title="tooltips in left">Left</button>
    <button class="btn tooltips" data-placement="right" data-original-title="tooltips in right">Right</button>
    <button class="btn tooltips" data-placement="bottom" data-original-title="tooltips in bottom">Bottom</button>
</p>

Popovers

Tight pants next level keffiyeh trigger me on click haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. loem ipsum dolor trigger me on hover terry richardson vinyl chambray. Beard stumptown. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa.

<p>
    Tight pants next level keffiyeh
    <a href="javascript:;" class="popovers" data-placement="left" data-content="popovers body goes here! popovers body goes here!" data-original-title="Default popovers">trigger me on click</a> haven't heard of them.
    Photo booth beard raw denim letterpress vegan messenger bag stumptown. loem ipsum dolor
    <a href="javascript:;" class="popovers" data-placement="top" data-trigger="hover" data-content="popovers body goes here! popovers body goes here!" data-original-title="Another popovers">trigger me on hover</a>
    terry richardson vinyl chambray. Beard stumptown. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa.
</p>
<p class="">
    <button class="btn popovers" data-trigger="hover" data-placement="top" data-content="popovers body goes here! popovers body goes here!" data-original-title="popovers in top">Top</button>
    <button class="btn popovers" data-trigger="hover" data-placement="left" data-content="popovers body goes here! popovers body goes here!" data-original-title="popovers in left">Left</button>
    <button class="btn popovers" data-trigger="hover" data-placement="right" data-content="popovers body goes here! popovers body goes here!" data-original-title="popovers in right">Right</button>
    <button class="btn popovers" data-trigger="hover" data-placement="bottom" data-content="popovers body goes here! popovers body goes here!" data-original-title="popovers in bottom">Bottom</button>
</p>

Modal Dialogs

Click on below buttons to check it out.
Dialog Confirm Success Alert
<h5>Click on below buttons to check it out.</h5>
<!-- Button to trigger modal -->
<a href="#myModal1" role="button" class="btn btn-primary" data-toggle="modal">Dialog</a>
<a href="#myModal3" role="button" class="btn btn-warning" data-toggle="modal">Confirm</a>
<a href="#myModal4" role="button" class="btn btn-success" data-toggle="modal">Success</a>
<a href="#myModal2" role="button" class="btn btn-danger" data-toggle="modal">Alert</a>
<!-- Modal -->
<div id="myModal1" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel1">Modal Header</h3>
    </div>
    <div class="modal-body">
        <p>Body goes here...</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save</button>
    </div>
</div>
<div id="myModal2" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel2">Alert Header</h3>
    </div>
    <div class="modal-body">
        <p>Body goes here...</p>
    </div>
    <div class="modal-footer">
        <button data-dismiss="modal" class="btn btn-primary">OK</button>
    </div>
</div>
<div id="myModal3" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel3" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel3">Confirm Header</h3>
    </div>
    <div class="modal-body">
        <p>Body goes here...</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button data-dismiss="modal" class="btn btn-primary">Confirm</button>
    </div>
</div>
<div id="myModal4" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel3" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel4">Success Header</h3>
    </div>
    <div class="modal-body">
        <p>Body goes here...</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button data-dismiss="modal" class="btn btn-success">Success</button>
    </div>
</div>

Pulsate

Click on below buttons to check it out.
Pulsate regular Pulsate once Pulsate hover
Crazy pulsate :)
<h5>Click on below buttons to check it out.</h5>
<a href="javascript:;" class="btn" id="pulsate-regular">Pulsate regular</a>
<a href="javascript:;" class="btn btn-success" id="pulsate-once">Pulsate once</a>
<a href="javascript:;" class="btn btn-info" id="pulsate-hover">Pulsate hover</a>
<div class="space10 visible-phone visible-tablet"></div>
<a href="javascript:;" class="btn btn-danger" id="pulsate-crazy">Crazy pulsate :)</a>

Labels and Badges

Name Badges Labels
Default 1 Default
Success 2 Success
Warning 4 Warning
Important 6 Important
Info 8 Info
Inverse 10 Inverse
<table class="table table-bordered table-striped">
    <thead>
        <tr>
            <th>Name</th>
            <th>Badges</th>
            <th>Labels</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                Default
            </td>
            <td>
                <span class="badge">1</span>
            </td>
            <td>
                <span class="label">Default</span>
            </td>
        </tr>
        <tr>
            <td>
                Success
            </td>
            <td>
                <span class="badge badge-success">2</span>
            </td>
            <td>
                <span class="label label-success">Success</span>
            </td>
        </tr>
        <tr>
            <td>
                Warning
            </td>
            <td>
                <span class="badge badge-warning">4</span>
            </td>
            <td>
                <span class="label label-warning">Warning</span>
            </td>
        </tr>
        <tr>
            <td>
                Important
            </td>
            <td>
                <span class="badge badge-important">6</span>
            </td>
            <td>
                <span class="label label-important">Important</span>
            </td>
        </tr>
        <tr>
            <td>
                Info
            </td>
            <td>
                <span class="badge badge-info">8</span>
            </td>
            <td>
                <span class="label label-info">Info</span>
            </td>
        </tr>
        <tr>
            <td>
                Inverse
            </td>
            <td>
                <span class="badge badge-inverse">10</span>
            </td>
            <td>
                <span class="label label-inverse">Inverse</span>
            </td>
        </tr>
    </tbody>
</table>

Pagination

<div class="pagination pagination-large">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li class="hidden-phone"><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>
<div class="pagination">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>
<div class="pagination pagination-small">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>
<div class="pagination pagination-mini">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>
<div class="pagination pagination-mini pagination-centered">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>
<div class="pagination pagination-mini pagination-right">
    <ul>
        <li><a href="#">«</a></li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">»</a></li>
    </ul>
</div>

Gritter Notifications

Click on below buttons to check it out.
Regular Sticky Imageless
Light Max of 3 Remove all
<h5>Click on below buttons to check it out.</h5>
<a href="javascript:;" class="btn " id="add-regular">Regular</a>
<a href="javascript:;" class="btn btn-success" id="add-sticky">Sticky</a>
<a href="javascript:;" class="btn btn-info" id="add-without-image">Imageless</a>
<div class="space10 visible-phone visible-tablet"></div>
<a href="javascript:;" class="btn btn-warning" id="add-gritter-light">Light</a>
<a href="javascript:;" class="btn btn-success" id="add-max">Max of 3</a>
<a href="#" class="btn btn-info" id="remove-all">Remove all</a>

Pager

<ul class="pager">
    <li><a href="#">Previous</a></li>
    <li><a href="#">Next</a></li>
</ul>
<ul class="pager">
    <li class="previous">
        <a href="#">&larr; Older</a>
    </li>
    <li class="next">
        <a href="#">Newer &rarr;</a>
    </li>
</ul>
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/general_portlet.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Scroll is hidden
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Scroll is always visible
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.
Scroll and rail are always visible
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Scroll is hidden
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Portlet

Scroll is hidden
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.nisi erat porttitor ligula, eget lacinia odio sem nec elit. nisi erat porttitor ligula, eget lacinia odio sem nec elit. nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum

Portlet

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.ut laoreet dolore magna ut laoreet dolore magna. ut laoreet dolore magna. ut laoreet dolore magna.

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo.

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis.
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/glyphicons.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Glyphicons

  • icon-glass
  • icon-music
  • icon-search
  • icon-envelope
  • icon-heart
  • icon-star
  • icon-star-empty
  • icon-user
  • icon-film
  • icon-th-large
  • icon-th
  • icon-th-list
  • icon-ok
  • icon-remove
  • icon-zoom-in
  • icon-zoom-out
  • icon-off
  • icon-signal
  • icon-cog
  • icon-trash
  • icon-home
  • icon-file
  • icon-time
  • icon-road
  • icon-download-alt
  • icon-download
  • icon-upload
  • icon-inbox
  • icon-play-circle
  • icon-repeat
  • icon-refresh
  • icon-list-alt
  • icon-lock
  • icon-flag
  • icon-headphones
  • icon-volume-off
  • icon-volume-down
  • icon-volume-up
  • icon-qrcode
  • icon-barcode
  • icon-tag
  • icon-tags
  • icon-book
  • icon-bookmark
  • icon-print
  • icon-camera
  • icon-font
  • icon-bold
  • icon-italic
  • icon-text-height
  • icon-text-width
  • icon-align-left
  • icon-align-center
  • icon-align-right
  • icon-align-justify
  • icon-list
  • icon-indent-left
  • icon-indent-right
  • icon-facetime-video
  • icon-picture
  • icon-pencil
  • icon-map-marker
  • icon-adjust
  • icon-tint
  • icon-edit
  • icon-share
  • icon-check
  • icon-move
  • icon-step-backward
  • icon-fast-backward
  • icon-backward
  • icon-play
  • icon-pause
  • icon-stop
  • icon-forward
  • icon-fast-forward
  • icon-step-forward
  • icon-eject
  • icon-chevron-left
  • icon-chevron-right
  • icon-plus-sign
  • icon-minus-sign
  • icon-remove-sign
  • icon-ok-sign
  • icon-question-sign
  • icon-info-sign
  • icon-screenshot
  • icon-remove-circle
  • icon-ok-circle
  • icon-ban-circle
  • icon-arrow-left
  • icon-arrow-right
  • icon-arrow-up
  • icon-arrow-down
  • icon-share-alt
  • icon-resize-full
  • icon-resize-small
  • icon-plus
  • icon-minus
  • icon-asterisk
  • icon-exclamation-sign
  • icon-gift
  • icon-leaf
  • icon-fire
  • icon-eye-open
  • icon-eye-close
  • icon-warning-sign
  • icon-plane
  • icon-calendar
  • icon-random
  • icon-comment
  • icon-magnet
  • icon-chevron-up
  • icon-chevron-down
  • icon-retweet
  • icon-shopping-cart
  • icon-folder-close
  • icon-folder-open
  • icon-resize-vertical
  • icon-resize-horizontal
  • icon-hdd
  • icon-bullhorn
  • icon-bell
  • icon-certificate
  • icon-thumbs-up
  • icon-thumbs-down
  • icon-hand-right
  • icon-hand-left
  • icon-hand-up
  • icon-hand-down
  • icon-circle-arrow-right
  • icon-circle-arrow-left
  • icon-circle-arrow-up
  • icon-circle-arrow-down
  • icon-globe
  • icon-wrench
  • icon-tasks
  • icon-filter
  • icon-briefcase
  • icon-fullscreen
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/grids.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Grid 12

class="span12"

Grid 10

class="span10"

Grid2

class="span2"

Grid8

class="span8"

Grid4

class="span4"

Grid6

class="span6"

Grid6

class="span6"

Grid4

class="span4"

Grid4

class="span4"

Grid4

class="span4"

Grid2

class="span2"

Grid2

class="span2"

Grid2

class="span2"

Grid2

class="span2"

Grid2

class="span2"

Grid2

class="span2"

Grid 10 offset2

class="span10 offset2"

Grid 8 offset4

class="span8 offset4"

Grid 06 offset6

class="span6 offset6"

Grid 04 offset8

class="span4 offset8"

Grid 10 offset2

span10 offset2
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/index - 副本.html ================================================  Metro By xmfdsh

Selection Chart

Live Chart

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/index.html ================================================  Metro By xmfdsh
主题颜色:

控制台

四小狼工作室 Metro风格模板

四小狼后台模板,教你轻松入门,简单搭建清新简洁的bootstrap的Metro后台风格

首先第一步入门工作当然是引用文件之类的啦,先来个头部文件既引用css文件应该如何去做。代码如下:


头文件引用

<!DOCTYPE html>
<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
<!-- 开始头部 -->
<head>
   <meta charset="utf-8" />
   <title>Metro By xmfdsh</title>
   <meta content="width=device-width, initial-scale=1.0" name="viewport" />
   <meta content="" name="description" />
   <meta content="Mosaddek" name="author" />
   <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
   <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />
   <link href="assets/bootstrap/css/bootstrap-fileupload.css" rel="stylesheet" />
   <link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />
   <link href="css/style.css" rel="stylesheet" />
   <link href="css/style-responsive.css" rel="stylesheet" />
   <link href="css/style-default.css" rel="stylesheet" id="style_color" />
</head>
<!-- 结束头部 -->

第二步:在引用了通用的css文件后,便可以开始布局了,首先是后台顶部的导航栏,其中包括了Logo,个人登陆信息,通知等。代码如下:


header顶部导航栏布局

<!-- 开始 Body -->
<body class="fixed-top">
   <!-- 开始 header 头部菜单 -->
   <div id="header" class="navbar navbar-inverse navbar-fixed-top">
       <!-- 开始顶部的 navigation bar 导航菜单 -->
       <div class="navbar-inner">
           <div class="container-fluid">
               <!--开始工具条 开关-->
               <div class="sidebar-toggle-box hidden-phone">
                   <div class="icon-reorder tooltips" data-placement="right" data-original-title="Metro By xmfdsh"></div>
               </div>
               <!--结束工具条 开关-->
               <!-- 开始 Logo -->
               <a class="brand" href="index.html">
                   <img src="img/logo.png" alt="Metro Lab" />
               </a>
               <!-- 结束Logo -->
               <div id="top_menu" class="nav notify-row">
                   <!-- 开始通知 -->
                   <ul class="nav top-menu">
                       <!-- 开始设置 -->
                       <li class="dropdown">
                           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                               <i class="icon-tasks"></i>
                               <span class="badge badge-important">2</span>
                           </a>
                           <ul class="dropdown-menu extended tasks-bar">
                               <li>
                                   <p>你有2条任务</p>
                               </li>
                               <li>
                                   <a href="#">
                                       <div class="task-info">
                                         <div class="desc">控制台</div>
                                         <div class="percent">44%</div>
                                       </div>
                                       <div class="progress progress-striped active no-margin-bot">
                                           <div class="bar" style="width: 44%;"></div>
                                       </div>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">
                                       <div class="task-info">
                                           <div class="desc">数据库更新</div>
                                           <div class="percent">65%</div>
                                       </div>
                                       <div class="progress progress-striped progress-success active no-margin-bot">
                                           <div class="bar" style="width: 65%;"></div>
                                       </div>
                                   </a>
                               </li>
                               
                               <li class="external">
                                   <a href="#">查看所有任务</a>
                               </li>
                           </ul>
                       </li>
                       <!-- 结束设置 -->
                       <!-- 开始下拉 收件箱 -->
                       <li class="dropdown" id="header_inbox_bar">
                           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                               <i class="icon-envelope-alt"></i>
                               <span class="badge badge-important">2</span>
                           </a>
                           <ul class="dropdown-menu extended inbox">
                               <li>
                                   <p>你有2条消息</p>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="photo"><img src="img/avatar-mini.png" alt="avatar" /></span>
									<span class="subject">
									<span class="from">xmfdsh</span>
									<span class="time">刚刚</span>
									</span>
									<span class="message">
									    Hello, 这是个消息例子.
									</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="photo"><img src="img/avatar-mini.png" alt="avatar" /></span>
									<span class="subject">
									<span class="from">张视焕</span>
									<span class="time">20分钟</span>
									</span>
									<span class="message">
									 Hi, 最近咋样?
									</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">查看所有信息</a>
                               </li>
                           </ul>
                       </li>
                       <!-- 结束下拉 收件箱 -->
                       <!-- 开始下拉 通知 -->
                       <li class="dropdown" id="header_notification_bar">
                           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                               <i class="icon-bell-alt"></i>
                               <span class="badge badge-warning">4</span>
                           </a>
                           <ul class="dropdown-menu extended notification">
                               <li>
                                   <p>你有4条提示信息</p>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="label label-important"><i class="icon-bolt"></i></span>
                                       手机欠费
                                       <span class="small italic">4分钟</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="label label-warning"><i class="icon-bell"></i></span>
                                       windows激活过期
                                       <span class="small italic">1小时</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="label label-important"><i class="icon-bolt"></i></span>
                                       数据库奔溃
                                       <span class="small italic">4小时</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">
                                       <span class="label label-success"><i class="icon-plus"></i></span>
                                       世界杯要下注了
                                       <span class="small italic">刚刚</span>
                                   </a>
                               </li>
                               <li>
                                   <a href="#">查看所有通知</a>
                               </li>
                           </ul>
                       </li>
                       <!-- 结束下拉 通知 -->
                   </ul>
               </div>
               <!-- 结束通知 -->
               <div class="top-nav ">
                   <ul class="nav pull-right top-menu" >
                       <!-- BEGIN SUPPORT -->
                       <li class="dropdown mtop5">
                           <a class="dropdown-toggle element" data-placement="bottom" data-toggle="tooltip" href="#" data-original-title="闲聊">
                               <i class="icon-comments-alt"></i>
                           </a>
                       </li>
                       <li class="dropdown mtop5">
                           <a class="dropdown-toggle element" data-placement="bottom" data-toggle="tooltip" href="#" data-original-title="帮助">
                               <i class="icon-headphones"></i>
                           </a>
                       </li>
                       <!-- END SUPPORT -->
                       <!-- 开始用户登录下拉菜单 -->
                       <li class="dropdown">
                           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                               <img src="img/avatar1_small.jpg" alt="">
                               <span class="username">xmfdsh</span>
                               <b class="caret"></b>
                           </a>
                           <ul class="dropdown-menu extended logout">
                               <li><a href="#"><i class="icon-user"></i>我的资料</a></li>
                               <li><a href="#"><i class="icon-cog"></i>我的设置</a></li>
                               <li><a href="login.html"><i class="icon-key"></i>退出</a></li>
                           </ul>
                       </li>
                       <!-- 结束用户菜单 -->
                   </ul>
               </div>
           </div>
       </div>
       <!-- 结束顶部的 navigation bar 导航菜单 -->
   </div>
   <!-- 结束 header 头部菜单 -->

第三步便是左边的导航栏,以及右边待填的内容,代码如下:


左侧导航栏

   <!-- BEGIN CONTAINER -->
   <div id="container" class="row-fluid">
      <!-- 开始左侧 导航菜单 -->
      <div class="sidebar-scroll">
        <div id="sidebar" class="nav-collapse collapse">
         <!-- 开始左侧 工具条菜单 -->
          <ul class="sidebar-menu">
              <li class="sub-menu active">
                  <a class="" href="index.html">
                      <i class="icon-dashboard"></i>
                      <span>控制台</span>
                  </a>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-book"></i>
                      <span>UI 组件</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="general.html">通用</a></li>
                      <li><a class="" href="button.html">按钮</a></li>
                      <li><a class="" href="slider.html">滑动</a></li>
                      <li><a class="" href="metro_view.html">Metro风格</a></li>
                      <li><a class="" href="tabs_accordion.html">Tab选项卡 & 手风琴</a></li>
                      <li><a class="" href="typography.html">文字排版</a></li>
                      <li><a class="" href="tree_view.html">树菜单</a></li>
                      <li><a class="" href="nestable.html">嵌套列表</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-cogs"></i>
                      <span>插件</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="calendar.html">日历</a></li>
                      <li><a class="" href="grids.html">网格</a></li>
                      <li><a class="" href="chartjs.html">图表统计</a></li>
                      <li><a class="" href="flot_chart.html">Flot图表</a></li>
                      <li><a class="" href="gallery.html">相册</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-tasks"></i>
                      <span>表单</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="form_layout.html">表单布局</a></li>
                      <li><a class="" href="form_component.html">表单组件</a></li>
                      <li><a class="" href="form_wizard.html">表单提示</a></li>
                      <li><a class="" href="form_validation.html">表单验证</a></li>
                      <li><a class="" href="dropzone.html">文件上传</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-th"></i>
                      <span>数据表格</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="basic_table.html">简单表格</a></li>
                      <li><a class="" href="dynamic_table.html">动态表格</a></li>
                      <li><a class="" href="editable_table.html">可编辑表格</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-fire"></i>
                      <span>Icon图标</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="font_awesome.html">FontAwesome图标</a></li>
                      <li><a class="" href="glyphicons.html">Glyphicons图标</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a class="" href="javascript:;">
                      <i class="icon-trophy"></i>
                      <span>代码片段</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a href="general_portlet.html" class="">通用片段</a></li>
                      <li><a href="draggable_portlet.html" class="">可拖拽片段</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a class="" href="javascript:;">
                      <i class="icon-map-marker"></i>
                      <span>地图</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a href="vector_map.html" class="">Vector地图</a></li>
                      <li><a href="google_map.html" class="">Google地图</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-file-alt"></i>
                      <span>基本页面</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="blank.html">空白页面</a></li>
                      <li><a class="" href="blog.html">博客</a></li>
                      <li><a class="" href="timeline.html">时间轴</a></li>
                      <li><a class="" href="profile.html">个人资料</a></li>
                      <li><a class="" href="about_us.html">关于我们</a></li>
                      <li><a class="" href="contact_us.html">联系我们</a></li>
                  </ul>
              </li>
              <li class="sub-menu">
                  <a href="javascript:;" class="">
                      <i class="icon-glass"></i>
                      <span>其他</span>
                      <span class="arrow"></span>
                  </a>
                  <ul class="sub">
                      <li><a class="" href="lock.html">锁屏</a></li>
                      <li><a class="" href="invoice.html">购物单</a></li>
                      <li><a class="" href="pricing_tables.html">价目单</a></li>
                      <li><a class="" href="search_result.html">搜索展示</a></li>
                      <li><a class="" href="faq.html">帮助页面</a></li>
                      <li><a class="" href="404.html">404错误页面</a></li>
                      <li><a class="" href="500.html">500错误页面</a></li>
                  </ul>
              </li>
              <li>
                  <a class="" href="login.html">
                    <i class="icon-user"></i>
                    <span>登录页面</span>
                  </a>
              </li>
          </ul>
         <!-- 结束左侧 工具条菜单 -->
      </div>
    </div>
   <!-- 结束左侧 导航菜单 -->
   <!-- 开始内容页 -->  
      <div id="main-content">
         <!-- 开始页面容器-->
         <div class="container-fluid">
            <!-- 开始页面顶部-->   
            <div class="row-fluid">
               <div class="span12">
                   <!-- 开始主题定制器-->
                   <div id="theme-change" class="hidden-phone">
                       <i class="icon-cogs"></i>
                        <span class="settings">
                            <span class="text">主题颜色:</span>
                            <span class="colors">
                                <span class="color-default" data-style="default"></span>
                                <span class="color-green" data-style="green"></span>
                                <span class="color-gray" data-style="gray"></span>
                                <span class="color-purple" data-style="purple"></span>
                                <span class="color-red" data-style="red"></span>
                            </span>
                        </span>
                   </div>
                   <!-- 结束主题定制器-->
                   <!-- 开始页面标题 & 面包屑导航-->
                   <h3 class="page-title">
                     控制台
                   </h3>
                   <ul class="breadcrumb">
                       <li>
                           <a href="#">首页</a>
                           <span class="divider">/</span>
                       </li>                      
                       <li class="active">
                           控制台
                       </li>
                       <li class="pull-right search-wrap">
                           <form action="search_result.html" class="hidden-phone">
                               <div class="input-append search-input-area">
                                   <input class="" id="appendedInputButton" type="text">
                                   <button class="btn" type="button"><i class="icon-search"></i> </button>
                               </div>
                           </form>
                       </li>
                   </ul>
                   <!-- 结束页面标题 & 面包屑导航-->
               </div>
            </div>
            <!-- 开始页面主要内容页面-->
          <!-- 结束页面主要内容页面-->
            </div>
          
       </div>
   </div>

最后一步,footer,简洁一点就行,不过我本来就喜欢简洁一点的风格,然后还有的就是在页底加载的Js文件,可以减少加载时间,代码如下:


footer以及Js的加载

   <!-- BEGIN FOOTER -->
   <div id="footer">
       Copyright © 2014 四小狼工作室 Powered by xmfdsh. 
   </div>
   <!-- END FOOTER -->
            
   <!-- 开始加载 Js文件 -->
   <!-- 在底部加载Js文件,可以减少加载时间 -->
   <script src="js/jquery-1.8.3.min.js"></script>
   <script src="js/jquery.nicescroll.js" type="text/javascript"></script>
   <script src="assets/bootstrap/js/bootstrap.min.js"></script>
   <script src="js/jquery.scrollTo.min.js"></script>
   <!-- ie8 fixes -->
   <!--[if lt IE 9]>
   <script src="js/excanvas.js"></script>
   <script src="js/respond.js"></script>
   <![endif]-->
   <!--为全部页面加载的公共Js文件-->
   <script src="js/common-scripts.js"></script>
   <!--仅为此页面使用的Js文件-->
   <!-- 结束加载Js文件 -->  
 </body>
</html>
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/invoice.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Invoice Page


BILLING ADDRESS

Jonathan Smith
44 Dreamland Tower, Suite 566
ABC, Dreamland 1230
Tel: +12 (012) 345-67-89

SHIPPING ADDRESS

Vector Lab
Road 1, House 2, Sector 3
ABC, Dreamland 1230
P: +38 (123) 456-7890

INVOICE INFO

  • Invoice Number : 69626
  • Invoice Date : 2013-03-17
  • Due Date : 2013-03-20
  • Invoice Status : Paid
# Item Description Unit Cost Quantity Total
1 LCD Monitor 20 inch Philips LCD Black color monitor $ 1000 2 $ 2000
2 Laptop Apple Mac book pro 15” Retina Display. 2.8 GHz Processor,8 GB Ram $1750 1 $1750
3 Mouse Apple Magic Mouse $90 3 $270
4 Personal Computer iMac 21 inch slim body. 1.7 GHz, 8 GB Ram $1200 2 $2400
5 Printer Epson Color Jet printer $200 2 $400
  • Sub - Total amount : $6820
  • Discount : 10%
  • VAT : -----
  • Grand Total : $6138
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/lock.html ================================================  Metro风格响应式后台管理系统模板MetroAdmin 锁屏页面 - JS代码网

Jonathan Smith

vectorlab@gmail.com

Locked
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/login.html ================================================ Metro风格响应式后台管理系统模板MetroAdmin 登录页面 - JS代码网 ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/metro_view.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/nestable.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/pricing_tables.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Pricing Table

30 days Free Trial on All Accounts

No risk. No hidden fees. Cancel at anytime.

Micro

$20 Per Month

  • Free setup
  • 1 Website
  • 2 Projects
  • 1GB Storage
  • $0 Google Adwords Credit

Starter

$30 Per Month

  • Free setup
  • 5 Website
  • 10 Projects
  • 15GB Storage
  • $30 Google Adwords Credit

Enterprise

$120 Per Month

  • Free setup
  • 20 Website
  • 30 Projects
  • Unlimited Storage
  • $100 Google Adwords Credit
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/profile.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Jonathan Smith

Lead Designer at Vectorlab Inc.

About Smith

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Donec ut volutpat metus. Aliquam tortor lorem, fringilla tempor dignissim at, pretium et arcu. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis.

Bio Graph

: Jonathan

: Smith

: Australia

: 13 July 1983

: Designer

: smith@vectorlab.net

: (12) 03 4567890

: http://www.demowebsite.com


Project Progress

  • Envato Website 48%
  • Themeforest CMS Dashboard 85%
  • VectorLab Portfolio 65%

Experience

Envato

Duration: 4 years as Senior Designer from June 2033 to June 2007

www.abccompany.com

Themeforest

Duration: 4 years as Senior Designer from June 2033 to June 2007

www.abccompany.com

Vector Lab

Duration: 4 years as Senior Designer from June 2033 to June 2007

www.abccompany.com
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/search_result.html ================================================  Metro By xmfdsh
主题颜色:

控制台

About 3,880,000 results (0.29 seconds)

About 3,880,000 results (0.29 seconds)

About 3,880,000 results (0.29 seconds)

Company Name Descrition Total Transaction Paid Due
Frame 2 frame Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Dot Net Corporation Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Graphic Design Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Graphzone Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Mega Pixel Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Pixel By Pixel Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Frame 2 frame Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Dot Net Corporation Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Graphzone Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Mega Pixel Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Frame 2 frame Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Dot Net Corporation Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000
Frame 2 frame Lorem ipsum dolor sit amet, consectetur adipisicing elit. $ 20,000 $ 12,000 $ 8,000

About 3,880,000 results (0.29 seconds)

================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/slider.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/tabs_accordion.html ================================================  Metro By xmfdsh
主题颜色:

控制台

Inline Tab

Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.

Inline Tabs

I'm in Section 1.

Phasellus fringilla suscipit risus nec eleifend. Pellentesque eu quam sem, ac malesuada leo. Sed ut quam at magna porttitor hendrerit. Maecenas quis erat fringilla augue feugiat vulputate a eu sem.Vivamus ut diam at turpis varius tempor. Aliquam dictum sagittis erat, vehicula adipiscing diam condimentum id.

Howdy, I'm in Section 2.

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur,

What up girl, this is Section 3.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.

I'm in Section 1.

Phasellus fringilla suscipit risus nec eleifend. Pellentesque eu quam sem, ac malesuada leo. Sed ut quam at magna porttitor hendrerit. Maecenas quis erat fringilla augue feugiat vulputate a eu sem.Vivamus ut diam at turpis varius tempor. Aliquam dictum sagittis erat, vehicula adipiscing diam condimentum id.

Howdy, I'm in Section 2.

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur,

What up girl, this is Section 3.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.

I'm in Section 1.

Phasellus fringilla suscipit risus nec eleifend. Pellentesque eu quam sem, ac malesuada leo. Sed ut quam at magna porttitor hendrerit. Maecenas quis erat fringilla augue feugiat vulputate a eu sem.Vivamus ut diam at turpis varius tempor. Aliquam dictum sagittis erat, vehicula adipiscing diam condimentum id.

Howdy, I'm in Section 2.

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur,

What up girl, this is Section 3.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.

I'm in Section 1.

Phasellus fringilla suscipit risus nec eleifend. Pellentesque eu quam sem, ac malesuada leo. Sed ut quam at magna porttitor hendrerit. Maecenas quis erat fringilla augue feugiat vulputate a eu sem.Vivamus ut diam at turpis varius tempor. Aliquam dictum sagittis erat, vehicula adipiscing diam condimentum id.

Howdy, I'm in Section 2.

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur,

What up girl, this is Section 3.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.

Widget Tab

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.

The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.

There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.

The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.

Accordion

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor.
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/timeline.html ================================================  Metro By xmfdsh
主题颜色:

控制台

  • 1/4/13 17:20

    Lorem Ipsum Dolor Ament

    Winter purslane courgette pumpkin quandong komatsuna fennel green bean cucumber watercress. Pea sprouts wattle seed rutabaga okra yarrow cress avocado grape radish bush tomato ricebean black-eyed pea maize eggplant. Cabbage lentil cucumber chickpea sorrel gram garbanzo plantain lotus root bok choy squash cress potato summer purslane salsify fennel horseradish dulse. Winter purslane garbanzo artichoke broccoli lentil corn okra silver beet celery quandong. Plantain salad beetroot bunya nuts black-eyed pea collard greens radish water spinach gourd chicory prairie turnip avocado sierra leone bologi.

    Read more
  • 5/10/13 10:30

    Hi There !

    Caulie dandelion maize lentil collard greens radish arugula sweet pepper water spinach kombu courgette lettuce. Celery coriander bitterleaf epazote radicchio shallot winter purslane collard greens spring onion squash lentil. Artichoke salad bamboo shoot black-eyed pea brussels sprout garlic kohlrabi.

  • 3/10/13 02:16

    Do The Best Work.

    Parsnip lotus root celery yarrow seakale tomato collard greens tigernut epazote ricebean melon tomatillo soybean chicory broccoli beet greens peanut salad. Lotus root burdock bell pepper chickweed shallot groundnut pea sprouts welsh onion wattle seed pea salsify turnip scallion peanut arugula bamboo shoot onion swiss chard. Avocado tomato peanut soko amaranth grape fennel chickweed mung bean soybean endive squash beet greens carrot chicory green bean. Tigernut dandelion sea lettuce garlic daikon courgette celery maize parsley komatsuna black-eyed pea bell pepper aubergine cauliflower zucchini. Quandong pea chickweed tomatillo quandong cauliflower spinach water spinach.

    Read more
  • 6/11/13 09:46

    Might is Right

    Peanut gourd nori welsh onion rock melon mustard jícama. Desert raisin amaranth kombu aubergine kale seakale brussels sprout pea. Black-eyed pea celtuce bamboo shoot salad kohlrabi leek squash prairie turnip catsear rock melon chard taro broccoli turnip greens. Fennel quandong potato watercress ricebean swiss chard garbanzo. Endive daikon brussels sprout lotus root silver beet epazote melon shallot.

    Read more
  • 7/05/13 04:30

    Congratulations You did it.

    Parsley amaranth tigernut silver beet maize fennel spinach. Ricebean black-eyed pea maize scallion green bean spinach cabbage jícama bell pepper carrot onion corn plantain garbanzo. Sierra leone bologi komatsuna celery peanut swiss chard silver beet squash dandelion maize chicory burdock tatsoi dulse radish wakame beetroot.

  • 2/12/13 10:01

    I am Proud of You Man.

    Caulie dandelion maize lentil collard greens radish arugula sweet pepper water spinach kombu courgette lettuce. Celery coriander bitterleaf epazote radicchio shallot winter purslane collard greens spring onion squash lentil. Artichoke salad bamboo shoot black-eyed pea brussels sprout garlic kohlrabi.

  • 2/15/13 04:56

    This Timeline is good

    Parsnip lotus root celery yarrow seakale tomato collard greens tigernut epazote ricebean melon tomatillo soybean chicory broccoli beet greens peanut salad. Lotus root burdock bell pepper chickweed shallot groundnut pea sprouts welsh onion wattle seed pea salsify turnip scallion peanut arugula bamboo shoot onion swiss chard. Avocado tomato peanut soko amaranth grape fennel chickweed mung bean soybean endive squash beet greens carrot chicory green bean. Tigernut dandelion sea lettuce garlic daikon courgette celery maize parsley komatsuna black-eyed pea bell pepper aubergine cauliflower zucchini. Quandong pea chickweed tomatillo quandong cauliflower spinach water spinach.

    Read more
================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/tree_view.html ================================================  Metro By xmfdsh ================================================ FILE: src/main/webapp/WEB-INF/views/bsmode/html/typography.html ================================================  Metro By xmfdsh
主题颜色:

控制台

General

Headings

h1. Heading 1

h2. Heading 2

h3. Heading 3

h4. Heading 4

h5. Heading 5
h6. Heading 6

Texts

Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

Etiam porta sem malesuada magna mollis euismod.

Donec ullamcorper nulla non metus auctor fringilla.

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.

Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

Sample Text

Sample text with lead body

Lead body. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur bibendum ornare dolor, quis ullamcorper ligula sodales at. Nulla tellus elit, varius non commodo eget, mattis vel eros. In sed ornare nulla.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur bibendum ornare dolor, quis ullamcorper ligula sodales at. Nulla tellus elit, varius non commodo eget, mattis vel eros. In sed ornare nulla.

Sample text

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur bibendum ornare dolor, quis ullamcorper ligula sodales at. Nulla tellus elit, varius non commodo eget, mattis vel eros. In sed ornare nulla.

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula ut id elit.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec sed odio dui.

Address

Vector Lab, Inc.
Dreamland Ave, Suite 73
AU, PC 1361
P: (123) 456-7891
Full Name
first.last@email.com

Some more text here

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula ut id elit.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec sed odio dui.

Blockquotes

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante. Duis mollis, est non commodo luctus, nisi erat porttitor ligula integer posuere erat a ante.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous Source Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

Someone famous Source Title

Description Lists

Description lists
A description list is perfect for defining terms. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod.
Euismod
Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
Donec id elit non mi porta gravida at eget metus.
Malesuada porta
Etiam porta sem malesuada magna mollis euismod.
Jhon Doe
Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod.

Horizontal Description Lists

Description lists
A description list is perfect for defining terms.
Euismod
Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
Donec id elit non mi porta gravida at eget metus.
Malesuada porta
Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod.
Description lists
A description list is perfect for defining terms. A description list is perfect for defining terms. A description list is perfect for defining terms. A description list is perfect for defining terms.
Euismod
Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
Donec id elit non mi porta gravida at eget metus.
Malesuada porta
Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod.

Ordered Lists

  1. Lorem ipsum dolor sit amet
  2. Consectetur adipiscing elit
  3. Integer molestie lorem at massa
  4. Facilisis in pretium nisl aliquet
  5. Nulla volutpat aliquam velit
  6. Facilisis in pretium nisl aliquet
  7. Faucibus porta lacus fringilla vel
  8. Aenean sit amet erat nunc
  9. Eget porttitor lorem
  10. Lorem ipsum dolor sit amet
  11. Consectetur adipiscing elit
  12. Integer molestie lorem at massa

Unordered Lists

  • Lorem ipsum dolor sit amet
  • Consectetur adipiscing elit
  • Lorem ipsum dolor sit amet
  • Integer molestie lorem at massa
  • Lorem ipsum dolor sit amet
  • Facilisis in pretium nisl aliquet
  • Nulla volutpat aliquam velit
    • Phasellus iaculis neque
    • Purus sodales ultricies
    • Vestibulum laoreet porttitor sem
    • Ac tristique libero volutpat at
  • Faucibus porta lacus fringilla vel
  • Aenean sit amet erat nunc
  • Eget porttitor lorem

Unstyled Lists

  • Lorem ipsum dolor sit amet
  • Consectetur adipiscing elit
  • Integer molestie lorem at massa
  • Facilisis in pretium nisl aliquet
  • Nulla volutpat aliquam velit
    • Phasellus iaculis neque
    • Purus sodales ultricies
    • Vestibulum laoreet porttitor sem
    • Ac tristique libero volutpat at
  • Faucibus porta lacus fringilla vel
  • Aenean sit amet erat nunc
  • Eget porttitor lorem
  • Aenean sit amet erat nunc
  • Lorem ipsum dolor sit amet

Letter List

  • Lorem ipsum dolor sit amet
  • Consectetur adipiscing elit
  • Integer molestie lorem at massa
  • Facilisis in pretium nisl aliquet
  • Nulla volutpat aliquam velit
    • Phasellus iaculis neque
    • Purus sodales ultricies
    • Vestibulum laoreet porttitor sem
    • Ac tristique libero volutpat at
  • Faucibus porta lacus fringilla vel
  • Aenean sit amet erat nunc
  • Eget porttitor lorem
  • Aenean sit amet erat nunc
  • Lorem ipsum dolor sit amet

Roman List

  • Lorem ipsum dolor sit amet
  • Consectetur adipiscing elit
  • Integer molestie lorem at massa
  • Facilisis in pretium nisl aliquet
  • Nulla volutpat aliquam velit
    • Phasellus iaculis neque
    • Purus sodales ultricies
    • Vestibulum laoreet porttitor sem
    • Ac tristique libero volutpat at
  • Faucibus porta lacus fringilla vel
  • Aenean sit amet erat nunc
  • Eget porttitor lorem
  • Aenean sit amet erat nunc
  • Lorem ipsum dolor sit amet

Iconic Lists

  • Lorem ipsum dolor sit amet
  • Consectetur adipiscing elit
  • Integer molestie lorem at massa
  • Facilisis in pretium nisl aliquet
  • Nulla volutpat aliquam velit
    • Phasellus iaculis neque
    • Purus sodales ultricies
    • Vestibulum laoreet porttitor sem
    • Ac tristique libero volutpat at
  • Faucibus porta lacus fringilla vel
  • Aenean sit amet erat nunc
  • Eget porttitor lorem
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/MoniNodeAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/MoniNodeInfo.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/MoniNodeList.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 传感器管理
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/pestMoniNode.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 监测站管理
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/pestMoniNodeEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
选择
选择
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/MoniNode/pestMoniSearch.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
生成图表
================================================ FILE: src/main/webapp/WEB-INF/views/eumode/inc.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> /easyui.css" type="text/css"> ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/index.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 华南农业大学-大数据工程中心

    系统介绍

    欢迎您访问华南农业大学大数据工程中心管理系统。
    华南农业大学-大数据工程中心
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/login.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 用户登录
    用户名:
    密  码:
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/category.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 知识库栏目管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/categoryAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    栏目名称
    栏目描述
    上级栏目
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/categoryEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    名称
    所属类别
    备注
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/manual.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 知识管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/manualAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    题目
    所属类别
    添加关键字 确定
    关键字列表
    发布形式
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/manual/manualDetail.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
    标题 ${manualContent.title}
    所属栏目 ${categoryList}
    关键字 ${keywordList}
    附件
    ${manualContent.content}
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/category.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 新闻管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/categoryAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    类型
    栏目名称
    栏目描述
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/categoryEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    类型
    栏目名称
    栏目描述
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/news.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 新闻管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/newsAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    新闻标题
    所属栏目
    上传附件
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/newsDetail.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    ${news.title}
    发布者:${news.author } 发布时间:${news.publishDate } 所属栏目:${category.categoryName }
    附件
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/news/newsEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    新闻标题
    所属类别
    已有附件
    上传附件
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestData/pestdata.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 虫害数据
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestData/pestdataAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestData/pestdataEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编码 名称
    所属类别 排序
    状态
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestData/pestdataSearch.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    生成图表
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestImg/ImgInfo.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestImg/pestImg.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 虫害数据
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestImg/pestImgAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestImg/pestImgEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编码 名称
    所属类别 排序
    状态
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/pestImg/pestImgSearch.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    生成图表
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sensor/sensorSearch.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    生成图表
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sensor/sensordata.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 虫害数据
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sensor/sensordataAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sensor/sensordataEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编码 名称
    所属类别 排序
    状态
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/station/organizationEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    部门编号 部门名称
    排序 菜单图标
    地址
    上级资源 清空
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/station/station.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 资源管理 ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/station/stationAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编号 站点名称
    类型
    地址
    上级部门 清空
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/dictionary.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 资源管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/dictionaryAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编码 名称
    所属类别 排序
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/dictionaryEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编码 名称
    所属类别 排序
    状态
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/organization.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 资源管理 ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/organizationAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    编号 部门名称
    排序 菜单图标
    地址
    上级部门 清空
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/organizationEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    部门编号 部门名称
    排序 菜单图标
    地址
    上级资源 清空
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/resource.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 资源管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/resourceAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    资源名称 资源类型
    资源路径 排序
    菜单图标 状态
    上级资源 清空
    备注
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/resourceEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    资源名称 资源类型
    资源路径 排序
    菜单图标 状态
    上级资源 清空
    备注
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/role.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 角色管理
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/roleAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    角色名称
    排序
    备注
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/roleEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    角色名称
    是否为默认
    备注
    ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/roleGrant.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>




      ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/user.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 用户管理
      ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/userAdd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
      登录名 姓名
      密码 性别
      年龄 专长
      职称 是否展示
      部门 角色
      联系电话
      专家描述
      ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/userEdit.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
      密码不修改请留空。
      登录名 姓名
      密码 性别
      年龄 专长
      职称 是否展示
      部门 角色
      联系电话
      专家描述
      ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/userEditPwd.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
      登录已超时,请重新登录.
      登录名 ${sessionInfo.name}
      原密码
      新密码
      重复密码
      ================================================ FILE: src/main/webapp/WEB-INF/views/eumode/sys/userManual.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>




        ================================================ FILE: src/main/webapp/WEB-INF/views/front/applycommpany.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 农企信息列表 > 申请
        功能导航

        Function

        发布信息

        公司名称

        公司地址

        企业官网

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/applycommpany.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 农技推广综合管理平台
        您现在所在的位置:首页 > 农企信息列表 > 申请
        申请信息

        企业名称

        企业官网

        企业介绍

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/applycountryside.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 下乡管理列表 > 申请
        功能导航

        Function

        申请信息

        下乡目的地

        出发日期

        返程日期

        紧急联系人

        紧急联系人电话

        人员ID 姓名 联系方式 操作
        5 张五 +1 718 000000
        6 李四 +1 718 000000
        7 杨七 +1 718 000000

        下乡事由

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/applycountryside.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 农技推广综合管理平台
        您现在所在的位置:首页 > 下乡管理列表 > 申请
        申请信息

        下乡目的地

        开始日期

        结束日期

        联系人

        联系人电话

        下乡事由

        下乡人员

        人员ID 姓名 联系方式 操作
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/article.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        农情图片展示

        Picture column

        MORE

        4月28日下午,我校与广州市南沙区榄核镇政府签订了战略合作框架协议,双方将致力于研究和挖掘非物质文化遗产香云纱的文化价值,将香云纱品牌打造成南沙新区的文化新名片。签订仪式在榄核镇羊晚星海艺术基地举行。

        根据合作框架协议,双方还将在人才培养、现代服装特色产业、大学生实习实训就业“双基地”、旅游、科技等五方面展开合作。

        据悉,我校在榄核镇跟进香云纱生产已有八年,并于2015年11月27日成立了香云纱研发中心和体验馆。针对区域特色产业发展和榄核文创小镇建设需求,香云纱研发中心在挖掘香云纱的文化价值,研究开发香云纱服饰产品,打造国际名流首选的“私人定制”的同时,还进一步促进科教结合与富农增收,以推动我校教育事业发展与榄核镇经济社会发展。据了解,我校下一步还将开展香云纱文化产业博士后专项研究。

        经过4个月的紧张创作,香云纱研发成果——“香云故里”时尚发布会在当天的签约仪式后如期举行。来自我校艺术学院的26名模特,展示了香云纱时尚元素与传统工艺完美结合的独特魅力,为观众带来了一场视觉盛宴。

        期间,广东电视台、羊城晚报、腾讯大粤网等媒体采访了香云纱时装设计大师、我校艺术学院院长金憓。据她介绍,本次时装发布会的主题是“向传统致敬”,分为“水生阶梯(礼服)”、“沉香素兮(日常装)”、“疍色雅韵(正装、旗袍、小礼裙)”和“香云故里(休闲装)”四大设计板块。除了衣服外,还有围巾、包包、鞋子、银饰等一系列配饰。

        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/article.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        ${categoryType.text}
        ${article.title}
        ${article.publishDate}    ${article.author}    阅读量:${article.readCount}
        附件:
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/articlelist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 新闻列表
        • 开始日期:
        • 结束日期:
        功能导航

        Function

        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/articlelist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > ${categoryType.text}
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/askquestionpage.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 在线交流 > 提问
        功能导航

        Function

        标题

        请对问题进行补充或者上传问题中涉及的图片

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/askquestionpage.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 农技推广综合管理平台
        您现在所在的位置:首页 > 在线交流 > 提问
        问题分类
        指定专家
        标题

        请对问题进行补充或者上传问题中涉及的图片

        上传附件
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/commpanylist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 农企信息列表
        待审核农企信息
        • 常德恒凤渔业有限公司

          地址: 湖南省常德市鼎城区蒿子港镇长安村八组
          成立日期: 2016/5/31
          状态:未审核

        • 建德市大同镇锦惠农庄

          主营: 热食类食品制售(小型餐饮)(依法须经批准的项目,经相关部门批准后方可开展经营活动)
          成立日期: 2016/6/16
          状态:未审核

        功能导航

        Function

        • 常德恒凤渔业有限公司

          地址: 湖南省常德市鼎城区蒿子港镇长安村八组
          网址: www.2333.com

        • 建德市大同镇锦惠农庄

          主营: 热食类食品制售(小型餐饮)(依法须经批准的项目,经相关部门批准后方可开展经营活动)
          网址: www.23112.com

        • 兰溪市野狐山寨休闲农庄

          主营: 饭馆;中餐类制售;农家乐;不含凉菜;不含裱花蛋糕;不含生食海产品
          网址: www.atkd.com.cn

        • 诸暨市枫桥良禹农庄

          主营: 食品经营(具体经营项目以许可证或批准文件核定的为准) 养殖销售:淡水产
          网址: www.rerr3.com

        • 诸暨市岭北晋坤农庄

          主营: 食品经营(具体经营项目以许可证或批准文件核定的为准) 种植:蔬菜、水果
          网址: www.2877.com

        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/commpanylist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 农企信息列表
        待审核农企信息
        • ${n.businessName}

          ${n.businessIntroduce}
          网址: ${n.businessSite}
          状态:${n.statusDesc}

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/countrysidelist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 下乡管理列表
        待审核下乡记录
        • 前往梅头村调研

          地址: 湖南省常德市鼎城区蒿子港镇长安村八组
          出发日期: 2016/9/20
          状态:未审核

        功能导航

        Function

        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/countrysidelist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 下乡管理
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/expertlist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 专家库
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/footer.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> ================================================ FILE: src/main/webapp/WEB-INF/views/front/forgetpassword.html ================================================ 忘记密码

        忘 记 密 码

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/header.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> ================================================ FILE: src/main/webapp/WEB-INF/views/front/inc-head.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 华南农业大学农业推广网 ================================================ FILE: src/main/webapp/WEB-INF/views/front/index.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        最新新闻

        News

        更多
        功能导航

        Function

        在线交流

        Communication

        更多
        • 【养猪】求救,家里的猪最近总是没食欲
          朱元璋御膳菜单:早膳:羊肉炒、猪肉炒黄菜、蒸猪蹄肚、两熟煎鲜鱼、香米饭、豆汤、泡茶.(话说早晨吃这么多荤的真没问题?)午膳:胡椒醋鲜虾、烧鹅、燌羊头蹄、鹅肉巴子、咸鼓芥末羊肚盘、蒜醋白血汤、五味蒸鸡、元汁羊骨头、糊辣醋腰子、蒸鲜鱼、羊肉水晶角儿… 显示全部
        • 【种菜】怎么种番茄
          开车久了,其实每个人都有了一些不好的习惯,我虽然说开车算稳,但是在加挡的时候还是会冲一下,这冲一下虽小,驾驶员自己一般感受不到,但是看到副驾驶的人身体会轻微的动一下,后来研究了一下,其实不冲很简单... 显示全部
        • 【种菜】花生喷药技巧
          上周,据美国科技网站 VentureBeat 报道,苹果公司准备招聘4位体育相关的 Siri 软件工程师。此举是为了解决各种球赛后,Siri 听到大量的 「F*ck, SH*t, Bitch」而无法还嘴的窘境(这句是吐槽)。总之一句话,苹果公司要在体育语音搜索中发力了。当然你不要... 显示全部
        农企信息

        Cooperative Company

        更多
        • 常德恒凤渔业有限公司

          地址: 湖南省常德市鼎城区蒿子港镇长安村八组
          网址: www.sf3.com

        • 建德市大同镇锦惠农庄

          主营: 热食类食品制售(小型餐饮)(依法须经批准的项目,经相关部门批准后方可开展经营活动)
          网址: www.kskd.com

        • 兰溪市野狐山寨休闲农庄

          主营: 饭馆;中餐类制售;农家乐;不含凉菜;不含裱花蛋糕;不含生食海产品
          网址: www.23ckkcom

        • 诸暨市枫桥良禹农庄

          主营: 食品经营(具体经营项目以许可证或批准文件核定的为准) 养殖销售:淡水产
          网址: www.dedsc.com

        • 诸暨市岭北晋坤农庄

          主营: 食品经营(具体经营项目以许可证或批准文件核定的为准) 种植:蔬菜、水果
          网址: www.kkiw.com

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/index.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        新闻动态

        News

        更多
        ${nl.shortTitle} ${nl.publishDate.toString().substring(0,10)}
        通知公告

        Information

        更多
        ${il.shortTitle} ${il.publishDate.toString().substring(0,10)}
        工作简报

        Report

        更多
        ${rl.shortTitle} ${rl.publishDate.toString().substring(0,10)}
        示范基地

        Base Construction

        更多
        ${bl.shortTitle} ${bl.publishDate.toString().substring(0,10)}
        专家库

        Expert

        更多
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/informationlist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 通知列表
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/informationlist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 通知列表
        • 开始日期:
        • 结束日期:
        • 所属类别:
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/knowledgedata.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 农技知识库
        • 【养猪】
          朱元璋御膳菜单:早膳:羊肉炒、猪肉炒黄菜、蒸猪蹄肚、两熟煎鲜鱼、香米饭、豆汤、泡茶.(话说早晨吃这么多荤的真没问题?)午膳:胡椒醋鲜虾、烧鹅、燌羊头蹄、鹅肉巴子、咸鼓芥末羊肚盘、蒜醋白血汤、五味蒸鸡、元汁羊骨头、糊辣醋腰子、蒸鲜鱼、羊肉水晶角儿… 显示全部
        • 【种菜】
          开车久了,其实每个人都有了一些不好的习惯,我虽然说开车算稳,但是在加挡的时候还是会冲一下,这冲一下虽小,驾驶员自己一般感受不到,但是看到副驾驶的人身体会轻微的动一下,后来研究了一下,其实不冲很简单... 显示全部
        • 【种菜】
          上周,据美国科技网站 VentureBeat 报道,苹果公司准备招聘4位体育相关的 Siri 软件工程师。此举是为了解决各种球赛后,Siri 听到大量的 「F*ck, SH*t, Bitch」而无法还嘴的窘境(这句是吐槽)。总之一句话,苹果公司要在体育语音搜索中发力了。当然你不要... 显示全部
        • 【养鱼】
          这个问题在《国家新型城镇化规划纲要》中就已经回答了。推行农业现代化的条件简单来看,一是土地自然条件,二是技术资金支持。这看起来很容易实现,但却还有一个问题,我国的农业人口过多,真正的农村人均耕地很少,远达不到推行集体规模经营的条件,平均每… 显示全部
        • 【种菜】
          这年底多出来的一秒对于我们人类来说几乎就是个概念,但是对于认死理的计算机来说有可能就是灾难。2012年6月底也多出了一秒,这多出来的一秒直接把Reddit和一些其他网站搞挂了。这是为什么呢?因为Unix time(POSIX time)是不支持leap second(即闰秒)的… 显示全部
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/knowledgedata.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 农技知识库
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/login.html ================================================ 系统

        系统

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/login.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 登陆系统
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/loginTTI.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 登陆物联网系统

        登陆物联网系统

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/login_old.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 登陆系统

        登录

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/loginvideo.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 登陆视频会议系统

        登陆视频会议系统

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/navigation.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> ================================================ FILE: src/main/webapp/WEB-INF/views/front/performancelist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 绩效管理
        功能导航

        Function

        梅头乡图片

        服务天数: 14天

        详情
        上九里图片

        服务天数: 6天

        详情
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/performancelist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 绩效管理
        梅头乡图片

        服务天数: 14天

        详情
        上九里图片

        服务天数: 6天

        详情
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/performancemanage.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 绩效管理 > 梅头乡
        • 下乡目的地:梅头乡
        • 出发日期:2016-05-01
        • 返程日期:2016-05-20
        • 服务天数:12天
        功能导航

        Function

        资源列表
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/performancemanage.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 绩效管理 > 梅头乡
        • 下乡目的地:梅头乡
        • 出发日期:2016-05-01
        • 返程日期:2016-05-20
        • 服务天数:12天
        资源列表
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalcenter.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 个人中心
        功能导航

        Function

        账号信息

        账号名

        密   码

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalcenter.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 个人中心
        .

        您还未登录,请先登录。

        账号信息

        账号名

        密   码

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalnavigation.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalnoticelist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 查看个人问答
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalquestionlist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 查看个人问答
        功能导航

        Function

        • 【养猪】求救,家里的猪最近总是没食欲
          朱元璋御膳菜单:早膳:羊肉炒、猪肉炒黄菜、蒸猪蹄肚、两熟煎鲜鱼、香米饭、豆汤、泡茶.(话说早晨吃这么多荤的真没问题?)午膳:胡椒醋鲜虾、烧鹅、燌羊头蹄、鹅肉巴子、咸鼓芥末羊肚盘、蒜醋白血汤、五味蒸鸡、元汁羊骨头、糊辣醋腰子、蒸鲜鱼、羊肉水晶角儿… 显示全部
        • 【种菜】怎么种番茄
          开车久了,其实每个人都有了一些不好的习惯,我虽然说开车算稳,但是在加挡的时候还是会冲一下,这冲一下虽小,驾驶员自己一般感受不到,但是看到副驾驶的人身体会轻微的动一下,后来研究了一下,其实不冲很简单... 显示全部
        • 【种菜】花生喷药技巧
          上周,据美国科技网站 VentureBeat 报道,苹果公司准备招聘4位体育相关的 Siri 软件工程师。此举是为了解决各种球赛后,Siri 听到大量的 「F*ck, SH*t, Bitch」而无法还嘴的窘境(这句是吐槽)。总之一句话,苹果公司要在体育语音搜索中发力了。当然你不要... 显示全部
        • 【养鱼】草鱼育苗
          这个问题在《国家新型城镇化规划纲要》中就已经回答了。推行农业现代化的条件简单来看,一是土地自然条件,二是技术资金支持。这看起来很容易实现,但却还有一个问题,我国的农业人口过多,真正的农村人均耕地很少,远达不到推行集体规模经营的条件,平均每… 显示全部
        • 【种菜】花生喷药技巧
          这年底多出来的一秒对于我们人类来说几乎就是个概念,但是对于认死理的计算机来说有可能就是灾难。2012年6月底也多出了一秒,这多出来的一秒直接把Reddit和一些其他网站搞挂了。这是为什么呢?因为Unix time(POSIX time)是不支持leap second(即闰秒)的… 显示全部
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/personalquestionlist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 查看个人问答
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/questionlist.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 在线交流
        功能导航

        Function

        • 【养猪】求救,家里的猪最近总是没食欲
          朱元璋御膳菜单:早膳:羊肉炒、猪肉炒黄菜、蒸猪蹄肚、两熟煎鲜鱼、香米饭、豆汤、泡茶.(话说早晨吃这么多荤的真没问题?)午膳:胡椒醋鲜虾、烧鹅、燌羊头蹄、鹅肉巴子、咸鼓芥末羊肚盘、蒜醋白血汤、五味蒸鸡、元汁羊骨头、糊辣醋腰子、蒸鲜鱼、羊肉水晶角儿… 显示全部
        • 【种菜】怎么种番茄
          开车久了,其实每个人都有了一些不好的习惯,我虽然说开车算稳,但是在加挡的时候还是会冲一下,这冲一下虽小,驾驶员自己一般感受不到,但是看到副驾驶的人身体会轻微的动一下,后来研究了一下,其实不冲很简单... 显示全部
        • 【种菜】花生喷药技巧
          上周,据美国科技网站 VentureBeat 报道,苹果公司准备招聘4位体育相关的 Siri 软件工程师。此举是为了解决各种球赛后,Siri 听到大量的 「F*ck, SH*t, Bitch」而无法还嘴的窘境(这句是吐槽)。总之一句话,苹果公司要在体育语音搜索中发力了。当然你不要... 显示全部
        • 【养鱼】草鱼育苗
          这个问题在《国家新型城镇化规划纲要》中就已经回答了。推行农业现代化的条件简单来看,一是土地自然条件,二是技术资金支持。这看起来很容易实现,但却还有一个问题,我国的农业人口过多,真正的农村人均耕地很少,远达不到推行集体规模经营的条件,平均每… 显示全部
        • 【种菜】花生喷药技巧
          这年底多出来的一秒对于我们人类来说几乎就是个概念,但是对于认死理的计算机来说有可能就是灾难。2012年6月底也多出了一秒,这多出来的一秒直接把Reddit和一些其他网站搞挂了。这是为什么呢?因为Unix time(POSIX time)是不支持leap second(即闰秒)的… 显示全部
        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/questionlist.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 在线交流
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/questionpage.html ================================================ 农技推广综合管理平台
        当前登录用户:超级门户
        您现在所在的位置:首页 > 在线交流
        功能导航

        Function

        【养猪】求救,家里的猪最近总是没食欲
        朱元璋御膳菜单: 早膳:羊肉炒、猪肉炒黄菜、蒸猪蹄肚、两熟煎鲜鱼、香米饭、豆汤、泡茶。(话说早晨吃这么多荤的真没问题?) 午膳:胡椒醋鲜虾、烧鹅、燌羊头蹄、鹅肉巴子、咸鼓芥末羊肚盘、蒜醋白血汤、五味蒸鸡、元汁羊骨头、糊辣醋腰子、蒸鲜鱼、羊肉水晶角儿、椒末羊肉、香米饭、蒜酪、三鲜汤、豆汤、泡茶。 万历皇帝御膳菜单: 米面食:八宝馒头、攒馅馒头、蒸卷、海清卷子、蝴蝶卷子;大蒸饼、椒盐饼、夹糖饼、芝麻烧饼、奶皮烧饼、薄脆饼、灵芝饼;枣糕、白馓子、糖馓子、芝麻象眼减煠;鸡蛋面、白切面、水晶饭。 肉食:烧天鹅(天鹅……)、烧鹅、清蒸鸡、暴腌鸡、川炒鸡、烧肉、白煮肉、清蒸肉、猪屑骨、荔枝猪肉、鲟鳇鲊、蒸鱼、猪耳脆、煮鲜肫肝、玉丝肚肺、蒸羊、燌羊。 汤品:牡丹头汤、鸡脆饼汤、猪肉龙松汤、玛瑙糕子汤、锦丝糕子汤、木樨糕子汤、酸甜汤、葡萄汤、蜜汤、牛奶。 【谢评论区 @杨海晨 提醒,煮鲜肫肝并不是猪内脏,我一个天天吃鸭肫的竟然忘了没有猪肫这种说法……】 永乐二年郊祀结束后的庆成宴菜单: 上卓:按酒五般。果子五般。茶食五般。烧煠五般。汤三品。双下馒头。马肉饭。酒五钟。 中卓:按酒四般。果子四般。汤三品。双下馒头。马猪羊肉饭(神一般的荤菜三拼?)。酒五钟。 随驾将军:按酒一般。粉汤。双下馒头猪肉饭。酒一钟。
        • 为什么没有图片的文章,主页有乱码?

        • 楼主你好,非常赞同你的观点。

        1 2
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/questionpage.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        您现在所在的位置:首页 > 在线交流
        ${question.title}
        ${question.content}
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/register.html ================================================ 免费注册

        免 费 注 册

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/register.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 免费注册

        免 费 注 册

        ================================================ FILE: src/main/webapp/WEB-INF/views/front/showvideopage.html ================================================ Youku Universal Player
        ================================================ FILE: src/main/webapp/WEB-INF/views/front/wpthemedemobar.jsp ================================================ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %>
        当前:未登录
        ================================================ FILE: src/main/webapp/WEB-INF/views/inc.jsp ================================================ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> /easyui.css" type="text/css"> ================================================ FILE: src/main/webapp/WEB-INF/views/mogoList.jsp ================================================ <%-- Created by IntelliJ IDEA. User: DuLida Date: 2016/10/20 Time: 16:12 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> MongoList

        Hello,MongoDB

        ================================================ FILE: src/main/webapp/WEB-INF/views/qq.jsp ================================================ <%-- Created by IntelliJ IDEA. User: stevenfen Date: 2016/12/19 Time: 23:43 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> QQ登录跳转

        AccessToken:--ExpireIn

        OpenID:

        ================================================ FILE: src/main/webapp/WEB-INF/web.xml ================================================ springServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/spring-*.xml 1 springServlet / characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /* org.springframework.web.util.IntrospectorCleanupListener default *.css default *.html default *.js default *.json default *.gif default *.png default *.jpeg default *.jpg default *.ico default *.doc default *.xls default *.docx default *.xlsx default *.txt default *.swf default *.mp4 default *.apk default *.otf default *.woff default *.ttf default *.svg default *.eot 60 /index.jsp 404 /error/404.jsp 500 /error/500.jsp ================================================ FILE: src/main/webapp/assets/bootstrap/css/bootstrap-fileupload.css ================================================ .btn-file { position: relative; overflow: hidden; vertical-align: middle; } .btn-file > input { position: absolute; top: 0; right: 0; margin: 0; font-size: 23px; cursor: pointer; opacity: 0; filter: alpha(opacity=0); transform: translate(-300px, 0) scale(4); direction: ltr; } .fileupload { margin-bottom: 9px; } .fileupload .uneditable-input { display: inline-block; margin-bottom: 0; vertical-align: middle; cursor: text; } .fileupload .thumbnail { display: inline-block; margin-bottom: 5px; overflow: hidden; text-align: center; vertical-align: middle; } .fileupload .thumbnail > img { display: inline-block; max-height: 100%; vertical-align: middle; } .fileupload .btn { vertical-align: middle; } .fileupload-exists .fileupload-new, .fileupload-new .fileupload-exists { display: none; } .fileupload-inline .fileupload-controls { display: inline; } .fileupload-new .input-append .btn-file { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .thumbnail-borderless .thumbnail { padding: 0; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .fileupload-new.thumbnail-borderless .thumbnail { border: 1px solid #ddd; } .control-group.warning .fileupload .uneditable-input { color: #a47e3c; border-color: #a47e3c; } .control-group.warning .fileupload .fileupload-preview { color: #a47e3c; } .control-group.warning .fileupload .thumbnail { border-color: #a47e3c; } .control-group.error .fileupload .uneditable-input { color: #b94a48; border-color: #b94a48; } .control-group.error .fileupload .fileupload-preview { color: #b94a48; } .control-group.error .fileupload .thumbnail { border-color: #b94a48; } .control-group.success .fileupload .uneditable-input { color: #468847; border-color: #468847; } .control-group.success .fileupload .fileupload-preview { color: #468847; } .control-group.success .fileupload .thumbnail { border-color: #468847; } ================================================ FILE: src/main/webapp/assets/bootstrap/js/bootstrap-fileupload.js ================================================ /* =========================================================== * bootstrap-fileupload.js j2 * http://jasny.github.com/bootstrap/javascript.html#fileupload * =========================================================== * Copyright 2012 Jasny BV, Netherlands. * * 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"; // jshint ;_ /* FILEUPLOAD PUBLIC CLASS DEFINITION * ================================= */ var Fileupload = function (element, options) { this.$element = $(element) this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file") this.$input = this.$element.find(':file') if (this.$input.length === 0) return this.name = this.$input.attr('name') || options.name this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]') if (this.$hidden.length === 0) { this.$hidden = $('') this.$element.prepend(this.$hidden) } this.$preview = this.$element.find('.fileupload-preview') var height = this.$preview.css('height') if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height) this.original = { 'exists': this.$element.hasClass('fileupload-exists'), 'preview': this.$preview.html(), 'hiddenVal': this.$hidden.val() } this.$remove = this.$element.find('[data-dismiss="fileupload"]') this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this)) this.listen() } Fileupload.prototype = { listen: function() { this.$input.on('change.fileupload', $.proxy(this.change, this)) $(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this)) if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this)) }, change: function(e, invoked) { var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null) if (invoked === 'clear') return if (!file) { this.clear() return } this.$hidden.val('') this.$hidden.attr('name', '') this.$input.attr('name', this.name) if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match('\\.(gif|png|jpe?g)$')) && typeof FileReader !== "undefined") { var reader = new FileReader() var preview = this.$preview var element = this.$element reader.onload = function(e) { preview.html('') element.addClass('fileupload-exists').removeClass('fileupload-new') } reader.readAsDataURL(file) } else { this.$preview.text(file.name) this.$element.addClass('fileupload-exists').removeClass('fileupload-new') } }, clear: function(e) { this.$hidden.val('') this.$hidden.attr('name', this.name) this.$input.attr('name', '') //ie8+ doesn't support changing the value of input with type=file so clone instead if($.browser.msie){ var inputClone = this.$input.clone(true); this.$input.after(inputClone); this.$input.remove(); this.$input = inputClone; }else{ this.$input.val('') } this.$preview.html('') this.$element.addClass('fileupload-new').removeClass('fileupload-exists') if (e) { this.$input.trigger('change', [ 'clear' ]) e.preventDefault() } }, reset: function(e) { this.clear() this.$hidden.val(this.original.hiddenVal) this.$preview.html(this.original.preview) if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new') else this.$element.addClass('fileupload-new').removeClass('fileupload-exists') }, trigger: function(e) { this.$input.trigger('click') e.preventDefault() } } /* FILEUPLOAD PLUGIN DEFINITION * =========================== */ $.fn.fileupload = function (options) { return this.each(function () { var $this = $(this) , data = $this.data('fileupload') if (!data) $this.data('fileupload', (data = new Fileupload(this, options))) if (typeof options == 'string') data[options]() }) } $.fn.fileupload.Constructor = Fileupload /* FILEUPLOAD DATA-API * ================== */ $(function () { $('body').on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) { var $this = $(this) if ($this.data('fileupload')) return $this.fileupload($this.data()) var $target = $(e.target).is('[data-dismiss=fileupload],[data-trigger=fileupload]') ? $(e.target) : $(e.target).parents('[data-dismiss=fileupload],[data-trigger=fileupload]').first() if ($target.length > 0) { $target.trigger('click.fileupload') e.preventDefault() } }) }) }(window.jQuery); ================================================ FILE: src/main/webapp/assets/bootstrap-colorpicker/css/colorpicker.css ================================================ /* Colorpicker for Bootstrap Copyright 2012 Stefan Petre Licensed under the Apache License v2.0 http://www.apache.org/licenses/LICENSE-2.0 */ .colorpicker-saturation { width: 100px; height: 100px; background-image: url(../img/saturation.png); cursor: crosshair; float: left; } .colorpicker-saturation i { display: block; height: 5px; width: 5px; border: 1px solid #000; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; position: absolute; top: 0; left: 0; margin: -4px 0 0 -4px; } .colorpicker-saturation i b { display: block; height: 5px; width: 5px; border: 1px solid #fff; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .colorpicker-hue, .colorpicker-alpha { width: 15px; height: 100px; float: left; cursor: row-resize; margin-left: 4px; margin-bottom: 4px; } .colorpicker-hue i, .colorpicker-alpha i { display: block; height: 1px; background: #000; border-top: 1px solid #fff; position: absolute; top: 0; left: 0; width: 100%; margin-top: -1px; } .colorpicker-hue { background-image: url(../img/hue.png); } .colorpicker-alpha { background-image: url(../img/alpha.png); display: none; } .colorpicker { *zoom: 1; top: 0; left: 0; padding: 4px; min-width: 120px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .colorpicker:before, .colorpicker:after { display: table; content: ""; } .colorpicker:after { clear: both; } .colorpicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .colorpicker:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .colorpicker div { position: relative; } .colorpicker.alpha { min-width: 140px; } .colorpicker.alpha .colorpicker-alpha { display: block; } .colorpicker-color { height: 10px; margin-top: 5px; clear: both; background-image: url(../img/alpha.png); background-position: 0 100%; } .colorpicker-color div { height: 10px; } .input-append.color .add-on i, .input-prepend.color .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; } ================================================ FILE: src/main/webapp/assets/bootstrap-colorpicker/js/bootstrap-colorpicker.js ================================================ /* ========================================================= * bootstrap-colorpicker.js * http://www.eyecon.ro/bootstrap-colorpicker * ========================================================= * Copyright 2012 Stefan Petre * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================= */ !function( $ ) { // Color object var Color = function(val) { this.value = { h: 1, s: 1, b: 1, a: 1 }; this.setColor(val); }; Color.prototype = { constructor: Color, //parse a string to HSB setColor: function(val){ val = val.toLowerCase(); var that = this; $.each( CPGlobal.stringParsers, function( i, parser ) { var match = parser.re.exec( val ), values = match && parser.parse( match ), space = parser.space||'rgba'; if ( values ) { if (space === 'hsla') { that.value = CPGlobal.RGBtoHSB.apply(null, CPGlobal.HSLtoRGB.apply(null, values)); } else { that.value = CPGlobal.RGBtoHSB.apply(null, values); } return false; } }); }, setHue: function(h) { this.value.h = 1- h; }, setSaturation: function(s) { this.value.s = s; }, setLightness: function(b) { this.value.b = 1- b; }, setAlpha: function(a) { this.value.a = parseInt((1 - a)*100, 10)/100; }, // HSBtoRGB from RaphaelJS // https://github.com/DmitryBaranovskiy/raphael/ toRGB: function(h, s, b, a) { if (!h) { h = this.value.h; s = this.value.s; b = this.value.b; } h *= 360; var R, G, B, X, C; h = (h % 360) / 60; C = b * s; X = C * (1 - Math.abs(h % 2 - 1)); R = G = B = b - C; h = ~~h; R += [C, X, 0, 0, X, C][h]; G += [X, C, C, X, 0, 0][h]; B += [0, 0, X, C, C, X][h]; return { r: Math.round(R*255), g: Math.round(G*255), b: Math.round(B*255), a: a||this.value.a }; }, toHex: function(h, s, b, a){ var rgb = this.toRGB(h, s, b, a); return '#'+((1 << 24) | (parseInt(rgb.r) << 16) | (parseInt(rgb.g) << 8) | parseInt(rgb.b)).toString(16).substr(1); }, toHSL: function(h, s, b, a){ if (!h) { h = this.value.h; s = this.value.s; b = this.value.b; } var H = h, L = (2 - s) * b, S = s * b; if (L > 0 && L <= 1) { S /= L; } else { S /= 2 - L; } L /= 2; if (S > 1) { S = 1; } return { h: H, s: S, l: L, a: a||this.value.a }; } }; // Picker object var Colorpicker = function(element, options){ this.element = $(element); var format = options.format||this.element.data('color-format')||'hex'; this.format = CPGlobal.translateFormats[format]; this.isInput = this.element.is('input'); this.component = this.element.is('.color') ? this.element.find('.add-on') : false; this.picker = $(CPGlobal.template) .appendTo('body') .on('mousedown', $.proxy(this.mousedown, this)); if (this.isInput) { this.element.on({ 'focus': $.proxy(this.show, this), 'keyup': $.proxy(this.update, this) }); } else if (this.component){ this.component.on({ 'click': $.proxy(this.show, this) }); } else { this.element.on({ 'click': $.proxy(this.show, this) }); } if (format === 'rgba' || format === 'hsla') { this.picker.addClass('alpha'); this.alpha = this.picker.find('.colorpicker-alpha')[0].style; } if (this.component){ this.picker.find('.colorpicker-color').hide(); this.preview = this.element.find('i')[0].style; } else { this.preview = this.picker.find('div:last')[0].style; } this.base = this.picker.find('div:first')[0].style; this.update(); }; Colorpicker.prototype = { constructor: Colorpicker, show: function(e) { this.picker.show(); this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); this.place(); $(window).on('resize', $.proxy(this.place, this)); if (!this.isInput) { if (e) { e.stopPropagation(); e.preventDefault(); } } $(document).on({ 'mousedown': $.proxy(this.hide, this) }); this.element.trigger({ type: 'show', color: this.color }); }, update: function(){ this.color = new Color(this.isInput ? this.element.prop('value') : this.element.data('color')); this.picker.find('i') .eq(0).css({left: this.color.value.s*100, top: 100 - this.color.value.b*100}).end() .eq(1).css('top', 100 * (1 - this.color.value.h)).end() .eq(2).css('top', 100 * (1 - this.color.value.a)); this.previewColor(); }, setValue: function(newColor) { this.color = new Color(newColor); this.picker.find('i') .eq(0).css({left: this.color.value.s*100, top: 100 - this.color.value.b*100}).end() .eq(1).css('top', 100 * (1 - this.color.value.h)).end() .eq(2).css('top', 100 * (1 - this.color.value.a)); this.previewColor(); this.element.trigger({ type: 'changeColor', color: this.color }); }, hide: function(){ this.picker.hide(); $(window).off('resize', this.place); if (!this.isInput) { $(document).off({ 'mousedown': this.hide }); if (this.component){ this.element.find('input').prop('value', this.format.call(this)); } this.element.data('color', this.format.call(this)); } else { this.element.prop('value', this.format.call(this)); } this.element.trigger({ type: 'hide', color: this.color }); }, place: function(){ var offset = this.component ? this.component.offset() : this.element.offset(); this.picker.css({ top: offset.top + this.height, left: offset.left }); }, //preview color change previewColor: function(){ try { this.preview.backgroundColor = this.format.call(this); } catch(e) { this.preview.backgroundColor = this.color.toHex(); } //set the color for brightness/saturation slider this.base.backgroundColor = this.color.toHex(this.color.value.h, 1, 1, 1); //set te color for alpha slider if (this.alpha) { this.alpha.backgroundColor = this.color.toHex(); } }, pointer: null, slider: null, mousedown: function(e){ e.stopPropagation(); e.preventDefault(); var target = $(e.target); //detect the slider and set the limits and callbacks var zone = target.closest('div'); if (!zone.is('.colorpicker')) { if (zone.is('.colorpicker-saturation')) { this.slider = $.extend({}, CPGlobal.sliders.saturation); } else if (zone.is('.colorpicker-hue')) { this.slider = $.extend({}, CPGlobal.sliders.hue); } else if (zone.is('.colorpicker-alpha')) { this.slider = $.extend({}, CPGlobal.sliders.alpha); } else { return false; } var offset = zone.offset(); //reference to knob's style this.slider.knob = zone.find('i')[0].style; this.slider.left = e.pageX - offset.left; this.slider.top = e.pageY - offset.top; this.pointer = { left: e.pageX, top: e.pageY }; //trigger mousemove to move the knob to the current position $(document).on({ mousemove: $.proxy(this.mousemove, this), mouseup: $.proxy(this.mouseup, this) }).trigger('mousemove'); } return false; }, mousemove: function(e){ e.stopPropagation(); e.preventDefault(); var left = Math.max( 0, Math.min( this.slider.maxLeft, this.slider.left + ((e.pageX||this.pointer.left) - this.pointer.left) ) ); var top = Math.max( 0, Math.min( this.slider.maxTop, this.slider.top + ((e.pageY||this.pointer.top) - this.pointer.top) ) ); this.slider.knob.left = left + 'px'; this.slider.knob.top = top + 'px'; if (this.slider.callLeft) { this.color[this.slider.callLeft].call(this.color, left/100); } if (this.slider.callTop) { this.color[this.slider.callTop].call(this.color, top/100); } this.previewColor(); this.element.trigger({ type: 'changeColor', color: this.color }); return false; }, mouseup: function(e){ e.stopPropagation(); e.preventDefault(); $(document).off({ mousemove: this.mousemove, mouseup: this.mouseup }); return false; } } $.fn.colorpicker = function ( option ) { return this.each(function () { var $this = $(this), data = $this.data('colorpicker'), options = typeof option === 'object' && option; if (!data) { $this.data('colorpicker', (data = new Colorpicker(this, $.extend({}, $.fn.colorpicker.defaults,options)))); } if (typeof option === 'string') data[option](); }); }; $.fn.colorpicker.defaults = { }; $.fn.colorpicker.Constructor = Colorpicker; var CPGlobal = { // translate a format from Color object to a string translateFormats: { 'rgb': function(){ var rgb = this.color.toRGB(); return 'rgb('+rgb.r+','+rgb.g+','+rgb.b+')'; }, 'rgba': function(){ var rgb = this.color.toRGB(); return 'rgba('+rgb.r+','+rgb.g+','+rgb.b+','+rgb.a+')'; }, 'hsl': function(){ var hsl = this.color.toHSL(); return 'hsl('+Math.round(hsl.h*360)+','+Math.round(hsl.s*100)+'%,'+Math.round(hsl.l*100)+'%)'; }, 'hsla': function(){ var hsl = this.color.toHSL(); return 'hsla('+Math.round(hsl.h*360)+','+Math.round(hsl.s*100)+'%,'+Math.round(hsl.l*100)+'%,'+hsl.a+')'; }, 'hex': function(){ return this.color.toHex(); } }, sliders: { saturation: { maxLeft: 100, maxTop: 100, callLeft: 'setSaturation', callTop: 'setLightness' }, hue: { maxLeft: 0, maxTop: 100, callLeft: false, callTop: 'setHue' }, alpha: { maxLeft: 0, maxTop: 100, callLeft: false, callTop: 'setAlpha' } }, // HSBtoRGB from RaphaelJS // https://github.com/DmitryBaranovskiy/raphael/ RGBtoHSB: function (r, g, b, a){ r /= 255; g /= 255; b /= 255; var H, S, V, C; V = Math.max(r, g, b); C = V - Math.min(r, g, b); H = (C === 0 ? null : V == r ? (g - b) / C : V == g ? (b - r) / C + 2 : (r - g) / C + 4 ); H = ((H + 360) % 6) * 60 / 360; S = C === 0 ? 0 : C / V; return {h: H||1, s: S, b: V, a: a||1}; }, HueToRGB: function (p, q, h) { if (h < 0) h += 1; else if (h > 1) h -= 1; if ((h * 6) < 1) return p + (q - p) * h * 6; else if ((h * 2) < 1) return q; else if ((h * 3) < 2) return p + (q - p) * ((2 / 3) - h) * 6; else return p; }, HSLtoRGB: function (h, s, l, a) { if (s < 0) { s = 0; } var q; if (l <= 0.5) { q = l * (1 + s); } else { q = l + s - (l * s); } var p = 2 * l - q; var tr = h + (1 / 3); var tg = h; var tb = h - (1 / 3); var r = Math.round(CPGlobal.HueToRGB(p, q, tr) * 255); var g = Math.round(CPGlobal.HueToRGB(p, q, tg) * 255); var b = Math.round(CPGlobal.HueToRGB(p, q, tb) * 255); return [r, g, b, a||1]; }, // a set of RE's that can match strings and generate color tuples. // from John Resig color plugin // https://github.com/jquery/jquery-color/ stringParsers: [ { re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function( execResult ) { return [ execResult[ 1 ], execResult[ 2 ], execResult[ 3 ], execResult[ 4 ] ]; } }, { re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function( execResult ) { return [ 2.55 * execResult[1], 2.55 * execResult[2], 2.55 * execResult[3], execResult[ 4 ] ]; } }, { re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ], 16 ), parseInt( execResult[ 2 ], 16 ), parseInt( execResult[ 3 ], 16 ) ]; } }, { re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ) ]; } }, { re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, space: 'hsla', parse: function( execResult ) { return [ execResult[1]/360, execResult[2] / 100, execResult[3] / 100, execResult[4] ]; } } ], template: ''; }, background: { opacity: 0.8 } } } }, legend: { show: false } }); // GRAPH 3 $.plot($("#graph3"), data, { series: { pie: { show: true, radius: 1, label: { show: true, radius: 3/4, formatter: function(label, series){ return '
        '+label+'
        '+Math.round(series.percent)+'%
        '; }, background: { opacity: 0.5 } } } }, legend: { show: false } }); // DONUT $.plot($("#donut"), data, { series: { pie: { innerRadius: 0.5, show: true } } }); }); function pieHover(event, pos, obj) { if (!obj) return; percent = parseFloat(obj.series.percent).toFixed(2); $("#hover").html(''+obj.series.label+' ('+percent+'%)'); } function pieClick(event, pos, obj) { if (!obj) return; percent = parseFloat(obj.series.percent).toFixed(2); alert(''+obj.series.label+': '+percent+'%'); } }(); ================================================ FILE: src/main/webapp/jslib/bs_js/form-component.js ================================================ var Script = function () { //chosen select $(".chzn-select").chosen(); $(".chzn-select-deselect").chosen({allow_single_deselect:true}); //tag input function onAddTag(tag) { alert("Added a tag: " + tag); } function onRemoveTag(tag) { alert("Removed a tag: " + tag); } function onChangeTag(input,tag) { alert("Changed a tag: " + tag); } $(function() { $('#tags_1').tagsInput({width:'auto'}); $('#tags_2').tagsInput({ width: '250', onChange: function(elem, elem_tags) { var languages = ['php','ruby','javascript']; $('.tag', elem_tags).each(function() { if($(this).text().search(new RegExp('\\b(' + languages.join('|') + ')\\b')) >= 0) $(this).css('background-color', 'yellow'); }); } }); // Uncomment this line to see the callback functions in action // $('input.tags').tagsInput({onAddTag:onAddTag,onRemoveTag:onRemoveTag,onChange: onChangeTag}); // Uncomment this line to see an input with no interface for adding new tags. // $('input.tags').tagsInput({interactive:false}); }); //color picker $('.cp1').colorpicker({ format: 'hex' }); $('.cp2').colorpicker(); //time picker $('#timepicker1, #timepicker3').timepicker(); $('#timepicker2, #timepicker4').timepicker({ minuteStep: 1, template: 'modal', showSeconds: true, showMeridian: false }); //clock face time picker $('#clockface_1').clockface(); $('#clockface_2').clockface({ format: 'HH:mm', trigger: 'manual' }); $('#clockface_2_toggle-btn').click(function (e) { e.stopPropagation(); $('#clockface_2').clockface('toggle'); }); //date picker if (top.location != location) { top.location.href = document.location.href ; } $(function(){ window.prettyPrint && prettyPrint(); $('#dp1').datepicker({ format: 'mm-dd-yyyy' }); $('#dp2').datepicker(); $('#dp3').datepicker(); $('#dp3').datepicker(); $('#dpYears').datepicker(); $('#dpMonths').datepicker(); var startDate = new Date(2012,1,20); var endDate = new Date(2012,1,25); $('#dp4').datepicker() .on('changeDate', function(ev){ if (ev.date.valueOf() > endDate.valueOf()){ $('#alert').show().find('strong').text('The start date can not be greater then the end date'); } else { $('#alert').hide(); startDate = new Date(ev.date); $('#startDate').text($('#dp4').data('date')); } $('#dp4').datepicker('hide'); }); $('#dp5').datepicker() .on('changeDate', function(ev){ if (ev.date.valueOf() < startDate.valueOf()){ $('#alert').show().find('strong').text('The end date can not be less then the start date'); } else { $('#alert').hide(); endDate = new Date(ev.date); $('#endDate').text($('#dp5').data('date')); } $('#dp5').datepicker('hide'); }); // disabling dates var nowTemp = new Date(); var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0); var checkin = $('#dpd1').datepicker({ onRender: function(date) { return date.valueOf() < now.valueOf() ? 'disabled' : ''; } }).on('changeDate', function(ev) { if (ev.date.valueOf() > checkout.date.valueOf()) { var newDate = new Date(ev.date) newDate.setDate(newDate.getDate() + 1); checkout.setValue(newDate); } checkin.hide(); $('#dpd2')[0].focus(); }).data('datepicker'); var checkout = $('#dpd2').datepicker({ onRender: function(date) { return date.valueOf() <= checkin.date.valueOf() ? 'disabled' : ''; } }).on('changeDate', function(ev) { checkout.hide(); }).data('datepicker'); }); //daterange picker $('#reservation').daterangepicker(); $('#reportrange').daterangepicker( { ranges: { 'Today': ['today', 'today'], 'Yesterday': ['yesterday', 'yesterday'], 'Last 7 Days': [Date.today().add({ days: -6 }), 'today'], 'Last 30 Days': [Date.today().add({ days: -29 }), 'today'], 'This Month': [Date.today().moveToFirstDayOfMonth(), Date.today().moveToLastDayOfMonth()], 'Last Month': [Date.today().moveToFirstDayOfMonth().add({ months: -1 }), Date.today().moveToFirstDayOfMonth().add({ days: -1 })] }, opens: 'left', format: 'MM/dd/yyyy', separator: ' to ', startDate: Date.today().add({ days: -29 }), endDate: Date.today(), minDate: '01/01/2012', maxDate: '12/31/2013', locale: { applyLabel: 'Submit', fromLabel: 'From', toLabel: 'To', customRangeLabel: 'Custom Range', daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr','Sa'], monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], firstDay: 1 }, showWeekNumbers: true, buttonClasses: ['btn-danger'] }, function(start, end) { $('#reportrange span').html(start.toString('MMMM d, yyyy') + ' - ' + end.toString('MMMM d, yyyy')); } ); //Set the initial state of the picker label $('#reportrange span').html(Date.today().add({ days: -29 }).toString('MMMM d, yyyy') + ' - ' + Date.today().toString('MMMM d, yyyy')); //toggle button window.prettyPrint && prettyPrint(); $('#normal-toggle-button').toggleButtons(); $('#text-toggle-button').toggleButtons({ width: 220, label: { enabled: "Lorem Ipsum", disabled: "Dolor Sit" } }); $('#not-animated-toggle-button').toggleButtons({ animated: false }); $('#transition-percent-toggle-button').toggleButtons({ transitionspeed: "500%" }); $('#transition-value-toggle-button').toggleButtons({ transitionspeed: 1 // default value: 0.05 }); $('#danger-toggle-button').toggleButtons({ style: { // Accepted values ["primary", "danger", "info", "success", "warning"] or nothing enabled: "danger", disabled: "info" } }); $('#info-toggle-button').toggleButtons({ style: { // Accepted values ["primary", "danger", "info", "success", "warning"] or nothing enabled: "info", disabled: "info" } }); $('#success-toggle-button').toggleButtons({ style: { // Accepted values ["primary", "danger", "info", "success", "warning"] or nothing enabled: "success", disabled: "info" } }); $('#warning-toggle-button').toggleButtons({ style: { // Accepted values ["primary", "danger", "info", "success", "warning"] or nothing enabled: "warning", disabled: "info" } }); $('#height-text-style-toggle-button').toggleButtons({ height: 100, font: { 'line-height': '100px', 'font-size': '18px', 'font-style': 'regular' } }); //WYSIWYG Editor $('.wysihtmleditor5').wysihtml5(); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/form-validation-script.js ================================================ var Script = function () { $.validator.setDefaults({ submitHandler: function() { alert("submitted!"); } }); $().ready(function() { // validate the comment form when it is submitted $("#commentForm").validate(); // validate signup form on keyup and submit $("#signupForm").validate({ rules: { firstname: "required", lastname: "required", username: { required: true, minlength: 2 }, password: { required: true, minlength: 5 }, confirm_password: { required: true, minlength: 5, equalTo: "#password" }, email: { required: true, email: true }, topic: { required: "#newsletter:checked", minlength: 2 }, agree: "required" }, messages: { firstname: "Please enter your firstname", lastname: "Please enter your lastname", username: { required: "Please enter a username", minlength: "Your username must consist of at least 2 characters" }, password: { required: "Please provide a password", minlength: "Your password must be at least 5 characters long" }, confirm_password: { required: "Please provide a password", minlength: "Your password must be at least 5 characters long", equalTo: "Please enter the same password as above" }, email: "Please enter a valid email address", agree: "Please accept our policy" } }); // propose username by combining first- and lastname $("#username").focus(function() { var firstname = $("#firstname").val(); var lastname = $("#lastname").val(); if(firstname && lastname && !this.value) { this.value = firstname + "." + lastname; } }); //code to hide topic selection, disable for demo var newsletter = $("#newsletter"); // newsletter topics are optional, hide at first var inital = newsletter.is(":checked"); var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray"); var topicInputs = topics.find("input").attr("disabled", !inital); // show when newsletter is checked newsletter.click(function() { topics[this.checked ? "removeClass" : "addClass"]("gray"); topicInputs.attr("disabled", !this.checked); }); }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/form-wizard.js ================================================ var Script = function () { $('#pills').bootstrapWizard({'tabClass': 'nav nav-pills', 'debug': false, onShow: function(tab, navigation, index) { console.log('onShow'); }, onNext: function(tab, navigation, index) { console.log('onNext'); }, onPrevious: function(tab, navigation, index) { console.log('onPrevious'); }, onLast: function(tab, navigation, index) { console.log('onLast'); }, onTabClick: function(tab, navigation, index) { console.log('onTabClick'); alert('on tab click disabled'); }, onTabShow: function(tab, navigation, index) { console.log('onTabShow'); var $total = navigation.find('li').length; var $current = index+1; var $percent = ($current/$total) * 100; $('#pills').find('.bar').css({width:$percent+'%'}); }}); $('#tabsleft').bootstrapWizard({'tabClass': 'nav nav-tabs', 'debug': false, onShow: function(tab, navigation, index) { console.log('onShow'); }, onNext: function(tab, navigation, index) { console.log('onNext'); }, onPrevious: function(tab, navigation, index) { console.log('onPrevious'); }, onLast: function(tab, navigation, index) { console.log('onLast'); }, onTabClick: function(tab, navigation, index) { console.log('onTabClick'); }, onTabShow: function(tab, navigation, index) { console.log('onTabShow'); var $total = navigation.find('li').length; var $current = index+1; var $percent = ($current/$total) * 100; $('#tabsleft').find('.bar').css({width:$percent+'%'}); // If it's the last tab then hide the last button and show the finish instead if($current >= $total) { $('#tabsleft').find('.pager .next').hide(); $('#tabsleft').find('.pager .finish').show(); $('#tabsleft').find('.pager .finish').removeClass('disabled'); } else { $('#tabsleft').find('.pager .next').show(); $('#tabsleft').find('.pager .finish').hide(); } }}); $('#tabsleft .finish').click(function() { alert('Finished!, Starting over!'); $('#tabsleft').find("a[href*='tabsleft-tab1']").trigger('click'); }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/gmaps-scripts.js ================================================ var GoogleMaps = function () { var mapBasic = function () { new GMaps({ div: '#gmap_basic', lat: -12.043333, lng: -77.028333 }); } var mapMarker = function () { var map = new GMaps({ div: '#gmap_marker', lat: -12.043333, lng: -77.028333 }); map.addMarker({ lat: -12.043333, lng: -77.03, title: 'Lima', details: { database_id: 42, author: 'HPNeo' }, click: function (e) { if (console.log) console.log(e); alert('You clicked in this marker'); } }); map.addMarker({ lat: -12.042, lng: -77.028333, title: 'Marker with InfoWindow', infoWindow: { content: 'HTML Content!!!!' } }); } var mapPolylines = function() { var map = new GMaps({ div: '#gmap_polylines', lat: -12.043333, lng: -77.028333, click: function(e){ console.log(e); } }); path = [[-12.044012922866312, -77.02470665341184], [-12.05449279282314, -77.03024273281858], [-12.055122327623378, -77.03039293652341], [-12.075917129727586, -77.02764635449216], [-12.07635776902266, -77.02792530422971], [-12.076819390363665, -77.02893381481931], [-12.088527520066453, -77.0241058385925], [-12.090814532191756, -77.02271108990476]]; map.drawPolyline({ path: path, strokeColor: '#131540', strokeOpacity: 0.6, strokeWeight: 6 }); } var mapGeolocation = function() { var map = new GMaps({ div: '#gmap_geo', lat: -12.043333, lng: -77.028333 }); GMaps.geolocate({ success: function(position) { map.setCenter(position.coords.latitude, position.coords.longitude); }, error: function(error) { alert('Geolocation failed: '+error.message); }, not_supported: function() { alert("Your browser does not support geolocation"); }, always: function() { //alert("Geolocation Done!"); } }); } var mapGeocoding = function() { var map = new GMaps({ div: '#gmap_geocoding', lat: -12.043333, lng: -77.028333 }); var handleAction = function() { var text = $.trim($('#gmap_geocoding_address').val()); GMaps.geocode({ address: text, callback: function(results, status){ if(status=='OK'){ var latlng = results[0].geometry.location; map.setCenter(latlng.lat(), latlng.lng()); map.addMarker({ lat: latlng.lat(), lng: latlng.lng() }); App.scrollTo($('#gmap_geocoding')); } } }); } $('#gmap_geocoding_btn').click(function(e){ e.preventDefault(); handleAction(); }); $("#gmap_geocoding_address").keypress(function(e){ var keycode = (e.keyCode ? e.keyCode : e.which); if(keycode == '13') { e.preventDefault(); handleAction(); } }); } var mapPolygone = function() { var map = new GMaps({ div: '#gmap_polygons', lat: -12.043333, lng: -77.028333 }); var path = [[-12.040397656836609,-77.03373871559225], [-12.040248585302038,-77.03993927003302], [-12.050047116528843,-77.02448169303511], [-12.044804866577001,-77.02154422636042]]; var polygon = map.drawPolygon({ paths: path, strokeColor: '#BBD8E9', strokeOpacity: 1, strokeWeight: 3, fillColor: '#BBD8E9', fillOpacity: 0.6 }); } var mapRoutes = function() { var map = new GMaps({ div: '#gmap_routes', lat: -12.043333, lng: -77.028333 }); $('#gmap_routes_start').click(function(e){ e.preventDefault(); map.travelRoute({ origin: [-12.044012922866312, -77.02470665341184], destination: [-12.090814532191756, -77.02271108990476], travelMode: 'driving', step: function(e){ $('#gmap_routes_instructions').append('
      • '+e.instructions+'
      • '); $('#gmap_routes_instructions li:eq('+e.step_number+')').delay(800*e.step_number).fadeIn(500, function(){ map.setCenter(e.end_location.lat(), e.end_location.lng()); map.drawPolyline({ path: e.path, strokeColor: '#131540', strokeOpacity: 0.6, strokeWeight: 6 }); App.scrollTo($(this)); }); } }); }); } return { //main function to initiate map samples init: function () { mapBasic(); mapMarker(); mapGeolocation(); mapGeocoding(); mapPolylines(); mapPolygone(); mapRoutes(); } }; }(); ================================================ FILE: src/main/webapp/jslib/bs_js/gmaps.js ================================================ /*! * GMaps.js v0.2.30 * http://hpneo.github.com/gmaps/ * * Copyright 2012, Gustavo Leon * Released under the MIT License. */ if(window.google && window.google.maps){ var GMaps = (function(global) { "use strict"; var doc = document; var getElementById = function(id, context) { var ele if('jQuery' in global && context){ ele = $("#"+id.replace('#', ''), context)[0] }else{ ele = doc.getElementById(id.replace('#', '')); }; return ele; }; var GMaps = function(options) { var self = this; var events_that_hide_context_menu = ['bounds_changed', 'center_changed', 'click', 'dblclick', 'drag', 'dragend', 'dragstart', 'idle', 'maptypeid_changed', 'projection_changed', 'resize', 'tilesloaded', 'zoom_changed']; var events_that_doesnt_hide_context_menu = ['mousemove', 'mouseout', 'mouseover']; window.context_menu = {}; if (typeof(options.el) === 'string' || typeof(options.div) === 'string') { this.el = getElementById(options.el || options.div, options.context); } else { this.el = options.el || options.div; }; this.el.style.width = options.width || this.el.scrollWidth || this.el.offsetWidth; this.el.style.height = options.height || this.el.scrollHeight || this.el.offsetHeight; this.controls = []; this.overlays = []; this.layers = []; // array with kml and ft layers, can be as many this.singleLayers = {}; // object with the other layers, only one per layer this.markers = []; this.polylines = []; this.routes = []; this.polygons = []; this.infoWindow = null; this.overlay_el = null; this.zoom = options.zoom || 15; var markerClusterer = options.markerClusterer; //'Hybrid', 'Roadmap', 'Satellite' or 'Terrain' var mapType; if (options.mapType) { mapType = google.maps.MapTypeId[options.mapType.toUpperCase()]; } else { mapType = google.maps.MapTypeId.ROADMAP; } var map_center = new google.maps.LatLng(options.lat, options.lng); delete options.el; delete options.lat; delete options.lng; delete options.mapType; delete options.width; delete options.height; delete options.markerClusterer; var zoomControlOpt = options.zoomControlOpt || { style: 'DEFAULT', position: 'TOP_LEFT' }; var zoomControl = options.zoomControl || true, zoomControlStyle = zoomControlOpt.style || 'DEFAULT', zoomControlPosition = zoomControlOpt.position || 'TOP_LEFT', panControl = options.panControl || true, mapTypeControl = options.mapTypeControl || true, scaleControl = options.scaleControl || true, streetViewControl = options.streetViewControl || true, overviewMapControl = overviewMapControl || true; var map_options = {}; var map_base_options = { zoom: this.zoom, center: map_center, mapTypeId: mapType }; var map_controls_options = { panControl: panControl, zoomControl: zoomControl, zoomControlOptions: { style: google.maps.ZoomControlStyle[zoomControlStyle], // DEFAULT LARGE SMALL position: google.maps.ControlPosition[zoomControlPosition] }, mapTypeControl: mapTypeControl, scaleControl: scaleControl, streetViewControl: streetViewControl, overviewMapControl: overviewMapControl } if(options.disableDefaultUI != true) map_base_options = extend_object(map_base_options, map_controls_options); map_options = extend_object(map_base_options, options); for(var i = 0; i < events_that_hide_context_menu.length; i++) { delete map_options[events_that_hide_context_menu[i]]; } for(var i = 0; i < events_that_doesnt_hide_context_menu.length; i++) { delete map_options[events_that_doesnt_hide_context_menu[i]]; } this.map = new google.maps.Map(this.el, map_options); if(markerClusterer) { this.markerClusterer = markerClusterer.apply(this, [this.map]); } // Context menus var buildContextMenuHTML = function(control, e) { var html = ''; var options = window.context_menu[control]; for (var i in options){ if (options.hasOwnProperty(i)){ var option = options[i]; html += '
      • ' + option.title + '
      • '; } } if(!getElementById('gmaps_context_menu')) return; var context_menu_element = getElementById('gmaps_context_menu'); context_menu_element.innerHTML = html; var context_menu_items = context_menu_element.getElementsByTagName('a'); var context_menu_items_count = context_menu_items.length; for(var i = 0; i < context_menu_items_count; i++){ var context_menu_item = context_menu_items[i]; var assign_menu_item_action = function(ev){ ev.preventDefault(); options[this.id.replace(control + '_', '')].action.apply(self, [e]); self.hideContextMenu(); }; google.maps.event.clearListeners(context_menu_item, 'click'); google.maps.event.addDomListenerOnce(context_menu_item, 'click', assign_menu_item_action, false); } var left = self.el.offsetLeft + e.pixel.x - 15; var top = self.el.offsetTop + e.pixel.y - 15; context_menu_element.style.left = left + "px"; context_menu_element.style.top = top + "px"; context_menu_element.style.display = 'block'; }; var buildContextMenu = function(control, e) { if (control === 'marker') { e.pixel = {}; var overlay = new google.maps.OverlayView(); overlay.setMap(self.map); overlay.draw = function() { var projection = overlay.getProjection(); var position = e.marker.getPosition(); e.pixel = projection.fromLatLngToContainerPixel(position); buildContextMenuHTML(control, e); }; } else { buildContextMenuHTML(control, e); } }; this.setContextMenu = function(options) { window.context_menu[options.control] = {}; for (var i in options.options){ if (options.options.hasOwnProperty(i)){ var option = options.options[i]; window.context_menu[options.control][option.name] = { title: option.title, action: option.action }; } } var ul = doc.createElement('ul'); ul.id = 'gmaps_context_menu'; ul.style.display = 'none'; ul.style.position = 'absolute'; ul.style.minWidth = '100px'; ul.style.background = 'white'; ul.style.listStyle = 'none'; ul.style.padding = '8px'; ul.style.boxShadow = '2px 2px 6px #ccc'; doc.body.appendChild(ul); var context_menu_element = getElementById('gmaps_context_menu'); google.maps.event.addDomListener(context_menu_element, 'mouseout', function(ev) { if(!ev.relatedTarget || !this.contains(ev.relatedTarget)){ window.setTimeout(function(){ context_menu_element.style.display = 'none'; }, 400); } }, false); }; this.hideContextMenu = function() { var context_menu_element = getElementById('gmaps_context_menu'); if(context_menu_element) context_menu_element.style.display = 'none'; }; //Events var setupListener = function(object, name) { google.maps.event.addListener(object, name, function(e){ if(e == undefined) { e = this; } options[name].apply(this, [e]); self.hideContextMenu(); }); } for (var ev = 0; ev < events_that_hide_context_menu.length; ev++) { var name = events_that_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } for (var ev = 0; ev < events_that_doesnt_hide_context_menu.length; ev++) { var name = events_that_doesnt_hide_context_menu[ev]; if (name in options) { setupListener(this.map, name); } } google.maps.event.addListener(this.map, 'rightclick', function(e) { if (options.rightclick) { options.rightclick.apply(this, [e]); } if(window.context_menu['map'] != undefined) { buildContextMenu('map', e); } }); this.refresh = function() { google.maps.event.trigger(this.map, 'resize'); }; this.fitZoom = function() { var latLngs = []; var markers_length = this.markers.length; for(var i=0; i < markers_length; i++) { latLngs.push(this.markers[i].getPosition()); } this.fitLatLngBounds(latLngs); }; this.fitLatLngBounds = function(latLngs) { var total = latLngs.length; var bounds = new google.maps.LatLngBounds(); for(var i=0; i < total; i++) { bounds.extend(latLngs[i]); } this.map.fitBounds(bounds); }; // Map methods this.setCenter = function(lat, lng, callback) { this.map.panTo(new google.maps.LatLng(lat, lng)); if (callback) { callback(); } }; this.getElement = function() { return this.el; }; this.zoomIn = function(value) { this.zoom = this.map.getZoom() + value; this.map.setZoom(this.zoom); }; this.zoomOut = function(value) { this.zoom = this.map.getZoom() - value; this.map.setZoom(this.zoom); }; var native_methods = []; for(var method in this.map){ if(typeof(this.map[method]) == 'function' && !this[method]){ native_methods.push(method); } } for(var i=0; i < native_methods.length; i++){ (function(gmaps, scope, method_name) { gmaps[method_name] = function(){ return scope[method_name].apply(scope, arguments); }; })(this, this.map, native_methods[i]); } this.createControl = function(options) { var control = doc.createElement('div'); control.style.cursor = 'pointer'; control.style.fontFamily = 'Arial, sans-serif'; control.style.fontSize = '13px'; control.style.boxShadow = 'rgba(0, 0, 0, 0.398438) 0px 2px 4px'; for(var option in options.style) control.style[option] = options.style[option]; if(options.id) { control.id = options.id; } if(options.classes) { control.className = options.classes; } if(options.content) { control.innerHTML = options.content; } for (var ev in options.events) { (function(object, name) { google.maps.event.addDomListener(object, name, function(){ options.events[name].apply(this, [this]); }); })(control, ev); } control.index = 1; return control; }; this.addControl = function(options) { var position = google.maps.ControlPosition[options.position.toUpperCase()]; delete options.position; var control = this.createControl(options); this.controls.push(control); this.map.controls[position].push(control); return control; }; // Markers this.createMarker = function(options) { if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) { var self = this; var details = options.details; var fences = options.fences; var outside = options.outside; var base_options = { position: new google.maps.LatLng(options.lat, options.lng), map: null }; delete options.lat; delete options.lng; delete options.fences; delete options.outside; var marker_options = extend_object(base_options, options); var marker = new google.maps.Marker(marker_options); marker.fences = fences; if (options.infoWindow) { marker.infoWindow = new google.maps.InfoWindow(options.infoWindow); var info_window_events = ['closeclick', 'content_changed', 'domready', 'position_changed', 'zindex_changed']; for (var ev = 0; ev < info_window_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ if (options.infoWindow[name]) options.infoWindow[name].apply(this, [e]); }); })(marker.infoWindow, info_window_events[ev]); } } var marker_events = ['animation_changed', 'clickable_changed', 'cursor_changed', 'draggable_changed', 'flat_changed', 'icon_changed', 'position_changed', 'shadow_changed', 'shape_changed', 'title_changed', 'visible_changed', 'zindex_changed']; var marker_events_with_mouse = ['dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup']; for (var ev = 0; ev < marker_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(){ if (options[name]) options[name].apply(this, [this]); }); })(marker, marker_events[ev]); } for (var ev = 0; ev < marker_events_with_mouse.length; ev++) { (function(map, object, name) { google.maps.event.addListener(object, name, function(me){ if(!me.pixel){ me.pixel = map.getProjection().fromLatLngToPoint(me.latLng) } if (options[name]) options[name].apply(this, [me]); }); })(this.map, marker, marker_events_with_mouse[ev]); } google.maps.event.addListener(marker, 'click', function() { this.details = details; if (options.click) { options.click.apply(this, [this]); } if (marker.infoWindow) { self.hideInfoWindows(); marker.infoWindow.open(self.map, marker); } }); google.maps.event.addListener(marker, 'rightclick', function(e) { e.marker = this; if (options.rightclick) { options.rightclick.apply(this, [e]); } if (window.context_menu['marker'] != undefined) { buildContextMenu('marker', e); } }); if (options.dragend || marker.fences) { google.maps.event.addListener(marker, 'dragend', function() { if (marker.fences) { self.checkMarkerGeofence(marker, function(m, f) { outside(m, f); }); } }); } return marker; } else { throw 'No latitude or longitude defined'; } }; this.addMarker = function(options) { var marker; if(options.hasOwnProperty('gm_accessors_')) { // Native google.maps.Marker object marker = options; } else { if ((options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) || options.position) { marker = this.createMarker(options); } else { throw 'No latitude or longitude defined'; } } marker.setMap(this.map); if(this.markerClusterer) this.markerClusterer.addMarker(marker); this.markers.push(marker); return marker; }; this.addMarkers = function(array) { for (var i=0, marker; marker=array[i]; i++) { this.addMarker(marker); } return this.markers; }; this.hideInfoWindows = function() { for (var i=0, marker; marker=this.markers[i]; i++){ if (marker.infoWindow){ marker.infoWindow.close(); } } }; this.removeMarker = function(marker) { for(var i = 0; i < this.markers.length; i++) { if(this.markers[i] === marker) { this.markers[i].setMap(null); this.markers.splice(i, 1); break; } } return marker; }; this.removeMarkers = function(collection) { var collection = (collection || this.markers); for(var i=0;i < this.markers.length; i++){ if(this.markers[i] === collection[i]) this.markers[i].setMap(null); } var new_markers = []; for(var i=0;i < this.markers.length; i++){ if(this.markers[i].getMap() != null) new_markers.push(this.markers[i]); } this.markers = new_markers; }; // Overlays this.drawOverlay = function(options) { var overlay = new google.maps.OverlayView(); overlay.setMap(self.map); var auto_show = true; if(options.auto_show != null) auto_show = options.auto_show; overlay.onAdd = function() { var el = doc.createElement('div'); el.style.borderStyle = "none"; el.style.borderWidth = "0px"; el.style.position = "absolute"; el.style.zIndex = 100; el.innerHTML = options.content; overlay.el = el; var panes = this.getPanes(); if (!options.layer) { options.layer = 'overlayLayer'; } var overlayLayer = panes[options.layer]; overlayLayer.appendChild(el); var stop_overlay_events = ['contextmenu', 'DOMMouseScroll', 'dblclick', 'mousedown']; for (var ev = 0; ev < stop_overlay_events.length; ev++) { (function(object, name) { google.maps.event.addDomListener(object, name, function(e){ if(navigator.userAgent.toLowerCase().indexOf('msie') != -1 && document.all) { e.cancelBubble = true; e.returnValue = false; } else { e.stopPropagation(); } }); })(el, stop_overlay_events[ev]); } google.maps.event.trigger(this, 'ready'); }; overlay.draw = function() { var projection = this.getProjection(); var pixel = projection.fromLatLngToDivPixel(new google.maps.LatLng(options.lat, options.lng)); options.horizontalOffset = options.horizontalOffset || 0; options.verticalOffset = options.verticalOffset || 0; var el = overlay.el; var content = el.children[0]; var content_height = content.clientHeight; var content_width = content.clientWidth; switch (options.verticalAlign) { case 'top': el.style.top = (pixel.y - content_height + options.verticalOffset) + 'px'; break; default: case 'middle': el.style.top = (pixel.y - (content_height / 2) + options.verticalOffset) + 'px'; break; case 'bottom': el.style.top = (pixel.y + options.verticalOffset) + 'px'; break; } switch (options.horizontalAlign) { case 'left': el.style.left = (pixel.x - content_width + options.horizontalOffset) + 'px'; break; default: case 'center': el.style.left = (pixel.x - (content_width / 2) + options.horizontalOffset) + 'px'; break; case 'right': el.style.left = (pixel.x + options.horizontalOffset) + 'px'; break; } el.style.display = auto_show ? 'block' : 'none'; if(!auto_show){ options.show.apply(this, [el]); } }; overlay.onRemove = function() { var el = overlay.el; if(options.remove){ options.remove.apply(this, [el]); } else{ overlay.el.parentNode.removeChild(overlay.el); overlay.el = null; } }; self.overlays.push(overlay); return overlay; }; this.removeOverlay = function(overlay) { for(var i = 0; i < this.overlays.length; i++) { if(this.overlays[i] === overlay) { this.overlays[i].setMap(null); this.overlays.splice(i, 1); break; } } }; this.removeOverlays = function() { for (var i=0, item; item=self.overlays[i]; i++){ item.setMap(null); } self.overlays = []; }; // Geometry this.drawPolyline = function(options) { var path = []; var points = options.path; if (points.length){ if (points[0][0] === undefined){ path = points; } else { for (var i=0, latlng; latlng=points[i]; i++){ path.push(new google.maps.LatLng(latlng[0], latlng[1])); } } } var polyline_options = { map: this.map, path: path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight, geodesic: options.geodesic, clickable: true, editable: false, visible: true }; if(options.hasOwnProperty("clickable")) polyline_options.clickable = options.clickable; if(options.hasOwnProperty("editable")) polyline_options.editable = options.editable; if(options.hasOwnProperty("icons")) polyline_options.icons = options.icons; if(options.hasOwnProperty("zIndex")) polyline_options.zIndex = options.zIndex; var polyline = new google.maps.Polyline(polyline_options); var polyline_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polyline_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ if (options[name]) options[name].apply(this, [e]); }); })(polyline, polyline_events[ev]); } this.polylines.push(polyline); return polyline; }; this.removePolyline = function(polyline) { for(var i = 0; i < this.polylines.length; i++) { if(this.polylines[i] === polyline) { this.polylines[i].setMap(null); this.polylines.splice(i, 1); break; } } }; this.removePolylines = function() { for (var i=0, item; item=self.polylines[i]; i++){ item.setMap(null); } self.polylines = []; }; this.drawCircle = function(options) { options = extend_object({ map: this.map, center: new google.maps.LatLng(options.lat, options.lng) }, options); delete options.lat; delete options.lng; var polygon = new google.maps.Circle(options); var polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ if (options[name]) options[name].apply(this, [e]); }); })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; this.drawRectangle = function(options) { options = extend_object({ map: this.map }, options); var latLngBounds = new google.maps.LatLngBounds( new google.maps.LatLng(options.bounds[0][0], options.bounds[0][1]), new google.maps.LatLng(options.bounds[1][0], options.bounds[1][1]) ); options.bounds = latLngBounds; var polygon = new google.maps.Rectangle(options); var polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ if (options[name]) options[name].apply(this, [e]); }); })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; this.drawPolygon = function(options) { var useGeoJSON = false; if(options.hasOwnProperty("useGeoJSON")) useGeoJSON = options.useGeoJSON; delete options.useGeoJSON; options = extend_object({ map: this.map }, options); if(useGeoJSON == false) options.paths = [options.paths.slice(0)]; if(options.paths.length > 0) { if(options.paths[0].length > 0) { options.paths = array_flat(array_map(options.paths, arrayToLatLng, useGeoJSON)); } } var polygon = new google.maps.Polygon(options); var polygon_events = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'rightclick']; for (var ev = 0; ev < polygon_events.length; ev++) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ if (options[name]) options[name].apply(this, [e]); }); })(polygon, polygon_events[ev]); } this.polygons.push(polygon); return polygon; }; this.removePolygon = function(polygon) { for(var i = 0; i < this.polygons.length; i++) { if(this.polygons[i] === polygon) { this.polygons[i].setMap(null); this.polygons.splice(i, 1); break; } } }; this.removePolygons = function() { for (var i=0, item; item=self.polygons[i]; i++){ item.setMap(null); } self.polygons = []; }; // Fusion Tables this.getFromFusionTables = function(options) { var events = options.events; delete options.events; var fusion_tables_options = options; var layer = new google.maps.FusionTablesLayer(fusion_tables_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; this.loadFromFusionTables = function(options) { var layer = this.getFromFusionTables(options); layer.setMap(this.map); return layer; }; // KML this.getFromKML = function(options) { var url = options.url; var events = options.events; delete options.url; delete options.events; var kml_options = options; var layer = new google.maps.KmlLayer(url, kml_options); for (var ev in events) { (function(object, name) { google.maps.event.addListener(object, name, function(e){ events[name].apply(this, [e]); }); })(layer, ev); } this.layers.push(layer); return layer; }; this.loadFromKML = function(options) { var layer = this.getFromKML(options); layer.setMap(this.map); return layer; }; // Routes var travelMode, unitSystem; this.getRoutes = function(options) { switch (options.travelMode) { case 'bicycling': travelMode = google.maps.TravelMode.BICYCLING; break; case 'transit': travelMode = google.maps.TravelMode.TRANSIT; break; case 'driving': travelMode = google.maps.TravelMode.DRIVING; break; // case 'walking': default: travelMode = google.maps.TravelMode.WALKING; break; } if (options.unitSystem === 'imperial') { unitSystem = google.maps.UnitSystem.IMPERIAL; } else { unitSystem = google.maps.UnitSystem.METRIC; } var base_options = { avoidHighways: false, avoidTolls: false, optimizeWaypoints: false, waypoints: [] }; var request_options = extend_object(base_options, options); request_options.origin = new google.maps.LatLng(options.origin[0], options.origin[1]); request_options.destination = new google.maps.LatLng(options.destination[0], options.destination[1]); request_options.travelMode = travelMode; request_options.unitSystem = unitSystem; delete request_options.callback; var self = this; var service = new google.maps.DirectionsService(); service.route(request_options, function(result, status) { if (status === google.maps.DirectionsStatus.OK) { for (var r in result.routes) { if (result.routes.hasOwnProperty(r)) { self.routes.push(result.routes[r]); } } } if (options.callback) { options.callback(self.routes); } }); }; this.removeRoutes = function() { this.routes = []; }; this.getElevations = function(options) { options = extend_object({ locations: [], path : false, samples : 256 }, options); if(options.locations.length > 0) { if(options.locations[0].length > 0) { options.locations = array_flat(array_map([options.locations], arrayToLatLng, false)); } } var callback = options.callback; delete options.callback; var service = new google.maps.ElevationService(); //location request if (!options.path) { delete options.path; delete options.samples; service.getElevationForLocations(options, function(result, status){ if (callback && typeof(callback) === "function") { callback(result, status); } }); //path request } else { var pathRequest = { path : options.locations, samples : options.samples }; service.getElevationAlongPath(pathRequest, function(result, status){ if (callback && typeof(callback) === "function") { callback(result, status); } }); } }; // Alias for the method "drawRoute" this.cleanRoute = this.removePolylines; this.drawRoute = function(options) { var self = this; this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints: options.waypoints, unitSystem: options.unitSystem, callback: function(e) { if (e.length > 0) { self.drawPolyline({ path: e[e.length - 1].overview_path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); if (options.callback) { options.callback(e[e.length - 1]); } } } }); }; this.travelRoute = function(options) { if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; options.step(step); } } } }; this.drawSteppedRoute = function(options) { if (options.origin && options.destination) { this.getRoutes({ origin: options.origin, destination: options.destination, travelMode: options.travelMode, waypoints : options.waypoints, callback: function(e) { //start callback if (e.length > 0 && options.start) { options.start(e[e.length - 1]); } //step callback if (e.length > 0 && options.step) { var route = e[e.length - 1]; if (route.legs.length > 0) { var steps = route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step, (route.legs[0].steps.length - 1)); } } } //end callback if (e.length > 0 && options.end) { options.end(e[e.length - 1]); } } }); } else if (options.route) { if (options.route.legs.length > 0) { var steps = options.route.legs[0].steps; for (var i=0, step; step=steps[i]; i++) { step.step_number = i; self.drawPolyline({ path: step.path, strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }); options.step(step); } } } }; // Geofence this.checkGeofence = function(lat, lng, fence) { return fence.containsLatLng(new google.maps.LatLng(lat, lng)); }; this.checkMarkerGeofence = function(marker, outside_callback) { if (marker.fences) { for (var i=0, fence; fence=marker.fences[i]; i++) { var pos = marker.getPosition(); if (!self.checkGeofence(pos.lat(), pos.lng(), fence)) { outside_callback(marker, fence); } } } }; // Layers this.addLayer = function(layerName, options) { //var default_layers = ['weather', 'clouds', 'traffic', 'transit', 'bicycling', 'panoramio', 'places']; options = options || {}; var layer; switch(layerName) { case 'weather': this.singleLayers.weather = layer = new google.maps.weather.WeatherLayer(); break; case 'clouds': this.singleLayers.clouds = layer = new google.maps.weather.CloudLayer(); break; case 'traffic': this.singleLayers.traffic = layer = new google.maps.TrafficLayer(); break; case 'transit': this.singleLayers.transit = layer = new google.maps.TransitLayer(); break; case 'bicycling': this.singleLayers.bicycling = layer = new google.maps.BicyclingLayer(); break; case 'panoramio': this.singleLayers.panoramio = layer = new google.maps.panoramio.PanoramioLayer(); layer.setTag(options.filter); delete options.filter; //click event if(options.click) { google.maps.event.addListener(layer, 'click', function(event) { options.click(event); delete options.click; }); } break; case 'places': this.singleLayers.places = layer = new google.maps.places.PlacesService(this.map); //search and nearbySearch callback, Both are the same if(options.search || options.nearbySearch) { var placeSearchRequest = { bounds : options.bounds || null, keyword : options.keyword || null, location : options.location || null, name : options.name || null, radius : options.radius || null, rankBy : options.rankBy || null, types : options.types || null }; if(options.search) { layer.search(placeSearchRequest, options.search); } if(options.nearbySearch) { layer.nearbySearch(placeSearchRequest, options.nearbySearch); } } //textSearch callback if(options.textSearch) { var textSearchRequest = { bounds : options.bounds || null, location : options.location || null, query : options.query || null, radius : options.radius || null }; layer.textSearch(textSearchRequest, options.textSearch); } break; } if(layer !== undefined) { if(typeof layer.setOptions == 'function') { layer.setOptions(options); } if(typeof layer.setMap == 'function') { layer.setMap(this.map); } return layer; } }; this.removeLayer = function(layerName) { if(this.singleLayers[layerName] !== undefined) { this.singleLayers[layerName].setMap(null); delete this.singleLayers[layerName]; } }; // Static Maps this.toImage = function(options) { var options = options || {}; var static_map_options = {}; static_map_options['size'] = options['size'] || [this.el.clientWidth, this.el.clientHeight]; static_map_options['lat'] = this.getCenter().lat(); static_map_options['lng'] = this.getCenter().lng(); if(this.markers.length > 0) { static_map_options['markers'] = []; for(var i=0; i < this.markers.length; i++) { static_map_options['markers'].push({ lat: this.markers[i].getPosition().lat(), lng: this.markers[i].getPosition().lng() }); } } if(this.polylines.length > 0) { var polyline = this.polylines[0]; static_map_options['polyline'] = {}; static_map_options['polyline']['path'] = google.maps.geometry.encoding.encodePath(polyline.getPath()); static_map_options['polyline']['strokeColor'] = polyline.strokeColor static_map_options['polyline']['strokeOpacity'] = polyline.strokeOpacity static_map_options['polyline']['strokeWeight'] = polyline.strokeWeight } return GMaps.staticMapURL(static_map_options); }; // Map Types this.addMapType = function(mapTypeId, options) { if(options.hasOwnProperty("getTileUrl") && typeof(options["getTileUrl"]) == "function") { options.tileSize = options.tileSize || new google.maps.Size(256, 256); var mapType = new google.maps.ImageMapType(options); this.map.mapTypes.set(mapTypeId, mapType); } else { throw "'getTileUrl' function required"; } }; this.addOverlayMapType = function(options) { if(options.hasOwnProperty("getTile") && typeof(options["getTile"]) == "function") { var overlayMapTypeIndex = options.index; delete options.index; this.map.overlayMapTypes.insertAt(overlayMapTypeIndex, options); } else { throw "'getTile' function required"; } }; this.removeOverlayMapType = function(overlayMapTypeIndex) { this.map.overlayMapTypes.removeAt(overlayMapTypeIndex); }; // Styles this.addStyle = function(options) { var styledMapType = new google.maps.StyledMapType(options.styles, options.styledMapName); this.map.mapTypes.set(options.mapTypeId, styledMapType); }; this.setStyle = function(mapTypeId) { this.map.setMapTypeId(mapTypeId); }; // StreetView this.createPanorama = function(streetview_options) { if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) { streetview_options.lat = this.getCenter().lat(); streetview_options.lng = this.getCenter().lng(); } this.panorama = GMaps.createPanorama(streetview_options); this.map.setStreetView(this.panorama); return this.panorama; }; }; GMaps.createPanorama = function(options) { var el = getElementById(options.el, options.context); options.position = new google.maps.LatLng(options.lat, options.lng); delete options.el; delete options.context; delete options.lat; delete options.lng; var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed']; var streetview_options = extend_object({visible : true}, options); for(var i = 0; i < streetview_events.length; i++) { delete streetview_options[streetview_events[i]]; } var panorama = new google.maps.StreetViewPanorama(el, streetview_options); for(var i = 0; i < streetview_events.length; i++) { (function(object, name) { google.maps.event.addListener(object, name, function(){ if (options[name]) { options[name].apply(this); } }); })(panorama, streetview_events[i]); } return panorama; }; GMaps.Route = function(options) { this.map = options.map; this.route = options.route; this.step_count = 0; this.steps = this.route.legs[0].steps; this.steps_length = this.steps.length; this.polyline = this.map.drawPolyline({ path: new google.maps.MVCArray(), strokeColor: options.strokeColor, strokeOpacity: options.strokeOpacity, strokeWeight: options.strokeWeight }).getPath(); this.back = function() { if (this.step_count > 0) { this.step_count--; var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.pop(); } } } }; this.forward = function() { if (this.step_count < this.steps_length) { var path = this.route.legs[0].steps[this.step_count].path; for (var p in path){ if (path.hasOwnProperty(p)){ this.polyline.push(path[p]); } } this.step_count++; } }; }; // Geolocation (Modern browsers only) GMaps.geolocate = function(options) { var complete_callback = options.always || options.complete; if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { options.success(position); if (complete_callback) { complete_callback(); } }, function(error) { options.error(error); if (complete_callback) { complete_callback(); } }, options.options); } else { options.not_supported(); if (complete_callback) { complete_callback(); } } }; // Geocoding GMaps.geocode = function(options) { this.geocoder = new google.maps.Geocoder(); var callback = options.callback; if (options.hasOwnProperty('lat') && options.hasOwnProperty('lng')) { options.latLng = new google.maps.LatLng(options.lat, options.lng); } delete options.lat; delete options.lng; delete options.callback; this.geocoder.geocode(options, function(results, status) { callback(results, status); }); }; // Static maps GMaps.staticMapURL = function(options){ var parameters = []; var data; var static_root = '../../../../maps.googleapis.com/maps/api/staticmap'; if (options.url){ static_root = options.url; delete options.url; } static_root += '?'; var markers = options.markers; delete options.markers; if (!markers && options.marker){ markers = [options.marker]; delete options.marker; } var polyline = options.polyline; delete options.polyline; /** Map options **/ if (options.center){ parameters.push('center=' + options.center); delete options.center; } else if (options.address){ parameters.push('center=' + options.address); delete options.address; } else if (options.lat){ parameters.push(['center=', options.lat, ',', options.lng].join('')); delete options.lat; delete options.lng; } else if (options.visible){ var visible = encodeURI(options.visible.join('|')); parameters.push('visible=' + visible); } var size = options.size; if (size){ if (size.join){ size = size.join('x'); } delete options.size; } else { size = '630x300'; } parameters.push('size=' + size); if (!options.zoom){ options.zoom = 15; } var sensor = options.hasOwnProperty('sensor') ? !!options.sensor : true; delete options.sensor; parameters.push('sensor=' + sensor); for (var param in options){ if (options.hasOwnProperty(param)){ parameters.push(param + '=' + options[param]); } } /** Markers **/ if (markers){ var marker, loc; for (var i=0; data=markers[i]; i++){ marker = []; if (data.size && data.size !== 'normal'){ marker.push('size:' + data.size); } else if (data.icon){ marker.push('icon:' + encodeURI(data.icon)); } if (data.color){ marker.push('color:' + data.color.replace('#', '0x')); } if (data.label){ marker.push('label:' + data.label[0].toUpperCase()); } loc = (data.address ? data.address : data.lat + ',' + data.lng); if (marker.length || i === 0){ marker.push(loc); marker = marker.join('|'); parameters.push('markers=' + encodeURI(marker)); } // New marker without styles else { marker = parameters.pop() + encodeURI('|' + loc); parameters.push(marker); } } } /** Polylines **/ function parseColor(color, opacity){ if (color[0] === '#'){ color = color.replace('#', '0x'); if (opacity){ opacity = parseFloat(opacity); opacity = Math.min(1, Math.max(opacity, 0)); if (opacity === 0){ return '0x00000000'; } opacity = (opacity * 255).toString(16); if (opacity.length === 1){ opacity += opacity; } color = color.slice(0,8) + opacity; } } return color; } if (polyline){ data = polyline; polyline = []; if (data.strokeWeight){ polyline.push('weight:' + parseInt(data.strokeWeight, 10)); } if (data.strokeColor){ var color = parseColor(data.strokeColor, data.strokeOpacity); polyline.push('color:' + color); } if (data.fillColor){ var fillcolor = parseColor(data.fillColor, data.fillOpacity); polyline.push('fillcolor:' + fillcolor); } var path = data.path; if (path.join){ for (var j=0, pos; pos=path[j]; j++){ polyline.push(pos.join(',')); } } else { polyline.push('enc:' + path); } polyline = polyline.join('|'); parameters.push('path=' + encodeURI(polyline)); } parameters = parameters.join('&'); return static_root + parameters; }; //========================== // Polygon containsLatLng // https://github.com/tparkin/Google-Maps-Point-in-Polygon // Poygon getBounds extension - google-maps-extensions // http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js if (!google.maps.Polygon.prototype.getBounds) { google.maps.Polygon.prototype.getBounds = function(latLng) { var bounds = new google.maps.LatLngBounds(); var paths = this.getPaths(); var path; for (var p = 0; p < paths.getLength(); p++) { path = paths.getAt(p); for (var i = 0; i < path.getLength(); i++) { bounds.extend(path.getAt(i)); } } return bounds; }; } if (!google.maps.Polygon.prototype.containsLatLng) { // Polygon containsLatLng - method to determine if a latLng is within a polygon google.maps.Polygon.prototype.containsLatLng = function(latLng) { // Exclude points outside of bounds as there is no way they are in the poly var bounds = this.getBounds(); if (bounds !== null && !bounds.contains(latLng)) { return false; } // Raycast point in polygon method var inPoly = false; var numPaths = this.getPaths().getLength(); for (var p = 0; p < numPaths; p++) { var path = this.getPaths().getAt(p); var numPoints = path.getLength(); var j = numPoints - 1; for (var i = 0; i < numPoints; i++) { var vertex1 = path.getAt(i); var vertex2 = path.getAt(j); if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) { if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) { inPoly = !inPoly; } } j = i; } } return inPoly; }; } google.maps.LatLngBounds.prototype.containsLatLng = function(latLng) { return this.contains(latLng); }; google.maps.Marker.prototype.setFences = function(fences) { this.fences = fences; }; google.maps.Marker.prototype.addFence = function(fence) { this.fences.push(fence); }; return GMaps; }(this)); var coordsToLatLngs = function(coords, useGeoJSON) { var first_coord = coords[0]; var second_coord = coords[1]; if(useGeoJSON) { first_coord = coords[1]; second_coord = coords[0]; } return new google.maps.LatLng(first_coord, second_coord); }; var arrayToLatLng = function(coords, useGeoJSON) { for(var i=0; i < coords.length; i++) { if(coords[i].length > 0 && typeof(coords[i][0]) != "number") { coords[i] = arrayToLatLng(coords[i], useGeoJSON); } else { coords[i] = coordsToLatLngs(coords[i], useGeoJSON); } } return coords; }; var extend_object = function(obj, new_obj) { if(obj === new_obj) return obj; for(var name in new_obj) { obj[name] = new_obj[name]; } return obj; }; var replace_object = function(obj, replace) { if(obj === replace) return obj; for(var name in replace) { if(obj[name] != undefined) obj[name] = replace[name]; } return obj; }; var array_map = function(array, callback) { var original_callback_params = Array.prototype.slice.call(arguments, 2); if (Array.prototype.map && array.map === Array.prototype.map) { return Array.prototype.map.call(array, function(item) { callback_params = original_callback_params; callback_params.splice(0, 0, item); return callback.apply(this, callback_params); }); } else { var array_return = []; var array_length = array.length; for(var i = 0; i < array_length; i++) { callback_params = original_callback_params; callback_params = callback_params.splice(0, 0, array[i]); array_return.push(callback.apply(this, callback_params)); } return array_return; } }; var array_flat = function(array) { new_array = []; for(var i=0; i < array.length; i++) { new_array = new_array.concat(array[i]); } return new_array; }; } ================================================ FILE: src/main/webapp/jslib/bs_js/gritter.js ================================================ var Gritter = function () { $('#add-sticky').click(function(){ var unique_id = $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a sticky notice!', // (string | mandatory) the text inside the notification text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'img/avatar-mini.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: true, // (int | optional) the time you want it to be alive for before fading out time: '', // (string | optional) the class name you want to apply to that specific message class_name: 'my-sticky-class' }); // You can have it return a unique id, this can be used to manually remove it later using /* setTimeout(function(){ $.gritter.remove(unique_id, { fade: true, speed: 'slow' }); }, 6000) */ return false; }); $('#add-regular').click(function(){ $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a regular notice!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'img/avatar-mini.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: false, // (int | optional) the time you want it to be alive for before fading out time: '' }); return false; }); $('#add-max').click(function(){ $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a notice with a max of 3 on screen at one time!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'img/avatar-mini.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: false, // (function) before the gritter notice is opened before_open: function(){ if($('.gritter-item-wrapper').length == 3) { // Returning false prevents a new gritter from opening return false; } } }); return false; }); $('#add-without-image').click(function(){ $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a notice without an image!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.' }); return false; }); $('#add-gritter-light').click(function(){ $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a light notification', // (string | mandatory) the text inside the notification text: 'Just add a "gritter-light" class_name to your $.gritter.add or globally to $.gritter.options.class_name', class_name: 'gritter-light' }); return false; }); $("#remove-all").click(function(){ $.gritter.removeAll(); return false; }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/home-chartjs.js ================================================ var Script = function () { var doughnutData = [ { value: 30, color:"#F7464A" }, { value : 50, color : "#46BFBD" }, { value : 100, color : "#FDB45C" }, { value : 40, color : "#949FB1" }, { value : 120, color : "#4D5360" } ]; var lineChartData = { labels : ["","","","","","",""], datasets : [ { fillColor : "rgba(220,220,220,0.5)", strokeColor : "rgba(220,220,220,1)", pointColor : "rgba(220,220,220,1)", pointStrokeColor : "#fff", data : [65,59,90,81,56,55,40] }, { fillColor : "rgba(151,187,205,0.5)", strokeColor : "rgba(151,187,205,1)", pointColor : "rgba(151,187,205,1)", pointStrokeColor : "#fff", data : [28,48,40,19,96,27,100] } ] }; new Chart(document.getElementById("doughnut").getContext("2d")).Doughnut(doughnutData); new Chart(document.getElementById("line").getContext("2d")).Line(lineChartData); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/home-page-calender.js ================================================ var Script = function () { // calender var date = new Date(); var d = date.getDate(); var m = date.getMonth(); var y = date.getFullYear(); $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,basicWeek,basicDay' }, editable: true, events: [ { title: 'All Day Event', start: new Date(y, m, 1) }, { title: 'Long Event', start: new Date(y, m, d-5), end: new Date(y, m, d-2) }, { id: 999, title: 'Repeating Event', start: new Date(y, m, d-3, 16, 0), allDay: false }, { id: 999, title: 'Repeating Event', start: new Date(y, m, d+4, 16, 0), allDay: false }, { title: 'Meeting', start: new Date(y, m, d, 10, 30), allDay: false }, { title: 'Lunch', start: new Date(y, m, d, 12, 0), end: new Date(y, m, d, 14, 0), allDay: false }, { title: 'Birthday Party', start: new Date(y, m, d+1, 19, 0), end: new Date(y, m, d+1, 22, 30), allDay: false }, { title: 'Click for Google', start: new Date(y, m, 28), end: new Date(y, m, 29), url: '../../../../google.com/default.htm' } ] }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/jQuery.dualListBox-1.3.js ================================================ /* * Developed by Justin Mead * ©2011 MeadMiracle * www.meadmiracle.com / meadmiracle@gmail.com * Version 1.3 * Testing: IE8/Windows XP * Firefox/Windows XP * Chrome/Windows XP * Licensed under the Creative Commons GPL http://creativecommons.org/licenses/GPL/2.0/ * * OPTIONS LISTING: * *box1View, box2View - the id attributes of the VISIBLE listboxes * *box1Storage, box2Storage - the id attributes of the HIDDEN listboxes (used for filtering) * *box1Filter, box2Filter - the id attributes of the textboxes used to filter the lists * *box1Clear, box2Clear - the id attributes of the elements used to clear/reset the filters * *box1Counter, box2Counter - the id attributes of the elements used to display counts of visible/total items (used when filtering) * *to1, to2 - the id attributes of the elements used to transfer only selected items between boxes * *allTo1, allTo2 - the id attributes of the elements used to transfer ALL (visible) items between boxes * *transferMode - the type of transfer to perform on items (see heading TRANSFER MODES) * *sortBy - the attribute to use when sorting items (values: 'text' or 'value') * *useFilters - allow the filtering of items in either box (true/false) * *useCounters - use the visible/total counters (true/false) * *useSorting - sort items after executing a transfer (true/false) * *selectOnSubmit - select items in box 2 when the form is submitted (true/false) * * All options have default values, and as such, are optional. Check the 'settings' JSON object below to see the defaults. * * TRANSFER MODES: * * 'move' - In this mode, items will be removed from the box in which they currently reside and moved to the other box. This is the default. * * 'copy' - In this mode, items in box 1 will ALWAYS remain in box 1 (unless they are hidden by filtering). When they are selected for transfer * they will be copied to box 2 and will be given the class 'copiedOption' in box 1 (my default styling for this class is yellow background * but you may choose whatever styling suits you). If they are then transferred from box 2, they disappear from box 2, and the 'copiedOption' * class is removed from the corresponding option in box 1. * */ (function($) { var settings = new Array(); var group1 = new Array(); var group2 = new Array(); var onSort = new Array(); //the main method that the end user will execute to setup the DLB $.configureBoxes = function(options) { //define default settings var index = settings.push({ box1View: 'box1View', box1Storage: 'box1Storage', box1Filter: 'box1Filter', box1Clear: 'box1Clear', box1Counter: 'box1Counter', box2View: 'box2View', box2Storage: 'box2Storage', box2Filter: 'box2Filter', box2Clear: 'box2Clear', box2Counter: 'box2Counter', to1: 'to1', allTo1: 'allTo1', to2: 'to2', allTo2: 'allTo2', transferMode: 'move', sortBy: 'text', useFilters: true, useCounters: true, useSorting: true, selectOnSubmit: true }); index--; //merge default settings w/ user defined settings (with user-defined settings overriding defaults) $.extend(settings[index], options); //define box groups group1.push({ view: settings[index].box1View, storage: settings[index].box1Storage, filter: settings[index].box1Filter, clear: settings[index].box1Clear, counter: settings[index].box1Counter, index: index }); group2.push({ view: settings[index].box2View, storage: settings[index].box2Storage, filter: settings[index].box2Filter, clear: settings[index].box2Clear, counter: settings[index].box2Counter, index: index }); //define sort function if (settings[index].sortBy == 'text') { onSort.push(function(a, b) { var aVal = a.text.toLowerCase(); var bVal = b.text.toLowerCase(); if (aVal < bVal) { return -1; } if (aVal > bVal) { return 1; } return 0; }); } else { onSort.push(function(a, b) { var aVal = a.value.toLowerCase(); var bVal = b.value.toLowerCase(); if (aVal < bVal) { return -1; } if (aVal > bVal) { return 1; } return 0; }); } //configure events if (settings[index].useFilters) { $('#' + group1[index].filter).keyup(function() { Filter(group1[index]); }); $('#' + group2[index].filter).keyup(function() { Filter(group2[index]); }); $('#' + group1[index].clear).click(function() { ClearFilter(group1[index]); }); $('#' + group2[index].clear).click(function() { ClearFilter(group2[index]); }); } if (IsMoveMode(settings[index])) { $('#' + group2[index].view).dblclick(function() { MoveSelected(group2[index], group1[index]); }); $('#' + settings[index].to1).click(function() { MoveSelected(group2[index], group1[index]); }); $('#' + settings[index].allTo1).click(function() { MoveAll(group2[index], group1[index]); }); } else { $('#' + group2[index].view).dblclick(function() { RemoveSelected(group2[index], group1[index]); }); $('#' + settings[index].to1).click(function() { RemoveSelected(group2[index], group1[index]); }); $('#' + settings[index].allTo1).click(function() { RemoveAll(group2[index], group1[index]); }); } $('#' + group1[index].view).dblclick(function() { MoveSelected(group1[index], group2[index]); }); $('#' + settings[index].to2).click(function() { MoveSelected(group1[index], group2[index]); }); $('#' + settings[index].allTo2).click(function() { MoveAll(group1[index], group2[index]); }); //initialize the counters if (settings[index].useCounters) { UpdateLabel(group1[index]); UpdateLabel(group2[index]); } //pre-sort item sets if (settings[index].useSorting) { SortOptions(group1[index]); SortOptions(group2[index]); } //hide the storage boxes $('#' + group1[index].storage + ',#' + group2[index].storage).css('display', 'none'); //attach onSubmit functionality if desired if (settings[index].selectOnSubmit) { $('#' + settings[index].box2View).closest('form').submit(function() { $('#' + settings[index].box2View).children('option').attr('selected', 'selected'); }); } }; function UpdateLabel(group) { var showingCount = $("#" + group.view + " option").size(); var hiddenCount = $("#" + group.storage + " option").size(); $("#" + group.counter).text('Showing ' + showingCount + ' of ' + (showingCount + hiddenCount)); } function Filter(group) { var index = group.index; var filterLower; if (settings[index].useFilters) { filterLower = $('#' + group.filter).val().toString().toLowerCase(); } else { filterLower = ''; } $('#' + group.view + ' option').filter(function(i) { var toMatch = $(this).text().toString().toLowerCase(); return toMatch.indexOf(filterLower) == -1; }).appendTo('#' + group.storage); $('#' + group.storage + ' option').filter(function(i) { var toMatch = $(this).text().toString().toLowerCase(); return toMatch.indexOf(filterLower) != -1; }).appendTo('#' + group.view); try { $('#' + group.view + ' option').removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } if (settings[index].useSorting) { SortOptions(group); } if (settings[index].useCounters) { UpdateLabel(group); } } function SortOptions(group) { var $toSortOptions = $('#' + group.view + ' option'); $toSortOptions.sort(onSort[group.index]); $('#' + group.view).empty().append($toSortOptions); } function MoveSelected(fromGroup, toGroup) { if (IsMoveMode(settings[fromGroup.index])) { $('#' + fromGroup.view + ' option:selected').appendTo('#' + toGroup.view); } else { $('#' + fromGroup.view + ' option:selected:not([class*=copiedOption])').clone().appendTo('#' + toGroup.view).end().end().addClass('copiedOption'); } try { $('#' + fromGroup.view + ' option,#' + toGroup.view + ' option').removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } Filter(toGroup); if (settings[fromGroup.index].useCounters) { UpdateLabel(fromGroup); } } function MoveAll(fromGroup, toGroup) { if (IsMoveMode(settings[fromGroup.index])) { $('#' + fromGroup.view + ' option').appendTo('#' + toGroup.view); } else { $('#' + fromGroup.view + ' option:not([class*=copiedOption])').clone().appendTo('#' + toGroup.view).end().end().addClass('copiedOption'); } try { $('#' + fromGroup.view + ' option,#' + toGroup.view + ' option').removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } Filter(toGroup); if (settings[fromGroup.index].useCounters) { UpdateLabel(fromGroup); } } function RemoveSelected(removeGroup, otherGroup) { $('#' + otherGroup.view + ' option.copiedOption').add('#' + otherGroup.storage + ' option.copiedOption').remove(); try { $('#' + removeGroup.view + ' option:selected').appendTo('#' + otherGroup.view).removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } $('#' + removeGroup.view + ' option').add('#' + removeGroup.storage + ' option').clone().addClass('copiedOption').appendTo('#' + otherGroup.view); Filter(otherGroup); if (settings[removeGroup.index].useCounters) { UpdateLabel(removeGroup); } } function RemoveAll(removeGroup, otherGroup) { $('#' + otherGroup.view + ' option.copiedOption').add('#' + otherGroup.storage + ' option.copiedOption').remove(); try { $('#' + removeGroup.storage + ' option').clone().addClass('copiedOption').add('#' + removeGroup.view + ' option').appendTo('#' + otherGroup.view).removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } Filter(otherGroup); if (settings[removeGroup.index].useCounters) { UpdateLabel(removeGroup); } } function ClearFilter(group) { $('#' + group.filter).val(''); $('#' + group.storage + ' option').appendTo('#' + group.view); try { $('#' + group.view + ' option').removeAttr('selected'); } catch (ex) { //swallow the error for IE6 } if (settings[group.index].useSorting) { SortOptions(group); } if (settings[group.index].useCounters) { UpdateLabel(group); } } function IsMoveMode(currSettings) { return currSettings.transferMode == 'move'; } })(jQuery); ================================================ FILE: src/main/webapp/jslib/bs_js/jquery.blockui.js ================================================ /*! * jQuery blockUI plugin * Version 2.53 (01-NOV-2012) * @requires jQuery v1.3 or later * * Examples at: http://malsup.com/jquery/block/ * Copyright (c) 2007-2012 M. Alsup * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Thanks to Amir-Hossein Sobhi for some excellent contributions! */ ;(function() { "use strict"; function setup($) { if (/^1\.(0|1|2)/.test($.fn.jquery)) { /*global alert:true */ alert('blockUI requires jQuery v1.3 or later! You are using v' + $.fn.jquery); return; } $.fn._fadeIn = $.fn.fadeIn; var noOp = $.noop || function() {}; // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle // retarded userAgent strings on Vista) var msie = /MSIE/.test(navigator.userAgent); var ie6 = /MSIE 6.0/.test(navigator.userAgent); var mode = document.documentMode || 0; // var setExpr = msie && (($.browser.version < 8 && !mode) || mode < 8); var setExpr = $.isFunction( document.createElement('div').style.setExpression ); // global $ methods for blocking/unblocking the entire page $.blockUI = function(opts) { install(window, opts); }; $.unblockUI = function(opts) { remove(window, opts); }; // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl) $.growlUI = function(title, message, timeout, onClose) { var $m = $('
        '); if (title) $m.append('

        '+title+'

        '); if (message) $m.append('

        '+message+'

        '); if (timeout === undefined) timeout = 3000; $.blockUI({ message: $m, fadeIn: 700, fadeOut: 1000, centerY: false, timeout: timeout, showOverlay: false, onUnblock: onClose, css: $.blockUI.defaults.growlCSS }); }; // plugin method for blocking element content $.fn.block = function(opts) { var fullOpts = $.extend({}, $.blockUI.defaults, opts || {}); this.each(function() { var $el = $(this); if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked')) return; $el.unblock({ fadeOut: 0 }); }); return this.each(function() { if ($.css(this,'position') == 'static') this.style.position = 'relative'; this.style.zoom = 1; // force 'hasLayout' in ie install(this, opts); }); }; // plugin method for unblocking element content $.fn.unblock = function(opts) { return this.each(function() { remove(this, opts); }); }; $.blockUI.version = 2.53; // 2nd generation blocking at no extra cost! // override these in your code to change the default behavior and style $.blockUI.defaults = { // message displayed when blocking (use null for no message) message: '

        Please wait...

        ', title: null, // title string; only used when theme == true draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded) theme: false, // set to true to use with jQuery UI themes // styles for the message when blocking; if you wish to disable // these and use an external stylesheet then do this in your code: // $.blockUI.defaults.css = {}; css: { padding: 0, margin: 0, width: '30%', top: '40%', left: '35%', textAlign: 'center', color: '#000', border: '3px solid #aaa', backgroundColor:'#fff', cursor: 'wait' }, // minimal style set used when themes are used themedCSS: { width: '30%', top: '40%', left: '35%' }, // styles for the overlay overlayCSS: { backgroundColor: '#000', opacity: 0.6, cursor: 'wait' }, // style to replace wait cursor before unblocking to correct issue // of lingering wait cursor cursorReset: 'default', // styles applied when using $.growlUI growlCSS: { width: '350px', top: '10px', left: '', right: '10px', border: 'none', padding: '5px', opacity: 0.6, cursor: 'default', color: '#fff', backgroundColor: '#000', '-webkit-border-radius':'10px', '-moz-border-radius': '10px', 'border-radius': '10px' }, // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w // (hat tip to Jorge H. N. de Vasconcelos) /*jshint scripturl:true */ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank', // force usage of iframe in non-IE browsers (handy for blocking applets) forceIframe: false, // z-index for the blocking overlay baseZ: 1000, // set these to true to have the message automatically centered centerX: true, // <-- only effects element blocking (page block controlled via css above) centerY: true, // allow body element to be stetched in ie6; this makes blocking look better // on "short" pages. disable if you wish to prevent changes to the body height allowBodyStretch: true, // enable if you want key and mouse events to be disabled for content that is blocked bindEvents: true, // be default blockUI will supress tab navigation from leaving blocking content // (if bindEvents is true) constrainTabKey: true, // fadeIn time in millis; set to 0 to disable fadeIn on block fadeIn: 200, // fadeOut time in millis; set to 0 to disable fadeOut on unblock fadeOut: 400, // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock timeout: 0, // disable if you don't want to show the overlay showOverlay: true, // if true, focus will be placed in the first available input field when // page blocking focusInput: true, // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity) // no longer needed in 2012 // applyPlatformOpacityRules: true, // callback method invoked when fadeIn has completed and blocking message is visible onBlock: null, // callback method invoked when unblocking has completed; the callback is // passed the element that has been unblocked (which is the window object for page // blocks) and the options that were passed to the unblock call: // onUnblock(element, options) onUnblock: null, // callback method invoked when the overlay area is clicked. // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used. onOverlayClick: null, // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493 quirksmodeOffsetHack: 4, // class name of the message block blockMsgClass: 'blockMsg', // if it is already blocked, then ignore it (don't unblock and reblock) ignoreIfBlocked: false }; // private data and functions follow... var pageBlock = null; var pageBlockEls = []; function install(el, opts) { var css, themedCSS; var full = (el == window); var msg = (opts && opts.message !== undefined ? opts.message : undefined); opts = $.extend({}, $.blockUI.defaults, opts || {}); if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked')) return; opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {}); css = $.extend({}, $.blockUI.defaults.css, opts.css || {}); if (opts.onOverlayClick) opts.overlayCSS.cursor = 'pointer'; themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {}); msg = msg === undefined ? opts.message : msg; // remove the current block (if there is one) if (full && pageBlock) remove(window, {fadeOut:0}); // if an existing element is being used as the blocking content then we capture // its current place in the DOM (and current display style) so we can restore // it when we unblock if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) { var node = msg.jquery ? msg[0] : msg; var data = {}; $(el).data('blockUI.history', data); data.el = node; data.parent = node.parentNode; data.display = node.style.display; data.position = node.style.position; if (data.parent) data.parent.removeChild(node); } $(el).data('blockUI.onUnblock', opts.onUnblock); var z = opts.baseZ; // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform; // layer1 is the iframe layer which is used to supress bleed through of underlying content // layer2 is the overlay layer which has opacity and a wait cursor (by default) // layer3 is the message content that is displayed while blocking var lyr1, lyr2, lyr3, s; if (msie || opts.forceIframe) lyr1 = $(''); else lyr1 = $(''); if (opts.theme) lyr2 = $(''); else lyr2 = $(''); if (opts.theme && full) { s = ''; } else if (opts.theme) { s = ''; } else if (full) { s = ''; } else { s = ''; } lyr3 = $(s); // if we have a message, style it if (msg) { if (opts.theme) { lyr3.css(themedCSS); lyr3.addClass('ui-widget-content'); } else lyr3.css(css); } // style the overlay if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/) lyr2.css(opts.overlayCSS); lyr2.css('position', full ? 'fixed' : 'absolute'); // make iframe layer transparent in IE if (msie || opts.forceIframe) lyr1.css('opacity',0.0); //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el); var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el); $.each(layers, function() { this.appendTo($par); }); if (opts.theme && opts.draggable && $.fn.draggable) { lyr3.draggable({ handle: '.ui-dialog-titlebar', cancel: 'li' }); } // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling) var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0); if (ie6 || expr) { // give body 100% height if (full && opts.allowBodyStretch && $.support.boxModel) $('html,body').css('height','100%'); // fix ie6 issue when blocked element has a border width if ((ie6 || !$.support.boxModel) && !full) { var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth'); var fixT = t ? '(0 - '+t+')' : 0; var fixL = l ? '(0 - '+l+')' : 0; } // simulate fixed position $.each(layers, function(i,o) { var s = o[0].style; s.position = 'absolute'; if (i < 2) { if (full) s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"'); else s.setExpression('height','this.parentNode.offsetHeight + "px"'); if (full) s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'); else s.setExpression('width','this.parentNode.offsetWidth + "px"'); if (fixL) s.setExpression('left', fixL); if (fixT) s.setExpression('top', fixT); } else if (opts.centerY) { if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'); s.marginTop = 0; } else if (!opts.centerY && full) { var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0; var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"'; s.setExpression('top',expression); } }); } // show the message if (msg) { if (opts.theme) lyr3.find('.ui-widget-content').append(msg); else lyr3.append(msg); if (msg.jquery || msg.nodeType) $(msg).show(); } if ((msie || opts.forceIframe) && opts.showOverlay) lyr1.show(); // opacity is zero if (opts.fadeIn) { var cb = opts.onBlock ? opts.onBlock : noOp; var cb1 = (opts.showOverlay && !msg) ? cb : noOp; var cb2 = msg ? cb : noOp; if (opts.showOverlay) lyr2._fadeIn(opts.fadeIn, cb1); if (msg) lyr3._fadeIn(opts.fadeIn, cb2); } else { if (opts.showOverlay) lyr2.show(); if (msg) lyr3.show(); if (opts.onBlock) opts.onBlock(); } // bind key and mouse events bind(1, el, opts); if (full) { pageBlock = lyr3[0]; pageBlockEls = $(':input:enabled:visible',pageBlock); if (opts.focusInput) setTimeout(focus, 20); } else center(lyr3[0], opts.centerX, opts.centerY); if (opts.timeout) { // auto-unblock var to = setTimeout(function() { if (full) $.unblockUI(opts); else $(el).unblock(opts); }, opts.timeout); $(el).data('blockUI.timeout', to); } } // remove the block function remove(el, opts) { var full = (el == window); var $el = $(el); var data = $el.data('blockUI.history'); var to = $el.data('blockUI.timeout'); if (to) { clearTimeout(to); $el.removeData('blockUI.timeout'); } opts = $.extend({}, $.blockUI.defaults, opts || {}); bind(0, el, opts); // unbind events if (opts.onUnblock === null) { opts.onUnblock = $el.data('blockUI.onUnblock'); $el.removeData('blockUI.onUnblock'); } var els; if (full) // crazy selector to handle odd field errors in ie6/7 els = $('body').children().filter('.blockUI').add('body > .blockUI'); else els = $el.find('>.blockUI'); // fix cursor issue if ( opts.cursorReset ) { if ( els.length > 1 ) els[1].style.cursor = opts.cursorReset; if ( els.length > 2 ) els[2].style.cursor = opts.cursorReset; } if (full) pageBlock = pageBlockEls = null; if (opts.fadeOut) { els.fadeOut(opts.fadeOut); setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut); } else reset(els, data, opts, el); } // move blocking element back into the DOM where it started function reset(els,data,opts,el) { els.each(function(i,o) { // remove via DOM calls so we don't lose event handlers if (this.parentNode) this.parentNode.removeChild(this); }); if (data && data.el) { data.el.style.display = data.display; data.el.style.position = data.position; if (data.parent) data.parent.appendChild(data.el); $(el).removeData('blockUI.history'); } if (typeof opts.onUnblock == 'function') opts.onUnblock(el,opts); // fix issue in Safari 6 where block artifacts remain until reflow var body = $(document.body), w = body.width(), cssW = body[0].style.width; body.width(w-1).width(w); body[0].style.width = cssW; } // bind/unbind the handler function bind(b, el, opts) { var full = el == window, $el = $(el); // don't bother unbinding if there is nothing to unbind if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked'))) return; $el.data('blockUI.isBlocked', b); // don't bind events when overlay is not in use or if bindEvents is false if (!opts.bindEvents || (b && !opts.showOverlay)) return; // bind anchors and inputs for mouse and key events var events = 'mousedown mouseup keydown keypress touchstart touchend touchmove'; if (b) $(document).bind(events, opts, handler); else $(document).unbind(events, handler); // former impl... // var $e = $('a,:input'); // b ? $e.bind(events, opts, handler) : $e.unbind(events, handler); } // event handler to suppress keyboard/mouse events when blocking function handler(e) { // allow tab navigation (conditionally) if (e.keyCode && e.keyCode == 9) { if (pageBlock && e.data.constrainTabKey) { var els = pageBlockEls; var fwd = !e.shiftKey && e.target === els[els.length-1]; var back = e.shiftKey && e.target === els[0]; if (fwd || back) { setTimeout(function(){focus(back);},10); return false; } } } var opts = e.data; var target = $(e.target); if (target.hasClass('blockOverlay') && opts.onOverlayClick) opts.onOverlayClick(); // allow events within the message content if (target.parents('div.' + opts.blockMsgClass).length > 0) return true; // allow events for content that is not being blocked return target.parents().children().filter('div.blockUI').length === 0; } function focus(back) { if (!pageBlockEls) return; var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0]; if (e) e.focus(); } function center(el, x, y) { var p = el.parentNode, s = el.style; var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth'); var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth'); if (x) s.left = l > 0 ? (l+'px') : '0'; if (y) s.top = t > 0 ? (t+'px') : '0'; } function sz(el, p) { return parseInt($.css(el,p),10)||0; } } /*global define:true */ if (typeof define === 'function' && define.amd && define.amd.jQuery) { define(['jquery'], setup); } else { setup(jQuery); } })(); ================================================ FILE: src/main/webapp/jslib/bs_js/jquery.nicescroll.js ================================================ /* jquery.nicescroll 3.5.0 InuYaksa*2013 MIT http://areaaperta.com/nicescroll */(function(e){var z=!1,E=!1,L=5E3,M=2E3,y=0,N=function(){var e=document.getElementsByTagName("script"),e=e[e.length-1].src.split("?")[0];return 0e){if(b.getScrollTop()>=b.page.maxh)return!0}else if(0>=b.getScrollTop())return!0; b.scrollmom&&b.scrollmom.stop();b.lastdeltay+=e;b.debounced("mousewheely",function(){var d=b.lastdeltay;b.lastdeltay=0;b.rail.drag||b.doScrollBy(d)},120)}d.stopImmediatePropagation();return d.preventDefault()}var b=this;this.version="3.5.0";this.name="nicescroll";this.me=c;this.opt={doc:e("body"),win:!1};e.extend(this.opt,I);this.opt.snapbackspeed=80;if(h)for(var p in b.opt)"undefined"!=typeof h[p]&&(b.opt[p]=h[p]);this.iddoc=(this.doc=b.opt.doc)&&this.doc[0]?this.doc[0].id||"":"";this.ispage=/BODY|HTML/.test(b.opt.win? b.opt.win[0].nodeName:this.doc[0].nodeName);this.haswrapper=!1!==b.opt.win;this.win=b.opt.win||(this.ispage?e(window):this.doc);this.docscroll=this.ispage&&!this.haswrapper?e(window):this.win;this.body=e("body");this.iframe=this.isfixed=this.viewport=!1;this.isiframe="IFRAME"==this.doc[0].nodeName&&"IFRAME"==this.win[0].nodeName;this.istextarea="TEXTAREA"==this.win[0].nodeName;this.forcescreen=!1;this.canshowonmouseevent="scroll"!=b.opt.autohidemode;this.page=this.view=this.onzoomout=this.onzoomin= this.onscrollcancel=this.onscrollend=this.onscrollstart=this.onclick=this.ongesturezoom=this.onkeypress=this.onmousewheel=this.onmousemove=this.onmouseup=this.onmousedown=!1;this.scroll={x:0,y:0};this.scrollratio={x:0,y:0};this.cursorheight=20;this.scrollvaluemax=0;this.observerremover=this.observer=this.scrollmom=this.scrollrunning=this.checkrtlmode=!1;do this.id="ascrail"+M++;while(document.getElementById(this.id));this.hasmousefocus=this.hasfocus=this.zoomactive=this.zoom=this.selectiondrag=this.cursorfreezed= this.cursor=this.rail=!1;this.visibility=!0;this.hidden=this.locked=!1;this.cursoractive=!0;this.overflowx=b.opt.overflowx;this.overflowy=b.opt.overflowy;this.nativescrollingarea=!1;this.checkarea=0;this.events=[];this.saved={};this.delaylist={};this.synclist={};this.lastdeltay=this.lastdeltax=0;this.detected=P();var g=e.extend({},this.detected);this.ishwscroll=(this.canhwscroll=g.hastransform&&b.opt.hwacceleration)&&b.haswrapper;this.istouchcapable=!1;g.cantouch&&(g.ischrome&&!g.isios&&!g.isandroid)&& (this.istouchcapable=!0,g.cantouch=!1);g.cantouch&&(g.ismozilla&&!g.isios&&!g.isandroid)&&(this.istouchcapable=!0,g.cantouch=!1);b.opt.enablemouselockapi||(g.hasmousecapture=!1,g.haspointerlock=!1);this.delayed=function(d,c,f,g){var e=b.delaylist[d],k=(new Date).getTime();if(!g&&e&&e.tt)return!1;e&&e.tt&&clearTimeout(e.tt);if(e&&e.last+f>k&&!e.tt)b.delaylist[d]={last:k+f,tt:setTimeout(function(){b.delaylist[d].tt=0;c.call()},f)};else if(!e||!e.tt)b.delaylist[d]={last:k,tt:0},setTimeout(function(){c.call()}, 0)};this.debounced=function(d,c,f){var g=b.delaylist[d];(new Date).getTime();b.delaylist[d]=c;g||setTimeout(function(){var c=b.delaylist[d];b.delaylist[d]=!1;c.call()},f)};this.synched=function(d,c){b.synclist[d]=c;(function(){b.onsync||(v(function(){b.onsync=!1;for(d in b.synclist){var c=b.synclist[d];c&&c.call(b);b.synclist[d]=!1}}),b.onsync=!0)})();return d};this.unsynched=function(d){b.synclist[d]&&(b.synclist[d]=!1)};this.css=function(d,c){for(var f in c)b.saved.css.push([d,f,d.css(f)]),d.css(f, c[f])};this.scrollTop=function(d){return"undefined"==typeof d?b.getScrollTop():b.setScrollTop(d)};this.scrollLeft=function(d){return"undefined"==typeof d?b.getScrollLeft():b.setScrollLeft(d)};BezierClass=function(b,c,f,g,e,k,l){this.st=b;this.ed=c;this.spd=f;this.p1=g||0;this.p2=e||1;this.p3=k||0;this.p4=l||1;this.ts=(new Date).getTime();this.df=this.ed-this.st};BezierClass.prototype={B2:function(b){return 3*b*b*(1-b)},B3:function(b){return 3*b*(1-b)*(1-b)},B4:function(b){return(1-b)*(1-b)*(1-b)}, getNow:function(){var b=1-((new Date).getTime()-this.ts)/this.spd,c=this.B2(b)+this.B3(b)+this.B4(b);return 0>b?this.ed:this.st+Math.round(this.df*c)},update:function(b,c){this.st=this.getNow();this.ed=b;this.spd=c;this.ts=(new Date).getTime();this.df=this.ed-this.st;return this}};if(this.ishwscroll){this.doc.translate={x:0,y:0,tx:"0px",ty:"0px"};g.hastranslate3d&&g.isios&&this.doc.css("-webkit-backface-visibility","hidden");var s=function(){var d=b.doc.css(g.trstyle);return d&&"matrix"==d.substr(0, 6)?d.replace(/^.*\((.*)\)$/g,"$1").replace(/px/g,"").split(/, +/):!1};this.getScrollTop=function(d){if(!d){if(d=s())return 16==d.length?-d[13]:-d[5];if(b.timerscroll&&b.timerscroll.bz)return b.timerscroll.bz.getNow()}return b.doc.translate.y};this.getScrollLeft=function(d){if(!d){if(d=s())return 16==d.length?-d[12]:-d[4];if(b.timerscroll&&b.timerscroll.bh)return b.timerscroll.bh.getNow()}return b.doc.translate.x};this.notifyScrollEvent=document.createEvent?function(b){var c=document.createEvent("UIEvents"); c.initUIEvent("scroll",!1,!0,window,1);b.dispatchEvent(c)}:document.fireEvent?function(b){var c=document.createEventObject();b.fireEvent("onscroll");c.cancelBubble=!0}:function(b,c){};g.hastranslate3d&&b.opt.enabletranslate3d?(this.setScrollTop=function(d,c){b.doc.translate.y=d;b.doc.translate.ty=-1*d+"px";b.doc.css(g.trstyle,"translate3d("+b.doc.translate.tx+","+b.doc.translate.ty+",0px)");c||b.notifyScrollEvent(b.win[0])},this.setScrollLeft=function(d,c){b.doc.translate.x=d;b.doc.translate.tx=-1* d+"px";b.doc.css(g.trstyle,"translate3d("+b.doc.translate.tx+","+b.doc.translate.ty+",0px)");c||b.notifyScrollEvent(b.win[0])}):(this.setScrollTop=function(d,c){b.doc.translate.y=d;b.doc.translate.ty=-1*d+"px";b.doc.css(g.trstyle,"translate("+b.doc.translate.tx+","+b.doc.translate.ty+")");c||b.notifyScrollEvent(b.win[0])},this.setScrollLeft=function(d,c){b.doc.translate.x=d;b.doc.translate.tx=-1*d+"px";b.doc.css(g.trstyle,"translate("+b.doc.translate.tx+","+b.doc.translate.ty+")");c||b.notifyScrollEvent(b.win[0])})}else this.getScrollTop= function(){return b.docscroll.scrollTop()},this.setScrollTop=function(d){return b.docscroll.scrollTop(d)},this.getScrollLeft=function(){return b.docscroll.scrollLeft()},this.setScrollLeft=function(d){return b.docscroll.scrollLeft(d)};this.getTarget=function(b){return!b?!1:b.target?b.target:b.srcElement?b.srcElement:!1};this.hasParent=function(b,c){if(!b)return!1;for(var f=b.target||b.srcElement||b||!1;f&&f.id!=c;)f=f.parentNode||!1;return!1!==f};var u={thin:1,medium:3,thick:5};this.getOffset=function(){if(b.isfixed)return{top:parseFloat(b.win.css("top")), left:parseFloat(b.win.css("left"))};if(!b.viewport)return b.win.offset();var d=b.win.offset(),c=b.viewport.offset();return{top:d.top-c.top+b.viewport.scrollTop(),left:d.left-c.left+b.viewport.scrollLeft()}};this.updateScrollBar=function(d){if(b.ishwscroll)b.rail.css({height:b.win.innerHeight()}),b.railh&&b.railh.css({width:b.win.innerWidth()});else{var c=b.getOffset(),f=c.top,g=c.left,f=f+l(b.win,"border-top-width",!0);b.win.outerWidth();b.win.innerWidth();var g=g+(b.rail.align?b.win.outerWidth()- l(b.win,"border-right-width")-b.rail.width:l(b.win,"border-left-width")),e=b.opt.railoffset;e&&(e.top&&(f+=e.top),b.rail.align&&e.left&&(g+=e.left));b.locked||b.rail.css({top:f,left:g,height:d?d.h:b.win.innerHeight()});b.zoom&&b.zoom.css({top:f+1,left:1==b.rail.align?g-20:g+b.rail.width+4});b.railh&&!b.locked&&(f=c.top,g=c.left,d=b.railh.align?f+l(b.win,"border-top-width",!0)+b.win.innerHeight()-b.railh.height:f+l(b.win,"border-top-width",!0),g+=l(b.win,"border-left-width"),b.railh.css({top:d,left:g, width:b.railh.width}))}};this.doRailClick=function(d,c,f){var g;b.locked||(b.cancelEvent(d),c?(c=f?b.doScrollLeft:b.doScrollTop,g=f?(d.pageX-b.railh.offset().left-b.cursorwidth/2)*b.scrollratio.x:(d.pageY-b.rail.offset().top-b.cursorheight/2)*b.scrollratio.y,c(g)):(c=f?b.doScrollLeftBy:b.doScrollBy,g=f?b.scroll.x:b.scroll.y,d=f?d.pageX-b.railh.offset().left:d.pageY-b.rail.offset().top,f=f?b.view.w:b.view.h,g>=d?c(f):c(-f)))};b.hasanimationframe=v;b.hascancelanimationframe=w;b.hasanimationframe?b.hascancelanimationframe|| (w=function(){b.cancelAnimationFrame=!0}):(v=function(b){return setTimeout(b,15-Math.floor(+new Date/1E3)%16)},w=clearInterval);this.init=function(){b.saved.css=[];if(g.isie7mobile||g.isoperamini)return!0;g.hasmstouch&&b.css(b.ispage?e("html"):b.win,{"-ms-touch-action":"none"});b.zindex="auto";b.zindex=!b.ispage&&"auto"==b.opt.zindex?k()||"auto":b.opt.zindex;!b.ispage&&"auto"!=b.zindex&&b.zindex>y&&(y=b.zindex);b.isie&&(0==b.zindex&&"auto"==b.opt.zindex)&&(b.zindex="auto");if(!b.ispage||!g.cantouch&& !g.isieold&&!g.isie9mobile){var d=b.docscroll;b.ispage&&(d=b.haswrapper?b.win:b.doc);g.isie9mobile||b.css(d,{"overflow-y":"hidden"});b.ispage&&g.isie7&&("BODY"==b.doc[0].nodeName?b.css(e("html"),{"overflow-y":"hidden"}):"HTML"==b.doc[0].nodeName&&b.css(e("body"),{"overflow-y":"hidden"}));g.isios&&(!b.ispage&&!b.haswrapper)&&b.css(e("body"),{"-webkit-overflow-scrolling":"touch"});var c=e(document.createElement("div"));c.css({position:"relative",top:0,"float":"right",width:b.opt.cursorwidth,height:"0px", "background-color":b.opt.cursorcolor,border:b.opt.cursorborder,"background-clip":"padding-box","-webkit-border-radius":b.opt.cursorborderradius,"-moz-border-radius":b.opt.cursorborderradius,"border-radius":b.opt.cursorborderradius});c.hborder=parseFloat(c.outerHeight()-c.innerHeight());b.cursor=c;var f=e(document.createElement("div"));f.attr("id",b.id);f.addClass("nicescroll-rails");var l,h,x=["left","right"],q;for(q in x)h=x[q],(l=b.opt.railpadding[h])?f.css("padding-"+h,l+"px"):b.opt.railpadding[h]= 0;f.append(c);f.width=Math.max(parseFloat(b.opt.cursorwidth),c.outerWidth())+b.opt.railpadding.left+b.opt.railpadding.right;f.css({width:f.width+"px",zIndex:b.zindex,background:b.opt.background,cursor:"default"});f.visibility=!0;f.scrollable=!0;f.align="left"==b.opt.railalign?0:1;b.rail=f;c=b.rail.drag=!1;b.opt.boxzoom&&(!b.ispage&&!g.isieold)&&(c=document.createElement("div"),b.bind(c,"click",b.doZoom),b.zoom=e(c),b.zoom.css({cursor:"pointer","z-index":b.zindex,backgroundImage:"url("+N+"zoomico.png)", height:18,width:18,backgroundPosition:"0px 0px"}),b.opt.dblclickzoom&&b.bind(b.win,"dblclick",b.doZoom),g.cantouch&&b.opt.gesturezoom&&(b.ongesturezoom=function(d){1.5d.scale&&b.doZoomOut(d);return b.cancelEvent(d)},b.bind(b.win,"gestureend",b.ongesturezoom)));b.railh=!1;if(b.opt.horizrailenabled){b.css(d,{"overflow-x":"hidden"});c=e(document.createElement("div"));c.css({position:"relative",top:0,height:b.opt.cursorwidth,width:"0px","background-color":b.opt.cursorcolor, border:b.opt.cursorborder,"background-clip":"padding-box","-webkit-border-radius":b.opt.cursorborderradius,"-moz-border-radius":b.opt.cursorborderradius,"border-radius":b.opt.cursorborderradius});c.wborder=parseFloat(c.outerWidth()-c.innerWidth());b.cursorh=c;var m=e(document.createElement("div"));m.attr("id",b.id+"-hr");m.addClass("nicescroll-rails");m.height=Math.max(parseFloat(b.opt.cursorwidth),c.outerHeight());m.css({height:m.height+"px",zIndex:b.zindex,background:b.opt.background});m.append(c); m.visibility=!0;m.scrollable=!0;m.align="top"==b.opt.railvalign?0:1;b.railh=m;b.railh.drag=!1}b.ispage?(f.css({position:"fixed",top:"0px",height:"100%"}),f.align?f.css({right:"0px"}):f.css({left:"0px"}),b.body.append(f),b.railh&&(m.css({position:"fixed",left:"0px",width:"100%"}),m.align?m.css({bottom:"0px"}):m.css({top:"0px"}),b.body.append(m))):(b.ishwscroll?("static"==b.win.css("position")&&b.css(b.win,{position:"relative"}),d="HTML"==b.win[0].nodeName?b.body:b.win,b.zoom&&(b.zoom.css({position:"absolute", top:1,right:0,"margin-right":f.width+4}),d.append(b.zoom)),f.css({position:"absolute",top:0}),f.align?f.css({right:0}):f.css({left:0}),d.append(f),m&&(m.css({position:"absolute",left:0,bottom:0}),m.align?m.css({bottom:0}):m.css({top:0}),d.append(m))):(b.isfixed="fixed"==b.win.css("position"),d=b.isfixed?"fixed":"absolute",b.isfixed||(b.viewport=b.getViewport(b.win[0])),b.viewport&&(b.body=b.viewport,!1==/fixed|relative|absolute/.test(b.viewport.css("position"))&&b.css(b.viewport,{position:"relative"})), f.css({position:d}),b.zoom&&b.zoom.css({position:d}),b.updateScrollBar(),b.body.append(f),b.zoom&&b.body.append(b.zoom),b.railh&&(m.css({position:d}),b.body.append(m))),g.isios&&b.css(b.win,{"-webkit-tap-highlight-color":"rgba(0,0,0,0)","-webkit-touch-callout":"none"}),g.isie&&b.opt.disableoutline&&b.win.attr("hideFocus","true"),g.iswebkit&&b.opt.disableoutline&&b.win.css({outline:"none"}));!1===b.opt.autohidemode?(b.autohidedom=!1,b.rail.css({opacity:b.opt.cursoropacitymax}),b.railh&&b.railh.css({opacity:b.opt.cursoropacitymax})): !0===b.opt.autohidemode||"leave"===b.opt.autohidemode?(b.autohidedom=e().add(b.rail),g.isie8&&(b.autohidedom=b.autohidedom.add(b.cursor)),b.railh&&(b.autohidedom=b.autohidedom.add(b.railh)),b.railh&&g.isie8&&(b.autohidedom=b.autohidedom.add(b.cursorh))):"scroll"==b.opt.autohidemode?(b.autohidedom=e().add(b.rail),b.railh&&(b.autohidedom=b.autohidedom.add(b.railh))):"cursor"==b.opt.autohidemode?(b.autohidedom=e().add(b.cursor),b.railh&&(b.autohidedom=b.autohidedom.add(b.cursorh))):"hidden"==b.opt.autohidemode&& (b.autohidedom=!1,b.hide(),b.locked=!1);if(g.isie9mobile)b.scrollmom=new J(b),b.onmangotouch=function(d){d=b.getScrollTop();var c=b.getScrollLeft();if(d==b.scrollmom.lastscrolly&&c==b.scrollmom.lastscrollx)return!0;var f=d-b.mangotouch.sy,g=c-b.mangotouch.sx;if(0!=Math.round(Math.sqrt(Math.pow(g,2)+Math.pow(f,2)))){var n=0>f?-1:1,e=0>g?-1:1,k=+new Date;b.mangotouch.lazy&&clearTimeout(b.mangotouch.lazy);80r?r=Math.round(r/2):r>b.page.maxh&&(r=b.page.maxh+Math.round((r-b.page.maxh)/ 2)):(0>r&&(k=r=0),r>b.page.maxh&&(r=b.page.maxh,k=0));if(b.railh&&b.railh.scrollable){var m=b.rail.drag.sl-h;b.ishwscroll&&b.opt.bouncescroll?0>m?m=Math.round(m/2):m>b.page.maxw&&(m=b.page.maxw+Math.round((m-b.page.maxw)/2)):(0>m&&(l=m=0),m>b.page.maxw&&(m=b.page.maxw,l=0))}f=!1;if(b.rail.drag.dl)f=!0,"v"==b.rail.drag.dl?m=b.rail.drag.sl:"h"==b.rail.drag.dl&&(r=b.rail.drag.st);else{var n=Math.abs(n),h=Math.abs(h),x=b.opt.directionlockdeadzone;if("v"==b.rail.drag.ck){if(n>x&&h<=0.3*n)return b.rail.drag= !1,!0;h>x&&(b.rail.drag.dl="f",e("body").scrollTop(e("body").scrollTop()))}else if("h"==b.rail.drag.ck){if(h>x&&n<=0.3*h)return b.rail.drag=!1,!0;n>x&&(b.rail.drag.dl="f",e("body").scrollLeft(e("body").scrollLeft()))}}b.synched("touchmove",function(){b.rail.drag&&2==b.rail.drag.pt&&(b.prepareTransition&&b.prepareTransition(0),b.rail.scrollable&&b.setScrollTop(r),b.scrollmom.update(l,k),b.railh&&b.railh.scrollable?(b.setScrollLeft(m),b.showCursor(r,m)):b.showCursor(r),g.isie10&&document.selection.clear())}); g.ischrome&&b.istouchcapable&&(f=!1);if(f)return b.cancelEvent(d)}}}b.onmousedown=function(d,c){if(!(b.rail.drag&&1!=b.rail.drag.pt)){if(b.locked)return b.cancelEvent(d);b.cancelScroll();b.rail.drag={x:d.clientX,y:d.clientY,sx:b.scroll.x,sy:b.scroll.y,pt:1,hr:!!c};var f=b.getTarget(d);!b.ispage&&g.hasmousecapture&&f.setCapture();b.isiframe&&!g.hasmousecapture&&(b.saved.csspointerevents=b.doc.css("pointer-events"),b.css(b.doc,{"pointer-events":"none"}));return b.cancelEvent(d)}};b.onmouseup=function(d){if(b.rail.drag&& (g.hasmousecapture&&document.releaseCapture(),b.isiframe&&!g.hasmousecapture&&b.doc.css("pointer-events",b.saved.csspointerevents),1==b.rail.drag.pt))return b.rail.drag=!1,b.cancelEvent(d)};b.onmousemove=function(d){if(b.rail.drag&&1==b.rail.drag.pt){if(g.ischrome&&0==d.which)return b.onmouseup(d);b.cursorfreezed=!0;if(b.rail.drag.hr){b.scroll.x=b.rail.drag.sx+(d.clientX-b.rail.drag.x);0>b.scroll.x&&(b.scroll.x=0);var c=b.scrollvaluemaxw;b.scroll.x>c&&(b.scroll.x=c)}else b.scroll.y=b.rail.drag.sy+ (d.clientY-b.rail.drag.y),0>b.scroll.y&&(b.scroll.y=0),c=b.scrollvaluemax,b.scroll.y>c&&(b.scroll.y=c);b.synched("mousemove",function(){b.rail.drag&&1==b.rail.drag.pt&&(b.showCursor(),b.rail.drag.hr?b.doScrollLeft(Math.round(b.scroll.x*b.scrollratio.x),b.opt.cursordragspeed):b.doScrollTop(Math.round(b.scroll.y*b.scrollratio.y),b.opt.cursordragspeed))});return b.cancelEvent(d)}};if(g.cantouch||b.opt.touchbehavior)b.onpreventclick=function(d){if(b.preventclick)return b.preventclick.tg.onclick=b.preventclick.click, b.preventclick=!1,b.cancelEvent(d)},b.bind(b.win,"mousedown",b.ontouchstart),b.onclick=g.isios?!1:function(d){return b.lastmouseup?(b.lastmouseup=!1,b.cancelEvent(d)):!0},b.opt.grabcursorenabled&&g.cursorgrabvalue&&(b.css(b.ispage?b.doc:b.win,{cursor:g.cursorgrabvalue}),b.css(b.rail,{cursor:g.cursorgrabvalue}));else{var p=function(d){if(b.selectiondrag){if(d){var c=b.win.outerHeight();d=d.pageY-b.selectiondrag.top;0=c&&(d-=c);b.selectiondrag.df=d}0!=b.selectiondrag.df&&(b.doScrollBy(2* -Math.floor(b.selectiondrag.df/6)),b.debounced("doselectionscroll",function(){p()},50))}};b.hasTextSelected="getSelection"in document?function(){return 0b.page.maxh?b.doScrollTop(b.page.maxh):(b.scroll.y=Math.round(b.getScrollTop()*(1/b.scrollratio.y)),b.scroll.x=Math.round(b.getScrollLeft()* (1/b.scrollratio.x)),b.cursoractive&&b.noticeCursor());b.scroll.y&&0==b.getScrollTop()&&b.doScrollTo(Math.floor(b.scroll.y*b.scrollratio.y));return b};this.resize=b.onResize;this.lazyResize=function(d){d=isNaN(d)?30:d;b.delayed("resize",b.resize,d);return b};this._bind=function(d,c,f,g){b.events.push({e:d,n:c,f:f,b:g,q:!1});d.addEventListener?d.addEventListener(c,f,g||!1):d.attachEvent?d.attachEvent("on"+c,f):d["on"+c]=f};this.jqbind=function(d,c,f){b.events.push({e:d,n:c,f:f,q:!0});e(d).bind(c,f)}; this.bind=function(d,c,f,e){var k="jquery"in d?d[0]:d;"mousewheel"==c?"onwheel"in b.win?b._bind(k,"wheel",f,e||!1):(d="undefined"!=typeof document.onmousewheel?"mousewheel":"DOMMouseScroll",q(k,d,f,e||!1),"DOMMouseScroll"==d&&q(k,"MozMousePixelScroll",f,e||!1)):k.addEventListener?(g.cantouch&&/mouseup|mousedown|mousemove/.test(c)&&b._bind(k,"mousedown"==c?"touchstart":"mouseup"==c?"touchend":"touchmove",function(b){if(b.touches){if(2>b.touches.length){var d=b.touches.length?b.touches[0]:b;d.original= b;f.call(this,d)}}else b.changedTouches&&(d=b.changedTouches[0],d.original=b,f.call(this,d))},e||!1),b._bind(k,c,f,e||!1),g.cantouch&&"mouseup"==c&&b._bind(k,"touchcancel",f,e||!1)):b._bind(k,c,function(d){if((d=d||window.event||!1)&&d.srcElement)d.target=d.srcElement;"pageY"in d||(d.pageX=d.clientX+document.documentElement.scrollLeft,d.pageY=d.clientY+document.documentElement.scrollTop);return!1===f.call(k,d)||!1===e?b.cancelEvent(d):!0})};this._unbind=function(b,c,f,g){b.removeEventListener?b.removeEventListener(c, f,g):b.detachEvent?b.detachEvent("on"+c,f):b["on"+c]=!1};this.unbindAll=function(){for(var d=0;d(b.newscrolly-k)*(e-k)||0>(b.newscrollx-l)*(c-l))&&b.cancelScroll();!1==b.opt.bouncescroll&&(0>e?e=0:e>b.page.maxh&&(e=b.page.maxh),0>c?c=0:c>b.page.maxw&&(c=b.page.maxw)); if(b.scrollrunning&&c==b.newscrollx&&e==b.newscrolly)return!1;b.newscrolly=e;b.newscrollx=c;b.newscrollspeed=f||!1;if(b.timer)return!1;b.timer=setTimeout(function(){var f=b.getScrollTop(),k=b.getScrollLeft(),l,h;l=c-k;h=e-f;l=Math.round(Math.sqrt(Math.pow(l,2)+Math.pow(h,2)));l=b.newscrollspeed&&1=b.newscrollspeed&&(l*=b.newscrollspeed);b.prepareTransition(l,!0);b.timerscroll&&b.timerscroll.tm&&clearInterval(b.timerscroll.tm); 0c?c=0:c>b.page.maxh&&(c=b.page.maxh);0>e?e=0:e>b.page.maxw&&(e=b.page.maxw);if(c!=b.newscrolly||e!=b.newscrollx)return b.doScrollPos(e,c,b.opt.snapbackspeed);b.onscrollend&&b.scrollrunning&&b.onscrollend.call(b,{type:"scrollend",current:{x:e,y:c},end:{x:b.newscrollx,y:b.newscrolly}});b.scrollrunning=!1}):(this.doScrollLeft=function(c,g){var f=b.scrollrunning?b.newscrolly:b.getScrollTop();b.doScrollPos(c,f,g)},this.doScrollTop=function(c, g){var f=b.scrollrunning?b.newscrollx:b.getScrollLeft();b.doScrollPos(f,c,g)},this.doScrollPos=function(c,g,f){function e(){if(b.cancelAnimationFrame)return!0;b.scrollrunning=!0;if(p=1-p)return b.timer=v(e)||1;var c=0,d=sy=b.getScrollTop();if(b.dst.ay){var d=b.bzscroll?b.dst.py+b.bzscroll.getNow()*b.dst.ay:b.newscrolly,f=d-sy;if(0>f&&db.newscrolly)d=b.newscrolly;b.setScrollTop(d);d==b.newscrolly&&(c=1)}else c=1;var g=sx=b.getScrollLeft();if(b.dst.ax){g=b.bzscroll?b.dst.px+b.bzscroll.getNow()* b.dst.ax:b.newscrollx;f=g-sx;if(0>f&&gb.newscrollx)g=b.newscrollx;b.setScrollLeft(g);g==b.newscrollx&&(c+=1)}else c+=1;2==c?(b.timer=0,b.cursorfreezed=!1,b.bzscroll=!1,b.scrollrunning=!1,0>d?d=0:d>b.page.maxh&&(d=b.page.maxh),0>g?g=0:g>b.page.maxw&&(g=b.page.maxw),g!=b.newscrollx||d!=b.newscrolly?b.doScrollPos(g,d):b.onscrollend&&b.onscrollend.call(b,{type:"scrollend",current:{x:sx,y:sy},end:{x:b.newscrollx,y:b.newscrolly}})):b.timer=v(e)||1}g="undefined"==typeof g||!1===g?b.getScrollTop(!0): g;if(b.timer&&b.newscrolly==g&&b.newscrollx==c)return!0;b.timer&&w(b.timer);b.timer=0;var k=b.getScrollTop(),l=b.getScrollLeft();(0>(b.newscrolly-k)*(g-k)||0>(b.newscrollx-l)*(c-l))&&b.cancelScroll();b.newscrolly=g;b.newscrollx=c;if(!b.bouncescroll||!b.rail.visibility)0>b.newscrolly?b.newscrolly=0:b.newscrolly>b.page.maxh&&(b.newscrolly=b.page.maxh);if(!b.bouncescroll||!b.railh.visibility)0>b.newscrollx?b.newscrollx=0:b.newscrollx>b.page.maxw&&(b.newscrollx=b.page.maxw);b.dst={};b.dst.x=c-l;b.dst.y= g-k;b.dst.px=l;b.dst.py=k;var h=Math.round(Math.sqrt(Math.pow(b.dst.x,2)+Math.pow(b.dst.y,2)));b.dst.ax=b.dst.x/h;b.dst.ay=b.dst.y/h;var m=0,q=h;0==b.dst.x?(m=k,q=g,b.dst.ay=1,b.dst.py=0):0==b.dst.y&&(m=l,q=c,b.dst.ax=1,b.dst.px=0);h=b.getTransitionSpeed(h);f&&1>=f&&(h*=f);b.bzscroll=0=b.page.maxh||l==b.page.maxw&&c>=b.page.maxw)&&b.checkContentSize();var p=1;b.cancelAnimationFrame=!1;b.timer=1; b.onscrollstart&&!b.scrollrunning&&b.onscrollstart.call(b,{type:"scrollstart",current:{x:l,y:k},request:{x:c,y:g},end:{x:b.newscrollx,y:b.newscrolly},speed:h});e();(k==b.page.maxh&&g>=k||l==b.page.maxw&&c>=l)&&b.checkContentSize();b.noticeCursor()}},this.cancelScroll=function(){b.timer&&w(b.timer);b.timer=0;b.bzscroll=!1;b.scrollrunning=!1;return b}):(this.doScrollLeft=function(c,g){var f=b.getScrollTop();b.doScrollPos(c,f,g)},this.doScrollTop=function(c,g){var f=b.getScrollLeft();b.doScrollPos(f, c,g)},this.doScrollPos=function(c,g,f){var e=c>b.page.maxw?b.page.maxw:c;0>e&&(e=0);var k=g>b.page.maxh?b.page.maxh:g;0>k&&(k=0);b.synched("scroll",function(){b.setScrollTop(k);b.setScrollLeft(e)})},this.cancelScroll=function(){});this.doScrollBy=function(c,g){var f=0,f=g?Math.floor((b.scroll.y-c)*b.scrollratio.y):(b.timer?b.newscrolly:b.getScrollTop(!0))-c;if(b.bouncescroll){var e=Math.round(b.view.h/2);f<-e?f=-e:f>b.page.maxh+e&&(f=b.page.maxh+e)}b.cursorfreezed=!1;py=b.getScrollTop(!0);if(0>f&& 0>=py)return b.noticeCursor();if(f>b.page.maxh&&py>=b.page.maxh)return b.checkContentSize(),b.noticeCursor();b.doScrollTop(f)};this.doScrollLeftBy=function(c,g){var f=0,f=g?Math.floor((b.scroll.x-c)*b.scrollratio.x):(b.timer?b.newscrollx:b.getScrollLeft(!0))-c;if(b.bouncescroll){var e=Math.round(b.view.w/2);f<-e?f=-e:f>b.page.maxw+e&&(f=b.page.maxw+e)}b.cursorfreezed=!1;px=b.getScrollLeft(!0);if(0>f&&0>=px||f>b.page.maxw&&px>=b.page.maxw)return b.noticeCursor();b.doScrollLeft(f)};this.doScrollTo= function(c,g){g&&Math.round(c*b.scrollratio.y);b.cursorfreezed=!1;b.doScrollTop(c)};this.checkContentSize=function(){var c=b.getContentSize();(c.h!=b.page.h||c.w!=b.page.w)&&b.resize(!1,c)};b.onscroll=function(c){b.rail.drag||b.cursorfreezed||b.synched("scroll",function(){b.scroll.y=Math.round(b.getScrollTop()*(1/b.scrollratio.y));b.railh&&(b.scroll.x=Math.round(b.getScrollLeft()*(1/b.scrollratio.x)));b.noticeCursor()})};b.bind(b.docscroll,"scroll",b.onscroll);this.doZoomIn=function(c){if(!b.zoomactive){b.zoomactive= !0;b.zoomrestore={style:{}};var k="position top left zIndex backgroundColor marginTop marginBottom marginLeft marginRight".split(" "),f=b.win[0].style,l;for(l in k){var h=k[l];b.zoomrestore.style[h]="undefined"!=typeof f[h]?f[h]:""}b.zoomrestore.style.width=b.win.css("width");b.zoomrestore.style.height=b.win.css("height");b.zoomrestore.padding={w:b.win.outerWidth()-b.win.width(),h:b.win.outerHeight()-b.win.height()};g.isios4&&(b.zoomrestore.scrollTop=e(window).scrollTop(),e(window).scrollTop(0)); b.win.css({position:g.isios4?"absolute":"fixed",top:0,left:0,"z-index":y+100,margin:"0px"});k=b.win.css("backgroundColor");(""==k||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(k))&&b.win.css("backgroundColor","#fff");b.rail.css({"z-index":y+101});b.zoom.css({"z-index":y+102});b.zoom.css("backgroundPosition","0px -18px");b.resizeZoom();b.onzoomin&&b.onzoomin.call(b);return b.cancelEvent(c)}};this.doZoomOut=function(c){if(b.zoomactive)return b.zoomactive=!1,b.win.css("margin",""),b.win.css(b.zoomrestore.style), g.isios4&&e(window).scrollTop(b.zoomrestore.scrollTop),b.rail.css({"z-index":b.zindex}),b.zoom.css({"z-index":b.zindex}),b.zoomrestore=!1,b.zoom.css("backgroundPosition","0px 0px"),b.onResize(),b.onzoomout&&b.onzoomout.call(b),b.cancelEvent(c)};this.doZoom=function(c){return b.zoomactive?b.doZoomOut(c):b.doZoomIn(c)};this.resizeZoom=function(){if(b.zoomactive){var c=b.getScrollTop();b.win.css({width:e(window).width()-b.zoomrestore.padding.w+"px",height:e(window).height()-b.zoomrestore.padding.h+"px"}); b.onResize();b.setScrollTop(Math.min(b.page.maxh,c))}};this.init();e.nicescroll.push(this)},J=function(e){var c=this;this.nc=e;this.steptime=this.lasttime=this.speedy=this.speedx=this.lasty=this.lastx=0;this.snapy=this.snapx=!1;this.demuly=this.demulx=0;this.lastscrolly=this.lastscrollx=-1;this.timer=this.chky=this.chkx=0;this.time=function(){return+new Date};this.reset=function(e,l){c.stop();var h=c.time();c.steptime=0;c.lasttime=h;c.speedx=0;c.speedy=0;c.lastx=e;c.lasty=l;c.lastscrollx=-1;c.lastscrolly= -1};this.update=function(e,l){var h=c.time();c.steptime=h-c.lasttime;c.lasttime=h;var h=l-c.lasty,t=e-c.lastx,b=c.nc.getScrollTop(),p=c.nc.getScrollLeft(),b=b+h,p=p+t;c.snapx=0>p||p>c.nc.page.maxw;c.snapy=0>b||b>c.nc.page.maxh;c.speedx=t;c.speedy=h;c.lastx=e;c.lasty=l};this.stop=function(){c.nc.unsynched("domomentum2d");c.timer&&clearTimeout(c.timer);c.timer=0;c.lastscrollx=-1;c.lastscrolly=-1};this.doSnapy=function(e,l){var h=!1;0>l?(l=0,h=!0):l>c.nc.page.maxh&&(l=c.nc.page.maxh,h=!0);0>e?(e=0,h= !0):e>c.nc.page.maxw&&(e=c.nc.page.maxw,h=!0);h&&c.nc.doScrollPos(e,l,c.nc.opt.snapbackspeed)};this.doMomentum=function(e){var l=c.time(),h=e?l+e:c.lasttime;e=c.nc.getScrollLeft();var t=c.nc.getScrollTop(),b=c.nc.page.maxh,p=c.nc.page.maxw;c.speedx=0=l-h;if(0>t||t>b||0>e||e>p)h=!1;e=c.speedx&&h?c.speedx:!1;if(c.speedy&&h&&c.speedy||e){var g=Math.max(16,c.steptime);50s||s>p))e=0.1;if(c.speedy&&(u=Math.floor(c.lastscrolly-c.speedy*(1-c.demulxy)),c.lastscrolly=u,0>u||u>b))e=0.1;c.demulxy=Math.min(1,c.demulxy+e);c.nc.synched("domomentum2d",function(){c.speedx&&(c.nc.getScrollLeft()!=c.chkx&&c.stop(),c.chkx= s,c.nc.setScrollLeft(s));c.speedy&&(c.nc.getScrollTop()!=c.chky&&c.stop(),c.chky=u,c.nc.setScrollTop(u));c.timer||(c.nc.hideCursor(),c.doSnapy(s,u))});1>c.demulxy?c.timer=setTimeout(d,g):(c.stop(),c.nc.hideCursor(),c.doSnapy(s,u))};d()}else c.doSnapy(c.nc.getScrollLeft(),c.nc.getScrollTop())}},B=e.fn.scrollTop;e.cssHooks.pageYOffset={get:function(h,c,k){return(c=e.data(h,"__nicescroll")||!1)&&c.ishwscroll?c.getScrollTop():B.call(h)},set:function(h,c){var k=e.data(h,"__nicescroll")||!1;k&&k.ishwscroll? k.setScrollTop(parseInt(c)):B.call(h,c);return this}};e.fn.scrollTop=function(h){if("undefined"==typeof h){var c=this[0]?e.data(this[0],"__nicescroll")||!1:!1;return c&&c.ishwscroll?c.getScrollTop():B.call(this)}return this.each(function(){var c=e.data(this,"__nicescroll")||!1;c&&c.ishwscroll?c.setScrollTop(parseInt(h)):B.call(e(this),h)})};var C=e.fn.scrollLeft;e.cssHooks.pageXOffset={get:function(h,c,k){return(c=e.data(h,"__nicescroll")||!1)&&c.ishwscroll?c.getScrollLeft():C.call(h)},set:function(h, c){var k=e.data(h,"__nicescroll")||!1;k&&k.ishwscroll?k.setScrollLeft(parseInt(c)):C.call(h,c);return this}};e.fn.scrollLeft=function(h){if("undefined"==typeof h){var c=this[0]?e.data(this[0],"__nicescroll")||!1:!1;return c&&c.ishwscroll?c.getScrollLeft():C.call(this)}return this.each(function(){var c=e.data(this,"__nicescroll")||!1;c&&c.ishwscroll?c.setScrollLeft(parseInt(h)):C.call(e(this),h)})};var D=function(h){var c=this;this.length=0;this.name="nicescrollarray";this.each=function(e){for(var h= 0,k=0;hSparkline: 1,4,6,6,8,5,3,5

        * $('.sparkline').sparkline(); * There must be no spaces in the enclosed data set * * Otherwise values must be an array of numbers or null values *

        Sparkline: This text replaced if the browser is compatible

        * $('#sparkline1').sparkline([1,4,6,6,8,5,3,5]) * $('#sparkline2').sparkline([1,4,6,null,null,5,3,5]) * * Values can also be specified in an HTML comment, or as a values attribute: *

        Sparkline:

        *

        Sparkline:

        * $('.sparkline').sparkline(); * * For line charts, x values can also be specified: *

        Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5

        * $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ]) * * By default, options should be passed in as teh second argument to the sparkline function: * $('.sparkline').sparkline([1,2,3,4], {type: 'bar'}) * * Options can also be set by passing them on the tag itself. This feature is disabled by default though * as there's a slight performance overhead: * $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true}) *

        Sparkline: loading

        * Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix) * * Supported options: * lineColor - Color of the line used for the chart * fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart * width - Width of the chart - Defaults to 3 times the number of values in pixels * height - Height of the chart - Defaults to the height of the containing element * chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied * chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied * chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax * chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied * chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied * composite - If true then don't erase any existing chart attached to the tag, but draw * another chart over the top - Note that width and height are ignored if an * existing chart is detected. * tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values' * enableTagOptions - Whether to check tags for sparkline options * tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark' * disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a * hidden dom element, avoding a browser reflow * disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled, * making the plugin perform much like it did in 1.x * disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled) * disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled * defaults to false (highlights enabled) * highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase * tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body * tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied * tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis * tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis * tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip * callback is given arguments of (sparkline, options, fields) * tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title * tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries) * to control the format of the tooltip * tooltipPrefix - A string to prepend to each field displayed in a tooltip * tooltipSuffix - A string to append to each field displayed in a tooltip * tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true) * tooltipValueLookups - An object or range map to map field values to tooltip strings * (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win") * numberFormatter - Optional callback for formatting numbers in tooltips * numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to "," * numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "." * numberDigitGroupCount - Number of digits between group separator - Defaults to 3 * * There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default), * 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box' * line - Line chart. Options: * spotColor - Set to '' to not end each line in a circular spot * minSpotColor - If set, color of spot at minimum value * maxSpotColor - If set, color of spot at maximum value * spotRadius - Radius in pixels * lineWidth - Width of line in pixels * normalRangeMin * normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal" * or expected range of values * normalRangeColor - Color to use for the above bar * drawNormalOnTop - Draw the normal range above the chart fill color if true * defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart * highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable * highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable * valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map * * bar - Bar chart. Options: * barColor - Color of bars for postive values * negBarColor - Color of bars for negative values * zeroColor - Color of bars with zero values * nullColor - Color of bars with null values - Defaults to omitting the bar entirely * barWidth - Width of bars in pixels * colorMap - Optional mappnig of values to colors to override the *BarColor values above * can be an Array of values to control the color of individual bars or a range map * to specify colors for individual ranges of values * barSpacing - Gap between bars in pixels * zeroAxis - Centers the y-axis around zero if true * * tristate - Charts values of win (>0), lose (<0) or draw (=0) * posBarColor - Color of win values * negBarColor - Color of lose values * zeroBarColor - Color of draw values * barWidth - Width of bars in pixels * barSpacing - Gap between bars in pixels * colorMap - Optional mappnig of values to colors to override the *BarColor values above * can be an Array of values to control the color of individual bars or a range map * to specify colors for individual ranges of values * * discrete - Options: * lineHeight - Height of each line in pixels - Defaults to 30% of the graph height * thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor * thresholdColor * * bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ... * options: * targetColor - The color of the vertical target marker * targetWidth - The width of the target marker in pixels * performanceColor - The color of the performance measure horizontal bar * rangeColors - Colors to use for each qualitative range background color * * pie - Pie chart. Options: * sliceColors - An array of colors to use for pie slices * offset - Angle in degrees to offset the first slice - Try -90 or +90 * borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border) * borderColor - Color to use for the pie chart border - Defaults to #000 * * box - Box plot. Options: * raw - Set to true to supply pre-computed plot points as values * values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier * When set to false you can supply any number of values and the box plot will * be computed for you. Default is false. * showOutliers - Set to true (default) to display outliers as circles * outlierIRQ - Interquartile range used to determine outliers. Default 1.5 * boxLineColor - Outline color of the box * boxFillColor - Fill color for the box * whiskerColor - Line color used for whiskers * outlierLineColor - Outline color of outlier circles * outlierFillColor - Fill color of the outlier circles * spotRadius - Radius of outlier circles * medianColor - Line color of the median line * target - Draw a target cross hair at the supplied value (default undefined) * * * * Examples: * $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false }); * $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 }); * $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }): * $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' }); * $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' }); * $('#pie').sparkline([1,1,2], { type:'pie' }); */ /*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */ (function ($) { 'use strict'; var UNSET_OPTION = {}, getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap, MouseHandler, Tooltip, barHighlightMixin, line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles, VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0; /** * Default configuration settings */ getDefaults = function () { return { // Settings common to most/all chart types common: { type: 'line', lineColor: '#00f', fillColor: '#cdf', defaultPixelsPerValue: 3, width: 'auto', height: 'auto', composite: false, tagValuesAttribute: 'values', tagOptionsPrefix: 'spark', enableTagOptions: false, enableHighlight: true, highlightLighten: 1.4, tooltipSkipNull: true, tooltipPrefix: '', tooltipSuffix: '', disableHiddenCheck: false, numberFormatter: false, numberDigitGroupCount: 3, numberDigitGroupSep: ',', numberDecimalMark: '.', disableTooltips: false, disableInteraction: false }, // Defaults for line charts line: { spotColor: '#f80', highlightSpotColor: '#5f5', highlightLineColor: '#f22', spotRadius: 1.5, minSpotColor: '#f80', maxSpotColor: '#f80', lineWidth: 1, normalRangeMin: undefined, normalRangeMax: undefined, normalRangeColor: '#ccc', drawNormalOnTop: false, chartRangeMin: undefined, chartRangeMax: undefined, chartRangeMinX: undefined, chartRangeMaxX: undefined, tooltipFormat: new SPFormat(' {{prefix}}{{y}}{{suffix}}') }, // Defaults for bar charts bar: { barColor: '#3366cc', negBarColor: '#f44', stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', '#dd4477', '#0099c6', '#990099'], zeroColor: undefined, nullColor: undefined, zeroAxis: true, barWidth: 4, barSpacing: 1, chartRangeMax: undefined, chartRangeMin: undefined, chartRangeClip: false, colorMap: undefined, tooltipFormat: new SPFormat(' {{prefix}}{{value}}{{suffix}}') }, // Defaults for tristate charts tristate: { barWidth: 4, barSpacing: 1, posBarColor: '#6f6', negBarColor: '#f44', zeroBarColor: '#999', colorMap: {}, tooltipFormat: new SPFormat(' {{value:map}}'), tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } } }, // Defaults for discrete charts discrete: { lineHeight: 'auto', thresholdColor: undefined, thresholdValue: 0, chartRangeMax: undefined, chartRangeMin: undefined, chartRangeClip: false, tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}') }, // Defaults for bullet charts bullet: { targetColor: '#f33', targetWidth: 3, // width of the target bar in pixels performanceColor: '#33f', rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'], base: undefined, // set this to a number to change the base start number tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'), tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} } }, // Defaults for pie charts pie: { offset: 0, sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', '#dd4477', '#0099c6', '#990099'], borderWidth: 0, borderColor: '#000', tooltipFormat: new SPFormat(' {{value}} ({{percent.1}}%)') }, // Defaults for box plots box: { raw: false, boxLineColor: '#000', boxFillColor: '#cdf', whiskerColor: '#000', outlierLineColor: '#333', outlierFillColor: '#fff', medianColor: '#f00', showOutliers: true, outlierIQR: 1.5, spotRadius: 1.5, target: undefined, targetColor: '#4a2', chartRangeMax: undefined, chartRangeMin: undefined, tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'), tooltipFormatFieldlistKey: 'field', tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median', uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier', lw: 'Left Whisker', rw: 'Right Whisker'} } } }; }; // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname defaultStyles = '.jqstooltip { ' + 'position: absolute;' + 'left: 0px;' + 'top: 0px;' + 'visibility: hidden;' + 'background: rgb(0, 0, 0) transparent;' + 'background-color: rgba(0,0,0,0.6);' + 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' + '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' + 'color: white;' + 'font: 10px arial, san serif;' + 'text-align: left;' + 'white-space: nowrap;' + 'padding: 5px;' + 'border: 1px solid white;' + '}' + '.jqsfield { ' + 'color: white;' + 'font: 10px arial, san serif;' + 'text-align: left;' + '}'; initStyles = function() { addCSS(defaultStyles); }; $(initStyles); /** * Utilities */ createClass = function (/* [baseclass, [mixin, ...]], definition */) { var Class, args; Class = function () { this.init.apply(this, arguments); }; if (arguments.length > 1) { if (arguments[0]) { Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]); Class._super = arguments[0].prototype; } else { Class.prototype = arguments[arguments.length - 1]; } if (arguments.length > 2) { args = Array.prototype.slice.call(arguments, 1, -1); args.unshift(Class.prototype); $.extend.apply($, args); } } else { Class.prototype = arguments[0]; } Class.prototype.cls = Class; return Class; }; /** * Wraps a format string for tooltips * {{x}} * {{x.2} * {{x:months}} */ $.SPFormatClass = SPFormat = createClass({ fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, precre: /(\w+)\.(\d+)/, init: function (format, fclass) { this.format = format; this.fclass = fclass; }, render: function (fieldset, lookups, options) { var self = this, fields = fieldset, match, token, lookupkey, fieldvalue, prec; return this.format.replace(this.fre, function () { var lookup; token = arguments[1]; lookupkey = arguments[3]; match = self.precre.exec(token); if (match) { prec = match[2]; token = match[1]; } else { prec = false; } fieldvalue = fields[token]; if (fieldvalue === undefined) { return ''; } if (lookupkey && lookups && lookups[lookupkey]) { lookup = lookups[lookupkey]; if (lookup.get) { // RangeMap return lookups[lookupkey].get(fieldvalue) || fieldvalue; } else { return lookups[lookupkey][fieldvalue] || fieldvalue; } } if (isNumber(fieldvalue)) { if (options.get('numberFormatter')) { fieldvalue = options.get('numberFormatter')(fieldvalue); } else { fieldvalue = formatNumber(fieldvalue, prec, options.get('numberDigitGroupCount'), options.get('numberDigitGroupSep'), options.get('numberDecimalMark')); } } return fieldvalue; }); } }); // convience method to avoid needing the new operator $.spformat = function(format, fclass) { return new SPFormat(format, fclass); }; clipval = function (val, min, max) { if (val < min) { return min; } if (val > max) { return max; } return val; }; quartile = function (values, q) { var vl; if (q === 2) { vl = Math.floor(values.length / 2); return values.length % 2 ? values[vl] : (values[vl] + values[vl + 1]) / 2; } else { vl = Math.floor(values.length / 4); return values.length % 2 ? (values[vl * q] + values[vl * q + 1]) / 2 : values[vl * q]; } }; normalizeValue = function (val) { var nf; switch (val) { case 'undefined': val = undefined; break; case 'null': val = null; break; case 'true': val = true; break; case 'false': val = false; break; default: nf = parseFloat(val); if (val == nf) { val = nf; } } return val; }; normalizeValues = function (vals) { var i, result = []; for (i = vals.length; i--;) { result[i] = normalizeValue(vals[i]); } return result; }; remove = function (vals, filter) { var i, vl, result = []; for (i = 0, vl = vals.length; i < vl; i++) { if (vals[i] !== filter) { result.push(vals[i]); } } return result; }; isNumber = function (num) { return !isNaN(parseFloat(num)) && isFinite(num); }; formatNumber = function (num, prec, groupsize, groupsep, decsep) { var p, i; num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split(''); p = (p = $.inArray('.', num)) < 0 ? num.length : p; if (p < num.length) { num[p] = decsep; } for (i = p - groupsize; i > 0; i -= groupsize) { num.splice(i, 0, groupsep); } return num.join(''); }; // determine if all values of an array match a value // returns true if the array is empty all = function (val, arr, ignoreNull) { var i; for (i = arr.length; i--; ) { if (arr[i] !== val || (!ignoreNull && val === null)) { return false; } } return true; }; // sums the numeric values in an array, ignoring other values sum = function (vals) { var total = 0, i; for (i = vals.length; i--;) { total += typeof vals[i] === 'number' ? vals[i] : 0; } return total; }; ensureArray = function (val) { return $.isArray(val) ? val : [val]; }; // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/ addCSS = function(css) { var tag; //if ('\v' == 'v') /* ie only */ { if (document.createStyleSheet) { document.createStyleSheet().cssText = css; } else { tag = document.createElement('style'); tag.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(tag); tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css; } }; // Provide a cross-browser interface to a few simple drawing primitives $.fn.simpledraw = function (width, height, useExisting, interact) { var target, mhandler; if (useExisting && (target = this.data('_jqs_vcanvas'))) { return target; } if (width === undefined) { width = $(this).innerWidth(); } if (height === undefined) { height = $(this).innerHeight(); } if ($.browser.hasCanvas) { target = new VCanvas_canvas(width, height, this, interact); } else if ($.browser.msie) { target = new VCanvas_vml(width, height, this); } else { return false; } mhandler = $(this).data('_jqs_mhandler'); if (mhandler) { mhandler.registerCanvas(target); } return target; }; $.fn.cleardraw = function () { var target = this.data('_jqs_vcanvas'); if (target) { target.reset(); } }; $.RangeMapClass = RangeMap = createClass({ init: function (map) { var key, range, rangelist = []; for (key in map) { if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { range = key.split(':'); range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); range[2] = map[key]; rangelist.push(range); } } this.map = map; this.rangelist = rangelist || false; }, get: function (value) { var rangelist = this.rangelist, i, range, result; if ((result = this.map[value]) !== undefined) { return result; } if (rangelist) { for (i = rangelist.length; i--;) { range = rangelist[i]; if (range[0] <= value && range[1] >= value) { return range[2]; } } } return undefined; } }); // Convenience function $.range_map = function(map) { return new RangeMap(map); }; MouseHandler = createClass({ init: function (el, options) { var $el = $(el); this.$el = $el; this.options = options; this.currentPageX = 0; this.currentPageY = 0; this.el = el; this.splist = []; this.tooltip = null; this.over = false; this.displayTooltips = !options.get('disableTooltips'); this.highlightEnabled = !options.get('disableHighlight'); }, registerSparkline: function (sp) { this.splist.push(sp); if (this.over) { this.updateDisplay(); } }, registerCanvas: function (canvas) { var $canvas = $(canvas.canvas); this.canvas = canvas; this.$canvas = $canvas; $canvas.mouseenter($.proxy(this.mouseenter, this)); $canvas.mouseleave($.proxy(this.mouseleave, this)); $canvas.click($.proxy(this.mouseclick, this)); }, reset: function (removeTooltip) { this.splist = []; if (this.tooltip && removeTooltip) { this.tooltip.remove(); this.tooltip = undefined; } }, mouseclick: function (e) { var clickEvent = $.Event('sparklineClick'); clickEvent.originalEvent = e; clickEvent.sparklines = this.splist; this.$el.trigger(clickEvent); }, mouseenter: function (e) { $(document.body).unbind('mousemove.jqs'); $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this)); this.over = true; this.currentPageX = e.pageX; this.currentPageY = e.pageY; this.currentEl = e.target; if (!this.tooltip && this.displayTooltips) { this.tooltip = new Tooltip(this.options); this.tooltip.updatePosition(e.pageX, e.pageY); } this.updateDisplay(); }, mouseleave: function () { $(document.body).unbind('mousemove.jqs'); var splist = this.splist, spcount = splist.length, needsRefresh = false, sp, i; this.over = false; this.currentEl = null; if (this.tooltip) { this.tooltip.remove(); this.tooltip = null; } for (i = 0; i < spcount; i++) { sp = splist[i]; if (sp.clearRegionHighlight()) { needsRefresh = true; } } if (needsRefresh) { this.canvas.render(); } }, mousemove: function (e) { this.currentPageX = e.pageX; this.currentPageY = e.pageY; this.currentEl = e.target; if (this.tooltip) { this.tooltip.updatePosition(e.pageX, e.pageY); } this.updateDisplay(); }, updateDisplay: function () { var splist = this.splist, spcount = splist.length, needsRefresh = false, offset = this.$canvas.offset(), localX = this.currentPageX - offset.left, localY = this.currentPageY - offset.top, tooltiphtml, sp, i, result, changeEvent; if (!this.over) { return; } for (i = 0; i < spcount; i++) { sp = splist[i]; result = sp.setRegionHighlight(this.currentEl, localX, localY); if (result) { needsRefresh = true; } } if (needsRefresh) { changeEvent = $.Event('sparklineRegionChange'); changeEvent.sparklines = this.splist; this.$el.trigger(changeEvent); if (this.tooltip) { tooltiphtml = ''; for (i = 0; i < spcount; i++) { sp = splist[i]; tooltiphtml += sp.getCurrentRegionTooltip(); } this.tooltip.setContent(tooltiphtml); } if (!this.disableHighlight) { this.canvas.render(); } } if (result === null) { this.mouseleave(); } } }); Tooltip = createClass({ sizeStyle: 'position: static !important;' + 'display: block !important;' + 'visibility: hidden !important;' + 'float: left !important;', init: function (options) { var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'), sizetipStyle = this.sizeStyle, offset; this.container = options.get('tooltipContainer') || document.body; this.tooltipOffsetX = options.get('tooltipOffsetX', 10); this.tooltipOffsetY = options.get('tooltipOffsetY', 12); // remove any previous lingering tooltip $('#jqssizetip').remove(); $('#jqstooltip').remove(); this.sizetip = $('
        ', { id: 'jqssizetip', style: sizetipStyle, 'class': tooltipClassname }); this.tooltip = $('
        ', { id: 'jqstooltip', 'class': tooltipClassname }).appendTo(this.container); // account for the container's location offset = this.tooltip.offset(); this.offsetLeft = offset.left; this.offsetTop = offset.top; this.hidden = true; $(window).unbind('resize.jqs scroll.jqs'); $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this)); this.updateWindowDims(); }, updateWindowDims: function () { this.scrollTop = $(window).scrollTop(); this.scrollLeft = $(window).scrollLeft(); this.scrollRight = this.scrollLeft + $(window).width(); this.updatePosition(); }, getSize: function (content) { this.sizetip.html(content).appendTo(this.container); this.width = this.sizetip.width() + 1; this.height = this.sizetip.height(); this.sizetip.remove(); }, setContent: function (content) { if (!content) { this.tooltip.css('visibility', 'hidden'); this.hidden = true; return; } this.getSize(content); this.tooltip.html(content) .css({ 'width': this.width, 'height': this.height, 'visibility': 'visible' }); if (this.hidden) { this.hidden = false; this.updatePosition(); } }, updatePosition: function (x, y) { if (x === undefined) { if (this.mousex === undefined) { return; } x = this.mousex - this.offsetLeft; y = this.mousey - this.offsetTop; } else { this.mousex = x = x - this.offsetLeft; this.mousey = y = y - this.offsetTop; } if (!this.height || !this.width || this.hidden) { return; } y -= this.height + this.tooltipOffsetY; x += this.tooltipOffsetX; if (y < this.scrollTop) { y = this.scrollTop; } if (x < this.scrollLeft) { x = this.scrollLeft; } else if (x + this.width > this.scrollRight) { x = this.scrollRight - this.width; } this.tooltip.css({ 'left': x, 'top': y }); }, remove: function () { this.tooltip.remove(); this.sizetip.remove(); this.sizetip = this.tooltip = undefined; $(window).unbind('resize.jqs scroll.jqs'); } }); pending = []; $.fn.sparkline = function (userValues, userOptions) { return this.each(function () { var options = new $.fn.sparkline.options(this, userOptions), $this = $(this), render, i; render = function () { var values, width, height, tmp, mhandler, sp, vals; if (userValues === 'html' || userValues === undefined) { vals = this.getAttribute(options.get('tagValuesAttribute')); if (vals === undefined || vals === null) { vals = $this.html(); } values = vals.replace(/(^\s*\s*$)|\s+/g, '').split(','); } else { values = userValues; } width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width'); if (options.get('height') === 'auto') { if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) { // must be a better way to get the line height tmp = document.createElement('span'); tmp.innerHTML = 'a'; $this.html(tmp); height = $(tmp).innerHeight() || $(tmp).height(); $(tmp).remove(); tmp = null; } } else { height = options.get('height'); } if (!options.get('disableInteraction')) { mhandler = $.data(this, '_jqs_mhandler'); if (!mhandler) { mhandler = new MouseHandler(this, options); $.data(this, '_jqs_mhandler', mhandler); } else if (!options.get('composite')) { mhandler.reset(); } } else { mhandler = false; } if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) { if (!$.data(this, '_jqs_errnotify')) { alert('Attempted to attach a composite sparkline to an element with no existing sparkline'); $.data(this, '_jqs_errnotify', true); } return; } sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height); sp.render(); if (mhandler) { mhandler.registerSparkline(sp); } }; // jQuery 1.3.0 completely changed the meaning of :hidden :-/ if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || ($.fn.jquery < '1.3.0' && $(this).parents().is(':hidden')) || !$(this).parents('body').length) { if (!options.get('composite') && $.data(this, '_jqs_pending')) { // remove any existing references to the element for (i = pending.length; i; i--) { if (pending[i - 1][0] == this) { pending.splice(i - 1, 1); } } } pending.push([this, render]); $.data(this, '_jqs_pending', true); } else { render.call(this); } }); }; $.fn.sparkline.defaults = getDefaults(); $.sparkline_display_visible = function () { var el, i, pl; var done = []; for (i = 0, pl = pending.length; i < pl; i++) { el = pending[i][0]; if ($(el).is(':visible') && !$(el).parents().is(':hidden')) { pending[i][1].call(el); $.data(pending[i][0], '_jqs_pending', false); done.push(i); } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) { // element has been inserted and removed from the DOM // If it was not yet inserted into the dom then the .data request // will return true. // removing from the dom causes the data to be removed. $.data(pending[i][0], '_jqs_pending', false); done.push(i); } } for (i = done.length; i; i--) { pending.splice(done[i - 1], 1); } }; /** * User option handler */ $.fn.sparkline.options = createClass({ init: function (tag, userOptions) { var extendedOptions, defaults, base, tagOptionType; this.userOptions = userOptions = userOptions || {}; this.tag = tag; this.tagValCache = {}; defaults = $.fn.sparkline.defaults; base = defaults.common; this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix); tagOptionType = this.getTagSetting('type'); if (tagOptionType === UNSET_OPTION) { extendedOptions = defaults[userOptions.type || base.type]; } else { extendedOptions = defaults[tagOptionType]; } this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); }, getTagSetting: function (key) { var prefix = this.tagOptionsPrefix, val, i, pairs, keyval; if (prefix === false || prefix === undefined) { return UNSET_OPTION; } if (this.tagValCache.hasOwnProperty(key)) { val = this.tagValCache.key; } else { val = this.tag.getAttribute(prefix + key); if (val === undefined || val === null) { val = UNSET_OPTION; } else if (val.substr(0, 1) === '[') { val = val.substr(1, val.length - 2).split(','); for (i = val.length; i--;) { val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, '')); } } else if (val.substr(0, 1) === '{') { pairs = val.substr(1, val.length - 2).split(','); val = {}; for (i = pairs.length; i--;) { keyval = pairs[i].split(':', 2); val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, '')); } } else { val = normalizeValue(val); } this.tagValCache.key = val; } return val; }, get: function (key, defaultval) { var tagOption = this.getTagSetting(key), result; if (tagOption !== UNSET_OPTION) { return tagOption; } return (result = this.mergedOptions[key]) === undefined ? defaultval : result; } }); $.fn.sparkline._base = createClass({ disabled: false, init: function (el, values, options, width, height) { this.el = el; this.$el = $(el); this.values = values; this.options = options; this.width = width; this.height = height; this.currentRegion = undefined; }, /** * Setup the canvas */ initTarget: function () { var interactive = !this.options.get('disableInteraction'); if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) { this.disabled = true; } else { this.canvasWidth = this.target.pixelWidth; this.canvasHeight = this.target.pixelHeight; } }, /** * Actually render the chart to the canvas */ render: function () { if (this.disabled) { this.el.innerHTML = ''; return false; } return true; }, /** * Return a region id for a given x/y co-ordinate */ getRegion: function (x, y) { }, /** * Highlight an item based on the moused-over x,y co-ordinate */ setRegionHighlight: function (el, x, y) { var currentRegion = this.currentRegion, highlightEnabled = !this.options.get('disableHighlight'), newRegion; if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) { return null; } newRegion = this.getRegion(el, x, y); if (currentRegion !== newRegion) { if (currentRegion !== undefined && highlightEnabled) { this.removeHighlight(); } this.currentRegion = newRegion; if (newRegion !== undefined && highlightEnabled) { this.renderHighlight(); } return true; } return false; }, /** * Reset any currently highlighted item */ clearRegionHighlight: function () { if (this.currentRegion !== undefined) { this.removeHighlight(); this.currentRegion = undefined; return true; } return false; }, renderHighlight: function () { this.changeHighlight(true); }, removeHighlight: function () { this.changeHighlight(false); }, changeHighlight: function (highlight) {}, /** * Fetch the HTML to display as a tooltip */ getCurrentRegionTooltip: function () { var options = this.options, header = '', entries = [], fields, formats, formatlen, fclass, text, i, showFields, showFieldsKey, newFields, fv, formatter, format, fieldlen, j; if (this.currentRegion === undefined) { return ''; } fields = this.getCurrentRegionFields(); formatter = options.get('tooltipFormatter'); if (formatter) { return formatter(this, options, fields); } if (options.get('tooltipChartTitle')) { header += '
        ' + options.get('tooltipChartTitle') + '
        \n'; } formats = this.options.get('tooltipFormat'); if (!formats) { return ''; } if (!$.isArray(formats)) { formats = [formats]; } if (!$.isArray(fields)) { fields = [fields]; } showFields = this.options.get('tooltipFormatFieldlist'); showFieldsKey = this.options.get('tooltipFormatFieldlistKey'); if (showFields && showFieldsKey) { // user-selected ordering of fields newFields = []; for (i = fields.length; i--;) { fv = fields[i][showFieldsKey]; if ((j = $.inArray(fv, showFields)) != -1) { newFields[j] = fields[i]; } } fields = newFields; } formatlen = formats.length; fieldlen = fields.length; for (i = 0; i < formatlen; i++) { format = formats[i]; if (typeof format === 'string') { format = new SPFormat(format); } fclass = format.fclass || 'jqsfield'; for (j = 0; j < fieldlen; j++) { if (!fields[j].isNull || !options.get('tooltipSkipNull')) { $.extend(fields[j], { prefix: options.get('tooltipPrefix'), suffix: options.get('tooltipSuffix') }); text = format.render(fields[j], options.get('tooltipValueLookups'), options); entries.push('
        ' + text + '
        '); } } } if (entries.length) { return header + entries.join('\n'); } return ''; }, getCurrentRegionFields: function () {}, calcHighlightColor: function (color, options) { var highlightColor = options.get('highlightColor'), lighten = options.get('highlightLighten'), parse, mult, rgbnew, i; if (highlightColor) { return highlightColor; } if (lighten) { // extract RGB values parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); if (parse) { rgbnew = []; mult = color.length === 4 ? 16 : 1; for (i = 0; i < 3; i++) { rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255); } return 'rgb(' + rgbnew.join(',') + ')'; } } return color; } }); barHighlightMixin = { changeHighlight: function (highlight) { var currentRegion = this.currentRegion, target = this.target, shapeids = this.regionShapes[currentRegion], newShapes; // will be null if the region value was null if (shapeids) { newShapes = this.renderRegion(currentRegion, highlight); if ($.isArray(newShapes) || $.isArray(shapeids)) { target.replaceWithShapes(shapeids, newShapes); this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) { return newShape.id; }); } else { target.replaceWithShape(shapeids, newShapes); this.regionShapes[currentRegion] = newShapes.id; } } }, render: function () { var values = this.values, target = this.target, regionShapes = this.regionShapes, shapes, ids, i, j; if (!this.cls._super.render.call(this)) { return; } for (i = values.length; i--;) { shapes = this.renderRegion(i); if (shapes) { if ($.isArray(shapes)) { ids = []; for (j = shapes.length; j--;) { shapes[j].append(); ids.push(shapes[j].id); } regionShapes[i] = ids; } else { shapes.append(); regionShapes[i] = shapes.id; // store just the shapeid } } else { // null value regionShapes[i] = null; } } target.render(); } }; /** * Line charts */ $.fn.sparkline.line = line = createClass($.fn.sparkline._base, { type: 'line', init: function (el, values, options, width, height) { line._super.init.call(this, el, values, options, width, height); this.vertices = []; this.regionMap = []; this.xvalues = []; this.yvalues = []; this.yminmax = []; this.hightlightSpotId = null; this.lastShapeId = null; this.initTarget(); }, getRegion: function (el, x, y) { var i, regionMap = this.regionMap; // maps regions to value positions for (i = regionMap.length; i--;) { if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) { return regionMap[i][2]; } } return undefined; }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion; return { isNull: this.yvalues[currentRegion] === null, x: this.xvalues[currentRegion], y: this.yvalues[currentRegion], color: this.options.get('lineColor'), fillColor: this.options.get('fillColor'), offset: currentRegion }; }, renderHighlight: function () { var currentRegion = this.currentRegion, target = this.target, vertex = this.vertices[currentRegion], options = this.options, spotRadius = options.get('spotRadius'), highlightSpotColor = options.get('highlightSpotColor'), highlightLineColor = options.get('highlightLineColor'), highlightSpot, highlightLine; if (!vertex) { return; } if (spotRadius && highlightSpotColor) { highlightSpot = target.drawCircle(vertex[0], vertex[1], spotRadius, undefined, highlightSpotColor); this.highlightSpotId = highlightSpot.id; target.insertAfterShape(this.lastShapeId, highlightSpot); } if (highlightLineColor) { highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], this.canvasTop + this.canvasHeight, highlightLineColor); this.highlightLineId = highlightLine.id; target.insertAfterShape(this.lastShapeId, highlightLine); } }, removeHighlight: function () { var target = this.target; if (this.highlightSpotId) { target.removeShapeId(this.highlightSpotId); this.highlightSpotId = null; } if (this.highlightLineId) { target.removeShapeId(this.highlightLineId); this.highlightLineId = null; } }, scanValues: function () { var values = this.values, valcount = values.length, xvalues = this.xvalues, yvalues = this.yvalues, yminmax = this.yminmax, i, val, isStr, isArray, sp; for (i = 0; i < valcount; i++) { val = values[i]; isStr = typeof(values[i]) === 'string'; isArray = typeof(values[i]) === 'object' && values[i] instanceof Array; sp = isStr && values[i].split(':'); if (isStr && sp.length === 2) { // x:y xvalues.push(Number(sp[0])); yvalues.push(Number(sp[1])); yminmax.push(Number(sp[1])); } else if (isArray) { xvalues.push(val[0]); yvalues.push(val[1]); yminmax.push(val[1]); } else { xvalues.push(i); if (values[i] === null || values[i] === 'null') { yvalues.push(null); } else { yvalues.push(Number(val)); yminmax.push(Number(val)); } } } if (this.options.get('xvalues')) { xvalues = this.options.get('xvalues'); } this.maxy = this.maxyorg = Math.max.apply(Math, yminmax); this.miny = this.minyorg = Math.min.apply(Math, yminmax); this.maxx = Math.max.apply(Math, xvalues); this.minx = Math.min.apply(Math, xvalues); this.xvalues = xvalues; this.yvalues = yvalues; this.yminmax = yminmax; }, processRangeOptions: function () { var options = this.options, normalRangeMin = options.get('normalRangeMin'), normalRangeMax = options.get('normalRangeMax'); if (normalRangeMin !== undefined) { if (normalRangeMin < this.miny) { this.miny = normalRangeMin; } if (normalRangeMax > this.maxy) { this.maxy = normalRangeMax; } } if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) { this.miny = options.get('chartRangeMin'); } if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) { this.maxy = options.get('chartRangeMax'); } if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) { this.minx = options.get('chartRangeMinX'); } if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) { this.maxx = options.get('chartRangeMaxX'); } }, drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) { var normalRangeMin = this.options.get('normalRangeMin'), normalRangeMax = this.options.get('normalRangeMax'), ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))), height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey); this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append(); }, render: function () { var options = this.options, target = this.target, canvasWidth = this.canvasWidth, canvasHeight = this.canvasHeight, vertices = this.vertices, spotRadius = options.get('spotRadius'), regionMap = this.regionMap, rangex, rangey, yvallast, canvasTop, canvasLeft, vertex, path, paths, x, y, xnext, xpos, xposnext, last, next, yvalcount, lineShapes, fillShapes, plen, valueSpots, color, xvalues, yvalues, i; if (!line._super.render.call(this)) { return; } this.scanValues(); this.processRangeOptions(); xvalues = this.xvalues; yvalues = this.yvalues; if (!this.yminmax.length || this.yvalues.length < 2) { // empty or all null valuess return; } canvasTop = canvasLeft = 0; rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx; rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny; yvallast = this.yvalues.length - 1; if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) { spotRadius = 0; } if (spotRadius) { // adjust the canvas size as required so that spots will fit if (options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) { canvasHeight -= Math.ceil(spotRadius); } if (options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) { canvasHeight -= Math.ceil(spotRadius); canvasTop += Math.ceil(spotRadius); } if ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy)) { canvasLeft += Math.ceil(spotRadius); canvasWidth -= Math.ceil(spotRadius); } if (options.get('spotColor') || (options.get('minSpotColor') || options.get('maxSpotColor') && (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) { canvasWidth -= Math.ceil(spotRadius); } } canvasHeight--; if (options.get('normalRangeMin') && !options.get('drawNormalOnTop')) { this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); } path = []; paths = [path]; last = next = null; yvalcount = yvalues.length; for (i = 0; i < yvalcount; i++) { x = xvalues[i]; xnext = xvalues[i + 1]; y = yvalues[i]; xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)); xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth; next = xpos + ((xposnext - xpos) / 2); regionMap[i] = [last || 0, next, i]; last = next; if (y === null) { if (i) { if (yvalues[i - 1] !== null) { path = []; paths.push(path); vertices.push(null); } } } else { if (y < this.miny) { y = this.miny; } if (y > this.maxy) { y = this.maxy; } if (!path.length) { // previous value was null path.push([xpos, canvasTop + canvasHeight]); } vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))]; path.push(vertex); vertices.push(vertex); } } lineShapes = []; fillShapes = []; plen = paths.length; for (i = 0; i < plen; i++) { path = paths[i]; if (path.length) { if (options.get('fillColor')) { path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]); fillShapes.push(path.slice(0)); path.pop(); } // if there's only a single point in this path, then we want to display it // as a vertical line which means we keep path[0] as is if (path.length > 2) { // else we want the first value path[0] = [path[0][0], path[1][1]]; } lineShapes.push(path); } } // draw the fill first, then optionally the normal range, then the line on top of that plen = fillShapes.length; for (i = 0; i < plen; i++) { target.drawShape(fillShapes[i], options.get('fillColor'), options.get('fillColor')).append(); } if (options.get('normalRangeMin') && options.get('drawNormalOnTop')) { this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); } plen = lineShapes.length; for (i = 0; i < plen; i++) { target.drawShape(lineShapes[i], options.get('lineColor'), undefined, options.get('lineWidth')).append(); } if (spotRadius && options.get('valueSpots')) { valueSpots = options.get('valueSpots'); if (valueSpots.get === undefined) { valueSpots = new RangeMap(valueSpots); } for (i = 0; i < yvalcount; i++) { color = valueSpots.get(yvalues[i]); if (color) { target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))), spotRadius, undefined, color).append(); } } } if (spotRadius && options.get('spotColor')) { target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))), spotRadius, undefined, options.get('spotColor')).append(); } if (this.maxy !== this.minyorg) { if (spotRadius && options.get('minSpotColor')) { x = xvalues[$.inArray(this.minyorg, yvalues)]; target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))), spotRadius, undefined, options.get('minSpotColor')).append(); } if (spotRadius && options.get('maxSpotColor')) { x = xvalues[$.inArray(this.maxyorg, yvalues)]; target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))), spotRadius, undefined, options.get('maxSpotColor')).append(); } } this.lastShapeId = target.getLastShapeId(); this.canvasTop = canvasTop; target.render(); } }); /** * Bar charts */ $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, { type: 'bar', init: function (el, values, options, width, height) { var barWidth = parseInt(options.get('barWidth'), 10), barSpacing = parseInt(options.get('barSpacing'), 10), chartRangeMin = options.get('chartRangeMin'), chartRangeMax = options.get('chartRangeMax'), chartRangeClip = options.get('chartRangeClip'), stackMin = Infinity, stackMax = -Infinity, isStackString, groupMin, groupMax, stackRanges, numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; bar._super.init.call(this, el, values, options, width, height); // scan values to determine whether to stack bars for (i = 0, vlen = values.length; i < vlen; i++) { val = values[i]; isStackString = typeof(val) === 'string' && val.indexOf(':') > -1; if (isStackString || $.isArray(val)) { stacked = true; if (isStackString) { val = values[i] = normalizeValues(val.split(':')); } val = remove(val, null); // min/max will treat null as zero groupMin = Math.min.apply(Math, val); groupMax = Math.max.apply(Math, val); if (groupMin < stackMin) { stackMin = groupMin; } if (groupMax > stackMax) { stackMax = groupMax; } } } this.stacked = stacked; this.regionShapes = {}; this.barWidth = barWidth; this.barSpacing = barSpacing; this.totalBarWidth = barWidth + barSpacing; this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); this.initTarget(); if (chartRangeClip) { clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; } numValues = []; stackRanges = stacked ? [] : numValues; var stackTotals = []; var stackRangesNeg = []; for (i = 0, vlen = values.length; i < vlen; i++) { if (stacked) { vlist = values[i]; values[i] = svals = []; stackTotals[i] = 0; stackRanges[i] = stackRangesNeg[i] = 0; for (j = 0, slen = vlist.length; j < slen; j++) { val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j]; if (val !== null) { if (val > 0) { stackTotals[i] += val; } if (stackMin < 0 && stackMax > 0) { if (val < 0) { stackRangesNeg[i] += Math.abs(val); } else { stackRanges[i] += val; } } else { stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); } numValues.push(val); } } } else { val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; val = values[i] = normalizeValue(val); if (val !== null) { numValues.push(val); } } } this.max = max = Math.max.apply(Math, numValues); this.min = min = Math.min.apply(Math, numValues); this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { min = options.get('chartRangeMin'); } if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { max = options.get('chartRangeMax'); } this.zeroAxis = zeroAxis = options.get('zeroAxis', true); if (min <= 0 && max >= 0 && zeroAxis) { xaxisOffset = 0; } else if (zeroAxis == false) { xaxisOffset = min; } else if (min > 0) { xaxisOffset = min; } else { xaxisOffset = max; } this.xaxisOffset = xaxisOffset; range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; // as we plot zero/min values a single pixel line, we add a pixel to all other // values - Reduce the effective canvas size to suit this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1; if (min < xaxisOffset) { yMaxCalc = (stacked && max >= 0) ? stackMax : max; yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight; if (yoffset !== Math.ceil(yoffset)) { this.canvasHeightEf -= 2; yoffset = Math.ceil(yoffset); } } else { yoffset = this.canvasHeight; } this.yoffset = yoffset; if ($.isArray(options.get('colorMap'))) { this.colorMapByIndex = options.get('colorMap'); this.colorMapByValue = null; } else { this.colorMapByIndex = null; this.colorMapByValue = options.get('colorMap'); if (this.colorMapByValue && this.colorMapByValue.get === undefined) { this.colorMapByValue = new RangeMap(this.colorMapByValue); } } this.range = range; }, getRegion: function (el, x, y) { var result = Math.floor(x / this.totalBarWidth); return (result < 0 || result >= this.values.length) ? undefined : result; }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion, values = ensureArray(this.values[currentRegion]), result = [], value, i; for (i = values.length; i--;) { value = values[i]; result.push({ isNull: value === null, value: value, color: this.calcColor(i, value, currentRegion), offset: currentRegion }); } return result; }, calcColor: function (stacknum, value, valuenum) { var colorMapByIndex = this.colorMapByIndex, colorMapByValue = this.colorMapByValue, options = this.options, color, newColor; if (this.stacked) { color = options.get('stackedBarColor'); } else { color = (value < 0) ? options.get('negBarColor') : options.get('barColor'); } if (value === 0 && options.get('zeroColor') !== undefined) { color = options.get('zeroColor'); } if (colorMapByValue && (newColor = colorMapByValue.get(value))) { color = newColor; } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { color = colorMapByIndex[valuenum]; } return $.isArray(color) ? color[stacknum % color.length] : color; }, /** * Render bar(s) for a region */ renderRegion: function (valuenum, highlight) { var vals = this.values[valuenum], options = this.options, xaxisOffset = this.xaxisOffset, result = [], range = this.range, stacked = this.stacked, target = this.target, x = valuenum * this.totalBarWidth, canvasHeightEf = this.canvasHeightEf, yoffset = this.yoffset, y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin; vals = $.isArray(vals) ? vals : [vals]; valcount = vals.length; val = vals[0]; isNull = all(null, vals); allMin = all(xaxisOffset, vals, true); if (isNull) { if (options.get('nullColor')) { color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options); y = (yoffset > 0) ? yoffset - 1 : yoffset; return target.drawRect(x, y, this.barWidth - 1, 0, color, color); } else { return undefined; } } yoffsetNeg = yoffset; for (i = 0; i < valcount; i++) { val = vals[i]; if (stacked && val === xaxisOffset) { if (!allMin || minPlotted) { continue; } minPlotted = true; } if (range > 0) { height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1; } else { height = 1; } if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) { y = yoffsetNeg; yoffsetNeg += height; } else { y = yoffset - height; yoffset -= height; } color = this.calcColor(i, val, valuenum); if (highlight) { color = this.calcHighlightColor(color, options); } result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color)); } if (result.length === 1) { return result[0]; } return result; } }); /** * Tristate charts */ $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, { type: 'tristate', init: function (el, values, options, width, height) { var barWidth = parseInt(options.get('barWidth'), 10), barSpacing = parseInt(options.get('barSpacing'), 10); tristate._super.init.call(this, el, values, options, width, height); this.regionShapes = {}; this.barWidth = barWidth; this.barSpacing = barSpacing; this.totalBarWidth = barWidth + barSpacing; this.values = $.map(values, Number); this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); if ($.isArray(options.get('colorMap'))) { this.colorMapByIndex = options.get('colorMap'); this.colorMapByValue = null; } else { this.colorMapByIndex = null; this.colorMapByValue = options.get('colorMap'); if (this.colorMapByValue && this.colorMapByValue.get === undefined) { this.colorMapByValue = new RangeMap(this.colorMapByValue); } } this.initTarget(); }, getRegion: function (el, x, y) { return Math.floor(x / this.totalBarWidth); }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion; return { isNull: this.values[currentRegion] === undefined, value: this.values[currentRegion], color: this.calcColor(this.values[currentRegion], currentRegion), offset: currentRegion }; }, calcColor: function (value, valuenum) { var values = this.values, options = this.options, colorMapByIndex = this.colorMapByIndex, colorMapByValue = this.colorMapByValue, color, newColor; if (colorMapByValue && (newColor = colorMapByValue.get(value))) { color = newColor; } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { color = colorMapByIndex[valuenum]; } else if (values[valuenum] < 0) { color = options.get('negBarColor'); } else if (values[valuenum] > 0) { color = options.get('posBarColor'); } else { color = options.get('zeroBarColor'); } return color; }, renderRegion: function (valuenum, highlight) { var values = this.values, options = this.options, target = this.target, canvasHeight, height, halfHeight, x, y, color; canvasHeight = target.pixelHeight; halfHeight = Math.round(canvasHeight / 2); x = valuenum * this.totalBarWidth; if (values[valuenum] < 0) { y = halfHeight; height = halfHeight - 1; } else if (values[valuenum] > 0) { y = 0; height = halfHeight - 1; } else { y = halfHeight - 1; height = 2; } color = this.calcColor(values[valuenum], valuenum); if (color === null) { return; } if (highlight) { color = this.calcHighlightColor(color, options); } return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color); } }); /** * Discrete charts */ $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, { type: 'discrete', init: function (el, values, options, width, height) { discrete._super.init.call(this, el, values, options, width, height); this.regionShapes = {}; this.values = values = $.map(values, Number); this.min = Math.min.apply(Math, values); this.max = Math.max.apply(Math, values); this.range = this.max - this.min; this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width; this.interval = Math.floor(width / values.length); this.itemWidth = width / values.length; if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) { this.min = options.get('chartRangeMin'); } if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) { this.max = options.get('chartRangeMax'); } this.initTarget(); if (this.target) { this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight'); } }, getRegion: function (el, x, y) { return Math.floor(x / this.itemWidth); }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion; return { isNull: this.values[currentRegion] === undefined, value: this.values[currentRegion], offset: currentRegion }; }, renderRegion: function (valuenum, highlight) { var values = this.values, options = this.options, min = this.min, max = this.max, range = this.range, interval = this.interval, target = this.target, canvasHeight = this.canvasHeight, lineHeight = this.lineHeight, pheight = canvasHeight - lineHeight, ytop, val, color, x; val = clipval(values[valuenum], min, max); x = valuenum * interval; ytop = Math.round(pheight - pheight * ((val - min) / range)); color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'); if (highlight) { color = this.calcHighlightColor(color, options); } return target.drawLine(x, ytop, x, ytop + lineHeight, color); } }); /** * Bullet charts */ $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, { type: 'bullet', init: function (el, values, options, width, height) { var min, max; bullet._super.init.call(this, el, values, options, width, height); // values: target, performance, range1, range2, range3 values = $.map(values, Number); min = Math.min.apply(Math, values); max = Math.max.apply(Math, values); if (options.get('base') === undefined) { min = min < 0 ? min : 0; } else { min = options.get('base'); } this.min = min; this.max = max; this.range = max - min; this.shapes = {}; this.valueShapes = {}; this.regiondata = {}; this.width = width = options.get('width') === 'auto' ? '4.0em' : width; this.target = this.$el.simpledraw(width, height, options.get('composite')); if (!values.length) { this.disabled = true; } this.initTarget(); }, getRegion: function (el, x, y) { var shapeid = this.target.getShapeAt(el, x, y); return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion; return { fieldkey: currentRegion.substr(0, 1), value: this.values[currentRegion.substr(1)], region: currentRegion }; }, changeHighlight: function (highlight) { var currentRegion = this.currentRegion, shapeid = this.valueShapes[currentRegion], shape; delete this.shapes[shapeid]; switch (currentRegion.substr(0, 1)) { case 'r': shape = this.renderRange(currentRegion.substr(1), highlight); break; case 'p': shape = this.renderPerformance(highlight); break; case 't': shape = this.renderTarget(highlight); break; } this.valueShapes[currentRegion] = shape.id; this.shapes[shape.id] = currentRegion; this.target.replaceWithShape(shapeid, shape); }, renderRange: function (rn, highlight) { var rangeval = this.values[rn], rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), color = this.options.get('rangeColors')[rn - 2]; if (highlight) { color = this.calcHighlightColor(color, this.options); } return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color); }, renderPerformance: function (highlight) { var perfval = this.values[1], perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), color = this.options.get('performanceColor'); if (highlight) { color = this.calcHighlightColor(color, this.options); } return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, Math.round(this.canvasHeight * 0.4) - 1, color, color); }, renderTarget: function (highlight) { var targetval = this.values[0], x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)), targettop = Math.round(this.canvasHeight * 0.10), targetheight = this.canvasHeight - (targettop * 2), color = this.options.get('targetColor'); if (highlight) { color = this.calcHighlightColor(color, this.options); } return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color); }, render: function () { var vlen = this.values.length, target = this.target, i, shape; if (!bullet._super.render.call(this)) { return; } for (i = 2; i < vlen; i++) { shape = this.renderRange(i).append(); this.shapes[shape.id] = 'r' + i; this.valueShapes['r' + i] = shape.id; } shape = this.renderPerformance().append(); this.shapes[shape.id] = 'p1'; this.valueShapes.p1 = shape.id; shape = this.renderTarget().append(); this.shapes[shape.id] = 't0'; this.valueShapes.t0 = shape.id; target.render(); } }); /** * Pie charts */ $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, { type: 'pie', init: function (el, values, options, width, height) { var total = 0, i; pie._super.init.call(this, el, values, options, width, height); this.shapes = {}; // map shape ids to value offsets this.valueShapes = {}; // maps value offsets to shape ids this.values = values = $.map(values, Number); if (options.get('width') === 'auto') { this.width = this.height; } if (values.length > 0) { for (i = values.length; i--;) { total += values[i]; } } this.total = total; this.initTarget(); this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2); }, getRegion: function (el, x, y) { var shapeid = this.target.getShapeAt(el, x, y); return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; }, getCurrentRegionFields: function () { var currentRegion = this.currentRegion; return { isNull: this.values[currentRegion] === undefined, value: this.values[currentRegion], percent: this.values[currentRegion] / this.total * 100, color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length], offset: currentRegion }; }, changeHighlight: function (highlight) { var currentRegion = this.currentRegion, newslice = this.renderSlice(currentRegion, highlight), shapeid = this.valueShapes[currentRegion]; delete this.shapes[shapeid]; this.target.replaceWithShape(shapeid, newslice); this.valueShapes[currentRegion] = newslice.id; this.shapes[newslice.id] = currentRegion; }, renderSlice: function (valuenum, highlight) { var target = this.target, options = this.options, radius = this.radius, borderWidth = options.get('borderWidth'), offset = options.get('offset'), circle = 2 * Math.PI, values = this.values, total = this.total, next = offset ? (2*Math.PI)*(offset/360) : 0, start, end, i, vlen, color; vlen = values.length; for (i = 0; i < vlen; i++) { start = next; end = next; if (total > 0) { // avoid divide by zero end = next + (circle * (values[i] / total)); } if (valuenum === i) { color = options.get('sliceColors')[i % options.get('sliceColors').length]; if (highlight) { color = this.calcHighlightColor(color, options); } return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color); } next = end; } }, render: function () { var target = this.target, values = this.values, options = this.options, radius = this.radius, borderWidth = options.get('borderWidth'), shape, i; if (!pie._super.render.call(this)) { return; } if (borderWidth) { target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)), options.get('borderColor'), undefined, borderWidth).append(); } for (i = values.length; i--;) { shape = this.renderSlice(i).append(); this.valueShapes[i] = shape.id; // store just the shapeid this.shapes[shape.id] = i; } target.render(); } }); /** * Box plots */ $.fn.sparkline.box = box = createClass($.fn.sparkline._base, { type: 'box', init: function (el, values, options, width, height) { box._super.init.call(this, el, values, options, width, height); this.values = $.map(values, Number); this.width = options.get('width') === 'auto' ? '4.0em' : width; this.initTarget(); if (!this.values.length) { this.disabled = 1; } }, /** * Simulate a single region */ getRegion: function () { return 1; }, getCurrentRegionFields: function () { var result = [ { field: 'lq', value: this.quartiles[0] }, { field: 'med', value: this.quartiles[1] }, { field: 'uq', value: this.quartiles[2] }, { field: 'lo', value: this.loutlier }, { field: 'ro', value: this.routlier } ]; if (this.lwhisker !== undefined) { result.push({ field: 'lw', value: this.lwhisker}); } if (this.rwhisker !== undefined) { result.push({ field: 'rw', value: this.rwhisker}); } return result; }, render: function () { var target = this.target, values = this.values, vlen = values.length, options = this.options, canvasWidth = this.canvasWidth, canvasHeight = this.canvasHeight, minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'), maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'), canvasLeft = 0, lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i, size, unitSize; if (!box._super.render.call(this)) { return; } if (options.get('raw')) { if (options.get('showOutliers') && values.length > 5) { loutlier = values[0]; lwhisker = values[1]; q1 = values[2]; q2 = values[3]; q3 = values[4]; rwhisker = values[5]; routlier = values[6]; } else { lwhisker = values[0]; q1 = values[1]; q2 = values[2]; q3 = values[3]; rwhisker = values[4]; } } else { values.sort(function (a, b) { return a - b; }); q1 = quartile(values, 1); q2 = quartile(values, 2); q3 = quartile(values, 3); iqr = q3 - q1; if (options.get('showOutliers')) { lwhisker = rwhisker = undefined; for (i = 0; i < vlen; i++) { if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) { lwhisker = values[i]; } if (values[i] < q3 + (iqr * options.get('outlierIQR'))) { rwhisker = values[i]; } } loutlier = values[0]; routlier = values[vlen - 1]; } else { lwhisker = values[0]; rwhisker = values[vlen - 1]; } } this.quartiles = [q1, q2, q3]; this.lwhisker = lwhisker; this.rwhisker = rwhisker; this.loutlier = loutlier; this.routlier = routlier; unitSize = canvasWidth / (maxValue - minValue + 1); if (options.get('showOutliers')) { canvasLeft = Math.ceil(options.get('spotRadius')); canvasWidth -= 2 * Math.ceil(options.get('spotRadius')); unitSize = canvasWidth / (maxValue - minValue + 1); if (loutlier < lwhisker) { target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, canvasHeight / 2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor')).append(); } if (routlier > rwhisker) { target.drawCircle((routlier - minValue) * unitSize + canvasLeft, canvasHeight / 2, options.get('spotRadius'), options.get('outlierLineColor'), options.get('outlierFillColor')).append(); } } // box target.drawRect( Math.round((q1 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.1), Math.round((q3 - q1) * unitSize), Math.round(canvasHeight * 0.8), options.get('boxLineColor'), options.get('boxFillColor')).append(); // left whisker target.drawLine( Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), Math.round((q1 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), options.get('lineColor')).append(); target.drawLine( Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 4), Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight - canvasHeight / 4), options.get('whiskerColor')).append(); // right whisker target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), Math.round((q3 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), options.get('lineColor')).append(); target.drawLine( Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 4), Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight - canvasHeight / 4), options.get('whiskerColor')).append(); // median line target.drawLine( Math.round((q2 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.1), Math.round((q2 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.9), options.get('medianColor')).append(); if (options.get('target')) { size = Math.ceil(options.get('spotRadius')); target.drawLine( Math.round((options.get('target') - minValue) * unitSize + canvasLeft), Math.round((canvasHeight / 2) - size), Math.round((options.get('target') - minValue) * unitSize + canvasLeft), Math.round((canvasHeight / 2) + size), options.get('targetColor')).append(); target.drawLine( Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size), Math.round(canvasHeight / 2), Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size), Math.round(canvasHeight / 2), options.get('targetColor')).append(); } target.render(); } }); // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier // This is accessible as $(foo).simpledraw() if ($.browser.msie && !document.namespaces.v) { document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); } if ($.browser.hasCanvas === undefined) { $.browser.hasCanvas = document.createElement('canvas').getContext !== undefined; } VShape = createClass({ init: function (target, id, type, args) { this.target = target; this.id = id; this.type = type; this.args = args; }, append: function () { this.target.appendShape(this); return this; } }); VCanvas_base = createClass({ _pxregex: /(\d+)(px)?\s*$/i, init: function (width, height, target) { if (!width) { return; } this.width = width; this.height = height; this.target = target; this.lastShapeId = null; if (target[0]) { target = target[0]; } $.data(target, '_jqs_vcanvas', this); }, drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) { return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth); }, drawShape: function (path, lineColor, fillColor, lineWidth) { return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]); }, drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) { return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]); }, drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) { return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]); }, drawRect: function (x, y, width, height, lineColor, fillColor) { return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]); }, getElement: function () { return this.canvas; }, /** * Return the most recently inserted shape id */ getLastShapeId: function () { return this.lastShapeId; }, /** * Clear and reset the canvas */ reset: function () { alert('reset not implemented'); }, _insert: function (el, target) { $(target).html(el); }, /** * Calculate the pixel dimensions of the canvas */ _calculatePixelDims: function (width, height, canvas) { // XXX This should probably be a configurable option var match; match = this._pxregex.exec(height); if (match) { this.pixelHeight = match[1]; } else { this.pixelHeight = $(canvas).height(); } match = this._pxregex.exec(width); if (match) { this.pixelWidth = match[1]; } else { this.pixelWidth = $(canvas).width(); } }, /** * Generate a shape object and id for later rendering */ _genShape: function (shapetype, shapeargs) { var id = shapeCount++; shapeargs.unshift(id); return new VShape(this, id, shapetype, shapeargs); }, /** * Add a shape to the end of the render queue */ appendShape: function (shape) { alert('appendShape not implemented'); }, /** * Replace one shape with another */ replaceWithShape: function (shapeid, shape) { alert('replaceWithShape not implemented'); }, /** * Insert one shape after another in the render queue */ insertAfterShape: function (shapeid, shape) { alert('insertAfterShape not implemented'); }, /** * Remove a shape from the queue */ removeShapeId: function (shapeid) { alert('removeShapeId not implemented'); }, /** * Find a shape at the specified x/y co-ordinates */ getShapeAt: function (el, x, y) { alert('getShapeAt not implemented'); }, /** * Render all queued shapes onto the canvas */ render: function () { alert('render not implemented'); } }); VCanvas_canvas = createClass(VCanvas_base, { init: function (width, height, target, interact) { VCanvas_canvas._super.init.call(this, width, height, target); this.canvas = document.createElement('canvas'); if (target[0]) { target = target[0]; } $.data(target, '_jqs_vcanvas', this); $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' }); this._insert(this.canvas, target); this._calculatePixelDims(width, height, this.canvas); this.canvas.width = this.pixelWidth; this.canvas.height = this.pixelHeight; this.interact = interact; this.shapes = {}; this.shapeseq = []; this.currentTargetShapeId = undefined; $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight}); }, _getContext: function (lineColor, fillColor, lineWidth) { var context = this.canvas.getContext('2d'); if (lineColor !== undefined) { context.strokeStyle = lineColor; } context.lineWidth = lineWidth === undefined ? 1 : lineWidth; if (fillColor !== undefined) { context.fillStyle = fillColor; } return context; }, reset: function () { var context = this._getContext(); context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); this.shapes = {}; this.shapeseq = []; this.currentTargetShapeId = undefined; }, _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { var context = this._getContext(lineColor, fillColor, lineWidth), i, plen; context.beginPath(); context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5); for (i = 1, plen = path.length; i < plen; i++) { context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines } if (lineColor !== undefined) { context.stroke(); } if (fillColor !== undefined) { context.fill(); } if (this.targetX !== undefined && this.targetY !== undefined && context.isPointInPath(this.targetX, this.targetY)) { this.currentTargetShapeId = shapeid; } }, _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { var context = this._getContext(lineColor, fillColor, lineWidth); context.beginPath(); context.arc(x, y, radius, 0, 2 * Math.PI, false); if (this.targetX !== undefined && this.targetY !== undefined && context.isPointInPath(this.targetX, this.targetY)) { this.currentTargetShapeId = shapeid; } if (lineColor !== undefined) { context.stroke(); } if (fillColor !== undefined) { context.fill(); } }, _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { var context = this._getContext(lineColor, fillColor); context.beginPath(); context.moveTo(x, y); context.arc(x, y, radius, startAngle, endAngle, false); context.lineTo(x, y); context.closePath(); if (lineColor !== undefined) { context.stroke(); } if (fillColor) { context.fill(); } if (this.targetX !== undefined && this.targetY !== undefined && context.isPointInPath(this.targetX, this.targetY)) { this.currentTargetShapeId = shapeid; } }, _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor); }, appendShape: function (shape) { this.shapes[shape.id] = shape; this.shapeseq.push(shape.id); this.lastShapeId = shape.id; return shape.id; }, replaceWithShape: function (shapeid, shape) { var shapeseq = this.shapeseq, i; this.shapes[shape.id] = shape; for (i = shapeseq.length; i--;) { if (shapeseq[i] == shapeid) { shapeseq[i] = shape.id; } } delete this.shapes[shapeid]; }, replaceWithShapes: function (shapeids, shapes) { var shapeseq = this.shapeseq, shapemap = {}, sid, i, first; for (i = shapeids.length; i--;) { shapemap[shapeids[i]] = true; } for (i = shapeseq.length; i--;) { sid = shapeseq[i]; if (shapemap[sid]) { shapeseq.splice(i, 1); delete this.shapes[sid]; first = i; } } for (i = shapes.length; i--;) { shapeseq.splice(first, 0, shapes[i].id); this.shapes[shapes[i].id] = shapes[i]; } }, insertAfterShape: function (shapeid, shape) { var shapeseq = this.shapeseq, i; for (i = shapeseq.length; i--;) { if (shapeseq[i] === shapeid) { shapeseq.splice(i + 1, 0, shape.id); this.shapes[shape.id] = shape; return; } } }, removeShapeId: function (shapeid) { var shapeseq = this.shapeseq, i; for (i = shapeseq.length; i--;) { if (shapeseq[i] === shapeid) { shapeseq.splice(i, 1); break; } } delete this.shapes[shapeid]; }, getShapeAt: function (el, x, y) { this.targetX = x; this.targetY = y; this.render(); return this.currentTargetShapeId; }, render: function () { var shapeseq = this.shapeseq, shapes = this.shapes, shapeCount = shapeseq.length, context = this._getContext(), shapeid, shape, i; context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); for (i = 0; i < shapeCount; i++) { shapeid = shapeseq[i]; shape = shapes[shapeid]; this['_draw' + shape.type].apply(this, shape.args); } if (!this.interact) { // not interactive so no need to keep the shapes array this.shapes = {}; this.shapeseq = []; } } }); VCanvas_vml = createClass(VCanvas_base, { init: function (width, height, target) { var groupel; VCanvas_vml._super.init.call(this, width, height, target); if (target[0]) { target = target[0]; } $.data(target, '_jqs_vcanvas', this); this.canvas = document.createElement('span'); $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'}); this._insert(this.canvas, target); this._calculatePixelDims(width, height, this.canvas); this.canvas.width = this.pixelWidth; this.canvas.height = this.pixelHeight; groupel = ''; this.canvas.insertAdjacentHTML('beforeEnd', groupel); this.group = $(this.canvas).children()[0]; this.rendered = false; this.prerender = ''; }, _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { var vpath = [], initial, stroke, fill, closed, vel, plen, i; for (i = 0, plen = path.length; i < plen; i++) { vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]); } initial = vpath.splice(0, 1); lineWidth = lineWidth === undefined ? 1 : lineWidth; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : ''; vel = '' + ' '; return vel; }, _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { var stroke, fill, vel; x -= radius; y -= radius; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; vel = ''; return vel; }, _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { var vpath, startx, starty, endx, endy, stroke, fill, vel; if (startAngle === endAngle) { return; // VML seems to have problem when start angle equals end angle. } if ((endAngle - startAngle) === (2 * Math.PI)) { startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0 endAngle = (2 * Math.PI); } startx = x + Math.round(Math.cos(startAngle) * radius); starty = y + Math.round(Math.sin(startAngle) * radius); endx = x + Math.round(Math.cos(endAngle) * radius); endy = y + Math.round(Math.sin(endAngle) * radius); // Prevent very small slices from being mistaken as a whole pie if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) { return; } vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy]; stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" '; fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; vel = '' + ' '; return vel; }, _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor); }, reset: function () { this.group.innerHTML = ''; }, appendShape: function (shape) { var vel = this['_draw' + shape.type].apply(this, shape.args); if (this.rendered) { this.group.insertAdjacentHTML('beforeEnd', vel); } else { this.prerender += vel; } this.lastShapeId = shape.id; return shape.id; }, replaceWithShape: function (shapeid, shape) { var existing = $('#jqsshape' + shapeid), vel = this['_draw' + shape.type].apply(this, shape.args); existing[0].outerHTML = vel; }, replaceWithShapes: function (shapeids, shapes) { // replace the first shapeid with all the new shapes then toast the remaining old shapes var existing = $('#jqsshape' + shapeids[0]), replace = '', slen = shapes.length, i; for (i = 0; i < slen; i++) { replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args); } existing[0].outerHTML = replace; for (i = 1; i < shapeids.length; i++) { $('#jqsshape' + shapeids[i]).remove(); } }, insertAfterShape: function (shapeid, shape) { var existing = $('#jqsshape' + shapeid), vel = this['_draw' + shape.type].apply(this, shape.args); existing[0].insertAdjacentHTML('afterEnd', vel); }, removeShapeId: function (shapeid) { var existing = $('#jqsshape' + shapeid); this.group.removeChild(existing[0]); }, getShapeAt: function (el, x, y) { var shapeid = el.id.substr(8); return shapeid; }, render: function () { if (!this.rendered) { // batch the intial render into a single repaint this.group.innerHTML = this.prerender; this.rendered = true; } } }); })(jQuery); ================================================ FILE: src/main/webapp/jslib/bs_js/nestable.js ================================================ var Nestable = function () { var updateOutput = function (e) { var list = e.length ? e : $(e.target), output = list.data('output'); if (window.JSON) { output.val(window.JSON.stringify(list.nestable('serialize'))); //, null, 2)); } else { output.val('JSON browser support required for this demo.'); } }; // activate Nestable for list 1 $('#nestable_list_1').nestable({ group: 1 }) .on('change', updateOutput); // activate Nestable for list 2 $('#nestable_list_2').nestable({ group: 1 }) .on('change', updateOutput); // output initial serialised data updateOutput($('#nestable_list_1').data('output', $('#nestable_list_1_output'))); updateOutput($('#nestable_list_2').data('output', $('#nestable_list_2_output'))); $('#nestable_list_menu').on('click', function (e) { var target = $(e.target), action = target.data('action'); if (action === 'expand-all') { $('.dd').nestable('expandAll'); } if (action === 'collapse-all') { $('.dd').nestable('collapseAll'); } }); $('#nestable_list_3').nestable(); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/pulstate.js ================================================ var Pulstate = function () { // pulstate jQuery('#pulsate-regular').pulsate({ color: "#E74955" }); jQuery('#pulsate-once').click(function () { $(this).pulsate({ color: "#A5D16C", repeat: false }); }); jQuery('#pulsate-hover').pulsate({ color: "#4A8BC2", repeat: false, onHover: true }); jQuery('#pulsate-crazy').click(function () { $(this).pulsate({ color: "#FCB322", reach: 50, repeat: 10, speed: 100, glow: true }); }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/respond.js ================================================ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ window.matchMedia = window.matchMedia || (function(doc, undefined){ var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, // fakeBody required for fakeBody = doc.createElement('body'), div = doc.createElement('div'); div.id = 'mq-test-1'; div.style.cssText = "position:absolute;top:-100em"; fakeBody.style.background = "none"; fakeBody.appendChild(div); return function(q){ div.innerHTML = '­'; docElem.insertBefore(fakeBody, refNode); bool = div.offsetWidth == 42; docElem.removeChild(fakeBody); return { matches: bool, media: q }; }; })(document); /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ (function( win ){ //exposed namespace win.respond = {}; //define update even in native-mq-supporting browsers, to avoid errors respond.update = function(){}; //expose media query support flag for external use respond.mediaQueriesSupported = win.matchMedia && win.matchMedia( "only all" ).matches; //if media queries are supported, exit here if( respond.mediaQueriesSupported ){ return; } //define vars var doc = win.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName( "head" )[0] || docElem, base = doc.getElementsByTagName( "base" )[0], links = head.getElementsByTagName( "link" ), requestQueue = [], //loop stylesheets, send text content to translate ripCSS = function(){ var sheets = links, sl = sheets.length, i = 0, //vars for loop: sheet, href, media, isCSS; for( ; i < sl; i++ ){ sheet = sheets[ i ], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; //only links plz and prevent re-parsing if( !!href && isCSS && !parsedSheets[ href ] ){ // selectivizr exposes css through the rawCssText expando if (sheet.styleSheet && sheet.styleSheet.rawCssText) { translate( sheet.styleSheet.rawCssText, href, media ); parsedSheets[ href ] = true; } else { if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) || href.replace( RegExp.$1, "" ).split( "../../../default.htm" )[0] === win.location.host ){ requestQueue.push( { href: href, media: media } ); } } } } makeRequests(); }, //recurse through request queue, get css text makeRequests = function(){ if( requestQueue.length ){ var thisRequest = requestQueue.shift(); ajax( thisRequest.href, function( styles ){ translate( styles, thisRequest.href, thisRequest.media ); parsedSheets[ thisRequest.href ] = true; makeRequests(); } ); } }, //find media blocks in css text, convert to style blocks translate = function( styles, href, media ){ var qs = styles.match( /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi ), ql = qs && qs.length || 0, //try to get CSS path href = href.substring( 0, href.lastIndexOf( "../../../default.htm" )), repUrls = function( css ){ return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" ); }, useMedia = !ql && media, //vars used in loop i = 0, j, fullq, thisq, eachq, eql; //if path exists, tack on trailing slash if( href.length ){ href += "../../../default.htm"; } //if no internal queries exist, but media attr does, use that //note: this currently lacks support for situations where a media attr is specified on a link AND //its associated stylesheet has internal CSS media queries. //In those cases, the media attribute will currently be ignored. if( useMedia ){ ql = 1; } for( ; i < ql; i++ ){ j = 0; //media attr if( useMedia ){ fullq = media; rules.push( repUrls( styles ) ); } //parse for styles else{ fullq = qs[ i ].match( /@media *([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1; rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); } eachq = fullq.split( "," ); eql = eachq.length; for( ; j < eql; j++ ){ thisq = eachq[ j ]; mediastyles.push( { media : thisq.split( "(" )[ 0 ].match( /(only\s+)?([a-zA-Z]+)\s?/ ) && RegExp.$2 || "all", rules : rules.length - 1, hasquery: thisq.indexOf("(") > -1, minw : thisq.match( /\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ), maxw : thisq.match( /\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ) } ); } } applyMedia(); }, lastCall, resizeDefer, // returns the value of 1em in pixels getEmValue = function() { var ret, div = doc.createElement('div'), body = doc.body, fakeUsed = false; div.style.cssText = "position:absolute;font-size:1em;width:1em"; if( !body ){ body = fakeUsed = doc.createElement( "body" ); body.style.background = "none"; } body.appendChild( div ); docElem.insertBefore( body, docElem.firstChild ); ret = div.offsetWidth; if( fakeUsed ){ docElem.removeChild( body ); } else { body.removeChild( div ); } //also update eminpx before returning ret = eminpx = parseFloat(ret); return ret; }, //cached container for 1em value, populated the first time it's needed eminpx, //enable/disable styles applyMedia = function( fromResize ){ var name = "clientWidth", docElemProp = docElem[ name ], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp, styleBlocks = {}, lastLink = links[ links.length-1 ], now = (new Date()).getTime(); //throttle resize calls if( fromResize && lastCall && now - lastCall < resizeThrottle ){ clearTimeout( resizeDefer ); resizeDefer = setTimeout( applyMedia, resizeThrottle ); return; } else { lastCall = now; } for( var i in mediastyles ){ var thisstyle = mediastyles[ i ], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em"; if( !!min ){ min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); } if( !!max ){ max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); } // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){ if( !styleBlocks[ thisstyle.media ] ){ styleBlocks[ thisstyle.media ] = []; } styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); } } //remove any existing respond style element(s) for( var i in appendedEls ){ if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){ head.removeChild( appendedEls[ i ] ); } } //inject active styles, grouped by media type for( var i in styleBlocks ){ var ss = doc.createElement( "style" ), css = styleBlocks[ i ].join( "\n" ); ss.type = "text/css"; ss.media = i; //originally, ss was appended to a documentFragment and sheets were appended in bulk. //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one! head.insertBefore( ss, lastLink.nextSibling ); if ( ss.styleSheet ){ ss.styleSheet.cssText = css; } else { ss.appendChild( doc.createTextNode( css ) ); } //push to appendedEls to track for later removal appendedEls.push( ss ); } }, //tweaked Ajax functions from Quirksmode ajax = function( url, callback ) { var req = xmlHttp(); if (!req){ return; } req.open( "GET", url, true ); req.onreadystatechange = function () { if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){ return; } callback( req.responseText ); } if ( req.readyState == 4 ){ return; } req.send( null ); }, //define ajax obj xmlHttp = (function() { var xmlhttpmethod = false; try { xmlhttpmethod = new XMLHttpRequest(); } catch( e ){ xmlhttpmethod = new ActiveXObject( "Microsoft.XMLHTTP" ); } return function(){ return xmlhttpmethod; }; })(); //translate CSS ripCSS(); //expose update for re-running respond later on respond.update = ripCSS; //adjust on resize function callMedia(){ applyMedia( true ); } if( win.addEventListener ){ win.addEventListener( "resize", callMedia, false ); } else if( win.attachEvent ){ win.attachEvent( "onresize", callMedia ); } })(this); ================================================ FILE: src/main/webapp/jslib/bs_js/sliders.js ================================================ var Sliders = function () { // default sliders $("#default-slider").slider(); // snap inc $("#snap-inc-slider").slider({ value: 50, min: 0, max: 1000, step: 100, slide: function (event, ui) { $("#snap-inc-slider-amount").text("$" + ui.value); } }); $("#snap-inc-slider-amount").text("$" + $("#snap-inc-slider").slider("value")); // range slider $("#slider-range").slider({ range: true, min: 0, max: 500, values: [75, 300], slide: function (event, ui) { $("#slider-range-amount").text("$" + ui.values[0] + " - $" + ui.values[1]); } }); $("#slider-range-amount").text("$" + $("#slider-range").slider("values", 0) + " - $" + $("#slider-range").slider("values", 1)); //range max $("#slider-range-max").slider({ range: "max", min: 1, max: 10, value: 2, slide: function (event, ui) { $("#slider-range-max-amount").text(ui.value); } }); $("#slider-range-max-amount").text($("#slider-range-max").slider("value")); // range min $("#slider-range-min").slider({ range: "min", value: 37, min: 1, max: 700, slide: function (event, ui) { $("#slider-range-min-amount").text("$" + ui.value); } }); $("#slider-range-min-amount").text("$" + $("#slider-range-min").slider("value")); // // setup graphic EQ $( "#eq > span" ).each(function() { // read initial values from markup and remove that var value = parseInt( $( this ).text(), 10 ); $( this ).empty().slider({ value: value, range: "min", animate: true, orientation: "vertical" }); }); // bound to select var select = $( "#minbeds" ); var slider = $( "
        " ).insertAfter( select ).slider({ min: 1, max: 6, range: "min", value: select[ 0 ].selectedIndex + 1, slide: function( event, ui ) { select[ 0 ].selectedIndex = ui.value - 1; } }); $( "#minbeds" ).change(function() { slider.slider( "value", this.selectedIndex + 1 ); }); // vertical slider $("#slider-vertical").slider({ orientation: "vertical", range: "min", min: 0, max: 100, value: 60, slide: function (event, ui) { $("#slider-vertical-amount").text(ui.value); } }); $("#slider-vertical-amount").text($("#slider-vertical").slider("value")); // vertical range sliders $("#slider-range-vertical").slider({ orientation: "vertical", range: true, values: [17, 67], slide: function (event, ui) { $("#slider-range-vertical-amount").text("$" + ui.values[0] + " - $" + ui.values[1]); } }); $("#slider-range-vertical-amount").text("$" + $("#slider-range-vertical").slider("values", 0) + " - $" + $("#slider-range-vertical").slider("values", 1)); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/sparkline-chart.js ================================================ var Script = function () { //sparkline chart $("table.chart-line").each(function () { var colors = []; $("table.chart-line thead th:not(:first)").each(function () { colors.push($(this).css("color")); }); $(this).graphTable({ series:'columns', position:'replace', width:'100%', height:'205px', colors:colors, legend:false, marginLeft:"40px" }, { legend:{ position:"ne" }, series:{ lines:{ show:true }, points:{ show:true } } }) }); $("table.chart-bar").each(function () { var colors = []; $("table.chart-line thead th:not(:first)").each(function () { colors.push($(this).css("color")); }); $(this).graphTable( { series:'columns', position:'replace', width:'100%', height:'205px', colors:colors, legend:false, marginLeft:"40px" }, { series:{ lines: { show: false, lineWidth: 2 }, points: {show: false}, shadowSize: 2, bars:{ show:true, lineWidth:1, barWidth:0.8, fill:true, align:"left", multiplebars:false } }, grid: { hoverable: false, show: true, borderWidth: 0, labelMargin: 12 }, legend: { show: false, position:"ne" } }); }); /* spark line start */ $("#metro-sparkline-type1").sparkline( [5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7, 5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7, 5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7], { type:"line", height:60, lineColor: '#457bb2', fillColor: '#dff1ff', spotColor: '#de577b', minSpotColor: '#de577b', highlightLineColor: '#de577b' }); $("#metro-sparkline-type2").sparkline( [5, 6, 7, 2, 0, -4, -2, 4, 5, 6, 7, 2, 0, -4, -2, 4 ], { type:"bar", height:60, barColor: '#4f8ac7', negBarColor: '#da587c' }); $("#metro-sparkline-type3").sparkline( [5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7, 5, 6, 7, 9, 5, 3, 2, 2, 4, 6, 7, 5, 6, 7, 9, 9, 5, 3], { type:"discrete", height:60, lineColor: '#7e9d43' }); /* spark line end */ }(); ================================================ FILE: src/main/webapp/jslib/bs_js/tree.js ================================================ var TreeView = function () { // handle collapse/expand for tree_1 $('#tree_1_collapse').click(function () { $('.tree-toggle', $('#tree_1 > li > ul')).addClass("closed"); $('.branch', $('#tree_1 > li > ul')).removeClass("in"); }); $('#tree_1_expand').click(function () { $('.tree-toggle', $('#tree_1 > li > ul')).removeClass("closed"); $('.branch', $('#tree_1 > li > ul')).addClass("in"); }); // handle collapse/expand for tree_2 $('#tree_2_collapse').click(function () { $('.tree-toggle', $('#tree_2 > li > ul')).addClass("closed"); $('.branch', $('#tree_2 > li > ul')).removeClass("in"); }); $('#tree_2_expand').click(function () { //$('.tree-toggle', $('#tree_2 > li > ul')).removeClass("closed"); // iterate tree nodes and exppand all nodes $('.tree-toggle', $('#tree_2 > li > ul')).each(function () { $(this).click(); //trigger tree node click }); $('.branch', $('#tree_2 > li > ul')).addClass("in"); }); //This is a quick example of capturing the select event on tree leaves, not branches $("#tree_1").on("nodeselect.tree.data-api", "[data-role=leaf]", function (e) { var output = ""; output += "Node nodeselect event fired:\n"; output += "Node Type: leaf\n"; output += "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n"; output += "Parentage: " + e.node.parentage.join("/"); alert(output); }); //This is a quick example of capturing the select event on tree branches, not leaves $("#tree_1").on("nodeselect.tree.data-api", "[role=branch]", function (e) { var output = "Node nodeselect event fired:\n"; + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n" alert(output); }); //Listening for the 'openbranch' event. Look for e.node, which is the actual node the user opens $("#tree_1").on("openbranch.tree", "[data-toggle=branch]", function (e) { var output = "Node openbranch event fired:\n" + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n" alert(output); }); //Listening for the 'closebranch' event. Look for e.node, which is the actual node the user closed $("#tree_1").on("closebranch.tree", "[data-toggle=branch]", function (e) { var output = "Node closebranch event fired:\n" + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n" alert(output); }); }(); ================================================ FILE: src/main/webapp/jslib/bs_js/vmaps-scripts.js ================================================ var Script = function () { // world vmap jQuery(document).ready(function() { jQuery('#vmap_world').vectorMap({ map: 'world_en', backgroundColor: '#333333', color: '#ffffff', hoverOpacity: 0.7, selectedColor: '#666666', enableZoom: true, showTooltip: true, values: sample_data, scaleColors: ['#C8EEFF', '#006491'], normalizeFunction: 'polynomial' }); }); // russia vmap jQuery(document).ready(function() { jQuery('#vmap_russia').vectorMap({ map: 'russia_en', backgroundColor: '#333333', color: '#ffffff', hoverOpacity: 0.7, selectedColor: '#999999', enableZoom: true, showTooltip: true, values: sample_data, scaleColors: ['#C8EEFF', '#006491'], normalizeFunction: 'polynomial' }); }); // germany vmap jQuery(document).ready(function() { jQuery('#vmap_germany').vectorMap({ map: 'germany_en', onRegionClick: function(element, code, region) { var message = 'You clicked "' + region + '" which has the code: ' + code.toUpperCase(); alert(message); } }); }); // usa vmap jQuery(document).ready(function() { jQuery('#vmap_usa').vectorMap({ map: 'usa_en', enableZoom: true, showTooltip: true, selectedRegion: 'MO' }); }); // europe vmap jQuery(document).ready(function() { jQuery('#vmap_europe').vectorMap({ map: 'europe_en', enableZoom: false, showTooltip: false }); }); }(); ================================================ FILE: src/main/webapp/jslib/chart/g.bar.js ================================================ /*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { var mmin = Math.min, mmax = Math.max; function finger(x, y, width, height, dir, ending, isPath, paper) { var path, ends = { round: 'round', sharp: 'sharp', soft: 'soft', square: 'square' }; // dir 0 for horizontal and 1 for vertical if ((dir && !height) || (!dir && !width)) { return isPath ? "" : paper.path(); } ending = ends[ending] || "square"; height = Math.round(height); width = Math.round(width); x = Math.round(x); y = Math.round(y); switch (ending) { case "round": if (!dir) { var r = ~~(height / 2); if (width < r) { r = width; path = [ "M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z" ]; } else { path = [ "M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z" ]; } } else { r = ~~(width / 2); if (height < r) { r = height; path = [ "M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z" ]; } else { path = [ "M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z" ]; } } break; case "sharp": if (!dir) { var half = ~~(height / 2); path = [ "M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z" ]; } else { half = ~~(width / 2); path = [ "M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z" ]; } break; case "square": if (!dir) { path = [ "M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z" ]; } else { path = [ "M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z" ]; } break; case "soft": if (!dir) { r = mmin(width, Math.round(height / 5)); path = [ "M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z" ]; } else { r = mmin(Math.round(width / 5), height); path = [ "M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z" ]; } } if (isPath) { return path.join(","); } else { return paper.path(path); } } /* * Vertical Barchart */ function VBarchart(paper, x, y, width, height, values, opts) { opts = opts || {}; var chartinst = this, type = opts.type || "square", gutter = parseFloat(opts.gutter || "20%"), chart = paper.set(), bars = paper.set(), covers = paper.set(), covers2 = paper.set(), total = Math.max.apply(Math, values), stacktotal = [], multi = 0, colors = opts.colors || chartinst.colors, len = values.length; if (Raphael.is(values[0], "array")) { total = []; multi = len; len = 0; for (var i = values.length; i--;) { bars.push(paper.set()); total.push(Math.max.apply(Math, values[i])); len = Math.max(len, values[i].length); } if (opts.stacked) { for (var i = len; i--;) { var tot = 0; for (var j = values.length; j--;) { tot +=+ values[j][i] || 0; } stacktotal.push(tot); } } for (var i = values.length; i--;) { if (values[i].length < len) { for (var j = len; j--;) { values[i].push(0); } } } total = Math.max.apply(Math, opts.stacked ? stacktotal : total); } total = (opts.to) || total; var barwidth = width / (len * (100 + gutter) + gutter) * 100, barhgutter = barwidth * gutter / 100, barvgutter = opts.vgutter == null ? 20 : opts.vgutter, stack = [], X = x + barhgutter, Y = (height - 2 * barvgutter) / total; if (!opts.stretch) { barhgutter = Math.round(barhgutter); barwidth = Math.floor(barwidth); } !opts.stacked && (barwidth /= multi || 1); for (var i = 0; i < len; i++) { stack = []; for (var j = 0; j < (multi || 1); j++) { var h = Math.round((multi ? values[j][i] : values[i]) * Y), top = y + height - barvgutter - h, bar = finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type, null, paper).attr({ stroke: "none", fill: colors[multi ? j : i] }); if (multi) { bars[j].push(bar); } else { bars.push(bar); } bar.y = top; bar.x = Math.round(X + barwidth / 2); bar.w = barwidth; bar.h = h; bar.value = multi ? values[j][i] : values[i]; if (!opts.stacked) { X += barwidth; } else { stack.push(bar); } } if (opts.stacked) { var cvr; covers2.push(cvr = paper.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(chartinst.shim)); cvr.bars = paper.set(); var size = 0; for (var s = stack.length; s--;) { stack[s].toFront(); } for (var s = 0, ss = stack.length; s < ss; s++) { var bar = stack[s], cover, h = (size + bar.value) * Y, path = finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1, paper); cvr.bars.push(bar); size && bar.attr({path: path}); bar.h = h; bar.y = y + height - barvgutter - !!size * .5 - h; covers.push(cover = paper.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(chartinst.shim)); cover.bar = bar; cover.value = bar.value; size += bar.value; } X += barwidth; } X += barhgutter; } covers2.toFront(); X = x + barhgutter; if (!opts.stacked) { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var cover; covers.push(cover = paper.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(chartinst.shim)); cover.bar = multi ? bars[j][i] : bars[i]; cover.value = cover.bar.value; X += barwidth; } X += barhgutter; } } var xdim = chartinst.snapEnds(0, len, 1), minx = xdim.from, maxx = xdim.to, ydim = chartinst.snapEnds(0, total, 1), miny = ydim.from, maxy = ydim.to; var axis = paper.set(); if (opts.axis) { var ax = (opts.axis + "").split(/[,\s]+/); // +ax[0] && axis.push(chartinst.axis(x, y + gutter, width, minx, maxx, opts.axisxstep || Math.floor((width) / 20), 2, paper)); +ax[0] && axis.push(paper.path(["M", x, y + gutter + 0.5,"h", width])); +ax[1] && axis.push(chartinst.axis(x + width, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - gutter) / 20), 3, paper)); // +ax[2] && axis.push(chartinst.axis(x, y + height - gutter, width, minx, maxx, opts.axisxstep || Math.floor((width) / 20), 0, paper)); +ax[2] && axis.push(paper.path(["M", x, y + height - gutter + 0.5,"h", width])); +ax[3] && axis.push(chartinst.axis(x, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - gutter) / 20), 1, paper)); } chart.label = function (labels, isBottom) { labels = labels || []; this.labels = paper.set(); var L, l = -Infinity; if (opts.stacked) { for (var i = 0; i < len; i++) { var tot = 0; for (var j = 0; j < (multi || 1); j++) { tot += multi ? values[j][i] : values[i]; var bar = multi ? bars[j][i] : bars[i]; if (j == multi - 1) { var label = chartinst.labelise(labels[i], tot, total); L = paper.text(bar.x, y + height - barvgutter / 2, label).insertBefore(covers[i * (multi || 1) + j]); var bb = L.getBBox(); if (bb.x - 7 < l) { L.remove(); } else { this.labels.push(L); l = bb.x + bb.width; } } } } } else { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var label = chartinst.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total); var bar = multi ? bars[j][i] : bars[i]; L = paper.text(bar.x, isBottom ? y + height - barvgutter / 2 : bar.y - 10, label).insertBefore(covers[i * (multi || 1) + j]); var bb = L.getBBox(); if (bb.x - 7 < l) { L.remove(); } else { this.labels.push(L); l = bb.x + bb.width; } } } } return this; }; chart.hover = function (fin, fout) { covers2.hide(); covers.show(); covers.mouseover(fin).mouseout(fout); return this; }; chart.hoverColumn = function (fin, fout) { covers.hide(); covers2.show(); fout = fout || function () {}; covers2.mouseover(fin).mouseout(fout); return this; }; chart.click = function (f) { covers2.hide(); covers.show(); covers.click(f); return this; }; chart.each = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; chart.eachColumn = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers2.length; i--;) { f.call(covers2[i]); } return this; }; chart.clickColumn = function (f) { covers.hide(); covers2.show(); covers2.click(f); return this; }; chart.push(bars, covers, covers2); chart.bars = bars; chart.covers = covers; chart.axis = axis; return chart; }; /** * Horizontal Barchart */ function HBarchart(paper, x, y, width, height, values, opts) { opts = opts || {}; var chartinst = this, type = opts.type || "square", gutter = parseFloat(opts.gutter || "20%"), chart = paper.set(), bars = paper.set(), covers = paper.set(), covers2 = paper.set(), total = Math.max.apply(Math, values), stacktotal = [], multi = 0, colors = opts.colors || chartinst.colors, len = values.length; if (Raphael.is(values[0], "array")) { total = []; multi = len; len = 0; for (var i = values.length; i--;) { bars.push(paper.set()); total.push(Math.max.apply(Math, values[i])); len = Math.max(len, values[i].length); } if (opts.stacked) { for (var i = len; i--;) { var tot = 0; for (var j = values.length; j--;) { tot +=+ values[j][i] || 0; } stacktotal.push(tot); } } for (var i = values.length; i--;) { if (values[i].length < len) { for (var j = len; j--;) { values[i].push(0); } } } total = Math.max.apply(Math, opts.stacked ? stacktotal : total); } total = (opts.to) || total; var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100), bargutter = Math.floor(barheight * gutter / 100), stack = [], Y = y + bargutter, X = (width - 1) / total; !opts.stacked && (barheight /= multi || 1); for (var i = 0; i < len; i++) { stack = []; for (var j = 0; j < (multi || 1); j++) { var val = multi ? values[j][i] : values[i], bar = finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type, null, paper).attr({stroke: "none", fill: colors[multi ? j : i]}); if (multi) { bars[j].push(bar); } else { bars.push(bar); } bar.x = x + Math.round(val * X); bar.y = Y + barheight / 2; bar.w = Math.round(val * X); bar.h = barheight; bar.value = +val; if (!opts.stacked) { Y += barheight; } else { stack.push(bar); } } if (opts.stacked) { var cvr = paper.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(chartinst.shim); covers2.push(cvr); cvr.bars = paper.set(); var size = 0; for (var s = stack.length; s--;) { stack[s].toFront(); } for (var s = 0, ss = stack.length; s < ss; s++) { var bar = stack[s], cover, val = Math.round((size + bar.value) * X), path = finger(x, bar.y, val, barheight - 1, false, type, 1, paper); cvr.bars.push(bar); size && bar.attr({ path: path }); bar.w = val; bar.x = x + val; covers.push(cover = paper.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(chartinst.shim)); cover.bar = bar; size += bar.value; } Y += barheight; } Y += bargutter; } covers2.toFront(); Y = y + bargutter; if (!opts.stacked) { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var cover = paper.rect(x, Y, width, barheight).attr(chartinst.shim); covers.push(cover); cover.bar = multi ? bars[j][i] : bars[i]; cover.value = cover.bar.value; Y += barheight; } Y += bargutter; } } var xdim = chartinst.snapEnds(0, total, 1), minx = xdim.from, maxx = xdim.to, ydim = chartinst.snapEnds(0, len, 1), miny = ydim.from, maxy = ydim.to; var axis = paper.set(); if (opts.axis) { var ax = (opts.axis + "").split(/[,\s]+/); +ax[0] && axis.push(chartinst.axis(x, y, width, minx, maxx, opts.axisxstep || Math.floor((width) / 20), 2, paper)); //+ax[1] && axis.push(chartinst.axis(x + width, y + height, height, miny, maxy, opts.axisystep || Math.floor((height - gutter) / 20), 3, paper)); +ax[1] && axis.push(paper.path(["M", x+width+ 0.5, y,"v", height])); +ax[2] && axis.push(chartinst.axis(x, y + height, width, minx, maxx, opts.axisxstep || Math.floor((width) / 20), 0, paper)); //+ax[3] && axis.push(chartinst.axis(x, y + height, height, miny, maxy, opts.axisystep || Math.floor((height - gutter) / 20), 1, paper)); +ax[3] && axis.push(paper.path(["M", x+ 0.5, y,"v", height])); } chart.label = function (labels, isRight) { labels = labels || []; this.labels = paper.set(); for (var i = 0; i < len; i++) { for (var j = 0; j < multi; j++) { var bar = multi ? bars[j][i] : bars[i]; var label = chartinst.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total), X = isRight ? bar.x - barheight / 2 + 3 : x + 5, A = isRight ? "end" : "start", L; this.labels.push(L = paper.text(X, bar.y, label).attr({ "text-anchor": A }).insertBefore(covers[i * (multi || 1) + j])); if (L.getBBox().x < x + 5) { L.attr({x: x + 5, "text-anchor": "start"}); } else { bar.label = L; } } } return this; }; chart.hover = function (fin, fout) { covers2.hide(); covers.show(); fout = fout || function () {}; covers.mouseover(fin).mouseout(fout); return this; }; chart.hoverColumn = function (fin, fout) { covers.hide(); covers2.show(); fout = fout || function () {}; covers2.mouseover(fin).mouseout(fout); return this; }; chart.each = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; chart.eachColumn = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers2.length; i--;) { f.call(covers2[i]); } return this; }; chart.click = function (f) { covers2.hide(); covers.show(); covers.click(f); return this; }; chart.clickColumn = function (f) { covers.hide(); covers2.show(); covers2.click(f); return this; }; chart.push(bars, covers, covers2); chart.bars = bars; chart.covers = covers; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; HBarchart.prototype = VBarchart.prototype = new F; Raphael.fn.hbarchart = function(x, y, width, height, values, opts) { return new HBarchart(this, x, y, width, height, values, opts); }; Raphael.fn.barchart = function(x, y, width, height, values, opts) { return new VBarchart(this, x, y, width, height, values, opts); }; })(); ================================================ FILE: src/main/webapp/jslib/chart/g.dot.js ================================================ /*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { var colorValue = function (value, total, s, b) { return 'hsb(' + [Math.min((1 - value / total) * .4, 1), s || .75, b || .75] + ')'; }; function Dotchart(paper, x, y, width, height, valuesx, valuesy, size, opts) { var chartinst = this; function drawAxis(ax) { +ax[0] && (ax[0] = chartinst.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t", null, paper)); +ax[1] && (ax[1] = chartinst.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t", null, paper)); +ax[2] && (ax[2] = chartinst.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t", null, paper)); +ax[3] && (ax[3] = chartinst.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t", null, paper)); } opts = opts || {}; var xdim = chartinst.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1), minx = xdim.from, maxx = xdim.to, gutter = opts.gutter || 10, ydim = chartinst.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1), miny = ydim.from, maxy = ydim.to, len = Math.max(valuesx.length, valuesy.length, size.length), symbol = paper[opts.symbol] || "circle", res = paper.set(), series = paper.set(), max = opts.max || 100, top = Math.max.apply(Math, size), R = [], k = Math.sqrt(top / Math.PI) * 2 / max; for (var i = 0; i < len; i++) { R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max); } gutter = Math.max.apply(Math, R.concat(gutter)); var axis = paper.set(), maxR = Math.max.apply(Math, R); if (opts.axis) { var ax = (opts.axis + "").split(/[,\s]+/); drawAxis.call(chartinst, ax); var g = [], b = []; for (var i = 0, ii = ax.length; i < ii; i++) { var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0; g[i] = bb + gutter; b[i] = bb; } gutter = Math.max.apply(Math, g.concat(gutter)); for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { ax[i].remove(); ax[i] = 1; } drawAxis.call(chartinst, ax); for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { axis.push(ax[i].all); } res.axis = axis; } var kx = (width - gutter * 2) / ((maxx - minx) || 1), ky = (height - gutter * 2) / ((maxy - miny) || 1); for (var i = 0, ii = valuesy.length; i < ii; i++) { var sym = paper.raphael.is(symbol, "array") ? symbol[i] : symbol, X = x + gutter + (valuesx[i] - minx) * kx, Y = y + height - gutter - (valuesy[i] - miny) * ky; sym && R[i] && series.push(paper[sym](X, Y, R[i]).attr({ fill: opts.heat ? colorValue(R[i], maxR) : chartinst.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none" })); } var covers = paper.set(); for (var i = 0, ii = valuesy.length; i < ii; i++) { var X = x + gutter + (valuesx[i] - minx) * kx, Y = y + height - gutter - (valuesy[i] - miny) * ky; covers.push(paper.circle(X, Y, maxR).attr(chartinst.shim)); opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]}); covers[i].r = +R[i].toFixed(3); covers[i].x = +X.toFixed(3); covers[i].y = +Y.toFixed(3); covers[i].X = valuesx[i]; covers[i].Y = valuesy[i]; covers[i].value = size[i] || 0; covers[i].dot = series[i]; } res.covers = covers; res.series = series; res.push(series, axis, covers); res.hover = function (fin, fout) { covers.mouseover(fin).mouseout(fout); return this; }; res.click = function (f) { covers.click(f); return this; }; res.each = function (f) { if (!paper.raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; res.href = function (map) { var cover; for (var i = covers.length; i--;) { cover = covers[i]; if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) { cover.attr({href: map.href}); } } }; return res; }; //inheritance var F = function() {}; F.prototype = Raphael.g Dotchart.prototype = new F; //public Raphael.fn.dotchart = function(x, y, width, height, valuesx, valuesy, size, opts) { return new Dotchart(this, x, y, width, height, valuesx, valuesy, size, opts); } })(); ================================================ FILE: src/main/webapp/jslib/chart/g.line.js ================================================ /*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { function shrink(values, dim) { var k = values.length / dim, j = 0, l = k, sum = 0, res = []; while (j < values.length) { l--; if (l < 0) { sum += values[j] * (1 + l); res.push(sum / k); sum = values[j++] * -l; l += k; } else { sum += values[j++]; } } return res; } function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) { var l1 = (p2x - p1x) / 2, l2 = (p3x - p2x) / 2, a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)), b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y)); a = p1y < p2y ? Math.PI - a : a; b = p3y < p2y ? Math.PI - b : b; var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2, dx1 = l1 * Math.sin(alpha + a), dy1 = l1 * Math.cos(alpha + a), dx2 = l2 * Math.sin(alpha + b), dy2 = l2 * Math.cos(alpha + b); return { x1: p2x - dx1, y1: p2y + dy1, x2: p2x + dx2, y2: p2y + dy2 }; } function Linechart(paper, x, y, width, height, valuesx, valuesy, opts) { var chartinst = this; opts = opts || {}; if (!paper.raphael.is(valuesx[0], "array")) { valuesx = [valuesx]; } if (!paper.raphael.is(valuesy[0], "array")) { valuesy = [valuesy]; } var gutter = opts.gutter || 10, len = Math.max(valuesx[0].length, valuesy[0].length), symbol = opts.symbol || "", colors = opts.colors || chartinst.colors, columns = null, dots = null, chart = paper.set(), path = []; for (var i = 0, ii = valuesy.length; i < ii; i++) { len = Math.max(len, valuesy[i].length); } var shades = paper.set(); for (i = 0, ii = valuesy.length; i < ii; i++) { if (opts.shade) { shades.push(paper.path().attr({ stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3 })); } if (valuesy[i].length > width - 2 * gutter) { valuesy[i] = shrink(valuesy[i], width - 2 * gutter); len = width - 2 * gutter; } if (valuesx[i] && valuesx[i].length > width - 2 * gutter) { valuesx[i] = shrink(valuesx[i], width - 2 * gutter); } } var allx = Array.prototype.concat.apply([], valuesx), ally = Array.prototype.concat.apply([], valuesy), xdim = chartinst.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1), minx = xdim.from, maxx = xdim.to, ydim = chartinst.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1), miny = ydim.from, maxy = ydim.to, kx = (width - gutter * 2) / ((maxx - minx) || 1), ky = (height - gutter * 2) / ((maxy - miny) || 1); var axis = paper.set(); if (opts.axis) { miny = 0; maxy = ydim.to; ky = (height - gutter * 2) / ((maxy - miny) || 1); var ax = (opts.axis + "").split(/[,\s]+/); +ax[0] && axis.push(chartinst.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlables, paper)); +ax[1] && axis.push(chartinst.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, ydim.from, ydim.to, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, paper)); +ax[2] && axis.push(chartinst.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlables, paper)); //+ax[3] && axis.push(chartinst.axis(x + gutter, y + height - gutter, height - 2 * gutter, ydim.from, ydim.to, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, paper)); +ax[3] && axis.push(chartinst.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, paper)); } var lines = paper.set(), symbols = paper.set(), line; for (i = 0, ii = valuesy.length; i < ii; i++) { if (!opts.nostroke) { lines.push(line = paper.path().attr({ stroke: colors[i], "stroke-width": opts.width || 2, "stroke-linejoin": "round", "stroke-linecap": "round", "stroke-dasharray": opts.dash || "" })); } var sym = Raphael.is(symbol, "array") ? symbol[i] : symbol, symset = paper.set(); path = []; for (var j = 0, jj = valuesy[i].length; j < jj; j++) { var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, Y = y + height - gutter - (valuesy[i][j] - miny) * ky; (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(paper[Raphael.is(sym, "array") ? sym[j] : sym](X, Y, (opts.width || 2) * 3).attr({ fill: colors[i], stroke: "none" })); if (opts.smooth) { if (j && j != jj - 1) { var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx, Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky, X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx, Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky, a = getAnchors(X0, Y0, X, Y, X2, Y2); path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]); } if (!j) { path = ["M", X, Y, "C", X, Y]; } } else { path = path.concat([j ? "L" : "M", X, Y]); } } if (opts.smooth) { path = path.concat([X, Y, X, Y]); } symbols.push(symset); if (opts.shade) { shades[i].attr({ path: path.concat(["L", X, y + height - gutter, "L", x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",") }); } !opts.nostroke && line.attr({ path: path.join(",") }); } function createColumns(f) { // unite Xs together var Xs = []; for (var i = 0, ii = valuesx.length; i < ii; i++) { Xs = Xs.concat(valuesx[i]); } Xs.sort(function(a,b){return a-b;}); // remove duplicates var Xs2 = [], xs = []; for (i = 0, ii = Xs.length; i < ii; i++) { Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx); } Xs = Xs2; ii = Xs.length; var cvrs = f || paper.set(); for (i = 0; i < ii; i++) { var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2, w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2, C; f ? (C = {}) : cvrs.push(C = paper.rect(X - 1, y, Math.max(w + 1, 1), height).attr({ stroke: "none", fill: "#000", opacity: 0 })); C.values = []; C.symbols = paper.set(); C.y = []; C.x = xs[i]; C.axis = Xs[i]; for (var j = 0, jj = valuesy.length; j < jj; j++) { Xs2 = valuesx[j] || valuesx[0]; for (var k = 0, kk = Xs2.length; k < kk; k++) { if (Xs2[k] == Xs[i]) { C.values.push(valuesy[j][k]); C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky); C.symbols.push(chart.symbols[j][k]); } } } f && f.call(C); } !f && (columns = cvrs); } function createDots(f) { var cvrs = f || paper.set(), C; for (var i = 0, ii = valuesy.length; i < ii; i++) { for (var j = 0, jj = valuesy[i].length; j < jj; j++) { var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx, Y = y + height - gutter - (valuesy[i][j] - miny) * ky; f ? (C = {}) : cvrs.push(C = paper.circle(X, Y, Math.abs(nearX - X) / 2).attr({ stroke: "none", fill: "#000", opacity: 0 })); C.x = X; C.y = Y; C.value = valuesy[i][j]; C.line = chart.lines[i]; C.shade = chart.shades[i]; C.symbol = chart.symbols[i][j]; C.symbols = chart.symbols[i]; C.axis = (valuesx[i] || valuesx[0])[j]; f && f.call(C); } } !f && (dots = cvrs); } chart.push(lines, shades, symbols, axis, columns, dots); chart.lines = lines; chart.shades = shades; chart.symbols = symbols; chart.axis = axis; chart.hoverColumn = function (fin, fout) { !columns && createColumns(); columns.mouseover(fin).mouseout(fout); return this; }; chart.clickColumn = function (f) { !columns && createColumns(); columns.click(f); return this; }; chart.hrefColumn = function (cols) { var hrefs = paper.raphael.is(arguments[0], "array") ? arguments[0] : arguments; if (!(arguments.length - 1) && typeof cols == "object") { for (var x in cols) { for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) { columns[i].attr("href", cols[x]); } } } !columns && createColumns(); for (i = 0, ii = hrefs.length; i < ii; i++) { columns[i] && columns[i].attr("href", hrefs[i]); } return this; }; chart.hover = function (fin, fout) { !dots && createDots(); dots.mouseover(fin).mouseout(fout); return this; }; chart.click = function (f) { !dots && createDots(); dots.click(f); return this; }; chart.each = function (f) { createDots(f); return this; }; chart.eachColumn = function (f) { createColumns(f); return this; }; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; Linechart.prototype = new F; //public Raphael.fn.linechart = function(x, y, width, height, valuesx, valuesy, opts) { return new Linechart(this, x, y, width, height, valuesx, valuesy, opts); } })(); ================================================ FILE: src/main/webapp/jslib/chart/g.pie.js ================================================ /* * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { function Piechart(paper, cx, cy, r, values, opts) { opts = opts || {}; var chartinst = this, sectors = [], covers = paper.set(), chart = paper.set(), series = paper.set(), order = [], len = values.length, angle = 0, total = 0, others = 0, cut = 9, defcut = true; function sector(cx, cy, r, startAngle, endAngle, fill) { var rad = Math.PI / 180, x1 = cx + r * Math.cos(-startAngle * rad), x2 = cx + r * Math.cos(-endAngle * rad), xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad), y1 = cy + r * Math.sin(-startAngle * rad), y2 = cy + r * Math.sin(-endAngle * rad), ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad), res = [ "M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z" ]; res.middle = { x: xm, y: ym }; return res; } chart.covers = covers; if (len == 1) { series.push(paper.circle(cx, cy, r).attr({ fill: chartinst.colors[0], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth })); covers.push(paper.circle(cx, cy, r).attr(chartinst.shim)); total = values[0]; values[0] = { value: values[0], order: 0, valueOf: function () { return this.value; } }; series[0].middle = {x: cx, y: cy}; series[0].mangle = 180; } else { for (var i = 0; i < len; i++) { total += values[i]; values[i] = { value: values[i], order: i, valueOf: function () { return this.value; } }; } values.sort(function (a, b) { return b.value - a.value; }); for (i = 0; i < len; i++) { if (defcut && values[i] * 360 / total <= 1.5) { cut = i; defcut = false; } if (i > cut) { defcut = false; values[cut].value += values[i]; values[cut].others = true; others = values[cut].value; } } len = Math.min(cut + 1, values.length); others && values.splice(len) && (values[cut].others = true); for (i = 0; i < len; i++) { var mangle = angle - 360 * values[i] / total / 2; if (!i) { angle = 90 - mangle; mangle = angle - 360 * values[i] / total / 2; } if (opts.init) { var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(","); } var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total); var p = paper.path(opts.init ? ipath : path).attr({ fill: opts.colors && opts.colors[i] || chartinst.colors[i] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round" }); p.value = values[i]; p.middle = path.middle; p.mangle = mangle; sectors.push(p); series.push(p); opts.init && p.animate({ path: path.join(",") }, (+opts.init - 1) || 1000, ">"); } for (i = 0; i < len; i++) { p = paper.path(sectors[i].attr("path")).attr(chartinst.shim); opts.href && opts.href[i] && p.attr({ href: opts.href[i] }); p.attr = function () {}; covers.push(p); series.push(p); } } chart.hover = function (fin, fout) { fout = fout || function () {}; var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, mx: sector.middle.x, my: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; cover.mouseover(function () { fin.call(o); }).mouseout(function () { fout.call(o); }); })(series[i], covers[i], i); } return this; }; // x: where label could be put // y: where label could be put // value: value to show // total: total number to count % chart.each = function (f) { var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, x: sector.middle.x, y: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; f.call(o); })(series[i], covers[i], i); } return this; }; chart.click = function (f) { var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, mx: sector.middle.x, my: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; cover.click(function () { f.call(o); }); })(series[i], covers[i], i); } return this; }; chart.inject = function (element) { element.insertBefore(covers[0]); }; var legend = function (labels, otherslabel, mark, dir) { var x = cx + r + r / 5, y = cy, h = y + 10; labels = labels || []; dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east"; mark = paper[mark && mark.toLowerCase()] || "circle"; chart.labels = paper.set(); for (var i = 0; i < len; i++) { var clr = series[i].attr("fill"), j = values[i].order, txt; values[i].others && (labels[j] = otherslabel || "Others"); labels[j] = chartinst.labelise(labels[j], values[i], total); chart.labels.push(paper.set()); chart.labels[i].push(paper[mark](x + 5, h, 5).attr({ fill: clr, stroke: "none" })); chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(chartinst.txtattr).attr({ fill: opts.legendcolor || "#000", "text-anchor": "start"})); covers[i].label = chart.labels[i]; h += txt.getBBox().height * 1.2; } var bb = chart.labels.getBBox(), tr = { east: [0, -bb.height / 2], west: [-bb.width - 2 * r - 20, -bb.height / 2], north: [-r - bb.width / 2, -r - bb.height - 10], south: [-r - bb.width / 2, r + 10] }[dir]; chart.labels.translate.apply(chart.labels, tr); chart.push(chart.labels); }; if (opts.legend) { legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos); } chart.push(series, covers); chart.series = series; chart.covers = covers; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; Piechart.prototype = new F; //public Raphael.fn.piechart = function(cx, cy, r, values, opts) { return new Piechart(this, cx, cy, r, values, opts); } })(); ================================================ FILE: src/main/webapp/jslib/chart/g.raphael.js ================================================ /*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ /* * Tooltips on Element prototype */ /*\ * Element.popup [ method ] ** * Puts the context Element in a 'popup' tooltip. Can also be used on sets. ** > Parameters ** - dir (string) location of Element relative to the tail: `'down'`, `'left'`, `'up'` [default], or `'right'`. - size (number) amount of bevel/padding around the Element, as well as half the width and height of the tail [default: `5`] - x (number) x coordinate of the popup's tail [default: Element's `x` or `cx`] - y (number) y coordinate of the popup's tail [default: Element's `y` or `cy`] ** = (object) path element of the popup > Usage | paper.circle(50, 50, 5).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).popup(); \*/ Raphael.el.popup = function (dir, size, x, y) { var paper = this.paper || this[0].paper, bb, xy, center, cw, ch; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } dir = dir == null ? 'up' : dir; size = size || 5; bb = this.getBBox(); x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); cw = Math.max(bb.width / 2 - size, 0); ch = Math.max(bb.height / 2 - size, 0); this.translate(x - bb.x - (center ? bb.width / 2 : 0), y - bb.y - (center ? bb.height / 2 : 0)); bb = this.getBBox(); var paths = { up: [ 'M', x, y, 'l', -size, -size, -cw, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -bb.height, 'a', size, size, 0, 0, 1, size, -size, 'l', size * 2 + cw * 2, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, bb.height, 'a', size, size, 0, 0, 1, -size, size, 'l', -cw, 0, 'z' ].join(','), down: [ 'M', x, y, 'l', size, size, cw, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, bb.height, 'a', size, size, 0, 0, 1, -size, size, 'l', -(size * 2 + cw * 2), 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -bb.height, 'a', size, size, 0, 0, 1, size, -size, 'l', cw, 0, 'z' ].join(','), left: [ 'M', x, y, 'l', -size, size, 0, ch, 'a', size, size, 0, 0, 1, -size, size, 'l', -bb.width, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -(size * 2 + ch * 2), 'a', size, size, 0, 0, 1, size, -size, 'l', bb.width, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, ch, 'z' ].join(','), right: [ 'M', x, y, 'l', size, -size, 0, -ch, 'a', size, size, 0, 0, 1, size, -size, 'l', bb.width, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, size * 2 + ch * 2, 'a', size, size, 0, 0, 1, -size, size, 'l', -bb.width, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -ch, 'z' ].join(',') }; xy = { up: { x: -!center * (bb.width / 2), y: -size * 2 - (center ? bb.height / 2 : bb.height) }, down: { x: -!center * (bb.width / 2), y: size * 2 + (center ? bb.height / 2 : bb.height) }, left: { x: -size * 2 - (center ? bb.width / 2 : bb.width), y: -!center * (bb.height / 2) }, right: { x: size * 2 + (center ? bb.width / 2 : bb.width), y: -!center * (bb.height / 2) } }[dir]; this.translate(xy.x, xy.y); return paper.path(paths[dir]).attr({ fill: "#000", stroke: "none" }).insertBefore(this.node ? this : this[0]); }; /*\ * Element.tag [ method ] ** * Puts the context Element in a 'tag' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - r (number) radius of the loop [default: `5`] - x (number) x coordinate of the center of the tag loop [default: Element's `x` or `cx`] - y (number) y coordinate of the center of the tag loop [default: Element's `x` or `cx`] ** = (object) path element of the tag > Usage | paper.circle(50, 50, 15).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).tag(60); \*/ Raphael.el.tag = function (angle, r, x, y) { var d = 3, paper = this.paper || this[0].paper; if (!paper) return; var p = paper.path().attr({ fill: '#000', stroke: '#000' }), bb = this.getBBox(), dx, R, center, tmp; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); r = r == null ? 5 : r; R = .5522 * r; if (bb.height >= r * 2) { p.attr({ path: [ "M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d ].join(",") }); } else { dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2)); p.attr({ path: [ "M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d ].join(",") }); } angle = 360 - angle; p.rotate(angle, x, y); if (this.attrs) { //elements this.attr(this.attrs.x ? 'x' : 'cx', x + r + d + (!center ? this.type == 'text' ? bb.width : 0 : bb.width / 2)).attr('y', center ? y : y - bb.height / 2); this.rotate(angle, x, y); angle > 90 && angle < 270 && this.attr(this.attrs.x ? 'x' : 'cx', x - r - d - (!center ? bb.width : bb.width / 2)).rotate(180, x, y); } else { //sets if (angle > 90 && angle < 270) { this.translate(x - bb.x - bb.width - r - d, y - bb.y - bb.height / 2); this.rotate(angle - 180, bb.x + bb.width + r + d, bb.y + bb.height / 2); } else { this.translate(x - bb.x + r + d, y - bb.y - bb.height / 2); this.rotate(angle, bb.x - r - d, bb.y + bb.height / 2); } } return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.drop [ method ] ** * Puts the context Element in a 'drop' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the drop's point [default: Element's `x` or `cx`] - y (number) y coordinate of the drop's point [default: Element's `x` or `cx`] ** = (object) path element of the drop > Usage | paper.circle(50, 50, 8).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).drop(60); \*/ Raphael.el.drop = function (angle, x, y) { var bb = this.getBBox(), paper = this.paper || this[0].paper, center, size, p, dx, dy; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); size = Math.max(bb.width, bb.height) + Math.min(bb.width, bb.height); p = paper.path([ "M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z" ]).attr({fill: "#000", stroke: "none"}).rotate(22.5 - angle, x, y); angle = (angle + 90) * Math.PI / 180; dx = (x + size * Math.sin(angle)) - (center ? 0 : bb.width / 2); dy = (y + size * Math.cos(angle)) - (center ? 0 : bb.height / 2); this.attrs ? this.attr(this.attrs.x ? 'x' : 'cx', dx).attr(this.attrs.y ? 'y' : 'cy', dy) : this.translate(dx - bb.x, dy - bb.y); return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.flag [ method ] ** * Puts the context Element in a 'flag' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the flag's point [default: Element's `x` or `cx`] - y (number) y coordinate of the flag's point [default: Element's `x` or `cx`] ** = (object) path element of the flag > Usage | paper.circle(50, 50, 10).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).flag(60); \*/ Raphael.el.flag = function (angle, x, y) { var d = 3, paper = this.paper || this[0].paper; if (!paper) return; var p = paper.path().attr({ fill: '#000', stroke: '#000' }), bb = this.getBBox(), h = bb.height / 2, center; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2: bb.y); p.attr({ path: [ "M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z" ].join(",") }); angle = 360 - angle; p.rotate(angle, x, y); if (this.attrs) { //elements this.attr(this.attrs.x ? 'x' : 'cx', x + h + d + (!center ? this.type == 'text' ? bb.width : 0 : bb.width / 2)).attr('y', center ? y : y - bb.height / 2); this.rotate(angle, x, y); angle > 90 && angle < 270 && this.attr(this.attrs.x ? 'x' : 'cx', x - h - d - (!center ? bb.width : bb.width / 2)).rotate(180, x, y); } else { //sets if (angle > 90 && angle < 270) { this.translate(x - bb.x - bb.width - h - d, y - bb.y - bb.height / 2); this.rotate(angle - 180, bb.x + bb.width + h + d, bb.y + bb.height / 2); } else { this.translate(x - bb.x + h + d, y - bb.y - bb.height / 2); this.rotate(angle, bb.x - h - d, bb.y + bb.height / 2); } } return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.label [ method ] ** * Puts the context Element in a 'label' tooltip. Can also be used on sets. ** = (object) path element of the label. > Usage | paper.circle(50, 50, 10).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).label(); \*/ Raphael.el.label = function () { var bb = this.getBBox(), paper = this.paper || this[0].paper, r = Math.min(20, bb.width + 10, bb.height + 10) / 2; if (!paper) return; return paper.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({ stroke: 'none', fill: '#000' }).insertBefore(this.node ? this : this[0]); }; /*\ * Element.blob [ method ] ** * Puts the context Element in a 'blob' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the blob's tail [default: Element's `x` or `cx`] - y (number) y coordinate of the blob's tail [default: Element's `x` or `cx`] ** = (object) path element of the blob > Usage | paper.circle(50, 50, 8).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).blob(60); \*/ Raphael.el.blob = function (angle, x, y) { var bb = this.getBBox(), rad = Math.PI / 180, paper = this.paper || this[0].paper, p, center, size; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } p = paper.path().attr({ fill: "#000", stroke: "none" }); angle = (+angle + 1 ? angle : 45) + 90; size = Math.min(bb.height, bb.width); x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); var w = Math.max(bb.width + size, size * 25 / 12), h = Math.max(bb.height + size, size * 25 / 12), x2 = x + size * Math.sin((angle - 22.5) * rad), y2 = y + size * Math.cos((angle - 22.5) * rad), x1 = x + size * Math.sin((angle + 22.5) * rad), y1 = y + size * Math.cos((angle + 22.5) * rad), dx = (x1 - x2) / 2, dy = (y1 - y2) / 2, rx = w / 2, ry = h / 2, k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)), cx = k * rx * dy / ry + (x1 + x2) / 2, cy = k * -ry * dx / rx + (y1 + y2) / 2; p.attr({ x: cx, y: cy, path: [ "M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z" ].join(",") }); this.translate(cx - bb.x - bb.width / 2, cy - bb.y - bb.height / 2); return p.insertBefore(this.node ? this : this[0]); }; /* * Tooltips on Paper prototype */ /*\ * Paper.label [ method ] ** * Puts the given `text` into a 'label' tooltip. The text is given a default style according to @g.txtattr. See @Element.label ** > Parameters ** - x (number) x coordinate of the center of the label - y (number) y coordinate of the center of the label - text (string) text to place inside the label ** = (object) set containing the label path and the text element > Usage | paper.label(50, 50, "$9.99"); \*/ Raphael.fn.label = function (x, y, text) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.label(), text); }; /*\ * Paper.popup [ method ] ** * Puts the given `text` into a 'popup' tooltip. The text is given a default style according to @g.txtattr. See @Element.popup * * Note: The `dir` parameter has changed from g.Raphael 0.4.1 to 0.5. The options `0`, `1`, `2`, and `3` has been changed to `'down'`, `'left'`, `'up'`, and `'right'` respectively. ** > Parameters ** - x (number) x coordinate of the popup's tail - y (number) y coordinate of the popup's tail - text (string) text to place inside the popup - dir (string) location of the text relative to the tail: `'down'`, `'left'`, `'up'` [default], or `'right'`. - size (number) amount of padding around the Element [default: `5`] ** = (object) set containing the popup path and the text element > Usage | paper.popup(50, 50, "$9.99", 'down'); \*/ Raphael.fn.popup = function (x, y, text, dir, size) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.popup(dir, size), text); }; /*\ * Paper.tag [ method ] ** * Puts the given text into a 'tag' tooltip. The text is given a default style according to @g.txtattr. See @Element.tag ** > Parameters ** - x (number) x coordinate of the center of the tag loop - y (number) y coordinate of the center of the tag loop - text (string) text to place inside the tag - angle (number) angle of orientation in degrees [default: `0`] - r (number) radius of the loop [default: `5`] ** = (object) set containing the tag path and the text element > Usage | paper.tag(50, 50, "$9.99", 60); \*/ Raphael.fn.tag = function (x, y, text, angle, r) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.tag(angle, r), text); }; /*\ * Paper.flag [ method ] ** * Puts the given `text` into a 'flag' tooltip. The text is given a default style according to @g.txtattr. See @Element.flag ** > Parameters ** - x (number) x coordinate of the flag's point - y (number) y coordinate of the flag's point - text (string) text to place inside the flag - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the flag path and the text element > Usage | paper.flag(50, 50, "$9.99", 60); \*/ Raphael.fn.flag = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.flag(angle), text); }; /*\ * Paper.drop [ method ] ** * Puts the given text into a 'drop' tooltip. The text is given a default style according to @g.txtattr. See @Element.drop ** > Parameters ** - x (number) x coordinate of the drop's point - y (number) y coordinate of the drop's point - text (string) text to place inside the drop - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the drop path and the text element > Usage | paper.drop(50, 50, "$9.99", 60); \*/ Raphael.fn.drop = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.drop(angle), text); }; /*\ * Paper.blob [ method ] ** * Puts the given text into a 'blob' tooltip. The text is given a default style according to @g.txtattr. See @Element.blob ** > Parameters ** - x (number) x coordinate of the blob's tail - y (number) y coordinate of the blob's tail - text (string) text to place inside the blob - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the blob path and the text element > Usage | paper.blob(50, 50, "$9.99", 60); \*/ Raphael.fn.blob = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.blob(angle), text); }; /** * zhanghuihua */ Raphael.fn.axis=function (x, y, length, from, to, steps, orientation, labels, type, dashsize) { return Raphael.g.axis(x, y, length, from, to, steps, orientation, labels, type, dashsize, this) ; }; /** * Brightness functions on the Element prototype */ /*\ * Element.lighter [ method ] ** * Makes the context element lighter by increasing the brightness and reducing the saturation by a given factor. Can be called on Sets. ** > Parameters ** - times (number) adjustment factor [default: `2`] ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).lighter(6); \*/ Raphael.el.lighter = function (times) { times = times || 2; var fs = [this.attrs.fill, this.attrs.stroke]; this.fs = this.fs || [fs[0], fs[1]]; fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); fs[0].b = Math.min(fs[0].b * times, 1); fs[0].s = fs[0].s / times; fs[1].b = Math.min(fs[1].b * times, 1); fs[1].s = fs[1].s / times; this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); return this; }; /*\ * Element.darker [ method ] ** * Makes the context element darker by decreasing the brightness and increasing the saturation by a given factor. Can be called on Sets. ** > Parameters ** - times (number) adjustment factor [default: `2`] ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).darker(6); \*/ Raphael.el.darker = function (times) { times = times || 2; var fs = [this.attrs.fill, this.attrs.stroke]; this.fs = this.fs || [fs[0], fs[1]]; fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); fs[0].s = Math.min(fs[0].s * times, 1); fs[0].b = fs[0].b / times; fs[1].s = Math.min(fs[1].s * times, 1); fs[1].b = fs[1].b / times; this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); return this; }; /*\ * Element.resetBrightness [ method ] ** * Resets brightness and saturation levels to their original values. See @Element.lighter and @Element.darker. Can be called on Sets. ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).lighter(6).resetBrightness(); \*/ Raphael.el.resetBrightness = function () { if (this.fs) { this.attr({ fill: this.fs[0], stroke: this.fs[1] }); delete this.fs; } return this; }; //alias to set prototype (function () { var brightness = ['lighter', 'darker', 'resetBrightness'], tooltips = ['popup', 'tag', 'flag', 'label', 'drop', 'blob']; for (var f in tooltips) (function (name) { Raphael.st[name] = function () { return Raphael.el[name].apply(this, arguments); }; })(tooltips[f]); for (var f in brightness) (function (name) { Raphael.st[name] = function () { for (var i = 0; i < this.length; i++) { this[i][name].apply(this[i], arguments); } return this; }; })(brightness[f]); })(); //chart prototype for storing common functions Raphael.g = { /*\ * g.shim [ object ] ** * An attribute object that charts will set on all generated shims (shims being the invisible objects that mouse events are bound to) ** > Default value | { stroke: 'none', fill: '#000', 'fill-opacity': 0 } \*/ shim: { stroke: 'none', fill: '#000', 'fill-opacity': 0 }, /*\ * g.txtattr [ object ] ** * An attribute object that charts and tooltips will set on any generated text ** > Default value | { font: '12px Arial, sans-serif', fill: '#fff' } \*/ txtattr: { font: '12px Arial, sans-serif', fill: '#fff' }, /*\ * g.colors [ array ] ** * An array of color values that charts will iterate through when drawing chart data values. ** \*/ colors: (function () { var hues = [.6, .2, .05, .1333, .75, 0], colors = []; for (var i = 0; i < 10; i++) { if (i < hues.length) { colors.push('hsb(' + hues[i] + ',.75, .75)'); } else { colors.push('hsb(' + hues[i - hues.length] + ', 1, .5)'); } } return colors; })(), snapEnds: function(from, to, steps) { var f = from, t = to; if (f == t) { return {from: f, to: t, power: 0}; } function round(a) { return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.ceil(a); } var d = (t - f) / steps, r = ~~(d), R = r, i = 0; if (r) { while (R) { i--; R = ~~(d * Math.pow(10, i)) / Math.pow(10, i); } i ++; } else { while (!r) { i = i || 1; r = ~~(d * Math.pow(10, i)) / Math.pow(10, i); i++; } i && i--; } t = round(to * Math.pow(10, i)) / Math.pow(10, i); if (t < to) { t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i); } f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i); return { from: f, to: t, power: i }; }, axis: function (x, y, length, from, to, steps, orientation, labels, type, dashsize, paper) { dashsize = dashsize == null ? 2 : dashsize; type = type || "t"; steps = steps || 10; paper = arguments[arguments.length-1] //paper is always last argument var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0], ends = this.snapEnds(from, to, steps), f = ends.from, t = ends.to, i = ends.power, j = 0, txtattr = { font: "11px 'Fontin Sans', Fontin-Sans, sans-serif" }, text = paper.set(), d; d = (t - f) / steps; var label = f, rnd = i > 0 ? i : 0; dx = length / steps; if (+orientation == 1 || +orientation == 3) { var Y = y, addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1)); while (Y >= y - length) { type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0])); text.push(paper.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr).attr({ "text-anchor": orientation - 1 ? "start" : "end" })); label += d; Y -= dx; } if (Math.round(Y + dx - (y - length))) { type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0])); text.push(paper.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr).attr({ "text-anchor": orientation - 1 ? "start" : "end" })); } } else { label = f; rnd = (i > 0) * i; addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation); var X = x, dx = length / steps, txt = 0, prev = 0; while (X <= x + length) { type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); text.push(txt = paper.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr)); var bb = txt.getBBox(); if (prev >= bb.x - 5) { text.pop(text.length - 1).remove(); } else { prev = bb.x + bb.width; } label += d; X += dx; } if (Math.round(X - dx - x - length)) { type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); text.push(paper.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr)); } } var res = paper.path(path); res.text = text; res.all = paper.set([res, text]); res.remove = function () { this.text.remove(); this.constructor.prototype.remove.call(this); }; return res; }, labelise: function(label, val, total) { if (label) { return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) { if (value) { return (+val).toFixed(value.replace(/^#+\.?/g, "").length); } if (percent) { return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%"; } }); } else { return (+val).toFixed(0); } } } ================================================ FILE: src/main/webapp/jslib/chart/index.html ================================================ 农技推广综合管理平台
        ================================================ FILE: src/main/webapp/jslib/chart/jquery-2.1.4.js ================================================ /*! * jQuery JavaScript Library v2.1.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-04-28T16:01Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Support: Firefox 18+ // Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) // var arr = []; var slice = arr.slice; var concat = arr.concat; var push = arr.push; var indexOf = arr.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var support = {}; var // Use the correct document accordingly with window argument (sandbox) document = window.document, version = "2.1.4", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }, // Support: Android<4.1 // Make sure we trim BOM and NBSP rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num != null ? // Return just the one element from the set ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return all the elements in a clean array slice.call( this ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: arr.sort, splice: arr.splice }; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // Skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // Extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray, isWindow: function( obj ) { return obj != null && obj === obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; }, isPlainObject: function( obj ) { // Not plain objects: // - Any object or value whose internal [[Class]] property is not "[object Object]" // - DOM nodes // - window if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } if ( obj.constructor && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } // If the function hasn't returned already, we're confident that // |obj| is a plain object, created by {} or constructed with new Object return true; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, type: function( obj ) { if ( obj == null ) { return obj + ""; } // Support: Android<4.0, iOS<6 (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call(obj) ] || "object" : typeof obj; }, // Evaluates a script in a global context globalEval: function( code ) { var script, indirect = eval; code = jQuery.trim( code ); if ( code ) { // If the code includes a valid, prologue position // strict mode pragma, execute code by injecting a // script tag into the document. if ( code.indexOf("use strict") === 1 ) { script = document.createElement("script"); script.text = code; document.head.appendChild( script ).parentNode.removeChild( script ); } else { // Otherwise, avoid the DOM node creation, insertion // and removal by using an indirect global eval indirect( code ); } } }, // Convert dashed to camelCase; used by the css and data modules // Support: IE9-11+ // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var value, i = 0, length = obj.length, isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } } return obj; }, // Support: Android<4.1 trim: function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; for ( ; j < len; j++ ) { first[ i++ ] = second[ j ]; } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, i = 0, length = elems.length, isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their new values if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var tmp, args, proxy; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: Date.now, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support }); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); function isArraylike( obj ) { // Support: iOS 8.2 (not reproducible in simulator) // `in` check used to prevent JIT error (gh-2145) // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = "length" in obj && obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v2.2.0-pre * http://sizzlejs.com/ * * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-12-16 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { if ( list[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + characterEncoding + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler = function() { setDocument(); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector; if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; results = results || []; nodeType = context.nodeType; if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } if ( !seed && documentIsHTML ) { // Try to shortcut find operations when possible (e.g., not under DocumentFragment) if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document (jQuery #6963) if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && support.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // QSA path if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { nid = old = expando; newContext = context; newSelector = nodeType !== 1 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + toSelector( groups[i] ); } newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {Function(string, Object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = attrs.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, parent, doc = node ? node.ownerDocument || node : preferredDoc; // If no document and documentElement is available, return if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Set our document document = doc; docElem = doc.documentElement; parent = doc.defaultView; // Support: IE>8 // If iframe document is assigned to "document" variable and if iframe has been reloaded, // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 // IE6-8 do not support the defaultView property so parent will be undefined if ( parent && parent !== parent.top ) { // IE11 does not have attachEvent, so all must suffer if ( parent.addEventListener ) { parent.addEventListener( "unload", unloadHandler, false ); } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", unloadHandler ); } } /* Support tests ---------------------------------------------------------------------- */ documentIsHTML = !isXML( doc ); /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( doc.createComment("") ); return !div.getElementsByTagName("*").length; }); // Support: IE<9 support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !doc.getElementsByName || !doc.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild( div ).innerHTML = "" + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push(".#.+[+~]"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = doc.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully does not implement inclusive descendent // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return doc; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || (parent[ expando ] = {}); cache = outerCache[ type ] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = cache[0] === dirruns && cache[2]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } // Use previously-cached element index if available } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { diff = cache[1]; // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); // Don't keep the element (issue #299) input[0] = null; return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); if ( (oldCache = outerCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements outerCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context !== document && context; } // Add elements passing elementMatchers directly to results // Keep `i` a string if there are no elements so `matchedCount` will be "00" below // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is no seed and only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; }); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; }); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; }); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; })); }; jQuery.fn.extend({ find: function( selector ) { var i, len = this.length, ret = [], self = this; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow(this, selector || [], false) ); }, not: function( selector ) { return this.pushStack( winnow(this, selector || [], true) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } }); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[1], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Support: Blackberry 4.6 // gEBID returns nodes no longer in the document (#6963) if ( elem && elem.parentNode ) { // Inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof rootjQuery.ready !== "undefined" ? rootjQuery.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // Methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.extend({ dir: function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }, sibling: function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; } }); jQuery.fn.extend({ has: function( target ) { var targets = jQuery( target, this ), l = targets.length; return this.filter(function() { var i = 0; for ( ; i < l; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); }, // Determine the position of an element within the set index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // Index in selector if ( typeof elem === "string" ) { return indexOf.call( jQuery( elem ), this[ 0 ] ); } // Locate the position of the desired element return indexOf.call( this, // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem ); }, add: function( selector, context ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); function sibling( cur, dir ) { while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return elem.contentDocument || jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var matched = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { matched = jQuery.filter( selector, matched ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { jQuery.unique( matched ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { matched.reverse(); } } return this.pushStack( matched ); }; }); var rnotwhite = (/\S+/g); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) firingStart, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); }, // Remove all callbacks from the list empty: function() { list = []; firingLength = 0; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( list && ( !fired || stack ) ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ](function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } }); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[1] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[0] ] = function() { deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[0] + "With" ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // Add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // If we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } }); /** * The ready event handler and self cleanup method */ function completed() { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); jQuery.ready(); } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // We once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready ); } else { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); } } return readyList.promise( obj ); }; // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, len = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < len; i++ ) { fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : len ? fn( elems[0], key ) : emptyGet; }; /** * Determines whether an object can have data */ jQuery.acceptData = function( owner ) { // Accepts only: // - Node // - Node.ELEMENT_NODE // - Node.DOCUMENT_NODE // - Object // - Any /* jshint -W018 */ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); }; function Data() { // Support: Android<4, // Old WebKit does not have Object.preventExtensions/freeze method, // return new empty object instead with no [[set]] accessor Object.defineProperty( this.cache = {}, 0, { get: function() { return {}; } }); this.expando = jQuery.expando + Data.uid++; } Data.uid = 1; Data.accepts = jQuery.acceptData; Data.prototype = { key: function( owner ) { // We can accept data for non-element nodes in modern browsers, // but we should not, see #8335. // Always return the key for a frozen object. if ( !Data.accepts( owner ) ) { return 0; } var descriptor = {}, // Check if the owner object already has a cache key unlock = owner[ this.expando ]; // If not, create one if ( !unlock ) { unlock = Data.uid++; // Secure it in a non-enumerable, non-writable property try { descriptor[ this.expando ] = { value: unlock }; Object.defineProperties( owner, descriptor ); // Support: Android<4 // Fallback to a less secure definition } catch ( e ) { descriptor[ this.expando ] = unlock; jQuery.extend( owner, descriptor ); } } // Ensure the cache object if ( !this.cache[ unlock ] ) { this.cache[ unlock ] = {}; } return unlock; }, set: function( owner, data, value ) { var prop, // There may be an unlock assigned to this node, // if there is no entry for this "owner", create one inline // and set the unlock as though an owner entry had always existed unlock = this.key( owner ), cache = this.cache[ unlock ]; // Handle: [ owner, key, value ] args if ( typeof data === "string" ) { cache[ data ] = value; // Handle: [ owner, { properties } ] args } else { // Fresh assignments by object are shallow copied if ( jQuery.isEmptyObject( cache ) ) { jQuery.extend( this.cache[ unlock ], data ); // Otherwise, copy the properties one-by-one to the cache object } else { for ( prop in data ) { cache[ prop ] = data[ prop ]; } } } return cache; }, get: function( owner, key ) { // Either a valid cache is found, or will be created. // New caches will be created and the unlock returned, // allowing direct access to the newly created // empty data object. A valid owner object must be provided. var cache = this.cache[ this.key( owner ) ]; return key === undefined ? cache : cache[ key ]; }, access: function( owner, key, value ) { var stored; // In cases where either: // // 1. No key was specified // 2. A string key was specified, but no value provided // // Take the "read" path and allow the get method to determine // which value to return, respectively either: // // 1. The entire cache object // 2. The data stored at the key // if ( key === undefined || ((key && typeof key === "string") && value === undefined) ) { stored = this.get( owner, key ); return stored !== undefined ? stored : this.get( owner, jQuery.camelCase(key) ); } // [*]When the key is not a string, or both a key and value // are specified, set or extend (existing objects) with either: // // 1. An object of properties // 2. A key and value // this.set( owner, key, value ); // Since the "set" path can have two possible entry points // return the expected data based on which path was taken[*] return value !== undefined ? value : key; }, remove: function( owner, key ) { var i, name, camel, unlock = this.key( owner ), cache = this.cache[ unlock ]; if ( key === undefined ) { this.cache[ unlock ] = {}; } else { // Support array or space separated string of keys if ( jQuery.isArray( key ) ) { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = key.concat( key.map( jQuery.camelCase ) ); } else { camel = jQuery.camelCase( key ); // Try the string as a key before any manipulation if ( key in cache ) { name = [ key, camel ]; } else { // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace name = camel; name = name in cache ? [ name ] : ( name.match( rnotwhite ) || [] ); } } i = name.length; while ( i-- ) { delete cache[ name[ i ] ]; } } }, hasData: function( owner ) { return !jQuery.isEmptyObject( this.cache[ owner[ this.expando ] ] || {} ); }, discard: function( owner ) { if ( owner[ this.expando ] ) { delete this.cache[ owner[ this.expando ] ]; } } }; var data_priv = new Data(); var data_user = new Data(); // Implementation Summary // // 1. Enforce API surface and semantic compatibility with 1.9.x branch // 2. Improve the module's maintainability by reducing the storage // paths to a single mechanism. // 3. Use the same single mechanism to support "private" and "user" data. // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) // 5. Avoid exposing implementation details on user objects (eg. expando properties) // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { var name; // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later data_user.set( elem, key, data ); } else { data = undefined; } } return data; } jQuery.extend({ hasData: function( elem ) { return data_user.hasData( elem ) || data_priv.hasData( elem ); }, data: function( elem, name, data ) { return data_user.access( elem, name, data ); }, removeData: function( elem, name ) { data_user.remove( elem, name ); }, // TODO: Now that all calls to _data and _removeData have been replaced // with direct calls to data_priv methods, these can be deprecated. _data: function( elem, name, data ) { return data_priv.access( elem, name, data ); }, _removeData: function( elem, name ) { data_priv.remove( elem, name ); } }); jQuery.fn.extend({ data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Gets all values if ( key === undefined ) { if ( this.length ) { data = data_user.get( elem ); if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE11+ // The attrs elements can be null (#14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice(5) ); dataAttr( elem, name, data[ name ] ); } } } data_priv.set( elem, "hasDataAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { data_user.set( this, key ); }); } return access( this, function( value ) { var data, camelKey = jQuery.camelCase( key ); // The calling jQuery object (element matches) is not empty // (and therefore has an element appears at this[ 0 ]) and the // `value` parameter was not undefined. An empty jQuery object // will result in `undefined` for elem = this[ 0 ] which will // throw an exception if an attempt to read a data cache is made. if ( elem && value === undefined ) { // Attempt to get data from the cache // with the key as-is data = data_user.get( elem, key ); if ( data !== undefined ) { return data; } // Attempt to get data from the cache // with the key camelized data = data_user.get( elem, camelKey ); if ( data !== undefined ) { return data; } // Attempt to "discover" the data in // HTML5 custom data-* attrs data = dataAttr( elem, camelKey, undefined ); if ( data !== undefined ) { return data; } // We tried really hard, but the data doesn't exist. return; } // Set the data... this.each(function() { // First, attempt to store a copy or reference of any // data that might've been store with a camelCased key. var data = data_user.get( this, camelKey ); // For HTML5 data-* attribute interop, we have to // store property names with dashes in a camelCase form. // This might not apply to all properties...* data_user.set( this, camelKey, value ); // *... In the case of properties that might _actually_ // have dashes, we need to also store a copy of that // unchanged property. if ( key.indexOf("-") !== -1 && data !== undefined ) { data_user.set( this, key, value ); } }); }, null, value, arguments.length > 1, null, true ); }, removeData: function( key ) { return this.each(function() { data_user.remove( this, key ); }); } }); jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = data_priv.get( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = data_priv.access( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // Clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // Not public - generate a queueHooks object, or return the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return data_priv.get( elem, key ) || data_priv.access( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { data_priv.remove( elem, [ type + "queue", key ] ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // Ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = data_priv.get( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; var rcheckableType = (/^(?:checkbox|radio)$/i); (function() { var fragment = document.createDocumentFragment(), div = fragment.appendChild( document.createElement( "div" ) ), input = document.createElement( "input" ); // Support: Safari<=5.1 // Check state lost if the name is set (#11217) // Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (#14901) input.setAttribute( "type", "radio" ); input.setAttribute( "checked", "checked" ); input.setAttribute( "name", "t" ); div.appendChild( input ); // Support: Safari<=5.1, Android<4.2 // Older WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<=11+ // Make sure textarea (and checkbox) defaultValue is properly cloned div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; })(); var strundefined = typeof undefined; support.focusinBubbles = "onfocusin" in window; var rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; function returnTrue() { return true; } function returnFalse() { return false; } function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = data_priv.get( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !(events = elemData.events) ) { events = elemData.events = {}; } if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply( elem, arguments ) : undefined; }; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first if ( !(handlers = events[ type ]) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = data_priv.hasData( elem ) && data_priv.get( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; data_priv.remove( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var i, cur, tmp, bubbleType, ontype, handle, special, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf(".") >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join("."); event.namespace_re = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === (elem.ownerDocument || document) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && jQuery.acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; elem[ type ](); jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or 2) have namespace(s) // a subset or equal to those in the bound event (both can have no namespace). if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { if ( (event.result = ret) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers // Black-hole SVG instance trees (#13180) // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { for ( ; cur !== this; cur = cur.parentNode || this ) { // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.disabled !== true || event.type !== "click" ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, handlers: matches }); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); } return handlerQueue; }, // Includes some event props shared by KeyEvent and MouseEvent 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( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var eventDoc, doc, body, button = original.button; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: Cordova 2.5 (WebKit) (#13255) // All events should have a target; Cordova deviceready doesn't if ( !event.target ) { event.target = document; } // Support: Safari 6.0+, Chrome<28 // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { this.focus(); return false; } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android<4.0 src.returnValue === false ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( e && e.preventDefault ) { e.preventDefault(); } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( e && e.stopPropagation ) { e.stopPropagation(); } }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && e.stopImmediatePropagation ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks // Support: Chrome 15+ jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // Support: Firefox, Chrome, Safari // Create "bubbling" focus and blur events if ( !support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = data_priv.access( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = data_priv.access( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); data_priv.remove( doc, fix ); } else { data_priv.access( doc, fix, attaches ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { var elem = this[0]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } }); var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rhtml = /<|&#?\w+;/, rnoInnerhtml = /<(?:script|style|link)/i, // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /^$|\/(?:java|ecma)script/i, rscriptTypeMasked = /^true\/(.*)/, rcleanScript = /^\s*\s*$/g, // We have to close these tags to support XHTML (#13200) wrapMap = { // Support: IE9 option: [ 1, "" ], thead: [ 1, "", "
        " ], col: [ 2, "", "
        " ], tr: [ 2, "", "
        " ], td: [ 3, "", "
        " ], _default: [ 0, "", "" ] }; // Support: IE9 wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // Support: 1.x compatibility // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName("tbody")[0] || elem.appendChild( elem.ownerDocument.createElement("tbody") ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[ 1 ]; } else { elem.removeAttribute("type"); } return elem; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var i = 0, l = elems.length; for ( ; i < l; i++ ) { data_priv.set( elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) ); } } function cloneCopyEvent( src, dest ) { var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; } // 1. Copy private data: events, handlers, etc. if ( data_priv.hasData( src ) ) { pdataOld = data_priv.access( src ); pdataCur = data_priv.set( dest, pdataOld ); events = pdataOld.events; if ( events ) { delete pdataCur.handle; pdataCur.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } } // 2. Copy user data if ( data_user.hasData( src ) ) { udataOld = data_user.access( src ); udataCur = jQuery.extend( {}, udataOld ); data_user.set( dest, udataCur ); } } function getAll( context, tag ) { var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : []; return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], ret ) : ret; } // Fix IE bugs, see support tests function fixInput( src, dest ) { var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button. if ( nodeName === "input" && rcheckableType.test( src.type ) ) { dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var i, l, srcElements, destElements, clone = elem.cloneNode( true ), inPage = jQuery.contains( elem.ownerDocument, elem ); // Fix IE cloning issues if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); for ( i = 0, l = srcElements.length; i < l; i++ ) { fixInput( srcElements[ i ], destElements[ i ] ); } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0, l = srcElements.length; i < l; i++ ) { cloneCopyEvent( srcElements[ i ], destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } // Return the cloned set return clone; }, buildFragment: function( elems, context, scripts, selection ) { var elem, tmp, tag, wrap, contains, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { // Support: QtWebKit, PhantomJS // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || fragment.appendChild( context.createElement("div") ); // Deserialize a standard representation tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ]; // Descend through wrappers to the right content j = wrap[ 0 ]; while ( j-- ) { tmp = tmp.lastChild; } // Support: QtWebKit, PhantomJS // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( nodes, tmp.childNodes ); // Remember the top-level container tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392) tmp.textContent = ""; } } } // Remove wrapper from fragment fragment.textContent = ""; i = 0; while ( (elem = nodes[ i++ ]) ) { // #4087 - If origin and destination elements are the same, and this is // that element, do not do anything if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( fragment.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( (elem = tmp[ j++ ]) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } return fragment; }, cleanData: function( elems ) { var data, elem, type, key, special = jQuery.event.special, i = 0; for ( ; (elem = elems[ i ]) !== undefined; i++ ) { if ( jQuery.acceptData( elem ) ) { key = elem[ data_priv.expando ]; if ( key && (data = data_priv.cache[ key ]) ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } if ( data_priv.cache[ key ] ) { // Discard any remaining `private` data delete data_priv.cache[ key ]; } } } // Discard any remaining `user` data delete data_user.cache[ elem[ data_user.expando ] ]; } } }); jQuery.fn.extend({ text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().each(function() { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.textContent = value; } }); }, null, value, arguments.length ); }, append: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } }); }, prepend: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } }); }, before: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } }); }, after: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } }); }, remove: function( selector, keepData /* Internal Use Only */ ) { var elem, elems = selector ? jQuery.filter( selector, this ) : this, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) { if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, "script" ) ); } elem.parentNode.removeChild( elem ); } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { if ( elem.nodeType === 1 ) { // Prevent memory leaks jQuery.cleanData( getAll( elem, false ) ); // Remove any remaining nodes elem.textContent = ""; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map(function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined && elem.nodeType === 1 ) { return elem.innerHTML; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for ( ; i < l; i++ ) { elem = this[ i ] || {}; // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var arg = arguments[ 0 ]; // Make the changes, replacing each context element with the new content this.domManip( arguments, function( elem ) { arg = this.parentNode; jQuery.cleanData( getAll( this ) ); if ( arg ) { arg.replaceChild( elem, this ); } }); // Force removal if there was no new content (e.g., from empty arguments) return arg && (arg.length || arg.nodeType) ? this : this.remove(); }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, callback ) { // Flatten any nested arrays args = concat.apply( [], args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, l = this.length, set = this, iNoClone = l - 1, value = args[ 0 ], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return this.each(function( index ) { var self = set.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } self.domManip( args, callback ); }); } if ( l ) { fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: QtWebKit // jQuery.merge because push.apply(_, arraylike) throws jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( this[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); } } } } } } return this; } }); jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, ret = [], insert = jQuery( selector ), last = insert.length - 1, i = 0; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Support: QtWebKit // .get() because push.apply(_, arraylike) throws push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; }); var iframe, elemdisplay = {}; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var style, elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), // getDefaultComputedStyle might be reliably used only on attached element display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? // Use of this method is a temporary fix (more like optimization) until something better comes along, // since it was removed from specification and supported only in FF style.display : jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = (iframe || jQuery( "";var D=F.lastChild.contentWindow[M],_=$.$langList,C=$.$skinList,H=E.getRealLang();F.lang=H.name;F.skin=E.skin;var G=[""];for(var I=0;I");G.push("");G.push("");G.push("");E.setPos=B;E.onload=Y;D.write("");D.cfg=E;D.write(G.join(""))}function B(I){var G=I.position.left,B=I.position.top,C=I.el;if(C==S)return;if(C!=I.srcEl&&(O(C)=="none"||C.type=="hidden"))C=I.srcEl;var H=V(C),$=F(X),D=L(U),A=Z(U),E=$dp.dd.offsetHeight,_=$dp.dd.offsetWidth;if(isNaN(B))B=0;if(B!="under"&&(($.topM+H.bottom+E>D.height)&&($.topM+H.top-E>0)))B+=A.top+$.topM+H.top-E-2;else B+=A.top+$.topM+Math.min(H.bottom,D.height-E)+2;if(isNaN(G))G=0;G+=A.left+Math.min($.leftM+H.left,D.width-_-5)-(R?2:0);I.dd.style.top=B+"px";I.dd.style.left=G+"px"}}})() ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/calendar.js ================================================ /* * My97 DatePicker 4.8 Beta1 * License: http://www.my97.net/dp/license.asp */ eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('o $c;k($5E){6E.3c.84("6a",l($){k(!$)h.2c();t $});6E.3c.6Z("6n",l(){o $=h.6k;3m($.56!=1)$=$.7b;t $});79.3c.3k=l($,b){o A=$.1l(/67/,"");b.6O=l($){5G.1X=$;t b()};h.76(A,b.6O,1n)}}l 6c(){$c=h;h.3l=[];$d=1O.78("x");$d.1d="4b";$d.1P="<1u Y=42><1u Y=42><1x 2x=0 2q=0 2s=0><1j><18 7d=2><4n 1D=7a>&4c;<1u Y=7c 4d=2><1u 1g=\\":\\" Y=6p 6j><1u Y=6d 4d=2><1u 1g=\\":\\" Y=6p 6j><1u Y=6d 4d=2><18><1K 1D=6W><1j><18><1K 1D=6X><1u Y=4l 1D=7G 3h=1K><1u Y=4l 1D=7F 3h=1K><1u Y=4l 1D=7I 3h=1K>";6J($d,l(){3w()});A();h.6e();$f.20=[1O,$d.1J,$d.1w,$d.3e,$d.3G,$d.43,$d.2H,$d.2f,$d.1R];1b(o B=0;B<$f.20.u;B++){o b=$f.20[B];b.34=B==$f.20.u-1?$f.20[1]:$f.20[B+1];$f.3k(b,"53",4K)}$();4k("y,M,H,m,s");$d.6f.1s=l(){58(1)};$d.6i.1s=l(){58(-1)};$d.54.1s=l(){k($d.1G.1c.2e!="6P"){$c.4D();3J($d.1G)}q 1m($d.1G)};1O.5J.4j($d);l A(){o b=$("a");1p=$("x"),1N=$("1u"),4i=$("1K"),6h=$("4n");$d.3Z=b[0];$d.3X=b[1];$d.3M=b[3];$d.3W=b[2];$d.3F=1p[9];$d.1J=1N[0];$d.1w=1N[1];$d.4h=1p[0];$d.3x=1p[4];$d.35=1p[6];$d.1G=1p[10];$d.3i=1p[11];$d.2V=1p[12];$d.64=1p[13];$d.65=1p[14];$d.62=1p[15];$d.54=1p[16];$d.3r=1p[17];$d.3e=1N[2];$d.3G=1N[4];$d.43=1N[6];$d.2H=1N[7];$d.2f=1N[8];$d.1R=1N[9];$d.6f=4i[0];$d.6i=4i[1];$d.6l=6h[0];l $($){t $d.5L($)}}l $(){$d.3Z.1s=l(){$1L=$1L<=0?$1L-1:-1;k($1L%5==0){$d.1w.24();t}$d.1w.1g=$n.y-1;$d.1w.2u()};$d.3X.1s=l(){$n.2n("M",-1);$d.1J.2u()};$d.3M.1s=l(){$n.2n("M",1);$d.1J.2u()};$d.3W.1s=l(){$1L=$1L>=0?$1L+1:1;k($1L%5==0){$d.1w.24();t}$d.1w.1g=$n.y+1;$d.1w.2u()}}}6c.3c={6e:l(){$1L=0;$f.5X=h;k($f.3K&&$f.z.3K!=1i){$f.z.3K=1a;$f.z.4y()}h.5w();$n=h.6H=19 1C();$1z=19 1C();$1v=h.2w=19 1C();h.1B=h.2P($f.1B);h.3o=$f.3o==1i?($f.Z.28&&$f.Z.28?1n:1a):$f.3o;$f.2m=$f.2m==1i?($f.4L&&$f.Z.d?1n:1a):$f.2m;h.4S=h.3j("7H");h.5D=h.3j("7E");h.5O=h.3j("7B");h.5Q=h.3j("7A");h.22=h.3t($f.22,$f.22!=$f.6r?$f.1Q:$f.2N,$f.6r);h.1U=h.3t($f.1U,$f.1U!=$f.6q?$f.1Q:$f.2N,$f.6q);k(h.22.2t(h.1U)>0)$f.44=$1k.7D;k(h.1T()){h.5U();h.3P=$f.z[$f.1y]}q h.3p(1n,2);4f($n);$d.6l.1P=$1k.7C;$d.2H.1g=$1k.7P;$d.2f.1g=$1k.7O;$d.1R.1g=$1k.7R;$d.1R.25=!$c.1t($1v);h.5x();h.5g();k($f.44)7N($f.44);h.47();k($f.z.56==1&&$f.z["3H"]===6K){$f.3k($f.z,"53",4K);$f.3k($f.z,"2u",l(){k($f&&$f.1M.1c.2e=="2r"){$c.3L();k($f.5X.3P!=$f.z[$f.1y]&&$f.z.7J)55($f.z,"7M")}});$f.z["3H"]=1n}$c.1f=$f.z;3w()},5U:l(){o b=h.2I();k(b!=0){o $;k(b>0)$=h.1U;q $=h.22;k($f.Z.3T){$n.y=$.y;$n.M=$.M;$n.d=$.d}k($f.Z.28){$n.H=$.H;$n.m=$.m;$n.s=$.s}}},2O:l(J,C,Q,E,B,G,F,K,L){o $;k(J&&J.1T)$=J;q{$=19 1C();k(J!=""){C=C||$f.1B;o H,P=0,O,A=/3g|2l|3b|y|2v|2W|3N|M|1M|d|%2h|51|H|52|m|4Z|s|2X|D|4g|W|w/g,b=C.3a(A);A.2E=0;k(L)O=J.49(/\\W+/);q{o D=0,M="^";3m((O=A.33(C))!==1i){k(D>=0)M+=C.1E(D,O.3Y);D=A.2E;3f(O[0]){1e"3g":M+="(\\\\d{4})";1h;1e"2l":M+="(\\\\d{3})";1h;1e"2v":1e"2W":1e"2X":1e"D":M+="(\\\\D+)";1h;61:M+="(\\\\d\\\\d?)";1h}}M+=".*$";O=19 4e(M).33(J);P=1}k(O){1b(H=0;H=0){A=A.1l(/%2h/g,"0");$.d=0;$.M=2i($.M)+1}$.1S()}t $},1T:l(){o b,$;k($f.7k||($f.6z!=""&&$f.z[$f.1y]=="")){b=h.2P($f.6z);$=$f.1Q}q{b=$f.z[$f.1y];$=h.1B}$n.2a(h.2O(b,$));k(b!=""){o A=1;k($f.Z.3T&&!h.4s($n)){$n.y=$1z.y;$n.M=$1z.M;$n.d=$1z.d;A=0}k($f.Z.28&&!h.4q($n)){$n.H=$1z.H;$n.m=$1z.m;$n.s=$1z.s;A=0}t A&&h.1t($n)}t 1},4s:l($){k($.y!=1i)$=3d($.y,4)+"-"+$.M+"-"+$.d;t $.3a(/^((\\d{2}(([6t][7z])|([6s][26]))[\\-\\/\\s]?((((0?[6v])|(1[6u]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[6A])))|(((0?[6G])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([6t][7y])|([6s][7v]))[\\-\\/\\s]?((((0?[6v])|(1[6u]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[6A])))|(((0?[6G])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$/)},4q:l($){k($.H!=1i)$=$.H+":"+$.m+":"+$.s;t $.3a(/^([0-9]|([0-1][0-9])|([2][0-3])):([0-9]|([0-5][0-9])):([0-9]|([0-5][0-9]))$/)},2I:l($,A){$=$||$n;o b=$.2t(h.22,A);k(b>0){b=$.2t(h.1U,A);k(b<0)b=0}t b},1t:l($,A,B){A=A||$f.Z.3O;o b=h.2I($,A);k(b==0){b=1;k(A=="d"&&B==1i)B=2B.5A((19 1F($.y,$.M-1,$.d).1W()-$f.41+7)%7);b=!h.5I(B)&&!h.5q($,A)}q b=0;t b},6B:l(){o b=$f.z,A=h,$=$f.z[$f.1y];k($f.4U>=0&&$f.4U<=2&&$!=1i){k($!="")A.2w.2a(A.2O($,A.1B));k($==""||(A.4s(A.2w)&&A.4q(A.2w)&&A.1t(A.2w))){k($!=""){A.6H.2a(A.2w);A.2p()}q A.3E("")}q t 1n}t 1a},3L:l($){3w();k(h.6B()){h.3p(1a);$f.1m()}q{k($){2R($);h.3p(1n,2)}q h.3p(1n);$f.1Y()}},3s:l(){o E,C,D,K,A,H=19 2C(),F=$1k.5l,G=$f.41,I="",$="",b=19 1C($n.y,$n.M,$n.d,0,0,0),J=b.y,B=b.M;A=1-19 1F(J,B-1,1).1W()+G;k(A>1)A-=7;H.a("<1x Y=5F 2L=2F% 2s=0 2x=0 2q=0>");H.a("<1j Y=5H 4p=5p>");k($f.5b)H.a("<18>"+F[0]+"");1b(E=0;E<7;E++)H.a("<18>"+F[(G+E)%7+1]+"");H.a("");1b(E=1,C=A;E<7;E++){H.a("<1j>");1b(D=0;D<7;D++){b.1T(J,B,C++);b.1S();k(b.M==B){K=1a;k(b.2t($1v,"d")==0)I="7u";q k(b.2t($1z,"d")==0)I="7t";q I=($f.5a&&(0==(G+D)%7||6==(G+D)%7)?"7r":"7s");$=($f.5a&&(0==(G+D)%7||6==(G+D)%7)?"7w":"7x")}q k($f.5K){K=1a;I="7l";$="7i"}q K=1n;k($f.5b&&D==0&&(E<4||K))H.a("<18 Y=7o>"+4B(b,$f.41==0?1:0)+"");H.a("<18 ");k(K){k(h.1t(b,"d",D)){k(h.5N(2B.5A((19 1F(b.y,b.M-1,b.d).1W()-$f.41+7)%7))||h.5r(b))I="7K";H.a("1s=\\"3q("+b.y+","+b.M+","+b.d+");\\" ");H.a("2A=\\"h.1d=\'"+$+"\'\\" ");H.a("2y=\\"h.1d=\'"+I+"\'\\" ")}q I="7Q";H.a("Y="+I);H.a(">"+b.d+"")}q H.a(">")}H.a("")}H.a("");t H.j()},5q:l(b,A){o $=h.4H(b,h.4S,A);t(h.4S&&$f.5e)?!$:$},5I:l($){t h.4I($,h.5D)},5r:l($){t h.4H($,h.5O)},5N:l($){t h.4I($,h.5Q)},4H:l($,B,A){o b=A=="d"?$f.4a:$f.1Q;t B?B.4o(h.3y(b,$)):0},4I:l(b,$){t $?$.4o(b):0},2U:l(p,c,r,e,2d){o s=19 2C(),4t=2d?"r"+p:p;5k=$n[p];s.a("<1x 2x=0 2q=3 2s=0");1b(o i=0;i");1b(o j=0;j"+(p=="M"?$1k.2g[$n[p]-1]:$n[p])+"")}s.a("")}s.a("");$n[p]=5k;t s.j()},4z:l($,b){k($){o A=$.6V;k($66)A=$.7S().2z;b.1c.2z=A}},8L:l($){h.4z($,$d.3x);$d.3x.1P=h.2U("M",2,6,"i+j*6+1",$==$d.2k)},4x:l(b,A){o $=19 2C();A=2M(A,$n.y-5);$.a(h.2U("y",2,5,A+"+i+j*5",b==$d.2o));$.a("<1x 2x=0 2q=3 2s=0 4p=5p><1j><18 ");$.a(h.22.y\\8R<18 Y=\'1A\' 2A=\\"h.1d=\'2Z\'\\" 2y=\\"h.1d=\'1A\'\\" 3U=\\"1m($d.35);$d.1w.4y();\\">\\5u<18 ");$.a(h.1U.y>A+10?"Y=\'1A\' 2A=\\"h.1d=\'2Z\'\\" 2y=\\"h.1d=\'1A\'\\" 3U=\'k(1X.2c)1X.2c();1X.4m=1a;$c.4x(0,"+(A+10)+")\'":"Y=\'4u\'");$.a(">\\8A");h.4z(b,$d.35);$d.35.1P=$.j()},3V:l(A,b,$){$d[A+"D"].1P=h.2U(A,6,b,$)},8z:l(){h.3V("H",4,"i * 6 + j")},8q:l(){h.3V("m",2,"i * 30 + j * 5")},8x:l(){h.3V("s",1,"j * 10")},4D:l(A){h.6D();o b=h.3l,C=b.1c,$=19 2C();$.a("<1x Y=5F 2L=2F% 2b=2F% 2s=0 2x=0 2q=0>");$.a("<1j Y=5H><18>"+$1k.8C+"");k(!A)$.a("\\5u");$.a("");1b(o B=0;B<18 1c=\'4F-4p:2z\' 2Q=\'2Q\' Y=\'1A\' 2A=\\"h.1d=\'2Z\'\\" 2y=\\"h.1d=\'1A\'\\" 1s=\\"");$.a("3q("+b[B].y+", "+b[B].M+", "+b[B].d+","+b[B].H+","+b[B].m+","+b[B].s+");\\">");$.a("&4c;"+h.3y(1i,b[B]));$.a("")}q $.a("<1j><18 Y=\'1A\'>&4c;");$.a("");$d.1G.1P=$.j()},5w:l(){$(/w/);$(/4g|W/);$(/2X|D/);$(/3g|2l|3b|y/);$(/2v|2W|3N|M/);$(/1M|d/);$(/51|H/);$(/52|m/);$(/4Z|s/);$f.Z.3T=($f.Z.y||$f.Z.M||$f.Z.d)?1a:1n;$f.Z.28=($f.Z.H||$f.Z.m||$f.Z.s)?1a:1n;$f.2N=$f.2N.1l(/%1F/,$f.4a).1l(/%8E/,$f.5t);k($f.Z.3T){k($f.Z.28)$f.1Q=$f.2N;q $f.1Q=$f.4a}q $f.1Q=$f.5t;l $(b){o $=(b+"").4X(1,2);$f.Z[$]=b.33($f.1B)?($f.Z.3O=$,1a):1n}},5x:l(){o $=0;$f.Z.y?($=1,1Y($d.1w,$d.3Z,$d.3W)):1m($d.1w,$d.3Z,$d.3W);$f.Z.M?($=1,1Y($d.1J,$d.3X,$d.3M)):1m($d.1J,$d.3X,$d.3M);$?1Y($d.4h):1m($d.4h);k($f.Z.28){1Y($d.2V);3v($d.3e,$f.Z.H);3v($d.3G,$f.Z.m);3v($d.43,$f.Z.s)}q 1m($d.2V);2S($d.2H,$f.5B);2S($d.2f,$f.5v);2S($d.1R,$f.4L);2S($d.54,!$f.5M&&$f.Z.d&&$f.8F);k($f.5m||!($f.5B||$f.5v||$f.4L))1m($d.3r);q 1Y($d.3r)},3p:l(B,D){o A=$f.z,b=$5E?"Y":"1d";k(B)C(A);q{k(D==1i)D=$f.4U;3f(D){1e 0:k(8D($1k.8r)){A[$f.1y]=h.3P;C(A)}q $(A);1h;1e 1:A[$f.1y]=h.3P;C(A);1h;1e 2:$(A);1h}}l C(A){o B=A.1d;k(B){o $=B.1l(/5o/g,"");k(B!=$)A.5n(b,$)}}l $($){$.5n(b,$.1d+" 5o")}},1V:l(D,b,$){$=$||$1v;o H,C=[D+D,D],E,A=$[D],F=l($){t 3d(A,$.u)};3f(D){1e"w":A=1W($);1h;1e"D":o G=1W($)+1;F=l($){t $.u==2?$1k.8s[G]:$1k.5l[G]};1h;1e"W":A=4B($);1h;1e"y":C=["3g","2l","3b","y"];b=b||C[0];F=l(b){t 3d((b.u<4)?(b.u<3?$.y%2F:($.y+5j-$f.5f)%8p):A,b.u)};1h;1e"M":C=["2v","2W","3N","M"];F=l($){t($.u==4)?$1k.5z[A-1]:($.u==3)?$1k.2g[A-1]:3d(A,$.u)};1h}b=b||D+D;k("2K".1q(D)>-1&&D!="y"&&!$f.Z[D])k("8I".1q(D)>-1)A=0;q A=1;o B=[];1b(H=0;H=0){B[H]=F(E);b=b.1l(E,"{"+H+"}")}}1b(H=0;H=0){o A=19 1C();A.2a($);A.d=0;A.M=2i(A.M)+1;A.1S();b=b.1l(/%2h/g,A.d)}o B="8v";1b(o D=0;D<1j><18 5s=5C>");$.a(h.3s());$.a("<18 5s=5C>");$n.2n("M",1);$.a(h.3s());$d.2k=$d.1J.5y(1a);$d.2o=$d.1w.5y(1a);$d.3F.4j($d.2k);$d.3F.4j($d.2o);$d.2k.1g=$1k.2g[$n.M-1];$d.2k["3A"]=$n.M;$d.2o.1g=$n.y;4k("5S,5V");$d.2k.1d=$d.2o.1d="42";$n.2n("M",-1);$.a("");$d.3i.1P=$.j()}q{$d.1d="4b";$d.3i.1P=h.3s()}k(!$f.Z.d||$f.8P){h.4D(1a);3J($d.1G)}q 1m($d.1G);h.5P()},5P:l(){o b=8Q.1O.5L("8S");1b(o C=0;C=B){A+=B;$d.1c.2b=A}q $d.1c.2b=$;b[C].1c.2b=2B.6g(A,$d.36)+"5d"}}$d.1G.1c.2L=$d.3i.5c;$d.1G.1c.2b=$d.3i.36},4P:l(){$n.d=2B.8H(19 1F($n.y,$n.M,0).2G(),$n.d);$1v.2a($n);h.2p();k(!$f.5m)k(h.1t($n)){4r();1m($f.1M)}k($f.5h)29("5h")},5g:l(){$d.2H.1s=l(){k(!29("8K")){$f.z[$f.1y]="";$c.3E("");4r();1m($f.1M);k($f.5i)29("5i")}};$d.1R.1s=l(){3q()};k(h.1t($1z)){$d.2f.25=1n;$d.2f.1s=l(){$n.2a($1z);3q()}}q $d.2f.25=1a},6D:l(){o H,G,A,F,C=[],$=5,E=$f.6C.u,b=$f.Z.3O;k(E>$)E=$;q k(b=="m"||b=="s")C=[-60,-30,0,30,60,-15,15,-45,45];q 1b(H=0;H<$;H++)C[H]=$n[b]-2+H;1b(H=G=0;H=0)1H=3z(1H,0,59);k($1v[p]!=1H&&!29(p+"80")){o 6M="21(\\""+p+"\\","+1H+")",3D=$c.2I();k(3D==0)2T(6M);q k(3D<0)4Y($c.22);q k(3D>0)4Y($c.1U);$d.1R.25=!$c.1t($1v);k("7X".1q(p)>=0)$c.47();29(p+"7Y")}l 4Y($){4f($c.1t($)?$:$1v)}}l 4f($){21("y",$.y);21("M",$.M);21("d",$.d);21("H",$.H);21("m",$.m);21("s",$.s)}l 3q(F,B,b,D,C,A){o $=19 1C($n.y,$n.M,$n.d,$n.H,$n.m,$n.s);$n.1T(F,B,b,D,C,A);k(!29("8j")){o E=$.y==F&&$.M==B&&$.d==b;k(!E&&3n.u!=0){c("y",F);c("M",B);c("d",b);$c.1f=$f.z;k($f.2m)$c.2p()}k($c.3o||E||3n.u==0)$c.4P()}q $n=$}l 29($){o b;k($f[$])b=$f[$].4M($f.z,$f);t b}l 21(b,$){k($==1i)$=$n[b];$1v[b]=$n[b]=$;k("8k".1q(b)>=0)$d[b+"I"].1g=$;k(b=="M"){$d.1J["3A"]=$;$d.1J.1g=$1k.2g[$-1]}}l 3z(b,$,A){k(b<$)b=$;q k(b>A)b=A;t b}l 6J($,b){$f.3k($,"53",l(){o $=1X,A=($.4O==6K)?$.4J:$.4O;k(A==9)b()})}l 3d($,b){$=$+"";3m($.u=0?C:5;1b(o D=0;D<=C;D++){B=A.1I(D);b=h[B]-$[B];k(b>0)t 1;q k(b<0)t-1}t 0},1S:l(){o $=19 1F(h.y,h.M-1,h.d,h.H,h.m,h.s);h.y=$.4R();h.M=$.4Q()+1;h.d=$.2G();h.H=$.4T();h.m=$.4W();h.s=$.4V();t!69(h.y)},2n:l(b,$){k("2K".1q(b)>=0){o A=h.d;k(b=="M")h.d=1;h[b]+=$;h.1S();h.d=A}}};l 2i($){t 8h($,10)}l 3B($,b){t 2M(2i($),b)}l 1o($,A,b){t 3B($,2M(A,b))}l 2M($,b){t $==1i||69($)?b:$}l 55(A,$){k($66)A.55("67"+$);q{o b=1O.8i("8n");b.8o($,1a,1a);A.8l(b)}}l 3R($){o A,B,b="y,M,H,m,s,5V,5S".49(",");1b(B=0;B=0?5Y(v):$n[p];k(p=="y"){2d=h==$d.2o;k(2d&&$n.M==12)$n.y-=1}q k(p=="M"){2d=h==$d.2k;k(2d){4E=$1k.2g[$n[p]-1];k(5Z==12)$n.y+=1;$n.2n("M",-1)}k($1v.M==$n.M)h.1g=4E||$1k.2g[$n[p]-1];k(($1v.y!=$n.y))c("y",$n.y)}2T("c(\\""+p+"\\","+$n[p]+")");k(5W!==1a){k(p=="y"||p=="M")h.1d="42";1m($d[p+"D"])}k($f.2m)$c.2p()}l 2R($){k($.2c){$.2c();$.8m()}q{$.4m=1a;$.6a=1n}k($6b)$.4J=0}l 4k($){o A=$.49(",");1b(o B=0;B=8c&&Q<=89)Q-=48;k($f.8a&&4C){k(!H.34){H.34=$f.20[1];$c.1f=$f.z}k(H==$f.z)$c.1f=$f.z;k(Q==27)k(H==$f.z){$c.3L();t}q $f.z.24();k(Q>=37&&Q<=40){o U;k($c.1f==$f.z||$c.1f==$d.1R)k($f.Z.d){U="d";k(Q==38)$n[U]-=7;q k(Q==39)$n[U]+=1;q k(Q==37)$n[U]-=1;q $n[U]+=7;$n.1S();c("y",$n["y"]);c("M",$n["M"]);c("d",$n[U]);2R(M);t}q{U=$f.Z.3O;$d[U+"I"].24()}U=U||3R($c.1f);k(U){k(Q==38||Q==39)$n[U]+=1;q $n[U]-=1;$n.1S();$c.1f.1g=$n[U];3Q.4M($c.1f,1a);$c.1f.4w()}}q k(Q==9){o D=H.34;1b(o R=0;R<$f.20.u;R++)k(D.25==1a||D.36==0)D=D.34;q 1h;k($c.1f!=D){$c.1f=D;D.24()}}q k(Q==13){3Q.4M($c.1f);k($c.1f.3h=="1K")$c.1f.8f();q $c.4P();$c.1f=$f.z}}q k(Q==9&&H==$f.z)$c.3L();k($f.8g&&!$6b&&!$f.3K&&$c.1f==$f.z&&(Q>=48&&Q<=57)){o T=$f.z,S=T.1g,F=E(T),I={1Z:"",1r:[]},R=0,K,N=0,X=0,O=0,J,b=/3g|2l|3b|y|3N|M|1M|d|%2h|51|H|52|m|4Z|s|4g|W|w/g,L=$f.1B.3a(b),B,A,$,V,W,G,J=0;k(S!=""){O=S.3a(/[0-9]/g);O=O==1i?0:O.u;1b(R=0;R=0?1:0;k(O==1&&F>=S.u)F=S.u-1}S=S.1E(0,F)+8d.8e(Q)+S.1E(F+O);F++;1b(R=0;R=0){S+=$f.1B.1E(N,X);k(F>=N+J&&F<=X+J)F+=X-N}N=b.2E;G=N-X;B=I.1Z.1E(0,G);A=K[0].1I(0);$=2i(B.1I(0));k(I.1Z.u>1){V=I.1Z.1I(1);W=$*10+2i(V)}q{V="";W=$}k(I.1r[X+1]||A=="M"&&W>12||A=="d"&&W>31||A=="H"&&W>23||"6o".1q(A)>=0&&W>59){k(K[0].u==2)B="0"+$;q B=$;F++}q k(G==1){B=W;G++;J++}S+=B;I.1Z=I.1Z.1E(G);k(I.1Z=="")1h}T.1g=S;P(T,F);2R(M)}k(4C&&$c.1f!=$f.z&&!((Q>=48&&Q<=57)||Q==8||Q==46))2R(M);l E(A){o b=0;k($f.4A.1O.6Q){o B=$f.4A.1O.6Q.85(),$=B.4F.u;B.6F("4v",-A.1g.u);b=B.4F.u-$}q k(A.4G||A.4G=="0")b=A.4G;t b}l P(b,A){k(b.6x){b.24();b.6x(A,A)}q k(b.6y){o $=b.6y();$.8M(1a);$.8N("4v",A);$.6F("4v",A);$.4w()}}}1O.8t=1',62,551,'|||||||||||_||||dp||this|||if|function||dt|var||else|||return|length|||div||el|||||||||||||||||||||||||class|has|||||||||td|new|true|for|style|className|case|currFocus|value|break|null|tr|lang|replace|hide|false|pInt3|divs|indexOf|arr|onclick|checkValid|input|sdt|yI|table|elProp|tdt|menu|dateFmt|DPDate|id|substring|Date|qsDivSel|pv|charAt|MI|button|ny|dd|ipts|document|innerHTML|realFmt|okI|refresh|loadDate|maxDate|getP|getDay|event|show|str|focusArr|sv|minDate||focus|disabled|||st|callFunc|loadFromDate|height|preventDefault|isR|display|todayI|aMonStr|ld|pInt|9700|rMI|yyy|autoUpdateOnChanged|attr|ryI|update|cellpadding|none|border|compareWith|onblur|MMMM|date|cellspacing|onmouseout|left|onmouseover|Math|sb|tmpEval|lastIndex|100|getDate|clearI|checkRange|float|yMdHms|width|rtn|realFullFmt|splitDate|doExp|nowrap|_cancelKey|shorH|eval|_f|tDiv|MMM|DD|menuSel|menuOn||||exec|nextCtrl|yD|offsetHeight||||match|yy|prototype|doStr|HI|switch|yyyy|type|dDiv|_initRe|attachEvent|QS|while|arguments|autoPickDate|mark|day_Click|bDiv|_fd|doCustomDate|setDisp|disHMS|hideSel|MD|getDateStr|makeInRange|realValue|pInt2|ps|rv|setRealValue|rMD|mI|My97Mark|toLowerCase|showB|readOnly|close|rightImg|MM|minUnit|oldValue|_blur|_foundInput|navImg|sd|onmousedown|_fHMS|navRightImg|leftImg|index|navLeftImg||firstDayOfWeek|yminput|sI|errMsg|||draw||split|realDateFmt|WdateDiv|nbsp|maxlength|RegExp|_setAll|WW|titleDiv|btns|appendChild|_inputBindEvent|dpButton|cancelBubble|span|test|align|isTime|elFocus|isDate|fp|invalidMenu|character|select|_fy|blur|_fMyPos|win|getWeek|isShow|_fillQS|mStr|text|selectionStart|testDate|testDay|keyCode|_tab|isShowOK|call|getNewDateStr|which|pickDate|getMonth|getFullYear|ddateRe|getHours|errDealMode|getSeconds|getMinutes|slice|_setFrom|ss||HH|mm|onkeydown|qsDiv|fireEvent|nodeType||updownEvent||highLineWeekDay|isShowWeek|offsetWidth|px|opposite|yearOffset|initBtn|onpicked|oncleared|2000|bak|aWeekStr|eCont|setAttribute|WdateFmtErr|center|testDisDate|testSpeDate|valign|realTimeFmt|xd7|isShowToday|_dealFmt|initShowAndHide|cloneNode|aLongMonStr|abs|isShowClear|top|ddayRe|FF|WdayTable|window|MTitle|testDisDay|body|isShowOthers|getElementsByTagName|doubleCalendar|testSpeDay|sdateRe|autoSize|sdayRe|right|rM|yminputfocus|_makeDateInRange|ry|showDiv|cal|Number|oldv||default|sD|nodeName|HD|mD|IE|on|coverDate|isNaN|returnValue|OPERA|My97DP|tE|init|upButton|max|spans|downButton|readonly|target|timeSpan|_focus|srcElement|ms|tm|defMaxDate|defMinDate|13579|02468|02|13578|setDate|setSelectionRange|createTextRange|startDate|01|checkAndUpdate|quickSel|initQS|Event|moveStart|469|newdate|hidden|attachTabEvent|undefined|re|func|valueOf|_ieEmuEventHandler|block|selection|NavImgll|YMenu|dpTitle|NavImgl|offsetLeft|dpTimeUp|dpTimeDown|MMenu|__defineGetter__|dpQS|NavImgrr|position|dpTime|hhMenu|overflow|addEventListener|absolute|createElement|HTMLElement|dpTimeStr|parentNode|tB|rowspan|NavImgr|mmMenu|ssMenu|dpControl|WotherDayOn|object|alwaysUseStartDate|WotherDay|typeof|substr|Wweek|Function|vel|Wwday|Wday|Wtoday|Wselday|01345789|WwdayOn|WdayOn|1235679|048|specialDays|specialDates|timeStr|err_1|disabledDays|dpTodayInput|dpClearInput|disabledDates|dpOkInput|onchange|WspecialDay|1900|change|alert|todayStr|clearStr|WinvalidDay|okStr|getBoundingClientRect|round|86400000|whichDayIsfirstWeek|setMonth|yMd|changed|00|changing|textarea|srcEl|try|__defineSetter__|createRange|join|catch|Array|105|enableKeyboard|onfocus|96|String|fromCharCode|click|enableInputMask|parseInt|createEvent|onpicking|yHms|dispatchEvent|stopPropagation|HTMLEvents|initEvent|1000|_fm|errAlertMsg|aLongWeekStr|ready|WdateDiv2|ydHmswW|getNewP|_fs|pointer|_fH|u2192|cursor|quickStr|confirm|Time|qsEnabled|WdayTable2|min|Hms|contentWindow|onclearing|_fM|collapse|moveEnd|scrollHeight|autoShowQS|parent|u2190|iframe'.split('|'),0,{})) ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/lang/en.js ================================================ var $lang={ errAlertMsg: "Invalid date or the date out of range,redo or not?", aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"], clearStr: "Clear", todayStr: "Today", okStr: "OK", updateStr: "OK", timeStr: "Time", quickStr: "Quick Selection", err_1: 'MinDate Cannot be bigger than MaxDate!' } ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/lang/zh-cn.js ================================================ var $lang={ errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?", aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], clearStr: "\u6E05\u7A7A", todayStr: "\u4ECA\u5929", okStr: "\u786E\u5B9A", updateStr: "\u786E\u5B9A", timeStr: "\u65F6\u95F4", quickStr: "\u5FEB\u901F\u9009\u62E9", err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!' } ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/lang/zh-tw.js ================================================ var $lang={ errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?", aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], clearStr: "\u6E05\u7A7A", todayStr: "\u4ECA\u5929", okStr: "\u78BA\u5B9A", updateStr: "\u78BA\u5B9A", timeStr: "\u6642\u9593", quickStr: "\u5FEB\u901F\u9078\u64C7", err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!' } ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/skin/WdatePicker.css ================================================ .Wdate{ border:#999 1px solid; height:20px; background:#fff url(datePicker.gif) no-repeat right; } .WdateFmtErr{ font-weight:bold; color:red; } ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/skin/default/datepicker.css ================================================ /* * My97 DatePicker 4.7 */ .WdateDiv{ width:180px; background-color:#FFFFFF; border:#bbb 1px solid; padding:2px; } .WdateDiv2{ width:360px; } .WdateDiv *{font-size:9pt;} .WdateDiv .NavImg a{ display:block; cursor:pointer; height:16px; width:16px; } .WdateDiv .NavImgll a{ float:left; background:transparent url(img.gif) no-repeat scroll 0 0; } .WdateDiv .NavImgl a{ float:left; background:transparent url(img.gif) no-repeat scroll -16px 0; } .WdateDiv .NavImgr a{ float:right; background:transparent url(img.gif) no-repeat scroll -32px 0; } .WdateDiv .NavImgrr a{ float:right; background:transparent url(img.gif) no-repeat scroll -48px 0; } .WdateDiv #dpTitle{ height:24px; margin-bottom:2px; padding:1px; } .WdateDiv .yminput{ margin-top:2px; text-align:center; height:20px; border:0px; width:50px; cursor:pointer; } .WdateDiv .yminputfocus{ margin-top:2px; text-align:center; font-weight:bold; height:20px; color:blue; border:#ccc 1px solid; width:50px; } .WdateDiv .menuSel{ z-index:1; position:absolute; background-color:#FFFFFF; border:#ccc 1px solid; display:none; } .WdateDiv .menu{ cursor:pointer; background-color:#fff; } .WdateDiv .menuOn{ cursor:pointer; background-color:#BEEBEE; } .WdateDiv .invalidMenu{ color:#aaa; } .WdateDiv .YMenu{ margin-top:20px; } .WdateDiv .MMenu{ margin-top:20px; *width:62px; } .WdateDiv .hhMenu{ margin-top:-90px; margin-left:26px; } .WdateDiv .mmMenu{ margin-top:-46px; margin-left:26px; } .WdateDiv .ssMenu{ margin-top:-24px; margin-left:26px; } .WdateDiv .Wweek { text-align:center; background:#DAF3F5; border-right:#BDEBEE 1px solid; } .WdateDiv .MTitle{ background-color:#BDEBEE; } .WdateDiv .WdayTable2{ border-collapse:collapse; border:#c5d9e8 1px solid; } .WdateDiv .WdayTable2 table{ border:0; } .WdateDiv .WdayTable{ line-height:20px; border:#c5d9e8 1px solid; } .WdateDiv .WdayTable td{ text-align:center; } .WdateDiv .Wday{ cursor:pointer; } .WdateDiv .WdayOn{ cursor:pointer; background-color:#C0EBEF; } .WdateDiv .Wwday{ cursor:pointer; color:#FF2F2F; } .WdateDiv .WwdayOn{ cursor:pointer; color:#000; background-color:#C0EBEF; } .WdateDiv .Wtoday{ cursor:pointer; color:blue; } .WdateDiv .Wselday{ background-color:#A9E4E9; } .WdateDiv .WspecialDay{ background-color:#66F4DF; } .WdateDiv .WotherDay{ cursor:pointer; color:#6A6AFF; } .WdateDiv .WotherDayOn{ cursor:pointer; background-color:#C0EBEF; } .WdateDiv .WinvalidDay{ color:#aaa; } .WdateDiv #dpTime{ float:left; margin-top:3px; margin-right:30px; } .WdateDiv #dpTime #dpTimeStr{ margin-left:1px; } .WdateDiv #dpTime input{ width:18px; height:20px; text-align:center; border:#ccc 1px solid; } .WdateDiv #dpTime .tB{ border-right:0px; } .WdateDiv #dpTime .tE{ border-left:0; border-right:0; } .WdateDiv #dpTime .tm{ width:7px; border-left:0; border-right:0; } .WdateDiv #dpTime #dpTimeUp{ height:10px; width:13px; border:0px; background:url(img.gif) no-repeat -32px -16px; } .WdateDiv #dpTime #dpTimeDown{ height:10px; width:13px; border:0px; background:url(img.gif) no-repeat -48px -16px; } .WdateDiv #dpQS { float:left; margin-right:3px; margin-top:3px; background:url(img.gif) no-repeat 0px -16px; width:20px; height:20px; cursor:pointer; } .WdateDiv #dpControl { text-align:right; } .WdateDiv .dpButton{ height:20px; width:45px; border:#ccc 1px solid; margin-top:2px; margin-right:1px; } ================================================ FILE: src/main/webapp/jslib/eu_js/My97DatePicker/skin/whyGreen/datepicker.css ================================================ /* * My97 DatePicker 4.7 Skin:whyGreen */ .WdateDiv{ width:180px; background-color:#fff; border:#C5E1E4 1px solid; padding:2px; } .WdateDiv2{ width:360px; } .WdateDiv *{font-size:9pt;} .WdateDiv .NavImg a{ cursor:pointer; display:block; width:16px; height:16px; margin-top:1px; } .WdateDiv .NavImgll a{ float:left; background:url(img.gif) no-repeat; } .WdateDiv .NavImgl a{ float:left; background:url(img.gif) no-repeat -16px 0px; } .WdateDiv .NavImgr a{ float:right; background:url(img.gif) no-repeat -32px 0px; } .WdateDiv .NavImgrr a{ float:right; background:url(img.gif) no-repeat -48px 0px; } .WdateDiv #dpTitle{ height:24px; padding:1px; border:#c5d9e8 1px solid; background:url(bg.jpg); margin-bottom:2px; } .WdateDiv .yminput{ margin-top:2px; text-align:center; border:0px; height:20px; width:50px; color:#034c50; background-color:transparent; cursor:pointer; } .WdateDiv .yminputfocus{ margin-top:2px; text-align:center; border:#939393 1px solid; font-weight:bold; color:#034c50; height:20px; width:50px; } .WdateDiv .menuSel{ z-index:1; position:absolute; background-color:#FFFFFF; border:#A3C6C8 1px solid; display:none; } .WdateDiv .menu{ cursor:pointer; background-color:#fff; color:#11777C; } .WdateDiv .menuOn{ cursor:pointer; background-color:#BEEBEE; } .WdateDiv .invalidMenu{ color:#aaa; } .WdateDiv .YMenu{ margin-top:20px; } .WdateDiv .MMenu{ margin-top:20px; *width:62px; } .WdateDiv .hhMenu{ margin-top:-90px; margin-left:26px; } .WdateDiv .mmMenu{ margin-top:-46px; margin-left:26px; } .WdateDiv .ssMenu{ margin-top:-24px; margin-left:26px; } .WdateDiv .Wweek { text-align:center; background:#DAF3F5; border-right:#BDEBEE 1px solid; } .WdateDiv .MTitle{ color:#13777e; background-color:#bdebee; } .WdateDiv .WdayTable2{ border-collapse:collapse; border:#BEE9F0 1px solid; } .WdateDiv .WdayTable2 table{ border:0; } .WdateDiv .WdayTable{ line-height:20px; color:#13777e; background-color:#edfbfb; border:#BEE9F0 1px solid; } .WdateDiv .WdayTable td{ text-align:center; } .WdateDiv .Wday{ cursor:pointer; } .WdateDiv .WdayOn{ cursor:pointer; background-color:#74d2d9 ; } .WdateDiv .Wwday{ cursor:pointer; color:#ab1e1e; } .WdateDiv .WwdayOn{ cursor:pointer; background-color:#74d2d9; } .WdateDiv .Wtoday{ cursor:pointer; color:blue; } .WdateDiv .Wselday{ background-color:#A7E2E7; } .WdateDiv .WspecialDay{ background-color:#66F4DF; } .WdateDiv .WotherDay{ cursor:pointer; color:#0099CC; } .WdateDiv .WotherDayOn{ cursor:pointer; background-color:#C0EBEF; } .WdateDiv .WinvalidDay{ color:#aaa; } .WdateDiv #dpTime{ float:left; margin-top:3px; margin-right:30px; } .WdateDiv #dpTime #dpTimeStr{ margin-left:1px; color:#497F7F; } .WdateDiv #dpTime input{ height:20px; width:18px; text-align:center; color:#333; border:#61CAD0 1px solid; } .WdateDiv #dpTime .tB{ border-right:0px; } .WdateDiv #dpTime .tE{ border-left:0; border-right:0; } .WdateDiv #dpTime .tm{ width:7px; border-left:0; border-right:0; } .WdateDiv #dpTime #dpTimeUp{ height:10px; width:13px; border:0px; background:url(img.gif) no-repeat -32px -16px; } .WdateDiv #dpTime #dpTimeDown{ height:10px; width:13px; border:0px; background:url(img.gif) no-repeat -48px -16px; } .WdateDiv #dpQS { float:left; margin-right:3px; margin-top:3px; background:url(img.gif) no-repeat 0px -16px; width:20px; height:20px; cursor:pointer; } .WdateDiv #dpControl { text-align:right; margin-top:3px; } .WdateDiv .dpButton{ height:20px; width:45px; margin-top:2px; border:#38B1B9 1px solid; background-color:#CFEBEE; color:#08575B; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/locale/easyui-lang-en.js ================================================ if ($.fn.pagination){ $.fn.pagination.defaults.beforePageText = 'Page'; $.fn.pagination.defaults.afterPageText = 'of {pages}'; $.fn.pagination.defaults.displayMsg = 'Displaying {from} to {to} of {total} items'; } if ($.fn.datagrid){ $.fn.datagrid.defaults.loadMsg = 'Processing, please wait ...'; } if ($.fn.treegrid && $.fn.datagrid){ $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg; } if ($.messager){ $.messager.defaults.ok = 'Ok'; $.messager.defaults.cancel = 'Cancel'; } if ($.fn.validatebox){ $.fn.validatebox.defaults.missingMessage = 'This field is required.'; $.fn.validatebox.defaults.rules.email.message = 'Please enter a valid email address.'; $.fn.validatebox.defaults.rules.url.message = 'Please enter a valid URL.'; $.fn.validatebox.defaults.rules.length.message = 'Please enter a value between {0} and {1}.'; $.fn.validatebox.defaults.rules.remote.message = 'Please fix this field.'; } if ($.fn.numberbox){ $.fn.numberbox.defaults.missingMessage = 'This field is required.'; } if ($.fn.combobox){ $.fn.combobox.defaults.missingMessage = 'This field is required.'; } if ($.fn.combotree){ $.fn.combotree.defaults.missingMessage = 'This field is required.'; } if ($.fn.combogrid){ $.fn.combogrid.defaults.missingMessage = 'This field is required.'; } if ($.fn.calendar){ $.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S']; $.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; } if ($.fn.datebox){ $.fn.datebox.defaults.currentText = 'Today'; $.fn.datebox.defaults.closeText = 'Close'; $.fn.datebox.defaults.okText = 'Ok'; $.fn.datebox.defaults.missingMessage = 'This field is required.'; } if ($.fn.datetimebox && $.fn.datebox){ $.extend($.fn.datetimebox.defaults,{ currentText: $.fn.datebox.defaults.currentText, closeText: $.fn.datebox.defaults.closeText, okText: $.fn.datebox.defaults.okText, missingMessage: $.fn.datebox.defaults.missingMessage }); } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/locale/easyui-lang-zh_CN.js ================================================ if ($.fn.pagination){ $.fn.pagination.defaults.beforePageText = '第'; $.fn.pagination.defaults.afterPageText = '共{pages}页'; $.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录'; } if ($.fn.datagrid){ $.fn.datagrid.defaults.loadMsg = '正在处理,请稍待。。。'; } if ($.fn.treegrid && $.fn.datagrid){ $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg; } if ($.messager){ $.messager.defaults.ok = '确定'; $.messager.defaults.cancel = '取消'; } if ($.fn.validatebox){ $.fn.validatebox.defaults.missingMessage = '该输入项为必输项'; $.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址'; $.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址'; $.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间'; $.fn.validatebox.defaults.rules.remote.message = '请修正该字段'; } if ($.fn.numberbox){ $.fn.numberbox.defaults.missingMessage = '该输入项为必输项'; } if ($.fn.combobox){ $.fn.combobox.defaults.missingMessage = '该输入项为必输项'; } if ($.fn.combotree){ $.fn.combotree.defaults.missingMessage = '该输入项为必输项'; } if ($.fn.combogrid){ $.fn.combogrid.defaults.missingMessage = '该输入项为必输项'; } if ($.fn.calendar){ $.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六']; $.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']; } if ($.fn.datebox){ $.fn.datebox.defaults.currentText = '今天'; $.fn.datebox.defaults.closeText = '关闭'; $.fn.datebox.defaults.okText = '确定'; $.fn.datebox.defaults.missingMessage = '该输入项为必输项'; $.fn.datebox.defaults.formatter = function(date){ var y = date.getFullYear(); var m = date.getMonth()+1; var d = date.getDate(); return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d); }; $.fn.datebox.defaults.parser = function(s){ if (!s) return new Date(); var ss = s.split('-'); var y = parseInt(ss[0],10); var m = parseInt(ss[1],10); var d = parseInt(ss[2],10); if (!isNaN(y) && !isNaN(m) && !isNaN(d)){ return new Date(y,m-1,d); } else { return new Date(); } }; } if ($.fn.datetimebox && $.fn.datebox){ $.extend($.fn.datetimebox.defaults,{ currentText: $.fn.datebox.defaults.currentText, closeText: $.fn.datebox.defaults.closeText, okText: $.fn.datebox.defaults.okText, missingMessage: $.fn.datebox.defaults.missingMessage }); } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #ffffff; border-color: #95B8E7; } .accordion .accordion-header { background: #E0ECFF; filter: none; } .accordion .accordion-header-selected { background: #FBEC88; } .accordion .accordion-header-selected .panel-title { color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-body th, .calendar-menu-month { color: #4d4d4d; } .calendar-day { color: #000000; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #95B8E7; } .calendar { border-color: #95B8E7; } .calendar-header { background: #E0ECFF; } .calendar-body, .calendar-menu { background: #ffffff; } .calendar-body th { background: #F4F4F4; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #eaf2ff; color: #000000; } .calendar-hover { border: 1px solid #b7d2ff; padding: 0; } .calendar-selected { background-color: #FBEC88; color: #000000; border: 1px solid #E2C608; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #ffffff; } .combo { border-color: #95B8E7; background-color: #ffffff; } .combo-arrow { background-color: #E0ECFF; } .combo-arrow-hover { background-color: #eaf2ff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #eaf2ff; color: #000000; } .combobox-item-selected { background-color: #FBEC88; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #efefef; background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); } .datagrid-cell-rownumber { color: #000000; } .datagrid-resize-proxy { background: #aac5e7; } .datagrid-mask { background: #ccc; } .datagrid-mask-msg { border-color: #95B8E7; } .datagrid-toolbar, .datagrid-pager { background: #F4F4F4; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dddddd; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #000000; } .datagrid-row-alt { background: #fafafa; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #eaf2ff; color: #000000; cursor: default; } .datagrid-row-selected { background: #FBEC88; color: #000000; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #95B8E7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #F4F4F4; } .datebox-current, .datebox-close, .datebox-ok { color: #444; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #F4F4F4; } .dialog-toolbar { border-bottom: 1px solid #dddddd; } .dialog-button { border-top: 1px solid #dddddd; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #eaf2ff; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #95B8E7; } .panel-header { background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .panel-body { background-color: #ffffff; color: #000000; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #0E2D5F; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #ffffff; border-color: #95B8E7; } .accordion .accordion-header { background: #E0ECFF; filter: none; } .accordion .accordion-header-selected { background: #FBEC88; } .accordion .accordion-header-selected .panel-title { color: #000000; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .window-shadow { background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #95B8E7; } .window { background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .window-proxy { border: 1px dashed #95B8E7; } .window-proxy-mask, .window-mask { background: #ccc; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #F4F4F4; } .dialog-toolbar { border-bottom: 1px solid #dddddd; } .dialog-button { border-top: 1px solid #dddddd; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #ffffff; } .combo { border-color: #95B8E7; background-color: #ffffff; } .combo-arrow { background-color: #E0ECFF; } .combo-arrow-hover { background-color: #eaf2ff; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #eaf2ff; color: #000000; } .combobox-item-selected { background-color: #FBEC88; color: #000000; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #aac5e7; } .layout-split-north { border-bottom: 5px solid #E6EEF8; } .layout-split-south { border-top: 5px solid #E6EEF8; } .layout-split-east { border-left: 5px solid #E6EEF8; } .layout-split-west { border-right: 5px solid #E6EEF8; } .layout-expand { background-color: #E0ECFF; } .layout-expand-over { background-color: #E0ECFF; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #eaf2ff; color: #000000; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #ffffff; color: #0E2D5F; background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); } .tabs li a.tabs-inner { color: #0E2D5F; background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .tabs-header, .tabs-tool { background-color: #E0ECFF; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #95B8E7; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #eaf2ff; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #ffffff; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #ffffff; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #ffffff; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #ffffff; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #444; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #eaf2ff; color: #000000; border: 1px solid #b7d2ff; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #444; filter: alpha(opacity=50); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #ddd; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #efefef; background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); } .datagrid-cell-rownumber { color: #000000; } .datagrid-resize-proxy { background: #aac5e7; } .datagrid-mask { background: #ccc; } .datagrid-mask-msg { border-color: #95B8E7; } .datagrid-toolbar, .datagrid-pager { background: #F4F4F4; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dddddd; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #000000; } .datagrid-row-alt { background: #fafafa; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #eaf2ff; color: #000000; cursor: default; } .datagrid-row-selected { background: #FBEC88; color: #000000; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #95B8E7; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dddddd; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #E0ECFF; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dddddd; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #E0ECFF; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #95B8E7; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-body th, .calendar-menu-month { color: #4d4d4d; } .calendar-day { color: #000000; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #95B8E7; } .calendar { border-color: #95B8E7; } .calendar-header { background: #E0ECFF; } .calendar-body, .calendar-menu { background: #ffffff; } .calendar-body th { background: #F4F4F4; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #eaf2ff; color: #000000; } .calendar-hover { border: 1px solid #b7d2ff; padding: 0; } .calendar-selected { background-color: #FBEC88; color: #000000; border: 1px solid #E2C608; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #F4F4F4; } .datebox-current, .datebox-close, .datebox-ok { color: #444; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #95B8E7; } .spinner-arrow { background-color: #E0ECFF; } .spinner-arrow-hover { background-color: #eaf2ff; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .progressbar { border-color: #95B8E7; } .progressbar-text { color: #000000; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #FBEC88; color: #000000; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #95B8E7; background-color: #fff; } .searchbox a.l-btn-plain { background: #E0ECFF; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 5px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #95B8E7; background: #E0ECFF; } .slider-rule span { border-color: #95B8E7; } .slider-rulelabel span { color: #000000; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ccc; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ccc; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #ddd; color: #444; } .menu-content { background: #ffffff; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #b7d2ff; color: #000000; background: #eaf2ff; } .menu-active-disabled { border-color: transparent; background: transparent; color: #444; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #b7d2ff; background-color: #eaf2ff; color: #000000; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #aac5e7; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #b7d2ff; background-color: #eaf2ff; color: #000000; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #95B8E7; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #95B8E7; } .tree-node-hover { background: #eaf2ff; color: #000000; } .tree-node-selected { background: #FBEC88; color: #000000; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #000; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #ffffff; border-color: #95B8E7; color: #000000; } .tooltip-right .tooltip-arrow-outer { border-right-color: #95B8E7; } .tooltip-right .tooltip-arrow { border-right-color: #ffffff; } .tooltip-left .tooltip-arrow-outer { border-left-color: #95B8E7; } .tooltip-left .tooltip-arrow { border-left-color: #ffffff; } .tooltip-top .tooltip-arrow-outer { border-top-color: #95B8E7; } .tooltip-top .tooltip-arrow { border-top-color: #ffffff; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #95B8E7; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #aac5e7; } .layout-split-north { border-bottom: 5px solid #E6EEF8; } .layout-split-south { border-top: 5px solid #E6EEF8; } .layout-split-east { border-left: 5px solid #E6EEF8; } .layout-split-west { border-right: 5px solid #E6EEF8; } .layout-expand { background-color: #E0ECFF; } .layout-expand-over { background-color: #E0ECFF; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #444; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #eaf2ff; color: #000000; border: 1px solid #b7d2ff; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #444; filter: alpha(opacity=50); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #ddd; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ccc; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ccc; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #ddd; color: #444; } .menu-content { background: #ffffff; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #b7d2ff; color: #000000; background: #eaf2ff; } .menu-active-disabled { border-color: transparent; background: transparent; color: #444; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #b7d2ff; background-color: #eaf2ff; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #95B8E7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #95B8E7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #eaf2ff; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #95B8E7; } .panel-header { background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .panel-body { background-color: #ffffff; color: #000000; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #0E2D5F; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .progressbar { border-color: #95B8E7; } .progressbar-text { color: #000000; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #FBEC88; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dddddd; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #E0ECFF; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dddddd; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #E0ECFF; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #95B8E7; background-color: #fff; } .searchbox a.l-btn-plain { background: #E0ECFF; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 5px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #95B8E7; background: #E0ECFF; } .slider-rule span { border-color: #95B8E7; } .slider-rulelabel span { color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #95B8E7; } .spinner-arrow { background-color: #E0ECFF; } .spinner-arrow-hover { background-color: #eaf2ff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #aac5e7; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #b7d2ff; background-color: #eaf2ff; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #E0ECFF url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #eaf2ff; color: #000000; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #ffffff; color: #0E2D5F; background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); } .tabs li a.tabs-inner { color: #0E2D5F; background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .tabs-header, .tabs-tool { background-color: #E0ECFF; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #95B8E7; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #eaf2ff; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #ffffff; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #ffffff; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #ffffff; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #ffffff; border-color: #95B8E7; color: #000000; } .tooltip-right .tooltip-arrow-outer { border-right-color: #95B8E7; } .tooltip-right .tooltip-arrow { border-right-color: #ffffff; } .tooltip-left .tooltip-arrow-outer { border-left-color: #95B8E7; } .tooltip-left .tooltip-arrow { border-left-color: #ffffff; } .tooltip-top .tooltip-arrow-outer { border-top-color: #95B8E7; } .tooltip-top .tooltip-arrow { border-top-color: #ffffff; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #95B8E7; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #95B8E7; } .tree-node-hover { background: #eaf2ff; color: #000000; } .tree-node-selected { background: #FBEC88; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/default/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .window-shadow { background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #95B8E7; } .window { background-color: #E0ECFF; background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); } .window-proxy { border: 1px dashed #95B8E7; } .window-proxy-mask, .window-mask { background: #ccc; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #ffffff; border-color: #D3D3D3; } .accordion .accordion-header { background: #f3f3f3; filter: none; } .accordion .accordion-header-selected { background: #0092DC; } .accordion .accordion-header-selected .panel-title { color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-body th, .calendar-menu-month { color: #4d4d4d; } .calendar-day { color: #000000; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #D3D3D3; } .calendar { border-color: #D3D3D3; } .calendar-header { background: #f3f3f3; } .calendar-body, .calendar-menu { background: #ffffff; } .calendar-body th { background: #fafafa; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #e2e2e2; color: #000000; } .calendar-hover { border: 1px solid #ccc; padding: 0; } .calendar-selected { background-color: #0092DC; color: #fff; border: 1px solid #0070a9; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #ffffff; } .combo { border-color: #D3D3D3; background-color: #ffffff; } .combo-arrow { background-color: #f3f3f3; } .combo-arrow-hover { background-color: #e2e2e2; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #e2e2e2; color: #000000; } .combobox-item-selected { background-color: #0092DC; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #fafafa; background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); } .datagrid-cell-rownumber { color: #000000; } .datagrid-resize-proxy { background: #bfbfbf; } .datagrid-mask { background: #ccc; } .datagrid-mask-msg { border-color: #D3D3D3; } .datagrid-toolbar, .datagrid-pager { background: #fafafa; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #ddd; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #000000; } .datagrid-row-alt { background: #fafafa; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #e2e2e2; color: #000000; cursor: default; } .datagrid-row-selected { background: #0092DC; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #D3D3D3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #fafafa; } .datebox-current, .datebox-close, .datebox-ok { color: #444; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #fafafa; } .dialog-toolbar { border-bottom: 1px solid #ddd; } .dialog-button { border-top: 1px solid #ddd; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #e2e2e2; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #D3D3D3; } .panel-header { background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .panel-body { background-color: #ffffff; color: #000000; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #575765; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #ffffff; border-color: #D3D3D3; } .accordion .accordion-header { background: #f3f3f3; filter: none; } .accordion .accordion-header-selected { background: #0092DC; } .accordion .accordion-header-selected .panel-title { color: #fff; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .window-shadow { background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #D3D3D3; } .window { background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .window-proxy { border: 1px dashed #D3D3D3; } .window-proxy-mask, .window-mask { background: #ccc; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #fafafa; } .dialog-toolbar { border-bottom: 1px solid #ddd; } .dialog-button { border-top: 1px solid #ddd; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #ffffff; } .combo { border-color: #D3D3D3; background-color: #ffffff; } .combo-arrow { background-color: #f3f3f3; } .combo-arrow-hover { background-color: #e2e2e2; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #e2e2e2; color: #000000; } .combobox-item-selected { background-color: #0092DC; color: #fff; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #bfbfbf; } .layout-split-north { border-bottom: 5px solid #efefef; } .layout-split-south { border-top: 5px solid #efefef; } .layout-split-east { border-left: 5px solid #efefef; } .layout-split-west { border-right: 5px solid #efefef; } .layout-expand { background-color: #f3f3f3; } .layout-expand-over { background-color: #f3f3f3; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #e2e2e2; color: #000000; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #ffffff; color: #575765; background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); } .tabs li a.tabs-inner { color: #575765; background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .tabs-header, .tabs-tool { background-color: #f3f3f3; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #D3D3D3; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #e2e2e2; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #ffffff; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #ffffff; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #ffffff; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #ffffff; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #444; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #e2e2e2; color: #000000; border: 1px solid #ccc; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #444; filter: alpha(opacity=50); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #ddd; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #fafafa; background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); } .datagrid-cell-rownumber { color: #000000; } .datagrid-resize-proxy { background: #bfbfbf; } .datagrid-mask { background: #ccc; } .datagrid-mask-msg { border-color: #D3D3D3; } .datagrid-toolbar, .datagrid-pager { background: #fafafa; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #ddd; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #000000; } .datagrid-row-alt { background: #fafafa; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #e2e2e2; color: #000000; cursor: default; } .datagrid-row-selected { background: #0092DC; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #D3D3D3; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #ddd; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f3f3f3; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #ddd; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f3f3f3; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #D3D3D3; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .calendar-body th, .calendar-menu-month { color: #4d4d4d; } .calendar-day { color: #000000; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #D3D3D3; } .calendar { border-color: #D3D3D3; } .calendar-header { background: #f3f3f3; } .calendar-body, .calendar-menu { background: #ffffff; } .calendar-body th { background: #fafafa; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #e2e2e2; color: #000000; } .calendar-hover { border: 1px solid #ccc; padding: 0; } .calendar-selected { background-color: #0092DC; color: #fff; border: 1px solid #0070a9; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #fafafa; } .datebox-current, .datebox-close, .datebox-ok { color: #444; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #D3D3D3; } .spinner-arrow { background-color: #f3f3f3; } .spinner-arrow-hover { background-color: #e2e2e2; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .progressbar { border-color: #D3D3D3; } .progressbar-text { color: #000000; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #0092DC; color: #fff; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #D3D3D3; background-color: #fff; } .searchbox a.l-btn-plain { background: #f3f3f3; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 5px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #D3D3D3; background: #f3f3f3; } .slider-rule span { border-color: #D3D3D3; } .slider-rulelabel span { color: #000000; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ccc; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ccc; border-bottom: 1px solid #fff; } .menu { background-color: #f3f3f3; border-color: #D3D3D3; color: #444; } .menu-content { background: #ffffff; } .menu-item { border-color: transparent; _border-color: #f3f3f3; } .menu-active { border-color: #ccc; color: #000000; background: #e2e2e2; } .menu-active-disabled { border-color: transparent; background: transparent; color: #444; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #ccc; background-color: #e2e2e2; color: #000000; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #bfbfbf; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #ccc; background-color: #e2e2e2; color: #000000; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #D3D3D3; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #D3D3D3; } .tree-node-hover { background: #e2e2e2; color: #000000; } .tree-node-selected { background: #0092DC; color: #fff; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #000; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #ffffff; border-color: #D3D3D3; color: #000000; } .tooltip-right .tooltip-arrow-outer { border-right-color: #D3D3D3; } .tooltip-right .tooltip-arrow { border-right-color: #ffffff; } .tooltip-left .tooltip-arrow-outer { border-left-color: #D3D3D3; } .tooltip-left .tooltip-arrow { border-left-color: #ffffff; } .tooltip-top .tooltip-arrow-outer { border-top-color: #D3D3D3; } .tooltip-top .tooltip-arrow { border-top-color: #ffffff; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #D3D3D3; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #bfbfbf; } .layout-split-north { border-bottom: 5px solid #efefef; } .layout-split-south { border-top: 5px solid #efefef; } .layout-split-east { border-left: 5px solid #efefef; } .layout-split-west { border-right: 5px solid #efefef; } .layout-expand { background-color: #f3f3f3; } .layout-expand-over { background-color: #f3f3f3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #444; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #e2e2e2; color: #000000; border: 1px solid #ccc; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #444; filter: alpha(opacity=50); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #ddd; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ccc; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ccc; border-bottom: 1px solid #fff; } .menu { background-color: #f3f3f3; border-color: #D3D3D3; color: #444; } .menu-content { background: #ffffff; } .menu-item { border-color: transparent; _border-color: #f3f3f3; } .menu-active { border-color: #ccc; color: #000000; background: #e2e2e2; } .menu-active-disabled { border-color: transparent; background: transparent; color: #444; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #ccc; background-color: #e2e2e2; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #D3D3D3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #D3D3D3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #e2e2e2; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #D3D3D3; } .panel-header { background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .panel-body { background-color: #ffffff; color: #000000; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #575765; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .progressbar { border-color: #D3D3D3; } .progressbar-text { color: #000000; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #0092DC; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #ddd; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f3f3f3; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #ddd; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f3f3f3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #D3D3D3; background-color: #fff; } .searchbox a.l-btn-plain { background: #f3f3f3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 5px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #D3D3D3; background: #f3f3f3; } .slider-rule span { border-color: #D3D3D3; } .slider-rulelabel span { color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #D3D3D3; } .spinner-arrow { background-color: #f3f3f3; } .spinner-arrow-hover { background-color: #e2e2e2; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #bfbfbf; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #ccc; background-color: #e2e2e2; color: #000000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #e2e2e2; color: #000000; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #ffffff; color: #575765; background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-y; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); } .tabs li a.tabs-inner { color: #575765; background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .tabs-header, .tabs-tool { background-color: #f3f3f3; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #D3D3D3; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #e2e2e2; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #ffffff; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #ffffff; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #ffffff; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #ffffff; border-color: #D3D3D3; color: #000000; } .tooltip-right .tooltip-arrow-outer { border-right-color: #D3D3D3; } .tooltip-right .tooltip-arrow { border-right-color: #ffffff; } .tooltip-left .tooltip-arrow-outer { border-left-color: #D3D3D3; } .tooltip-left .tooltip-arrow { border-left-color: #ffffff; } .tooltip-top .tooltip-arrow-outer { border-top-color: #D3D3D3; } .tooltip-top .tooltip-arrow { border-top-color: #ffffff; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #D3D3D3; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #ffffff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #D3D3D3; } .tree-node-hover { background: #e2e2e2; color: #000000; } .tree-node-selected { background: #0092DC; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #000; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/gray/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .window-shadow { background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #D3D3D3; } .window { background-color: #f3f3f3; background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); } .window-proxy { border: 1px dashed #D3D3D3; } .window-proxy-mask, .window-mask { background: #ccc; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/icon.css ================================================ .icon-blank{ background:url('icons/blank.gif') no-repeat center center; } .icon-add{ background:url('icons/edit_add.png') no-repeat center center; } .icon-edit{ background:url('icons/pencil.png') no-repeat center center; } .icon-remove{ background:url('icons/edit_remove.png') no-repeat center center; } .icon-save{ background:url('icons/filesave.png') no-repeat center center; } .icon-cut{ background:url('icons/cut.png') no-repeat center center; } .icon-ok{ background:url('icons/ok.png') no-repeat center center; } .icon-no{ background:url('icons/no.png') no-repeat center center; } .icon-cancel{ background:url('icons/cancel.png') no-repeat center center; } .icon-reload{ background:url('icons/reload.png') no-repeat center center; } .icon-search{ background:url('icons/search.png') no-repeat center center; } .icon-print{ background:url('icons/print.png') no-repeat center center; } .icon-help{ background:url('icons/help.png') no-repeat center center; } .icon-undo{ background:url('icons/undo.png') no-repeat center center; } .icon-redo{ background:url('icons/redo.png') no-repeat center center; } .icon-back{ background:url('icons/back.png') no-repeat center center; } .icon-sum{ background:url('icons/sum.png') no-repeat center center; } .icon-tip{ background:url('icons/tip.png') no-repeat center center; } .icon-mini-add{ background:url('icons/mini_add.png') no-repeat center center; } .icon-mini-edit{ background:url('icons/mini_edit.png') no-repeat center center; } .icon-mini-refresh{ background:url('icons/mini_refresh.png') no-repeat center center; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #c3d9e0; } .accordion .accordion-header { background: #daeef5; filter: none; } .accordion .accordion-header-selected { background: #6caef5; } .accordion .accordion-header-selected .panel-title { color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #c3d9e0; } .calendar { border-color: #c3d9e0; } .calendar-header { background: #daeef5; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #9cc8f7; color: #404040; } .calendar-hover { border: 1px solid #9cc8f7; padding: 0; } .calendar-selected { background-color: #6caef5; color: #fff; border: 1px solid #9cc8f7; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #c3d9e0; background-color: #fafafa; } .combo-arrow { background-color: #daeef5; } .combo-arrow-hover { background-color: #9cc8f7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #9cc8f7; color: #404040; } .combobox-item-selected { background-color: #6caef5; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #1a7bc9; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #c3d9e0; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #9cc8f7; color: #404040; cursor: default; } .datagrid-row-selected { background: #6caef5; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #c3d9e0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #9cc8f7; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #c3d9e0; } .panel-header { background-color: #daeef5; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #c3d9e0; } .accordion .accordion-header { background: #daeef5; filter: none; } .accordion .accordion-header-selected { background: #6caef5; } .accordion .accordion-header-selected .panel-title { color: #fff; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #c3d9e0; } .window { background-color: #daeef5; } .window-proxy { border: 1px dashed #c3d9e0; } .window-proxy-mask, .window-mask { background: #eee; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #c3d9e0; background-color: #fafafa; } .combo-arrow { background-color: #daeef5; } .combo-arrow-hover { background-color: #9cc8f7; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #9cc8f7; color: #404040; } .combobox-item-selected { background-color: #6caef5; color: #fff; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #1a7bc9; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #daeef5; } .layout-expand-over { background-color: #daeef5; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #daeef5 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #daeef5 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #9cc8f7; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #daeef5; } .tabs-header, .tabs-tool { background-color: #daeef5; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #c3d9e0; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #9cc8f7; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #1a7bc9; background-repeat: repeat-x; border: 1px solid #1a7bc9; background: -webkit-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -moz-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -o-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: linear-gradient(to bottom,#1a7bc9 0,#1a7bc9 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #9cc8f7; color: #404040; border: 1px solid #9cc8f7; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #9cc8f7; color: #404040; border: 1px solid #9cc8f7; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #1a7bc9; color: #404040; background: -webkit-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -moz-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -o-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: linear-gradient(to bottom,#1a7bc9 0,#1a7bc9 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #daeef5; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #daeef5; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #1a7bc9; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #c3d9e0; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #9cc8f7; color: #404040; cursor: default; } .datagrid-row-selected { background: #6caef5; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #c3d9e0; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #daeef5; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #daeef5; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #c3d9e0; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #c3d9e0; } .calendar { border-color: #c3d9e0; } .calendar-header { background: #daeef5; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #9cc8f7; color: #404040; } .calendar-hover { border: 1px solid #9cc8f7; padding: 0; } .calendar-selected { background-color: #6caef5; color: #fff; border: 1px solid #9cc8f7; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #c3d9e0; } .spinner-arrow { background-color: #daeef5; } .spinner-arrow-hover { background-color: #9cc8f7; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #c3d9e0; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #6caef5; color: #fff; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #c3d9e0; background-color: #fff; } .searchbox a.l-btn-plain { background: #daeef5; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #c3d9e0; background: #daeef5; } .slider-rule span { border-color: #c3d9e0; } .slider-rulelabel span { color: #404040; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #c3d9e0; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #9cc8f7; color: #404040; background: #9cc8f7; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #9cc8f7; background-color: #9cc8f7; color: #404040; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #1a7bc9; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #9cc8f7; background-color: #9cc8f7; color: #404040; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #c3d9e0; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #c3d9e0; } .tree-node-hover { background: #9cc8f7; color: #404040; } .tree-node-selected { background: #6caef5; color: #fff; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #c3d9e0; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #c3d9e0; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #c3d9e0; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #c3d9e0; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #c3d9e0; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } a.l-btn, a:hover.l-btn-disabled { color: #fff; } a.l-btn-plain, a.l-btn-selected { color: #404040; } .window { background-color: #6caef5; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #1a7bc9; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #daeef5; } .layout-expand-over { background-color: #daeef5; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #1a7bc9; background-repeat: repeat-x; border: 1px solid #1a7bc9; background: -webkit-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -moz-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -o-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: linear-gradient(to bottom,#1a7bc9 0,#1a7bc9 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #9cc8f7; color: #404040; border: 1px solid #9cc8f7; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #9cc8f7; color: #404040; border: 1px solid #9cc8f7; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #1a7bc9; color: #404040; background: -webkit-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -moz-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: -o-linear-gradient(top,#1a7bc9 0,#1a7bc9 100%); background: linear-gradient(to bottom,#1a7bc9 0,#1a7bc9 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a7bc9,endColorstr=#1a7bc9,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #daeef5; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #daeef5; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #c3d9e0; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #9cc8f7; color: #404040; background: #9cc8f7; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #9cc8f7; background-color: #9cc8f7; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #c3d9e0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #c3d9e0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #9cc8f7; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #c3d9e0; } .panel-header { background-color: #daeef5; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #c3d9e0; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #6caef5; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #daeef5; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #daeef5; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #c3d9e0; background-color: #fff; } .searchbox a.l-btn-plain { background: #daeef5; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #c3d9e0; background: #daeef5; } .slider-rule span { border-color: #c3d9e0; } .slider-rulelabel span { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #c3d9e0; } .spinner-arrow { background-color: #daeef5; } .spinner-arrow-hover { background-color: #9cc8f7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #1a7bc9; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #9cc8f7; background-color: #9cc8f7; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #daeef5 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #daeef5 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #9cc8f7; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #daeef5; } .tabs-header, .tabs-tool { background-color: #daeef5; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #c3d9e0; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #9cc8f7; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #c3d9e0; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #c3d9e0; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #c3d9e0; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #c3d9e0; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #c3d9e0; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #c3d9e0; } .tree-node-hover { background: #9cc8f7; color: #404040; } .tree-node-selected { background: #6caef5; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-blue/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #c3d9e0; } .window { background-color: #daeef5; } .window-proxy { border: 1px dashed #c3d9e0; } .window-proxy-mask, .window-mask { background: #eee; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #abafb8; } .accordion .accordion-header { background: #c7ccd1; filter: none; } .accordion .accordion-header-selected { background: #84909c; } .accordion .accordion-header-selected .panel-title { color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #abafb8; } .calendar { border-color: #abafb8; } .calendar-header { background: #c7ccd1; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #E6E6E6; color: #404040; } .calendar-hover { border: 1px solid #E6E6E6; padding: 0; } .calendar-selected { background-color: #84909c; color: #fff; border: 1px solid #84909c; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #abafb8; background-color: #fafafa; } .combo-arrow { background-color: #c7ccd1; } .combo-arrow-hover { background-color: #E6E6E6; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #E6E6E6; color: #404040; } .combobox-item-selected { background-color: #84909c; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #84909c; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #abafb8; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #E6E6E6; color: #404040; cursor: default; } .datagrid-row-selected { background: #84909c; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #abafb8; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #E6E6E6; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #abafb8; } .panel-header { background-color: #c7ccd1; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #abafb8; } .accordion .accordion-header { background: #c7ccd1; filter: none; } .accordion .accordion-header-selected { background: #84909c; } .accordion .accordion-header-selected .panel-title { color: #fff; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #abafb8; } .window { background-color: #c7ccd1; } .window-proxy { border: 1px dashed #abafb8; } .window-proxy-mask, .window-mask { background: #eee; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #abafb8; background-color: #fafafa; } .combo-arrow { background-color: #c7ccd1; } .combo-arrow-hover { background-color: #E6E6E6; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #E6E6E6; color: #404040; } .combobox-item-selected { background-color: #84909c; color: #fff; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #84909c; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #c7ccd1; } .layout-expand-over { background-color: #c7ccd1; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #c7ccd1 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #c7ccd1 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #E6E6E6; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #c7ccd1; } .tabs-header, .tabs-tool { background-color: #c7ccd1; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #abafb8; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #E6E6E6; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #84909c; background-repeat: repeat-x; border: 1px solid #84909c; background: -webkit-linear-gradient(top,#84909c 0,#84909c 100%); background: -moz-linear-gradient(top,#84909c 0,#84909c 100%); background: -o-linear-gradient(top,#84909c 0,#84909c 100%); background: linear-gradient(to bottom,#84909c 0,#84909c 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #E6E6E6; color: #404040; border: 1px solid #E6E6E6; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #E6E6E6; color: #404040; border: 1px solid #E6E6E6; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #84909c; color: #404040; background: -webkit-linear-gradient(top,#84909c 0,#84909c 100%); background: -moz-linear-gradient(top,#84909c 0,#84909c 100%); background: -o-linear-gradient(top,#84909c 0,#84909c 100%); background: linear-gradient(to bottom,#84909c 0,#84909c 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #c7ccd1; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #c7ccd1; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #84909c; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #abafb8; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #E6E6E6; color: #404040; cursor: default; } .datagrid-row-selected { background: #84909c; color: #fff; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #abafb8; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #c7ccd1; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #c7ccd1; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #abafb8; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #abafb8; } .calendar { border-color: #abafb8; } .calendar-header { background: #c7ccd1; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #E6E6E6; color: #404040; } .calendar-hover { border: 1px solid #E6E6E6; padding: 0; } .calendar-selected { background-color: #84909c; color: #fff; border: 1px solid #84909c; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #abafb8; } .spinner-arrow { background-color: #c7ccd1; } .spinner-arrow-hover { background-color: #E6E6E6; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #abafb8; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #84909c; color: #fff; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #abafb8; background-color: #fff; } .searchbox a.l-btn-plain { background: #c7ccd1; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #abafb8; background: #c7ccd1; } .slider-rule span { border-color: #abafb8; } .slider-rulelabel span { color: #404040; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #abafb8; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #E6E6E6; color: #404040; background: #E6E6E6; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #E6E6E6; background-color: #E6E6E6; color: #404040; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #84909c; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #E6E6E6; background-color: #E6E6E6; color: #404040; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #abafb8; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #abafb8; } .tree-node-hover { background: #E6E6E6; color: #404040; } .tree-node-selected { background: #84909c; color: #fff; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #abafb8; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #abafb8; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #abafb8; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #abafb8; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #abafb8; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } a.l-btn, a:hover.l-btn-disabled { color: #fff; } a.l-btn-plain, a.l-btn-selected { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #84909c; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #c7ccd1; } .layout-expand-over { background-color: #c7ccd1; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #84909c; background-repeat: repeat-x; border: 1px solid #84909c; background: -webkit-linear-gradient(top,#84909c 0,#84909c 100%); background: -moz-linear-gradient(top,#84909c 0,#84909c 100%); background: -o-linear-gradient(top,#84909c 0,#84909c 100%); background: linear-gradient(to bottom,#84909c 0,#84909c 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #E6E6E6; color: #404040; border: 1px solid #E6E6E6; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #E6E6E6; color: #404040; border: 1px solid #E6E6E6; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #84909c; color: #404040; background: -webkit-linear-gradient(top,#84909c 0,#84909c 100%); background: -moz-linear-gradient(top,#84909c 0,#84909c 100%); background: -o-linear-gradient(top,#84909c 0,#84909c 100%); background: linear-gradient(to bottom,#84909c 0,#84909c 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#84909c,endColorstr=#84909c,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #c7ccd1; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #c7ccd1; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #abafb8; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #E6E6E6; color: #404040; background: #E6E6E6; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #E6E6E6; background-color: #E6E6E6; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #abafb8; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #abafb8; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #E6E6E6; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #abafb8; } .panel-header { background-color: #c7ccd1; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #abafb8; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #84909c; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #c7ccd1; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #c7ccd1; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #abafb8; background-color: #fff; } .searchbox a.l-btn-plain { background: #c7ccd1; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #abafb8; background: #c7ccd1; } .slider-rule span { border-color: #abafb8; } .slider-rulelabel span { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #abafb8; } .spinner-arrow { background-color: #c7ccd1; } .spinner-arrow-hover { background-color: #E6E6E6; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #84909c; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #E6E6E6; background-color: #E6E6E6; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #c7ccd1 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #c7ccd1 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #E6E6E6; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #c7ccd1; } .tabs-header, .tabs-tool { background-color: #c7ccd1; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #abafb8; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #E6E6E6; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #abafb8; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #abafb8; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #abafb8; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #abafb8; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #abafb8; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #abafb8; } .tree-node-hover { background: #E6E6E6; color: #404040; } .tree-node-selected { background: #84909c; color: #fff; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-gray/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #abafb8; } .window { background-color: #c7ccd1; } .window-proxy { border: 1px dashed #abafb8; } .window-proxy-mask, .window-mask { background: #eee; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #b1c242; } .accordion .accordion-header { background: #e5f0c9; filter: none; } .accordion .accordion-header-selected { background: #c8d47b; } .accordion .accordion-header-selected .panel-title { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #b1c242; } .calendar { border-color: #b1c242; } .calendar-header { background: #e5f0c9; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #E0F892; color: #404040; } .calendar-hover { border: 1px solid #E0F892; padding: 0; } .calendar-selected { background-color: #c8d47b; color: #404040; border: 1px solid #c8d47b; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #b1c242; background-color: #fafafa; } .combo-arrow { background-color: #e5f0c9; } .combo-arrow-hover { background-color: #E0F892; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #E0F892; color: #404040; } .combobox-item-selected { background-color: #c8d47b; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #859416; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #b1c242; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #E0F892; color: #404040; cursor: default; } .datagrid-row-selected { background: #c8d47b; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #b1c242; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #E0F892; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #b1c242; } .panel-header { background-color: #e5f0c9; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #b1c242; } .accordion .accordion-header { background: #e5f0c9; filter: none; } .accordion .accordion-header-selected { background: #c8d47b; } .accordion .accordion-header-selected .panel-title { color: #404040; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #b1c242; } .window { background-color: #e5f0c9; } .window-proxy { border: 1px dashed #b1c242; } .window-proxy-mask, .window-mask { background: #eee; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #b1c242; background-color: #fafafa; } .combo-arrow { background-color: #e5f0c9; } .combo-arrow-hover { background-color: #E0F892; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #E0F892; color: #404040; } .combobox-item-selected { background-color: #c8d47b; color: #404040; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #859416; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #e5f0c9; } .layout-expand-over { background-color: #e5f0c9; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #e5f0c9 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #e5f0c9 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #E0F892; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #e5f0c9; } .tabs-header, .tabs-tool { background-color: #e5f0c9; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #b1c242; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #E0F892; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #9ba842; background-repeat: repeat-x; border: 1px solid #9ba842; background: -webkit-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -moz-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -o-linear-gradient(top,#9ba842 0,#9ba842 100%); background: linear-gradient(to bottom,#9ba842 0,#9ba842 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #E0F892; color: #404040; border: 1px solid #E0F892; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #E0F892; color: #404040; border: 1px solid #E0F892; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #9ba842; color: #404040; background: -webkit-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -moz-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -o-linear-gradient(top,#9ba842 0,#9ba842 100%); background: linear-gradient(to bottom,#9ba842 0,#9ba842 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #e5f0c9; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #e5f0c9; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #859416; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #b1c242; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #E0F892; color: #404040; cursor: default; } .datagrid-row-selected { background: #c8d47b; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #b1c242; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #e5f0c9; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #e5f0c9; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #b1c242; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #b1c242; } .calendar { border-color: #b1c242; } .calendar-header { background: #e5f0c9; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #E0F892; color: #404040; } .calendar-hover { border: 1px solid #E0F892; padding: 0; } .calendar-selected { background-color: #c8d47b; color: #404040; border: 1px solid #c8d47b; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #b1c242; } .spinner-arrow { background-color: #e5f0c9; } .spinner-arrow-hover { background-color: #E0F892; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #b1c242; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #c8d47b; color: #404040; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #b1c242; background-color: #fff; } .searchbox a.l-btn-plain { background: #e5f0c9; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #b1c242; background: #e5f0c9; } .slider-rule span { border-color: #b1c242; } .slider-rulelabel span { color: #404040; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #b1c242; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #E0F892; color: #404040; background: #E0F892; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #E0F892; background-color: #E0F892; color: #404040; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #859416; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #E0F892; background-color: #E0F892; color: #404040; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #b1c242; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #b1c242; } .tree-node-hover { background: #E0F892; color: #404040; } .tree-node-selected { background: #c8d47b; color: #404040; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #b1c242; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #b1c242; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #b1c242; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #b1c242; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #b1c242; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } a.l-btn, a:hover.l-btn-disabled { color: #fff; } a.l-btn-plain, a.l-btn-selected { color: #404040; } .window { background-color: #b1c242; } .tabs li.tabs-selected a.tabs-inner { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #859416; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #e5f0c9; } .layout-expand-over { background-color: #e5f0c9; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #9ba842; background-repeat: repeat-x; border: 1px solid #9ba842; background: -webkit-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -moz-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -o-linear-gradient(top,#9ba842 0,#9ba842 100%); background: linear-gradient(to bottom,#9ba842 0,#9ba842 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #E0F892; color: #404040; border: 1px solid #E0F892; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #E0F892; color: #404040; border: 1px solid #E0F892; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #9ba842; color: #404040; background: -webkit-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -moz-linear-gradient(top,#9ba842 0,#9ba842 100%); background: -o-linear-gradient(top,#9ba842 0,#9ba842 100%); background: linear-gradient(to bottom,#9ba842 0,#9ba842 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#9ba842,endColorstr=#9ba842,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #e5f0c9; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #e5f0c9; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #b1c242; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #E0F892; color: #404040; background: #E0F892; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #E0F892; background-color: #E0F892; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #b1c242; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #b1c242; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #E0F892; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #b1c242; } .panel-header { background-color: #e5f0c9; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #b1c242; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #c8d47b; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #e5f0c9; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #e5f0c9; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #b1c242; background-color: #fff; } .searchbox a.l-btn-plain { background: #e5f0c9; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #b1c242; background: #e5f0c9; } .slider-rule span { border-color: #b1c242; } .slider-rulelabel span { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #b1c242; } .spinner-arrow { background-color: #e5f0c9; } .spinner-arrow-hover { background-color: #E0F892; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #859416; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #E0F892; background-color: #E0F892; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #e5f0c9 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #e5f0c9 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #E0F892; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #e5f0c9; } .tabs-header, .tabs-tool { background-color: #e5f0c9; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #b1c242; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #E0F892; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #b1c242; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #b1c242; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #b1c242; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #b1c242; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #b1c242; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #b1c242; } .tree-node-hover { background: #E0F892; color: #404040; } .tree-node-selected { background: #c8d47b; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-green/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #b1c242; } .window { background-color: #e5f0c9; } .window-proxy { border: 1px dashed #b1c242; } .window-proxy-mask, .window-mask { background: #eee; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #d4a375; } .accordion .accordion-header { background: #f0e3bf; filter: none; } .accordion .accordion-header-selected { background: #f7cc8f; } .accordion .accordion-header-selected .panel-title { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #d4a375; } .calendar { border-color: #d4a375; } .calendar-header { background: #f0e3bf; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #fff7d6; color: #404040; } .calendar-hover { border: 1px solid #fff7d6; padding: 0; } .calendar-selected { background-color: #f7cc8f; color: #404040; border: 1px solid #f7cc8f; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #d4a375; background-color: #fafafa; } .combo-arrow { background-color: #f0e3bf; } .combo-arrow-hover { background-color: #fff7d6; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #fff7d6; color: #404040; } .combobox-item-selected { background-color: #f7cc8f; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #de8033; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #d4a375; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #fff7d6; color: #404040; cursor: default; } .datagrid-row-selected { background: #f7cc8f; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #d4a375; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #fff7d6; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #d4a375; } .panel-header { background-color: #f0e3bf; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #d4a375; } .accordion .accordion-header { background: #f0e3bf; filter: none; } .accordion .accordion-header-selected { background: #f7cc8f; } .accordion .accordion-header-selected .panel-title { color: #404040; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #d4a375; } .window { background-color: #f0e3bf; } .window-proxy { border: 1px dashed #d4a375; } .window-proxy-mask, .window-mask { background: #eee; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #d4a375; background-color: #fafafa; } .combo-arrow { background-color: #f0e3bf; } .combo-arrow-hover { background-color: #fff7d6; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #fff7d6; color: #404040; } .combobox-item-selected { background-color: #f7cc8f; color: #404040; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #de8033; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #f0e3bf; } .layout-expand-over { background-color: #f0e3bf; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f0e3bf url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f0e3bf url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #fff7d6; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #f0e3bf; } .tabs-header, .tabs-tool { background-color: #f0e3bf; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #d4a375; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #fff7d6; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #de8033; background-repeat: repeat-x; border: 1px solid #de8033; background: -webkit-linear-gradient(top,#de8033 0,#de8033 100%); background: -moz-linear-gradient(top,#de8033 0,#de8033 100%); background: -o-linear-gradient(top,#de8033 0,#de8033 100%); background: linear-gradient(to bottom,#de8033 0,#de8033 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #fff7d6; color: #404040; border: 1px solid #fff7d6; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #fff7d6; color: #404040; border: 1px solid #fff7d6; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #de8033; color: #404040; background: -webkit-linear-gradient(top,#de8033 0,#de8033 100%); background: -moz-linear-gradient(top,#de8033 0,#de8033 100%); background: -o-linear-gradient(top,#de8033 0,#de8033 100%); background: linear-gradient(to bottom,#de8033 0,#de8033 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #f0e3bf; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #f0e3bf; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #de8033; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #d4a375; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #fff7d6; color: #404040; cursor: default; } .datagrid-row-selected { background: #f7cc8f; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #d4a375; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f0e3bf; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f0e3bf; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #d4a375; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #d4a375; } .calendar { border-color: #d4a375; } .calendar-header { background: #f0e3bf; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #fff7d6; color: #404040; } .calendar-hover { border: 1px solid #fff7d6; padding: 0; } .calendar-selected { background-color: #f7cc8f; color: #404040; border: 1px solid #f7cc8f; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #d4a375; } .spinner-arrow { background-color: #f0e3bf; } .spinner-arrow-hover { background-color: #fff7d6; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #d4a375; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #f7cc8f; color: #404040; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #d4a375; background-color: #fff; } .searchbox a.l-btn-plain { background: #f0e3bf; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #d4a375; background: #f0e3bf; } .slider-rule span { border-color: #d4a375; } .slider-rulelabel span { color: #404040; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #d4a375; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #fff7d6; color: #404040; background: #fff7d6; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #fff7d6; background-color: #fff7d6; color: #404040; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #de8033; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #fff7d6; background-color: #fff7d6; color: #404040; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #d4a375; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #d4a375; } .tree-node-hover { background: #fff7d6; color: #404040; } .tree-node-selected { background: #f7cc8f; color: #404040; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #d4a375; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #d4a375; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #d4a375; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #d4a375; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #d4a375; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } a.l-btn, a:hover.l-btn-disabled { color: #fff; } a.l-btn-plain, a.l-btn-selected { color: #404040; } .window { background-color: #de8033; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #de8033; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #f0e3bf; } .layout-expand-over { background-color: #f0e3bf; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #de8033; background-repeat: repeat-x; border: 1px solid #de8033; background: -webkit-linear-gradient(top,#de8033 0,#de8033 100%); background: -moz-linear-gradient(top,#de8033 0,#de8033 100%); background: -o-linear-gradient(top,#de8033 0,#de8033 100%); background: linear-gradient(to bottom,#de8033 0,#de8033 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #fff7d6; color: #404040; border: 1px solid #fff7d6; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #fff7d6; color: #404040; border: 1px solid #fff7d6; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #de8033; color: #404040; background: -webkit-linear-gradient(top,#de8033 0,#de8033 100%); background: -moz-linear-gradient(top,#de8033 0,#de8033 100%); background: -o-linear-gradient(top,#de8033 0,#de8033 100%); background: linear-gradient(to bottom,#de8033 0,#de8033 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#de8033,endColorstr=#de8033,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #f0e3bf; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #f0e3bf; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #d4a375; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #fff7d6; color: #404040; background: #fff7d6; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #fff7d6; background-color: #fff7d6; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #d4a375; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #d4a375; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #fff7d6; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #d4a375; } .panel-header { background-color: #f0e3bf; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #d4a375; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #f7cc8f; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f0e3bf; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f0e3bf; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #d4a375; background-color: #fff; } .searchbox a.l-btn-plain { background: #f0e3bf; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #d4a375; background: #f0e3bf; } .slider-rule span { border-color: #d4a375; } .slider-rulelabel span { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #d4a375; } .spinner-arrow { background-color: #f0e3bf; } .spinner-arrow-hover { background-color: #fff7d6; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #de8033; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #fff7d6; background-color: #fff7d6; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f0e3bf url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f0e3bf url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #fff7d6; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #f0e3bf; } .tabs-header, .tabs-tool { background-color: #f0e3bf; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #d4a375; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #fff7d6; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #d4a375; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #d4a375; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #d4a375; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #d4a375; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #d4a375; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #d4a375; } .tree-node-hover { background: #fff7d6; color: #404040; } .tree-node-selected { background: #f7cc8f; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-orange/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #d4a375; } .window { background-color: #f0e3bf; } .window-proxy { border: 1px dashed #d4a375; } .window-proxy-mask, .window-mask { background: #eee; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/accordion.css ================================================ .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #f6c1bc; } .accordion .accordion-header { background: #f0e1e3; filter: none; } .accordion .accordion-header-selected { background: #f09090; } .accordion .accordion-header-selected .panel-title { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/calendar.css ================================================ .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #f6c1bc; } .calendar { border-color: #f6c1bc; } .calendar-header { background: #f0e1e3; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #fff0e7; color: #404040; } .calendar-hover { border: 1px solid #fff0e7; padding: 0; } .calendar-selected { background-color: #f09090; color: #404040; border: 1px solid #f09090; padding: 0; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/combo.css ================================================ .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #f6c1bc; background-color: #fafafa; } .combo-arrow { background-color: #f0e1e3; } .combo-arrow-hover { background-color: #fff0e7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/combobox.css ================================================ .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #fff0e7; color: #404040; } .combobox-item-selected { background-color: #f09090; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/datagrid.css ================================================ .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #c75252; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #f6c1bc; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #fff0e7; color: #404040; cursor: default; } .datagrid-row-selected { background: #f09090; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #f6c1bc; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/datebox.css ================================================ .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/dialog.css ================================================ .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/easyui.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #fff0e7; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #f6c1bc; } .panel-header { background-color: #f0e1e3; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { background: url('images/accordion_arrows.png') no-repeat 0 0; } .accordion-expand { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .accordion { background: #fafafa; border-color: #f6c1bc; } .accordion .accordion-header { background: #f0e1e3; filter: none; } .accordion .accordion-header-selected { background: #f09090; } .accordion .accordion-header-selected .panel-title { color: #404040; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #f6c1bc; } .window { background-color: #f0e1e3; } .window-proxy { border: 1px dashed #f6c1bc; } .window-proxy-mask, .window-mask { background: #eee; } .dialog-content { overflow: auto; } .dialog-toolbar { padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #f5f5f5; } .dialog-toolbar { border-bottom: 1px solid #dedede; } .dialog-button { border-top: 1px solid #dedede; } .combo { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { background: url('images/combo_arrow.png') no-repeat center center; } .combo, .combo-panel { background-color: #fafafa; } .combo { border-color: #f6c1bc; background-color: #fafafa; } .combo-arrow { background-color: #f0e1e3; } .combo-arrow-hover { background-color: #fff0e7; } .combobox-item { padding: 2px; font-size: 12px; padding: 3px; padding-right: 0px; } .combobox-item-hover { background-color: #fff0e7; color: #404040; } .combobox-item-selected { background-color: #f09090; color: #404040; } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #c75252; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #f0e1e3; } .layout-expand-over { background-color: #f0e1e3; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f0e1e3 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f0e1e3 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #fff0e7; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #f0e1e3; } .tabs-header, .tabs-tool { background-color: #f0e1e3; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #f6c1bc; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #fff0e7; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #c75252; background-repeat: repeat-x; border: 1px solid #c75252; background: -webkit-linear-gradient(top,#c75252 0,#c75252 100%); background: -moz-linear-gradient(top,#c75252 0,#c75252 100%); background: -o-linear-gradient(top,#c75252 0,#c75252 100%); background: linear-gradient(to bottom,#c75252 0,#c75252 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #fff0e7; color: #404040; border: 1px solid #fff0e7; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #fff0e7; color: #404040; border: 1px solid #fff0e7; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #c75252; color: #404040; background: -webkit-linear-gradient(top,#c75252 0,#c75252 100%); background: -moz-linear-gradient(top,#c75252 0,#c75252 100%); background: -o-linear-gradient(top,#c75252 0,#c75252 100%); background: linear-gradient(to bottom,#c75252 0,#c75252 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #f0e1e3; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #f0e1e3; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 12px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-sort-icon { padding: 0; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 25px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-weight: normal; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 25px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-body .datagrid-editable .datagrid-editable-input { margin: 0; padding: 2px; border-width: 1px; border-style: solid; } .datagrid-sort-desc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { background: #fafafa url('images/loading.gif') no-repeat scroll 5px center; } .datagrid-header, .datagrid-td-rownumber { background-color: #ebeced; } .datagrid-cell-rownumber { color: #404040; } .datagrid-resize-proxy { background: #c75252; } .datagrid-mask { background: #eee; } .datagrid-mask-msg { border-color: #f6c1bc; } .datagrid-toolbar, .datagrid-pager { background: #f5f5f5; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #dedede; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #404040; } .datagrid-row-alt { background: #f5f5f5; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #fff0e7; color: #404040; cursor: default; } .datagrid-row-selected { background: #f09090; color: #404040; } .datagrid-body .datagrid-editable .datagrid-editable-input { border-color: #f6c1bc; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f0e1e3; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f0e1e3; } .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #f6c1bc; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { border-collapse: separate; font-size: 12px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 12px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 22px; } .calendar-title { text-align: center; height: 22px; } .calendar-title span { position: relative; display: inline-block; top: 2px; padding: 0 3px; height: 18px; line-height: 18px; font-size: 12px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -7px; width: 14px; height: 14px; cursor: pointer; font-size: 1px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-prevmonth { left: 20px; background: url('images/calendar_arrows.png') no-repeat -18px -2px; } .calendar-nextmonth { right: 20px; background: url('images/calendar_arrows.png') no-repeat -34px -2px; } .calendar-prevyear { left: 3px; background: url('images/calendar_arrows.png') no-repeat -1px -2px; } .calendar-nextyear { right: 3px; background: url('images/calendar_arrows.png') no-repeat -49px -2px; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 12px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 40px; text-align: center; border-width: 1px; border-style: solid; margin: 0; padding: 2px; font-weight: bold; font-size: 12px; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 21px; height: 21px; vertical-align: top; cursor: pointer; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 2px 2px; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -45px 2px; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .calendar-body th, .calendar-menu-month { color: #8d8d8d; } .calendar-day { color: #404040; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #f6c1bc; } .calendar { border-color: #f6c1bc; } .calendar-header { background: #f0e1e3; } .calendar-body, .calendar-menu { background: #fafafa; } .calendar-body th { background: #f5f5f5; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #fff0e7; color: #404040; } .calendar-hover { border: 1px solid #fff0e7; padding: 0; } .calendar-selected { background-color: #f09090; color: #404040; border: 1px solid #f09090; padding: 0; } .datebox-calendar-inner { height: 180px; } .datebox-button { height: 18px; padding: 2px 5px; text-align: center; } .datebox-button a { font-size: 12px; } .datebox-current, .datebox-close, .datebox-ok { text-decoration: none; font-weight: bold; opacity: 0.6; filter: alpha(opacity=60); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #f5f5f5; } .datebox-current, .datebox-close, .datebox-ok { color: #404040; } .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #f6c1bc; } .spinner-arrow { background-color: #f0e1e3; } .spinner-arrow-hover { background-color: #fff0e7; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #f6c1bc; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #f09090; color: #404040; } .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #f6c1bc; background-color: #fff; } .searchbox a.l-btn-plain { background: #f0e1e3; } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #f6c1bc; background: #f0e1e3; } .slider-rule span { border-color: #f6c1bc; } .slider-rulelabel span { color: #404040; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #f6c1bc; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #fff0e7; color: #404040; background: #fff0e7; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #fff0e7; background-color: #fff0e7; color: #404040; } .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #c75252; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #fff0e7; background-color: #fff0e7; color: #404040; } .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #f6c1bc; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #f6c1bc; } .tree-node-hover { background: #fff0e7; color: #404040; } .tree-node-selected { background: #f09090; color: #404040; } .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #f6c1bc; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #f6c1bc; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #f6c1bc; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #f6c1bc; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #f6c1bc; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } a.l-btn, a:hover.l-btn-disabled { color: #fff; } a.l-btn-plain, a.l-btn-selected { color: #404040; } .window { background-color: #eb6565; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/layout.css ================================================ .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #c75252; } .layout-split-north { border-bottom: 5px solid #fafafa; } .layout-split-south { border-top: 5px solid #fafafa; } .layout-split-east { border-left: 5px solid #fafafa; } .layout-split-west { border-right: 5px solid #fafafa; } .layout-expand { background-color: #f0e1e3; } .layout-expand-over { background-color: #f0e1e3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/linkbutton.css ================================================ a.l-btn { background-position: right 0; text-decoration: none; display: inline-block; zoom: 1; height: 24px; padding-right: 18px; cursor: pointer; outline: none; } a.l-btn-plain { padding-right: 5px; border: 0; padding: 1px 6px 1px 1px; } a.l-btn-disabled { color: #ccc; opacity: 0.5; filter: alpha(opacity=50); cursor: default; } a.l-btn span.l-btn-left { display: inline-block; background-position: 0 -48px; padding: 4px 0px 4px 18px; line-height: 16px; height: 16px; } a.l-btn-plain span.l-btn-left { padding-left: 5px; } a.l-btn span span.l-btn-text { display: inline-block; vertical-align: baseline; width: auto; height: 16px; line-height: 16px; font-size: 12px; padding: 0; margin: 0; } a.l-btn span span.l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } a.l-btn span span.l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } a.l-btn span span span.l-btn-empty { display: inline-block; margin: 0; padding: 0; width: 16px; } a:hover.l-btn { background-position: right -24px; outline: none; text-decoration: none; } a:hover.l-btn span.l-btn-left { background-position: 0 bottom; } a:hover.l-btn-plain { padding: 0 5px 0 0; } a:hover.l-btn-disabled { background-position: right 0; } a:hover.l-btn-disabled span.l-btn-left { background-position: 0 -48px; } a.l-btn .l-btn-focus { outline: #0000FF dotted thin; } a.l-btn { color: #404040; background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background: #c75252; background-repeat: repeat-x; border: 1px solid #c75252; background: -webkit-linear-gradient(top,#c75252 0,#c75252 100%); background: -moz-linear-gradient(top,#c75252 0,#c75252 100%); background: -o-linear-gradient(top,#c75252 0,#c75252 100%); background: linear-gradient(to bottom,#c75252 0,#c75252 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn span.l-btn-left { background-image: url('images/linkbutton_bg.png'); background-repeat: no-repeat; background-image: none; } a:hover.l-btn { background: #fff0e7; color: #404040; border: 1px solid #fff0e7; filter: none; } a.l-btn-plain, a.l-btn-plain span.l-btn-left { background: transparent; border: 0; filter: none; } a:hover.l-btn-plain { background: #fff0e7; color: #404040; border: 1px solid #fff0e7; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } a.l-btn-disabled, a:hover.l-btn-disabled { color: #404040; filter: alpha(opacity=50); background: #c75252; color: #404040; background: -webkit-linear-gradient(top,#c75252 0,#c75252 100%); background: -moz-linear-gradient(top,#c75252 0,#c75252 100%); background: -o-linear-gradient(top,#c75252 0,#c75252 100%); background: linear-gradient(to bottom,#c75252 0,#c75252 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); filter: alpha(opacity=50) progid:DXImageTransform.Microsoft.gradient(startColorstr=#c75252,endColorstr=#c75252,GradientType=0); } a.l-btn-plain-disabled, a:hover.l-btn-plain-disabled { background: transparent; filter: alpha(opacity=50); } a.l-btn-selected, a:hover.l-btn-selected { background-position: right -24px; background: #f0e1e3; filter: none; } a.l-btn-selected span.l-btn-left, a:hover.l-btn-selected span.l-btn-left { background-position: 0 bottom; background-image: none; } a.l-btn-plain-selected, a:hover.l-btn-plain-selected { background: #f0e1e3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/menu.css ================================================ .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-active { -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 12px; } .menu-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ddd; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ddd; border-bottom: 1px solid #fff; } .menu { background-color: #fafafa; border-color: #f6c1bc; color: #404040; } .menu-content { background: #fafafa; } .menu-item { border-color: transparent; _border-color: #fafafa; } .menu-active { border-color: #fff0e7; color: #404040; background: #fff0e7; } .menu-active-disabled { border-color: transparent; background: transparent; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/menubutton.css ================================================ .m-btn-downarrow { display: inline-block; width: 16px; height: 16px; line-height: 16px; font-size: 12px; _vertical-align: middle; } a.m-btn-active { background-position: bottom right; } a.m-btn-active span.l-btn-left { background-position: bottom left; } a.m-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .m-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; } a.m-btn-plain-active { border-color: #fff0e7; background-color: #fff0e7; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/messager.css ================================================ .messager-body { padding: 10px; overflow: hidden; } .messager-button { text-align: center; padding-top: 10px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { background: url('images/messager_icons.png') no-repeat scroll -64px 0; } .messager-info { background: url('images/messager_icons.png') no-repeat scroll 0 0; } .messager-question { background: url('images/messager_icons.png') no-repeat scroll -32px 0; } .messager-warning { background: url('images/messager_icons.png') no-repeat scroll -96px 0; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 1px 0; border: 1px solid #f6c1bc; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/pagination.css ================================================ .pagination { zoom: 1; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ddd; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 2em; height: auto; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px 0 0; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-first { background: url('images/pagination_icons.png') no-repeat 0 0; } .pagination-prev { background: url('images/pagination_icons.png') no-repeat -16px 0; } .pagination-next { background: url('images/pagination_icons.png') no-repeat -32px 0; } .pagination-last { background: url('images/pagination_icons.png') no-repeat -48px 0; } .pagination-load { background: url('images/pagination_icons.png') no-repeat -64px 0; } .pagination-loading { background: url('images/loading.gif') no-repeat; } .pagination-page-list, .pagination .pagination-num { border-color: #f6c1bc; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/panel.css ================================================ .panel { overflow: hidden; text-align: left; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0px; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #fff0e7; -moz-border-radius: -2px -2px -2px -2px; -webkit-border-radius: -2px -2px -2px -2px; border-radius: -2px -2px -2px -2px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { background: url('images/loading.gif') no-repeat 10px 10px; } .panel-tool-close { background: url('images/panel_tools.png') no-repeat -16px 0px; } .panel-tool-min { background: url('images/panel_tools.png') no-repeat 0px 0px; } .panel-tool-max { background: url('images/panel_tools.png') no-repeat 0px -16px; } .panel-tool-restore { background: url('images/panel_tools.png') no-repeat -16px -16px; } .panel-tool-collapse { background: url('images/panel_tools.png') no-repeat -32px 0; } .panel-tool-expand { background: url('images/panel_tools.png') no-repeat -32px -16px; } .panel-header, .panel-body { border-color: #f6c1bc; } .panel-header { background-color: #f0e1e3; } .panel-body { background-color: #fafafa; color: #404040; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #404040; height: 16px; line-height: 16px; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/progressbar.css ================================================ .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; overflow: hidden; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .progressbar { border-color: #f6c1bc; } .progressbar-text { color: #404040; font-size: 12px; } .progressbar-value .progressbar-text { background-color: #f09090; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/propertygrid.css ================================================ .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { height: 21px; overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #dedede; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f0e1e3; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #dedede; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f0e1e3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/searchbox.css ================================================ .searchbox { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; } .searchbox .searchbox-text { font-size: 12px; border: 0; margin: 0; padding: 0; line-height: 20px; height: 20px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .searchbox .searchbox-prompt { font-size: 12px; color: #ccc; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.l-btn-plain { height: 20px; border: 0; padding: 0 6px 0 0; vertical-align: top; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; opacity: 0.6; filter: alpha(opacity=60); } .searchbox a.l-btn .l-btn-left { padding: 2px 0 2px 4px; } .searchbox a.l-btn-plain:hover { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border: 0; padding: 0 6px 0 0; opacity: 1.0; filter: alpha(opacity=100); } .searchbox a.m-btn-plain-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox { border-color: #f6c1bc; background-color: #fff; } .searchbox a.l-btn-plain { background: #f0e1e3; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/slider.css ================================================ .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 0px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: -7px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 12px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 12px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 3px; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #f6c1bc; background: #f0e1e3; } .slider-rule span { border-color: #f6c1bc; } .slider-rulelabel span { color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/spinner.css ================================================ .spinner { display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .spinner .spinner-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0 2px; *margin-top: -1px; *height: 18px; *line-height: 18px; _height: 18px; _line-height: 18px; vertical-align: baseline; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; } .spinner-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; } .spinner { border-color: #f6c1bc; } .spinner-arrow { background-color: #f0e1e3; } .spinner-arrow-hover { background-color: #fff0e7; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/splitbutton.css ================================================ .s-btn-downarrow { display: inline-block; margin: 0 0 0 4px; padding: 0 0 0 1px; width: 14px; height: 16px; line-height: 16px; border-width: 0; border-style: solid; font-size: 12px; _vertical-align: middle; } a.s-btn-active { background-position: bottom right; } a.s-btn-active span.l-btn-left { background-position: bottom left; } a.s-btn-plain-active { background: transparent; padding: 0 5px 0 0; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 2px center; border-color: #c75252; } a:hover.l-btn .s-btn-downarrow, a.s-btn-active .s-btn-downarrow, a.s-btn-plain-active .s-btn-downarrow { background-position: 1px center; padding: 0; border-width: 0 0 0 1px; } a.s-btn-plain-active { border-color: #fff0e7; background-color: #fff0e7; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/tabs.css ================================================ .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-header-plain { border: 0; background: transparent; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; height: 28px !important; height: 30px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-header-plain .tabs-scroller-left, .tabs-header-plain .tabs-scroller-right { height: 25px !important; height: 27px; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 5000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 0px 0px 0 0; -webkit-border-radius: 0px 0px 0 0; border-radius: 0px 0px 0 0; } .tabs li.tabs-selected a.tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected a:hover.tabs-inner { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 12px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li a.tabs-inner { -moz-border-radius: 0 0 0px 0px; -webkit-border-radius: 0 0 0px 0px; border-radius: 0 0 0px 0px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 4px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 4px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-header-left .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0px 0 0 0px; -webkit-border-radius: 0px 0 0 0px; border-radius: 0px 0 0 0px; } .tabs-header-right .tabs li a.tabs-inner { display: block; text-align: left; -moz-border-radius: 0 0px 0px 0; -webkit-border-radius: 0 0px 0px 0; border-radius: 0 0px 0px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-scroller-left { background: #f0e1e3 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f0e1e3 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li a.tabs-inner:hover { background: #fff0e7; color: #404040; filter: none; } .tabs li.tabs-selected a.tabs-inner { background-color: #fafafa; color: #404040; } .tabs li a.tabs-inner { color: #404040; background-color: #f0e1e3; } .tabs-header, .tabs-tool { background-color: #f0e1e3; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li a.tabs-inner, .tabs li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, .tabs-header-left .tabs li.tabs-selected a.tabs-inner, .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-color: #f6c1bc; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #fff0e7; } .tabs li.tabs-selected a.tabs-inner { border-bottom: 1px solid #fafafa; } .tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { border-top: 1px solid #fafafa; } .tabs-header-left .tabs li.tabs-selected a.tabs-inner { border-right: 1px solid #fafafa; } .tabs-header-right .tabs li.tabs-selected a.tabs-inner { border-left: 1px solid #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/tooltip.css ================================================ .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; padding: 5px; border-width: 1px; border-style: solid; border-radius: 5px; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .tooltip-content { font-size: 12px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; _border-color: tomato; _filter: chroma(color=tomato); } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #fafafa; border-color: #f6c1bc; color: #404040; } .tooltip-right .tooltip-arrow-outer { border-right-color: #f6c1bc; } .tooltip-right .tooltip-arrow { border-right-color: #fafafa; } .tooltip-left .tooltip-arrow-outer { border-left-color: #f6c1bc; } .tooltip-left .tooltip-arrow { border-left-color: #fafafa; } .tooltip-top .tooltip-arrow-outer { border-top-color: #f6c1bc; } .tooltip-top .tooltip-arrow { border-top-color: #fafafa; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #f6c1bc; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #fafafa; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/tree.css ================================================ .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 18px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; vertical-align: top; overflow: hidden; } .tree-expanded { background: url('images/tree_icons.png') no-repeat -18px 0px; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { background: url('images/tree_icons.png') no-repeat 0px 0px; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { background: url('images/tree_icons.png') no-repeat -208px 0; } .tree-folder-open { background: url('images/tree_icons.png') no-repeat -224px 0; } .tree-file { background: url('images/tree_icons.png') no-repeat -240px 0; } .tree-loading { background: url('images/loading.gif') no-repeat center center; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: top; white-space: nowrap; padding: 0 2px; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 12px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #ccc; font-size: 12px; height: 14px !important; height: 18px; line-height: 14px; padding: 1px 2px; width: 80px; position: absolute; top: 0; } .tree-node-proxy { background-color: #fafafa; color: #404040; border-color: #f6c1bc; } .tree-node-hover { background: #fff0e7; color: #404040; } .tree-node-selected { background: #f09090; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/validatebox.css ================================================ .validatebox-invalid { background-image: url('images/validatebox_warning.png'); background-repeat: no-repeat; background-position: right center; border-color: #ffa8a8; background-color: #fff3f3; color: #404040; } ================================================ FILE: src/main/webapp/jslib/eu_js/easyui1.3.3/themes/metro-red/window.css ================================================ .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; *zoom: 1; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0px 0px 0px 0px; -webkit-border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px; } .window-shadow { background: #fafafa; -moz-box-shadow: 2px 2px 3px #fafafa; -webkit-box-shadow: 2px 2px 3px #fafafa; box-shadow: 2px 2px 3px #fafafa; filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); } .window, .window .window-body { border-color: #f6c1bc; } .window { background-color: #f0e1e3; } .window-proxy { border: 1px dashed #f6c1bc; } .window-proxy-mask, .window-mask { background: #eee; } ================================================ FILE: src/main/webapp/jslib/eu_js/extEasyUI.js ================================================ /** * 使panel和datagrid在加载时提示 * * @requires jQuery,EasyUI * */ $.fn.panel.defaults.loadingMessage = '加载中....'; $.fn.datagrid.defaults.loadMsg = '加载中....'; /** * @requires jQuery,EasyUI * * panel关闭时回收内存,主要用于layout使用iframe嵌入网页时的内存泄漏问题 */ $.fn.panel.defaults.onBeforeDestroy = function() { var frame = $('iframe', this); try { if (frame.length > 0) { for ( var i = 0; i < frame.length; i++) { frame[i].src = ''; frame[i].contentWindow.document.write(''); frame[i].contentWindow.close(); } frame.remove(); if (navigator.userAgent.indexOf("MSIE") > 0) {// IE特有回收内存方法 try { CollectGarbage(); } catch (e) { } } } } catch (e) { } }; /** * * * @requires jQuery,EasyUI * * 防止panel/window/dialog组件超出浏览器边界 * @param left * @param top */ var easyuiPanelOnMove = function(left, top) { var l = left; var t = top; if (l < 1) { l = 1; } if (t < 1) { t = 1; } var width = parseInt($(this).parent().css('width')) + 14; var height = parseInt($(this).parent().css('height')) + 14; var right = l + width; var buttom = t + height; var browserWidth = $(window).width(); var browserHeight = $(window).height(); if (right > browserWidth) { l = browserWidth - width; } if (buttom > browserHeight) { t = browserHeight - height; } $(this).parent().css({/* 修正面板位置 */ left : l, top : t }); }; $.fn.dialog.defaults.onMove = easyuiPanelOnMove; $.fn.window.defaults.onMove = easyuiPanelOnMove; $.fn.panel.defaults.onMove = easyuiPanelOnMove; /** * * * @requires jQuery,EasyUI * * 通用错误提示 * * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作 */ var easyuiErrorFunction = function(XMLHttpRequest) { parent.$.messager.alert('错误', XMLHttpRequest.responseText); }; $.fn.datagrid.defaults.onLoadError = easyuiErrorFunction; $.fn.treegrid.defaults.onLoadError = easyuiErrorFunction; $.fn.tree.defaults.onLoadError = easyuiErrorFunction; $.fn.combogrid.defaults.onLoadError = easyuiErrorFunction; $.fn.combobox.defaults.onLoadError = easyuiErrorFunction; $.fn.form.defaults.onLoadError = easyuiErrorFunction; /** * * * @requires jQuery,EasyUI * * 为datagrid、treegrid增加表头菜单,用于显示或隐藏列,注意:冻结列不在此菜单中 */ var createGridHeaderContextMenu = function(e, field) { e.preventDefault(); var grid = $(this);/* grid本身 */ var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */ if (!headerContextMenu) { var tmenu = $('
        ').appendTo('body'); var fields = grid.datagrid('getColumnFields'); for ( var i = 0; i < fields.length; i++) { var fildOption = grid.datagrid('getColumnOption', fields[i]); if (!fildOption.hidden) { $('
        ').html(fildOption.title).appendTo(tmenu); } else { $('
        ').html(fildOption.title).appendTo(tmenu); } } headerContextMenu = this.headerContextMenu = tmenu.menu({ onClick : function(item) { var field = $(item.target).attr('field'); if (item.iconCls == 'tick') { grid.datagrid('hideColumn', field); $(this).menu('setIcon', { target : item.target, iconCls : 'bullet_blue' }); } else { grid.datagrid('showColumn', field); $(this).menu('setIcon', { target : item.target, iconCls : 'tick' }); } } }); } headerContextMenu.menu('show', { left : e.pageX, top : e.pageY }); }; $.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu; $.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu; /** * grid tooltip参数 * * */ var gridTooltipOptions = { tooltip : function(jq, fields) { return jq.each(function() { var panel = $(this).datagrid('getPanel'); if (fields && typeof fields == 'object' && fields.sort) { $.each(fields, function() { var field = this; bindEvent($('.datagrid-body td[field=' + field + '] .datagrid-cell', panel)); }); } else { bindEvent($(".datagrid-body .datagrid-cell", panel)); } }); function bindEvent(jqs) { jqs.mouseover(function() { var content = $(this).text(); if (content.replace(/(^\s*)|(\s*$)/g, '').length > 5) { $(this).tooltip({ content : content, trackMouse : true, position : 'bottom', onHide : function() { $(this).tooltip('destroy'); }, onUpdate : function(p) { var tip = $(this).tooltip('tip'); if (parseInt(tip.css('width')) > 500) { tip.css('width', 500); } } }).tooltip('show'); } }); } } }; /** * Datagrid扩展方法tooltip 基于Easyui 1.3.3,可用于Easyui1.3.3+ * * 简单实现,如需高级功能,可以自由修改 * * 使用说明: * * 在easyui.min.js之后导入本js * * 代码案例: * * $("#dg").datagrid('tooltip'); 所有列 * * $("#dg").datagrid('tooltip',['productid','listprice']); 指定列 * * */ $.extend($.fn.datagrid.methods, gridTooltipOptions); /** * Treegrid扩展方法tooltip 基于Easyui 1.3.3,可用于Easyui1.3.3+ * * 简单实现,如需高级功能,可以自由修改 * * 使用说明: * * 在easyui.min.js之后导入本js * * 代码案例: * * $("#dg").treegrid('tooltip'); 所有列 * * $("#dg").treegrid('tooltip',['productid','listprice']); 指定列 * * */ $.extend($.fn.treegrid.methods, gridTooltipOptions); /** * * * @requires jQuery,EasyUI * * 扩展validatebox,添加验证两次密码功能 */ $.extend($.fn.validatebox.defaults.rules, { eqPwd : { validator : function(value, param) { return value == $(param[0]).val(); }, message : '密码不一致!' } }); //扩展tree,使其可以获取实心节点 $.extend($.fn.tree.methods, { getCheckedExt : function(jq) {// 获取checked节点(包括实心) var checked = $(jq).tree("getChecked"); var checkbox2 = $(jq).find("span.tree-checkbox2").parent(); $.each(checkbox2, function() { var node = $.extend({}, $.data(this, "tree-node"), { target : this }); checked.push(node); }); return checked; }, getSolidExt : function(jq) {// 获取实心节点 var checked = []; var checkbox2 = $(jq).find("span.tree-checkbox2").parent(); $.each(checkbox2, function() { var node = $.extend({}, $.data(this, "tree-node"), { target : this }); checked.push(node); }); return checked; } }); //扩展tree,使其支持平滑数据格式 $.fn.tree.defaults.loadFilter = function(data, parent) { var opt = $(this).data().tree.options; var idFiled, textFiled, parentField; if (opt.parentField) { idFiled = opt.idFiled || 'id'; textFiled = opt.textFiled || 'text'; parentField = opt.parentField; var i, l, treeData = [], tmpMap = []; for (i = 0, l = data.length; i < l; i++) { tmpMap[data[i][idFiled]] = data[i]; } for (i = 0, l = data.length; i < l; i++) { if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) { if (!tmpMap[data[i][parentField]]['children']) tmpMap[data[i][parentField]]['children'] = []; data[i]['text'] = data[i][textFiled]; tmpMap[data[i][parentField]]['children'].push(data[i]); } else { data[i]['text'] = data[i][textFiled]; treeData.push(data[i]); } } return treeData; } return data; }; // 扩展treegrid,使其支持平滑数据格式 $.fn.treegrid.defaults.loadFilter = function(data, parentId) { var opt = $(this).data().treegrid.options; var idFiled, textFiled, parentField; if (opt.parentField) { idFiled = opt.idFiled || 'id'; textFiled = opt.textFiled || 'text'; parentField = opt.parentField; var i, l, treeData = [], tmpMap = []; for (i = 0, l = data.length; i < l; i++) { tmpMap[data[i][idFiled]] = data[i]; } for (i = 0, l = data.length; i < l; i++) { if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) { if (!tmpMap[data[i][parentField]]['children']) tmpMap[data[i][parentField]]['children'] = []; data[i]['text'] = data[i][textFiled]; tmpMap[data[i][parentField]]['children'].push(data[i]); } else { data[i]['text'] = data[i][textFiled]; treeData.push(data[i]); } } return treeData; } return data; }; // 扩展combotree,使其支持平滑数据格式 $.fn.combotree.defaults.loadFilter = $.fn.tree.defaults.loadFilter; /** * * @requires jQuery,EasyUI * * 创建一个模式化的dialog * * @returns $.modalDialog.handler 这个handler代表弹出的dialog句柄 * * @returns $.modalDialog.xxx 这个xxx是可以自己定义名称,主要用在弹窗关闭时,刷新某些对象的操作,可以将xxx这个对象预定义好 */ $.modalDialog = function(options) { if ($.modalDialog.handler == undefined) {// 避免重复弹出 var opts = $.extend({ title : '', width : 840, height : 680, modal : true, onClose : function() { $.modalDialog.handler = undefined; $(this).dialog('destroy'); }, onOpen : function() { } }, options); opts.modal = true;// 强制此dialog为模式化,无视传递过来的modal参数 return $.modalDialog.handler = $('
        ').dialog(opts); } }; ================================================ FILE: src/main/webapp/jslib/eu_js/extJquery.js ================================================ /** * Create a cookie with the given key and value and other optional parameters. * * @example $.cookie('the_cookie', 'the_value'); * @desc Set the value of a cookie. * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); * @desc Create a cookie with all available options. * @example $.cookie('the_cookie', 'the_value'); * @desc Create a session cookie. * @example $.cookie('the_cookie', null); * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain used when the cookie was set. * * @param String * key The key of the cookie. * @param String * value The value of the cookie. * @param Object * options An object literal containing key/value pairs to provide optional cookie attributes. * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. If a negative value is specified (e.g. a date in the past), the cookie will be deleted. If set to null or omitted, the cookie will be a session cookie and will not be retained when the the browser exits. * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will require a secure protocol (like HTTPS). * @type undefined * * @name $.cookie * @cat Plugins/Cookie * @author Klaus Hartl/klaus.hartl@stilbuero.de * * Get the value of a cookie with the given key. * * @example $.cookie('the_cookie'); * @desc Get the value of a cookie. * * @param String * key The key of the cookie. * @return The value of the cookie. * @type String * * @name $.cookie * @cat Plugins/Cookie * @author Klaus Hartl/klaus.hartl@stilbuero.de */ $.cookie = function(key, value, options) { if (arguments.length > 1 && (value === null || typeof value !== "object")) { options = $.extend({}, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? String(value) : encodeURIComponent(String(value)), options.expires ? '; expires=' + options.expires.toUTCString() : '', options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } options = value || {}; var result, decode = options.raw ? function(s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; }; /** * @author 孙宇 * * @requires jQuery * * 将form表单元素的值序列化成对象 * * @returns object */ $.serializeObject = function(form) { var o = {}; $.each(form.serializeArray(), function(index) { if (o[this['name']]) { o[this['name']] = o[this['name']] + "," + this['value']; } else { o[this['name']] = this['value']; } }); return o; }; /** * @author 孙宇 * * 增加formatString功能 * * 使用方法:$.formatString('字符串{0}字符串{1}字符串','第一个变量','第二个变量'); * * @returns 格式化后的字符串 */ $.formatString = function(str) { for ( var i = 0; i < arguments.length - 1; i++) { str = str.replace("{" + i + "}", arguments[i + 1]); } return str; }; /** * @author 孙宇 * * 接收一个以逗号分割的字符串,返回List,list里每一项都是一个字符串 * * @returns list */ $.stringToList = function(value) { if (value != undefined && value != '') { var values = []; var t = value.split(','); for ( var i = 0; i < t.length; i++) { values.push('' + t[i]);/* 避免他将ID当成数字 */ } return values; } else { return []; } }; /** * @author 孙宇 * * @requires jQuery * * 改变jQuery的AJAX默认属性和方法 */ $.ajaxSetup({ type : 'POST', error : function(XMLHttpRequest, textStatus, errorThrown) { try { parent.$.messager.progress('close'); parent.$.messager.alert('错误', XMLHttpRequest.responseText); } catch (e) { alert(XMLHttpRequest.responseText); } } }); /** * @author 孙宇 * * 去字符串空格 * * @returns */ String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''); }; String.prototype.ltrim = function() { return this.replace(/(^\s*)/g, ''); }; String.prototype.rtrim = function() { return this.replace(/(\s*$)/g, ''); }; function progressLoad(){ $("
        ").css({display:"block",width:"100%",height:$(window).height()}).appendTo("body"); $("
        ").html("正在处理,请稍候。。。").appendTo("body").css({display:"block",left:($(document.body).outerWidth(true) - 190) / 2,top:($(window).height() - 45) / 2}); } function progressClose(){ $(".datagrid-mask").remove(); $(".datagrid-mask-msg").remove(); } ================================================ FILE: src/main/webapp/jslib/eu_js/jquery-1.8.3.js ================================================ /*! * jQuery JavaScript Library v1.8.3 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2012 jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) */ (function( window, undefined ) { var // A central reference to the root jQuery(document) rootjQuery, // The deferred used on DOM ready readyList, // Use the correct document accordingly with window argument (sandbox) document = window.document, location = window.location, navigator = window.navigator, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // Save a reference to some core methods core_push = Array.prototype.push, core_slice = Array.prototype.slice, core_indexOf = Array.prototype.indexOf, core_toString = Object.prototype.toString, core_hasOwn = Object.prototype.hasOwnProperty, core_trim = String.prototype.trim, // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Used for matching numbers core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, // Used for detecting and trimming whitespace core_rnotwhite = /\S/, core_rspace = /\s+/, // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return ( letter + "" ).toUpperCase(); }, // The ready event handler and self cleanup method DOMContentLoaded = function() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); jQuery.ready(); } else if ( document.readyState === "complete" ) { // we're here because readyState === "complete" in oldIE // which is good enough for us to call the dom ready! document.detachEvent( "onreadystatechange", DOMContentLoaded ); jQuery.ready(); } }, // [[Class]] -> type pairs class2type = {}; jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; doc = ( context && context.nodeType ? context.ownerDocument || context : document ); // scripts is true for back-compat selector = jQuery.parseHTML( match[1], doc, true ); if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { this.attr.call( selector, context, true ); } return jQuery.merge( this, selector ); // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.8.3", // The default length of a jQuery object is 0 length: 0, // The number of elements contained in the matched element set size: function() { return this.length; }, toArray: function() { return core_slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) { ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; } // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }, eq: function( i ) { i = +i; return i === -1 ? this.slice( i ) : this.slice( i, i + 1 ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, slice: function() { return this.pushStack( core_slice.apply( this, arguments ), "slice", core_slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: core_push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger("ready").off("ready"); } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, isWindow: function( obj ) { return obj != null && obj == obj.window; }, isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { return obj == null ? String( obj ) : class2type[ core_toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for ( key in obj ) {} return key === undefined || core_hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, error: function( msg ) { throw new Error( msg ); }, // data: string of html // context (optional): If specified, the fragment will be created in this context, defaults to document // scripts (optional): If true, will include scripts passed in the html string parseHTML: function( data, context, scripts ) { var parsed; if ( !data || typeof data !== "string" ) { return null; } if ( typeof context === "boolean" ) { scripts = context; context = 0; } context = context || document; // Single tag if ( (parsed = rsingleTag.exec( data )) ) { return [ context.createElement( parsed[1] ) ]; } parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); return jQuery.merge( [], (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); }, parseJSON: function( data ) { if ( !data || typeof data !== "string") { return null; } // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, "@" ) .replace( rvalidtokens, "]" ) .replace( rvalidbraces, "")) ) { return ( new Function( "return " + data ) )(); } jQuery.error( "Invalid JSON: " + data ); }, // Cross-browser xml parsing parseXML: function( data ) { var xml, tmp; if ( !data || typeof data !== "string" ) { return null; } try { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } } catch( e ) { xml = undefined; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && core_rnotwhite.test( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var name, i = 0, length = obj.length, isObj = length === undefined || jQuery.isFunction( obj ); if ( args ) { if ( isObj ) { for ( name in obj ) { if ( callback.apply( obj[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( obj[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in obj ) { if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { break; } } } } return obj; }, // Use native String.trim function wherever possible trim: core_trim && !core_trim.call("\uFEFF\xA0") ? function( text ) { return text == null ? "" : core_trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var type, ret = results || []; if ( arr != null ) { // The window, strings (and functions) also have 'length' // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 type = jQuery.type( arr ); if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { core_push.call( ret, arr ); } else { jQuery.merge( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( core_indexOf ) { return core_indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var l = second.length, i = first.length, j = 0; if ( typeof l === "number" ) { for ( ; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var retVal, ret = [], i = 0, length = elems.length; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, key, ret = [], i = 0, length = elems.length, // jquery objects are treated as arrays isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; // Go through the array, translating each of the items to their if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Go through every key on the object, } else { for ( key in elems ) { value = callback( elems[ key ], key, arg ); if ( value != null ) { ret[ ret.length ] = value; } } } // Flatten any nested arrays return ret.concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var tmp, args, proxy; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = core_slice.call( arguments, 2 ); proxy = function() { return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function access: function( elems, fn, key, value, chainable, emptyGet, pass ) { var exec, bulk = key == null, i = 0, length = elems.length; // Sets many values if ( key && typeof key === "object" ) { for ( i in key ) { jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); } chainable = 1; // Sets one value } else if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = pass === undefined && jQuery.isFunction( value ); if ( bulk ) { // Bulk operations only iterate when executing function values if ( exec ) { exec = fn; fn = function( elem, key, value ) { return exec.call( jQuery( elem ), value ); }; // Otherwise they run against the entire set } else { fn.call( elems, value ); fn = null; } } if ( fn ) { for (; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); } } chainable = 1; } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[0], key ) : emptyGet; }, now: function() { return ( new Date() ).getTime(); } }); jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready, 1 ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", DOMContentLoaded ); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch(e) {} if ( top && top.doScroll ) { (function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left"); } catch(e) { return setTimeout( doScrollCheck, 50 ); } // and execute any waiting functions jQuery.ready(); } })(); } } } return readyList.promise( obj ); }; // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); // All jQuery objects should point back to these rootjQuery = jQuery(document); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.split( core_rspace ), function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) firingStart, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Control if a given callback is in the list has: function( fn ) { return jQuery.inArray( fn, list ) > -1; }, // Remove all callbacks from the list empty: function() { list = []; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( list && ( !fired || stack ) ) { if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var action = tuple[ 0 ], fn = fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? function() { var returned = fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); } } : newDefer[ action ] ); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[1] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] = list.fire deferred[ tuple[0] ] = list.fire; deferred[ tuple[0] + "With" ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = core_slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; if( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }); jQuery.support = (function() { var support, all, a, select, opt, input, fragment, eventName, i, isSupported, clickFn, div = document.createElement("div"); // Setup div.setAttribute( "className", "t" ); div.innerHTML = "
        a"; // Support tests won't run in some limited or non-browser environments all = div.getElementsByTagName("*"); a = div.getElementsByTagName("a")[ 0 ]; if ( !all || !a || !all.length ) { return {}; } // First batch of tests select = document.createElement("select"); opt = select.appendChild( document.createElement("option") ); input = div.getElementsByTagName("input")[ 0 ]; a.style.cssText = "top:1px;float:left;opacity:.5"; support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: ( div.firstChild.nodeType === 3 ), // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText instead) style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: ( a.getAttribute("href") === "/a" ), // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.5/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn: ( input.value === "on" ), // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute: div.className !== "t", // Tests for enctype support on a form (#6743) enctype: !!document.createElement("form").enctype, // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode boxModel: ( document.compatMode === "CSS1Compat" ), // Will be defined later submitBubbles: true, changeBubbles: true, focusinBubbles: false, deleteExpando: true, noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableMarginRight: true, boxSizingReliable: true, pixelPosition: false }; // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as disabled) select.disabled = true; support.optDisabled = !opt.disabled; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch( e ) { support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent( "onclick", clickFn = function() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) support.noCloneEvent = false; }); div.cloneNode( true ).fireEvent("onclick"); div.detachEvent( "onclick", clickFn ); } // Check if a radio maintains its value // after being appended to the DOM input = document.createElement("input"); input.value = "t"; input.setAttribute( "type", "radio" ); support.radioValue = input.value === "t"; input.setAttribute( "checked", "checked" ); // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( "name", "t" ); div.appendChild( input ); fragment = document.createDocumentFragment(); fragment.appendChild( div.lastChild ); // WebKit doesn't clone checked state correctly in fragments support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked = input.checked; fragment.removeChild( input ); fragment.appendChild( div ); // Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( div.attachEvent ) { for ( i in { submit: true, change: true, focusin: true }) { eventName = "on" + i; isSupported = ( eventName in div ); if ( !isSupported ) { div.setAttribute( eventName, "return;" ); isSupported = ( typeof div[ eventName ] === "function" ); } support[ i + "Bubbles" ] = isSupported; } } // Run tests that need a body at doc ready jQuery(function() { var container, div, tds, marginDiv, divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", body = document.getElementsByTagName("body")[0]; if ( !body ) { // Return for frameset docs that don't have a body return; } container = document.createElement("div"); container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; body.insertBefore( container, body.firstChild ); // Construct the test element div = document.createElement("div"); container.appendChild( div ); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) div.innerHTML = "
        t
        "; tds = div.getElementsByTagName("td"); tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; isSupported = ( tds[ 0 ].offsetHeight === 0 ); tds[ 0 ].style.display = ""; tds[ 1 ].style.display = "none"; // Check if empty table cells still have offsetWidth/Height // (IE <= 8 fail this test) support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); // Check box-sizing and margin behavior div.innerHTML = ""; div.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%;"; support.boxSizing = ( div.offsetWidth === 4 ); support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); // NOTE: To any future maintainer, we've window.getComputedStyle // because jsdom on node.js will break without it. if ( window.getComputedStyle ) { support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. For more // info see bug #3333 // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right marginDiv = document.createElement("div"); marginDiv.style.cssText = div.style.cssText = divReset; marginDiv.style.marginRight = marginDiv.style.width = "0"; div.style.width = "1px"; div.appendChild( marginDiv ); support.reliableMarginRight = !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); } if ( typeof div.style.zoom !== "undefined" ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) div.innerHTML = ""; div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display = "block"; div.style.overflow = "visible"; div.innerHTML = "
        "; div.firstChild.style.width = "5px"; support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); container.style.zoom = 1; } // Null elements to avoid leaks in IE body.removeChild( container ); container = div = tds = marginDiv = null; }); // Null elements to avoid leaks in IE fragment.removeChild( div ); all = a = select = opt = input = fragment = div = null; return support; })(); var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; jQuery.extend({ cache: {}, deletedIds: [], // Remove at next major release (1.9/2.0) uuid: 0, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, ret, internalKey = jQuery.expando, getByName = typeof name === "string", // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { cache[ id ] = {}; // Avoids exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( getByName ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, i, l, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split(" "); } } } for ( i = 0, l = name.length; i < l; i++ ) { delete thisCache[ name[i] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) } else if ( jQuery.support.deleteExpando || cache != cache.window ) { delete cache[ id ]; // When all else fails, null } else { cache[ id ] = null; } }, // For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; // nodes accept data unless otherwise specified; rejection can be conditional return !noData || noData !== true && elem.getAttribute("classid") === noData; } }); jQuery.fn.extend({ data: function( key, value ) { var parts, part, attr, name, l, elem = this[0], i = 0, data = null; // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { attr = elem.attributes; for ( l = attr.length; i < l; i++ ) { name = attr[i].name; if ( !name.indexOf( "data-" ) ) { name = jQuery.camelCase( name.substring(5) ); dataAttr( elem, name, data[ name ] ); } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } parts = key.split( ".", 2 ); parts[1] = parts[1] ? "." + parts[1] : ""; part = parts[1] + "!"; return jQuery.access( this, function( value ) { if ( value === undefined ) { data = this.triggerHandler( "getData" + part, [ parts[0] ] ); // Try to fetch any internally stored data first if ( data === undefined && elem ) { data = jQuery.data( elem, key ); data = dataAttr( elem, key, data ); } return data === undefined && parts[1] ? this.data( parts[0] ) : data; } parts[1] = value; this.each(function() { var self = jQuery( this ); self.triggerHandler( "setData" + part, parts ); jQuery.data( this, key, value ); self.triggerHandler( "changeData" + part, parts ); }); }, null, value, arguments.length > 1, null, false ); }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray(data) ) { queue = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { jQuery.removeData( elem, type + "queue", true ); jQuery.removeData( elem, key, true ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; return this.queue( type, function( next, hooks ) { var timeout = setTimeout( next, time ); hooks.stop = function() { clearTimeout( timeout ); }; }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var nodeHook, boolHook, fixSpecified, rclass = /[\t\r\n]/g, rreturn = /\r/g, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea|)$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each(function() { jQuery.removeAttr( this, name ); }); }, prop: function( name, value ) { return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { name = jQuery.propFix[ name ] || name; return this.each(function() { // try/catch handles cases where IE balks (such as removing a property on window) try { this[ name ] = undefined; delete this[ name ]; } catch( e ) {} }); }, addClass: function( value ) { var classNames, i, l, elem, setClass, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call(this, j, this.className) ); }); } if ( value && typeof value === "string" ) { classNames = value.split( core_rspace ); for ( i = 0, l = this.length; i < l; i++ ) { elem = this[ i ]; if ( elem.nodeType === 1 ) { if ( !elem.className && classNames.length === 1 ) { elem.className = value; } else { setClass = " " + elem.className + " "; for ( c = 0, cl = classNames.length; c < cl; c++ ) { if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { setClass += classNames[ c ] + " "; } } elem.className = jQuery.trim( setClass ); } } } } return this; }, removeClass: function( value ) { var removes, className, elem, c, cl, i, l; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).removeClass( value.call(this, j, this.className) ); }); } if ( (value && typeof value === "string") || value === undefined ) { removes = ( value || "" ).split( core_rspace ); for ( i = 0, l = this.length; i < l; i++ ) { elem = this[ i ]; if ( elem.nodeType === 1 && elem.className ) { className = (" " + elem.className + " ").replace( rclass, " " ); // loop over each item in the removal list for ( c = 0, cl = removes.length; c < cl; c++ ) { // Remove until there is nothing to remove, while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { className = className.replace( " " + removes[ c ] + " " , " " ); } } elem.className = value ? jQuery.trim( className ) : ""; } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function( i ) { jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), state = stateVal, classNames = value.split( core_rspace ); while ( (className = classNames[ i++ ]) ) { // check each className given, space separated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); } } else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // toggle whole className this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " ", i = 0, l = this.length; for ( ; i < l; i++ ) { if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { return true; } } return false; }, val: function( value ) { var hooks, ret, isFunction, elem = this[0]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { return ret; } ret = elem.value; return typeof ret === "string" ? // handle most common string cases ret.replace(rreturn, "") : // handle cases where value is null/undef or number ret == null ? "" : ret; } return; } isFunction = jQuery.isFunction( value ); return this.each(function( i ) { var val, self = jQuery(this); if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call( this, i, self.val() ); } else { val = value; } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map(val, function ( value ) { return value == null ? "" : value + ""; }); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); } }); jQuery.extend({ valHooks: { option: { get: function( elem ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val = elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } }, select: { get: function( elem ) { var value, option, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one" || index < 0, values = one ? null : [], max = one ? index + 1 : options.length, i = index < 0 ? max : one ? index : 0; // Loop through all the selected options for ( ; i < max; i++ ) { option = options[ i ]; // oldIE doesn't update selected after form reset (#2551) if ( ( option.selected || i === index ) && // Don't return options that are disabled or in a disabled optgroup ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } return values; }, set: function( elem, value ) { var values = jQuery.makeArray( value ); jQuery(elem).find("option").each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; }); if ( !values.length ) { elem.selectedIndex = -1; } return values; } } }, // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 attrFn: {}, attr: function( elem, name, value, pass ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set attributes on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { return jQuery( elem )[ name ]( value ); } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === "undefined" ) { return jQuery.prop( elem, name, value ); } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); // All attributes are lowercase // Grab necessary hook if one is defined if ( notxml ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); } if ( value !== undefined ) { if ( value === null ) { jQuery.removeAttr( elem, name ); return; } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { elem.setAttribute( name, value + "" ); return value; } } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { ret = elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return ret === null ? undefined : ret; } }, removeAttr: function( elem, value ) { var propName, attrNames, name, isBool, i = 0; if ( value && elem.nodeType === 1 ) { attrNames = value.split( core_rspace ); for ( ; i < attrNames.length; i++ ) { name = attrNames[ i ]; if ( name ) { propName = jQuery.propFix[ name ] || name; isBool = rboolean.test( name ); // See #9699 for explanation of this approach (setting first, then removal) // Do not do this for boolean attributes (see #10870) if ( !isBool ) { jQuery.attr( elem, name, "" ); } elem.removeAttribute( getSetAttribute ? name : propName ); // Set corresponding property to false for boolean attributes if ( isBool && propName in elem ) { elem[ propName ] = false; } } } } }, attrHooks: { type: { set: function( elem, value ) { // We can't allow the type property to be changed (since it causes problems in IE) if ( rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( "type property can't be changed" ); } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { // Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to it's default in case type is set after value // This is for element creation var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { elem.value = val; } return value; } } }, // Use the value property for back compat // Use the nodeHook for button elements in IE6/7 (#1954) value: { get: function( elem, name ) { if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { return nodeHook.get( elem, name ); } return name in elem ? elem.value : null; }, set: function( elem, value, name ) { if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { return nodeHook.set( elem, value, name ); } // Does not return so that setAttribute is also used elem.value = value; } } }, propFix: { tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" }, prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set properties on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); if ( notxml ) { // Fix name and attach hooks name = jQuery.propFix[ name ] || name; hooks = jQuery.propHooks[ name ]; } if ( value !== undefined ) { if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { return ( elem[ name ] = value ); } } else { if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { return elem[ name ]; } } }, propHooks: { tabIndex: { get: function( elem ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ var attributeNode = elem.getAttributeNode("tabindex"); return attributeNode && attributeNode.specified ? parseInt( attributeNode.value, 10 ) : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } } } }); // Hook for boolean attributes boolHook = { get: function( elem, name ) { // Align boolean attributes with corresponding properties // Fall back to attribute presence where some booleans are not supported var attrNode, property = jQuery.prop( elem, name ); return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? name.toLowerCase() : undefined; }, set: function( elem, value, name ) { var propName; if ( value === false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else { // value is true since we know at this point it's type boolean and not false // Set boolean attributes to the same name and set the DOM property propName = jQuery.propFix[ name ] || name; if ( propName in elem ) { // Only set the IDL specifically if it already exists on the element elem[ propName ] = true; } elem.setAttribute( name, name.toLowerCase() ); } return name; } }; // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { fixSpecified = { name: true, id: true, coords: true }; // Use this for any attribute in IE6/7 // This fixes almost every IE6/7 issue nodeHook = jQuery.valHooks.button = { get: function( elem, name ) { var ret; ret = elem.getAttributeNode( name ); return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? ret.value : undefined; }, set: function( elem, value, name ) { // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); if ( !ret ) { ret = document.createAttribute( name ); elem.setAttributeNode( ret ); } return ( ret.value = value + "" ); } }; // Set width and height to auto instead of 0 on empty string( Bug #8150 ) // This is for removals jQuery.each([ "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { set: function( elem, value ) { if ( value === "" ) { elem.setAttribute( name, "auto" ); return value; } } }); }); // Set contenteditable to false on removals(#10429) // Setting to empty string throws an error as an invalid value jQuery.attrHooks.contenteditable = { get: nodeHook.get, set: function( elem, value, name ) { if ( value === "" ) { value = "false"; } nodeHook.set( elem, value, name ); } }; } // Some attributes require a special call on IE if ( !jQuery.support.hrefNormalized ) { jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { get: function( elem ) { var ret = elem.getAttribute( name, 2 ); return ret === null ? undefined : ret; } }); }); } if ( !jQuery.support.style ) { jQuery.attrHooks.style = { get: function( elem ) { // Return undefined in the case of empty string // Normalize to lowercase since IE uppercases css property names return elem.style.cssText.toLowerCase() || undefined; }, set: function( elem, value ) { return ( elem.style.cssText = value + "" ); } }; } // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { get: function( elem ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } return null; } }); } // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { jQuery.propFix.enctype = "encoding"; } // Radios and checkboxes getter/setter if ( !jQuery.support.checkOn ) { jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { get: function( elem ) { // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified return elem.getAttribute("value") === null ? "on" : elem.value; } }; }); } jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); } } }); }); var rformElems = /^(?:textarea|input|select)$/i, rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, hoverHack = function( events ) { return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); }; /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { add: function( elem, types, handler, data, selector ) { var elemData, eventHandle, events, t, tns, type, namespaces, handleObj, handleObjIn, handlers, special; // Don't attach events to noData or text/comment nodes (allow plain objects tho) if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first events = elemData.events; if ( !events ) { elemData.events = events = {}; } eventHandle = elemData.handle; if ( !eventHandle ) { elemData.handle = eventHandle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = jQuery.trim( hoverHack(types) ).split( " " ); for ( t = 0; t < types.length; t++ ) { tns = rtypenamespace.exec( types[t] ) || []; type = tns[1]; namespaces = ( tns[2] || "" ).split( "." ).sort(); // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: tns[1], data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first handlers = events[ type ]; if ( !handlers ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, global: {}, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var t, tns, type, origType, namespaces, origCount, j, events, special, eventType, handleObj, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = jQuery.trim( hoverHack( types || "" ) ).split(" "); for ( t = 0; t < types.length; t++ ) { tns = rtypenamespace.exec( types[t] ) || []; type = origType = tns[1]; namespaces = tns[2]; // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector? special.delegateType : special.bindType ) || type; eventType = events[ type ] || []; origCount = eventType.length; namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; // Remove matching events for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !namespaces || namespaces.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { eventType.splice( j--, 1 ); if ( handleObj.selector ) { eventType.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( eventType.length === 0 && origCount !== eventType.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery.removeData( elem, "events", true ); } }, // Events that are safe to short-circuit if no handlers are attached. // Native DOM events should not be added, they may have inline handlers. customEvent: { "getData": true, "setData": true, "changeData": true }, trigger: function( event, data, elem, onlyHandlers ) { // Don't do events on text and comment nodes if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { return; } // Event object or event type var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, type = event.type || event, namespaces = []; // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "!" ) >= 0 ) { // Exclusive events trigger only for the exact event (no namespaces) type = type.slice(0, -1); exclusive = true; } if ( type.indexOf( "." ) >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { // No jQuery handlers for this event type, and it can't have inline handlers return; } // Caller can pass in an Event, Object, or just an event type string event = typeof event === "object" ? // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal new jQuery.Event( type, event ) : // Just the event type (string) new jQuery.Event( type ); event.type = type; event.isTrigger = true; event.exclusive = exclusive; event.namespace = namespaces.join( "." ); event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; // Handle a global trigger if ( !elem ) { // TODO: Stop taunting the data cache; remove global events and always attach to document cache = jQuery.cache; for ( i in cache ) { if ( cache[ i ].events && cache[ i ].events[ type ] ) { jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); } } return; } // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data != null ? jQuery.makeArray( data ) : []; data.unshift( event ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) eventPath = [[ elem, special.bindType || type ]]; if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; for ( old = elem; cur; cur = cur.parentNode ) { eventPath.push([ cur, bubbleType ]); old = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( old === (elem.ownerDocument || document) ) { eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); } } // Fire handlers on the event path for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { cur = eventPath[i][0]; event.type = eventPath[i][1]; handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Note that this is a bare JS function and not a jQuery handler handle = ontype && cur[ ontype ]; if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { event.preventDefault(); } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) // IE<9 dies on focus/blur to hidden element (#1486) if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method old = elem[ ontype ]; if ( old ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; elem[ type ](); jQuery.event.triggered = undefined; if ( old ) { elem[ ontype ] = old; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event || window.event ); var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), delegateCount = handlers.delegateCount, args = core_slice.call( arguments ), run_all = !event.exclusive && !event.namespace, special = jQuery.event.special[ event.type ] || {}, handlerQueue = []; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers that should run if there are delegated events // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && !(event.button && event.type === "click") ) { for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) if ( cur.disabled !== true || event.type !== "click" ) { selMatch = {}; matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; sel = handleObj.selector; if ( selMatch[ sel ] === undefined ) { selMatch[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( selMatch[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, matches: matches }); } } } } // Add the remaining (directly-bound) handlers if ( handlers.length > delegateCount ) { handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); } // Run delegates first; they may want to stop propagation beneath us for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { matched = handlerQueue[ i ]; event.currentTarget = matched.elem; for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { handleObj = matched.matches[ j ]; // Triggered event must either 1) be non-exclusive and have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { event.data = handleObj.data; event.handleObj = handleObj; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, // Includes some event props shared by KeyEvent and MouseEvent // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var eventDoc, doc, body, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, originalEvent = event, fixHook = jQuery.event.fixHooks[ event.type ] || {}, copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = jQuery.Event( originalEvent ); for ( i = copy.length; i; ) { prop = copy[ --i ]; event[ prop ] = originalEvent[ prop ]; } // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Target should not be a text node (#504, Safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) event.metaKey = !!event.metaKey; return fixHook.filter? fixHook.filter( event, originalEvent ) : event; }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { delegateType: "focusin" }, blur: { delegateType: "focusout" }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; // Some plugins are using, but it's undocumented/deprecated and will be removed. // The 1.7 special event interface should provide all the hooks needed now. jQuery.event.handle = jQuery.event.dispatch; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, to properly expose it to GC if ( typeof elem[ name ] === "undefined" ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; function returnFalse() { return false; } function returnTrue() { return true; } // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); // otherwise set the returnValue property of the original event to false (IE) } else { e.returnValue = false; } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if stopPropagation exists run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj, selector = handleObj.selector; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !jQuery._data( form, "_submit_attached" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); jQuery._data( form, "_submit_attached", true ); } }); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._just_changed = true; } }); jQuery.event.add( this, "click._change", function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event, true ); }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); jQuery._data( elem, "_change_attached", true ); } }); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Create "bubbling" focus and blur events if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout var attaches = 0, handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { if ( attaches++ === 0 ) { document.addEventListener( orig, handler, true ); } }, teardown: function() { if ( --attaches === 0 ) { document.removeEventListener( orig, handler, true ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // && selector != null // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }, unbind: function( types, fn ) { return this.off( types, null, fn ); }, live: function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }, die: function( types, fn ) { jQuery( this.context ).off( types, this.selector || "**", fn ); return this; }, delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ); }, undelegate: function( selector, types, fn ) { // ( namespace ) or ( selector, types [, fn] ) return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if ( this[0] ) { return jQuery.event.trigger( type, data, this[0], true ); } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, guid = fn.guid || jQuery.guid++, i = 0, toggler = function( event ) { // Figure out which function to execute var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); // Make sure that clicks stop event.preventDefault(); // and execute the function return args[ lastToggle ].apply( this, arguments ) || false; }; // link all the functions, so any of them can unbind this click handler toggler.guid = guid; while ( i < args.length ) { args[ i++ ].guid = guid; } return this.click( toggler ); }, hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } }); jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.on( name, null, data, fn ) : this.trigger( name ); }; if ( rkeyEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; } if ( rmouseEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; } }); /*! * Sizzle CSS Selector Engine * Copyright 2012 jQuery Foundation and other contributors * Released under the MIT license * http://sizzlejs.com/ */ (function( window, undefined ) { var cachedruns, assertGetIdNotName, Expr, getText, isXML, contains, compile, sortOrder, hasDuplicate, outermostContext, baseHasDuplicate = true, strundefined = "undefined", expando = ( "sizcache" + Math.random() ).replace( ".", "" ), Token = String, document = window.document, docElem = document.documentElement, dirruns = 0, done = 0, pop = [].pop, push = [].push, slice = [].slice, // Use a stripped-down indexOf if a native one is unavailable indexOf = [].indexOf || function( elem ) { var i = 0, len = this.length; for ( ; i < len; i++ ) { if ( this[i] === elem ) { return i; } } return -1; }, // Augment a function for special use by Sizzle markFunction = function( fn, value ) { fn[ expando ] = value == null || value; return fn; }, createCache = function() { var cache = {}, keys = []; return markFunction(function( key, value ) { // Only keep the most recent entries if ( keys.push( key ) > Expr.cacheLength ) { delete cache[ keys.shift() ]; } // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) return (cache[ key + " " ] = value); }, cache ); }, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), // Regex // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors operators = "([*^$|!~]?=)", attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", // Prefer arguments not in parens/brackets, // then attribute selectors and non-pseudos (denoted by :), // then anything else // These preferences are here to reduce the number of selectors // needing tokenize in the PSEUDO preFilter pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", // For matchExpr.POS and matchExpr.needsContext pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), rpseudo = new RegExp( pseudos ), // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, rnot = /^:not/, rsibling = /[\x20\t\r\n\f]*[+~]/, rendsWithNot = /:not\($/, rheader = /h\d/i, rinputs = /input|select|textarea|button/i, rbackslash = /\\(?!\\)/g, matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "POS": new RegExp( pos, "i" ), "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), // For use in libraries implementing .is() "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) }, // Support // Used for testing something on an element assert = function( fn ) { var div = document.createElement("div"); try { return fn( div ); } catch (e) { return false; } finally { // release memory in IE div = null; } }, // Check if getElementsByTagName("*") returns only elements assertTagNameNoComments = assert(function( div ) { div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }), // Check if getAttribute returns normalized href attributes assertHrefNotNormalized = assert(function( div ) { div.innerHTML = ""; return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && div.firstChild.getAttribute("href") === "#"; }), // Check if attributes should be retrieved by attribute nodes assertAttributes = assert(function( div ) { div.innerHTML = ""; var type = typeof div.lastChild.getAttribute("multiple"); // IE8 returns a string for some attributes even when not present return type !== "boolean" && type !== "string"; }), // Check if getElementsByClassName can be trusted assertUsableClassName = assert(function( div ) { // Opera can't find a second classname (in 9.6) div.innerHTML = ""; if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { return false; } // Safari 3.2 caches class attributes and doesn't catch changes div.lastChild.className = "e"; return div.getElementsByClassName("e").length === 2; }), // Check if getElementById returns elements by name // Check if getElementsByName privileges form controls or returns elements by ID assertUsableName = assert(function( div ) { // Inject content div.id = expando + 0; div.innerHTML = "
        "; docElem.insertBefore( div, docElem.firstChild ); // Test var pass = document.getElementsByName && // buggy browsers will return fewer than the correct 2 document.getElementsByName( expando ).length === 2 + // buggy browsers will return more than the correct 0 document.getElementsByName( expando + 0 ).length; assertGetIdNotName = !document.getElementById( expando ); // Cleanup docElem.removeChild( div ); return pass; }); // If slice is not available, provide a backup try { slice.call( docElem.childNodes, 0 )[0].nodeType; } catch ( e ) { slice = function( i ) { var elem, results = []; for ( ; (elem = this[i]); i++ ) { results.push( elem ); } return results; }; } function Sizzle( selector, context, results, seed ) { results = results || []; context = context || document; var match, elem, xml, m, nodeType = context.nodeType; if ( !selector || typeof selector !== "string" ) { return results; } if ( nodeType !== 1 && nodeType !== 9 ) { return []; } xml = isXML( context ); if ( !xml && !seed ) { if ( (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); return results; } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); } Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { return Sizzle( expr, null, null, [ elem ] ).length > 0; }; // Returns a function to use in pseudos for input types function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } // Returns a function to use in pseudos for buttons function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } // Returns a function to use in pseudos for positionals function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( nodeType ) { if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (see #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes } else { // If no nodeType, this is expected to be an array for ( ; (node = elem[i]); i++ ) { // Do not traverse comment nodes ret += getText( node ); } } return ret; }; isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; // Element contains another contains = Sizzle.contains = docElem.contains ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); } : docElem.compareDocumentPosition ? function( a, b ) { return b && !!( a.compareDocumentPosition( b ) & 16 ); } : function( a, b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } return false; }; Sizzle.attr = function( elem, name ) { var val, xml = isXML( elem ); if ( !xml ) { name = name.toLowerCase(); } if ( (val = Expr.attrHandle[ name ]) ) { return val( elem ); } if ( xml || assertAttributes ) { return elem.getAttribute( name ); } val = elem.getAttributeNode( name ); return val ? typeof elem[ name ] === "boolean" ? elem[ name ] ? name : null : val.specified ? val.value : null : null; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, // IE6/7 return a modified href attrHandle: assertHrefNotNormalized ? {} : { "href": function( elem ) { return elem.getAttribute( "href", 2 ); }, "type": function( elem ) { return elem.getAttribute("type"); } }, find: { "ID": assertGetIdNotName ? function( id, context, xml ) { if ( typeof context.getElementById !== strundefined && !xml ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } } : function( id, context, xml ) { if ( typeof context.getElementById !== strundefined && !xml ) { var m = context.getElementById( id ); return m ? m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? [m] : undefined : []; } }, "TAG": assertTagNameNoComments ? function( tag, context ) { if ( typeof context.getElementsByTagName !== strundefined ) { return context.getElementsByTagName( tag ); } } : function( tag, context ) { var results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { var elem, tmp = [], i = 0; for ( ; (elem = results[i]); i++ ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }, "NAME": assertUsableName && function( tag, context ) { if ( typeof context.getElementsByName !== strundefined ) { return context.getElementsByName( name ); } }, "CLASS": assertUsableClassName && function( className, context, xml ) { if ( typeof context.getElementsByClassName !== strundefined && !xml ) { return context.getElementsByClassName( className ); } } }, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( rbackslash, "" ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 3 xn-component of xn+y argument ([+-]?\d*n|) 4 sign of xn-component 5 x of xn-component 6 sign of y-component 7 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1] === "nth" ) { // nth-child requires argument if ( !match[2] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); // other types prohibit arguments } else if ( match[2] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var unquoted, excess; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } if ( match[3] ) { match[2] = match[3]; } else if ( (unquoted = match[4]) ) { // Only check arguments that contain a pseudo if ( rpseudo.test(unquoted) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index unquoted = unquoted.slice( 0, excess ); match[0] = match[0].slice( 0, excess ); } match[2] = unquoted; } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "ID": assertGetIdNotName ? function( id ) { id = id.replace( rbackslash, "" ); return function( elem ) { return elem.getAttribute("id") === id; }; } : function( id ) { id = id.replace( rbackslash, "" ); return function( elem ) { var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); return node && node.value === id; }; }, "TAG": function( nodeName ) { if ( nodeName === "*" ) { return function() { return true; }; } nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); return function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ expando ][ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem, context ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.substr( result.length - check.length ) === check : operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, argument, first, last ) { if ( type === "nth" ) { return function( elem ) { var node, diff, parent = elem.parentNode; if ( first === 1 && last === 0 ) { return true; } if ( parent ) { diff = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { diff++; if ( elem === node ) { break; } } } } // Incorporate the offset (or cast to NaN), then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); }; } return function( elem ) { var node = elem; switch ( type ) { case "only": case "first": while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } if ( type === "first" ) { return true; } node = elem; /* falls through */ case "last": while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } return true; } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), // not comment, processing instructions, or others // Thanks to Diego Perini for the nodeName shortcut // Greater than "@" means alpha characters (specifically not starting with "#" or "?") var nodeType; elem = elem.firstChild; while ( elem ) { if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { return false; } elem = elem.nextSibling; } return true; }, "header": function( elem ) { return rheader.test( elem.nodeName ); }, "text": function( elem ) { var type, attr; // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() === "input" && (type = elem.type) === "text" && ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); }, // Input types "radio": createInputPseudo("radio"), "checkbox": createInputPseudo("checkbox"), "file": createInputPseudo("file"), "password": createInputPseudo("password"), "image": createInputPseudo("image"), "submit": createButtonPseudo("submit"), "reset": createButtonPseudo("reset"), "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "focus": function( elem ) { var doc = elem.ownerDocument; return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, "active": function( elem ) { return elem === elem.ownerDocument.activeElement; }, // Positional types "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { for ( var i = 0; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { for ( var i = 1; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; function siblingCheck( a, b, ret ) { if ( a === b ) { return ret; } var cur = a.nextSibling; while ( cur ) { if ( cur === b ) { return -1; } cur = cur.nextSibling; } return 1; } sortOrder = docElem.compareDocumentPosition ? function( a, b ) { if ( a === b ) { hasDuplicate = true; return 0; } return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition : a.compareDocumentPosition(b) & 4 ) ? -1 : 1; } : function( a, b ) { // The nodes are identical, we can exit early if ( a === b ) { hasDuplicate = true; return 0; // Fallback to using sourceIndex (in IE) if it's available on both nodes } else if ( a.sourceIndex && b.sourceIndex ) { return a.sourceIndex - b.sourceIndex; } var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup; // If the nodes are siblings (or identical) we can do a quick check if ( aup === bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected } else if ( !aup ) { return -1; } else if ( !bup ) { return 1; } // Otherwise they're somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison while ( cur ) { ap.unshift( cur ); cur = cur.parentNode; } cur = bup; while ( cur ) { bp.unshift( cur ); cur = cur.parentNode; } al = ap.length; bl = bp.length; // Start walking down the tree looking for a discrepancy for ( var i = 0; i < al && i < bl; i++ ) { if ( ap[i] !== bp[i] ) { return siblingCheck( ap[i], bp[i] ); } } // We ended someplace up the tree so do a sibling check return i === al ? siblingCheck( a, bp[i], -1 ) : siblingCheck( ap[i], b, 1 ); }; // Always assume the presence of duplicates if sort doesn't // pass them to our comparison function (as in Google Chrome). [0, 0].sort( sortOrder ); baseHasDuplicate = !hasDuplicate; // Document sorting and removing duplicates Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], i = 1, j = 0; hasDuplicate = baseHasDuplicate; results.sort( sortOrder ); if ( hasDuplicate ) { for ( ; (elem = results[i]); i++ ) { if ( elem === results[ i - 1 ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } return results; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ expando ][ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( tokens = [] ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { tokens.push( matched = new Token( match.shift() ) ); soFar = soFar.slice( matched.length ); // Cast descendant combinators to space matched.type = match[0].replace( rtrim, " " ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { tokens.push( matched = new Token( match.shift() ) ); soFar = soFar.slice( matched.length ); matched.type = type; matched.matches = match; } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && combinator.dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( checkNonElements || elem.nodeType === 1 ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( !xml ) { var cache, dirkey = dirruns + " " + doneName + " ", cachedkey = dirkey + cachedruns; while ( (elem = elem[ dir ]) ) { if ( checkNonElements || elem.nodeType === 1 ) { if ( (cache = elem[ expando ]) === cachedkey ) { return elem.sizset; } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { if ( elem.sizset ) { return elem; } } else { elem[ expando ] = cachedkey; if ( matcher( elem, context, xml ) ) { elem.sizset = true; return elem; } elem.sizset = false; } } } } else { while ( (elem = elem[ dir ]) ) { if ( checkNonElements || elem.nodeType === 1 ) { if ( matcher( elem, context, xml ) ) { return elem; } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && tokens.join("") ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, expandContext ) { var elem, j, matcher, setMatched = [], matchedCount = 0, i = "0", unmatched = seed && [], outermost = expandContext != null, contextBackup = outermostContext, // We must always have either seed elements or context elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), // Nested matchers should use non-integer dirruns dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); if ( outermost ) { outermostContext = context !== document && context; cachedruns = superMatcher.el; } // Add elements passing elementMatchers directly to results for ( ; (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { for ( j = 0; (matcher = elementMatchers[j]); j++ ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; cachedruns = ++superMatcher.el; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { for ( j = 0; (matcher = setMatchers[j]); j++ ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; superMatcher.el = 0; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ expando ][ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !group ) { group = tokenize( selector ); } i = group.length; while ( i-- ) { cached = matcherFromTokens( group[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); } return cached; }; function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function select( selector, context, results, seed, xml ) { var i, tokens, token, type, find, match = tokenize( selector ), j = match.length; if ( !seed ) { // Try to minimize operations if there is only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && !xml && Expr.relative[ tokens[1].type ] ) { context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; if ( !context ) { return results; } selector = selector.slice( tokens.shift().length ); } // Fetch a seed set for right-to-left matching for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( rbackslash, "" ), rsibling.test( tokens[0].type ) && context.parentNode || context, xml )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && tokens.join(""); if ( !selector ) { push.apply( results, slice.call( seed, 0 ) ); return results; } break; } } } } } // Compile and execute a filtering function // Provide `match` to avoid retokenization if we modified the selector above compile( selector, match )( seed, context, xml, results, rsibling.test( selector ) ); return results; } if ( document.querySelectorAll ) { (function() { var disconnectedMatch, oldSelect = select, rescape = /'|\\/g, rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA // A support test would require too much code (would include document ready) rbuggyQSA = [ ":focus" ], // matchesSelector(:active) reports false when true (IE9/Opera 11.5) // A support test would require too much code (would include document ready) // just skip matchesSelector for :active rbuggyMatches = [ ":active" ], matches = docElem.matchesSelector || docElem.mozMatchesSelector || docElem.webkitMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector; // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explictly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 div.innerHTML = ""; // IE8 - Some boolean attributes are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here (do not put tests after this one) if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } }); assert(function( div ) { // Opera 10-12/IE9 - ^= $= *= and empty values // Should not select anything div.innerHTML = "

        "; if ( div.querySelectorAll("[test^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here (do not put tests after this one) div.innerHTML = ""; if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push(":enabled", ":disabled"); } }); // rbuggyQSA always contains :focus, so no need for a length check rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); select = function( selector, context, results, seed, xml ) { // Only use querySelectorAll when not filtering, // when this is not xml, // and when no QSA bugs apply if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { var groups, i, old = true, nid = expando, newContext = context, newSelector = context.nodeType === 9 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + groups[i].join(""); } newContext = rsibling.test( selector ) && context.parentNode || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, slice.call( newContext.querySelectorAll( newSelector ), 0 ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } return oldSelect( selector, context, results, seed, xml ); }; if ( matches ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead try { matches.call( div, "[test!='']:sizzle" ); rbuggyMatches.push( "!=", pseudos ); } catch ( e ) {} }); // rbuggyMatches always contains :active and :focus, so no need for a length check rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); Sizzle.matchesSelector = function( elem, expr ) { // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); // rbuggyMatches always contains :active, so no need for an existence check if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch(e) {} } return Sizzle( expr, null, null, [ elem ] ).length > 0; }; } })(); } // Deprecated Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Back-compat function setFilters() {} Expr.filters = setFilters.prototype = Expr.pseudos; Expr.setFilters = new setFilters(); // Override sizzle attribute retrieval Sizzle.attr = jQuery.attr; jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; })( window ); var runtil = /Until$/, rparentsprev = /^(?:parents|prev(?:Until|All))/, isSimple = /^.[^:#\[\.,]*$/, rneedsContext = jQuery.expr.match.needsContext, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var i, l, length, n, r, ret, self = this; if ( typeof selector !== "string" ) { return jQuery( selector ).filter(function() { for ( i = 0, l = self.length; i < l; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }); } ret = this.pushStack( "", "find", selector ); for ( i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret ); if ( i > 0 ) { // Make sure that the results are unique for ( n = length; n < ret.length; n++ ) { for ( r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } } } return ret; }, has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, not: function( selector ) { return this.pushStack( winnow(this, selector, false), "not", selector); }, filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); }, is: function( selector ) { return !!selector && ( typeof selector === "string" ? // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". rneedsContext.test( selector ) ? jQuery( selector, this.context ).index( this[0] ) >= 0 : jQuery.filter( selector, this ).length > 0 : this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, ret = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { cur = this[i]; while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { ret.push( cur ); break; } cur = cur.parentNode; } } ret = ret.length > 1 ? jQuery.unique( ret ) : ret; return this.pushStack( ret, "closest", selectors ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[0], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? all : jQuery.unique( all ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); jQuery.fn.andSelf = jQuery.fn.addBack; // A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected( node ) { return !node || !node.parentNode || node.parentNode.nodeType === 11; } function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( !runtil.test( name ) ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; if ( this.length > 1 && rparentsprev.test( name ) ) { ret = ret.reverse(); } return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); }; }); jQuery.extend({ filter: function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : jQuery.find.matches(expr, elems); }, dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { // Can't pass null or undefined to indexOf in Firefox 4 // Set to 0 to skip string check qualifier = qualifier || 0; if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal = !!qualifier.call( elem, i, elem ); return retVal === keep; }); } else if ( qualifier.nodeType ) { return jQuery.grep(elements, function( elem, i ) { return ( elem === qualifier ) === keep; }); } else if ( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function( elem ) { return elem.nodeType === 1; }); if ( isSimple.test( qualifier ) ) { return jQuery.filter(qualifier, filtered, !keep); } else { qualifier = jQuery.filter( qualifier, filtered ); } } return jQuery.grep(elements, function( elem, i ) { return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; }); } function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rtbody = /]", "i"), rcheckableType = /^(?:checkbox|radio)$/, // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, rcleanScript = /^\s*\s*$/g, wrapMap = { option: [ 1, "" ], legend: [ 1, "
        ", "
        " ], thead: [ 1, "", "
        " ], tr: [ 2, "", "
        " ], td: [ 3, "", "
        " ], col: [ 2, "", "
        " ], area: [ 1, "", "" ], _default: [ 0, "", "" ] }, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement("div") ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. if ( !jQuery.support.htmlSerialize ) { wrapMap._default = [ 1, "X
        ", "
        " ]; } jQuery.fn.extend({ text: function( value ) { return jQuery.access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, wrapAll: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapAll( html.call(this, i) ); }); } if ( this[0] ) { // The elements to wrap the target around var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); if ( this[0].parentNode ) { wrap.insertBefore( this[0] ); } wrap.map(function() { var elem = this; while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { elem = elem.firstChild; } return elem; }).append( this ); } return this; }, wrapInner: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapInner( html.call(this, i) ); }); } return this.each(function() { var self = jQuery( this ), contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); } else { self.append( html ); } }); }, wrap: function( html ) { var isFunction = jQuery.isFunction( html ); return this.each(function(i) { jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); }); }, unwrap: function() { return this.parent().each(function() { if ( !jQuery.nodeName( this, "body" ) ) { jQuery( this ).replaceWith( this.childNodes ); } }).end(); }, append: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 ) { this.appendChild( elem ); } }); }, prepend: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 ) { this.insertBefore( elem, this.firstChild ); } }); }, before: function() { if ( !isDisconnected( this[0] ) ) { return this.domManip(arguments, false, function( elem ) { this.parentNode.insertBefore( elem, this ); }); } if ( arguments.length ) { var set = jQuery.clean( arguments ); return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); } }, after: function() { if ( !isDisconnected( this[0] ) ) { return this.domManip(arguments, false, function( elem ) { this.parentNode.insertBefore( elem, this.nextSibling ); }); } if ( arguments.length ) { var set = jQuery.clean( arguments ); return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); } }, // keepData is for internal use only--do not document remove: function( selector, keepData ) { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( elem.getElementsByTagName("*") ); jQuery.cleanData( [ elem ] ); } if ( elem.parentNode ) { elem.parentNode.removeChild( elem ); } } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( elem.getElementsByTagName("*") ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function () { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return jQuery.access( this, function( value ) { var elem = this[0] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for (; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[i] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( elem.getElementsByTagName( "*" ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function( value ) { if ( !isDisconnected( this[0] ) ) { // Make sure that the elements are removed from the DOM before they are inserted // this can help fix replacing a parent with child elements if ( jQuery.isFunction( value ) ) { return this.each(function(i) { var self = jQuery(this), old = self.html(); self.replaceWith( value.call( this, i, old ) ); }); } if ( typeof value !== "string" ) { value = jQuery( value ).detach(); } return this.each(function() { var next = this.nextSibling, parent = this.parentNode; jQuery( this ).remove(); if ( next ) { jQuery(next).before( value ); } else { jQuery(parent).append( value ); } }); } return this.length ? this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : this; }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, table, callback ) { // Flatten any nested arrays args = [].concat.apply( [], args ); var results, first, fragment, iNoClone, i = 0, value = args[0], scripts = [], l = this.length; // We can't cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { return this.each(function() { jQuery(this).domManip( args, table, callback ); }); } if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); args[0] = value.call( this, i, table ? self.html() : undefined ); self.domManip( args, table, callback ); }); } if ( this[0] ) { results = jQuery.buildFragment( args, this, scripts ); fragment = results.fragment; first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { table = table && jQuery.nodeName( first, "tr" ); // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). // Fragments from the fragment cache must always be cloned and never used in place. for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { callback.call( table && jQuery.nodeName( this[i], "table" ) ? findOrAppend( this[i], "tbody" ) : this[i], i === iNoClone ? fragment : jQuery.clone( fragment, true, true ) ); } } // Fix #11809: Avoid leaking memory fragment = first = null; if ( scripts.length ) { jQuery.each( scripts, function( i, elem ) { if ( elem.src ) { if ( jQuery.ajax ) { jQuery.ajax({ url: elem.src, type: "GET", dataType: "script", async: false, global: false, "throws": true }); } else { jQuery.error("no ajax"); } } else { jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); } if ( elem.parentNode ) { elem.parentNode.removeChild( elem ); } }); } } return this; } }); function findOrAppend( elem, tag ) { return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function cloneFixAttributes( src, dest ) { var nodeName; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } // clearAttributes removes the attributes, which we don't want, // but also removes the attachEvent events, which we *do* want if ( dest.clearAttributes ) { dest.clearAttributes(); } // mergeAttributes, in contrast, only merges back on the // original attributes, not the events if ( dest.mergeAttributes ) { dest.mergeAttributes( src ); } nodeName = dest.nodeName.toLowerCase(); if ( nodeName === "object" ) { // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; // IE blanks contents when cloning scripts } else if ( nodeName === "script" && dest.text !== src.text ) { dest.text = src.text; } // Event data gets referenced instead of copied if the expando // gets copied too dest.removeAttribute( jQuery.expando ); } jQuery.buildFragment = function( args, context, scripts ) { var fragment, cacheable, cachehit, first = args[ 0 ]; // Set context from what may come in as undefined or a jQuery collection or a node // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception context = context || document; context = !context.nodeType && context[0] || context; context = context.ownerDocument || context; // Only cache "small" (1/2 KB) HTML strings that are associated with the main document // Cloning options loses the selected state, so don't cache them // IE 6 doesn't like it when you put or elements in a fragment // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && first.charAt(0) === "<" && !rnocache.test( first ) && (jQuery.support.checkClone || !rchecked.test( first )) && (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { // Mark cacheable and look for a hit cacheable = true; fragment = jQuery.fragments[ first ]; cachehit = fragment !== undefined; } if ( !fragment ) { fragment = context.createDocumentFragment(); jQuery.clean( args, context, fragment, scripts ); // Update the cache, but only store false // unless this is a second parsing of the same content if ( cacheable ) { jQuery.fragments[ first ] = cachehit && fragment; } } return { fragment: fragment, cacheable: cacheable }; }; jQuery.fragments = {}; jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), l = insert.length, parent = this.length === 1 && this[0].parentNode; if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { insert[ original ]( this[0] ); return this; } else { for ( ; i < l; i++ ) { elems = ( i > 0 ? this.clone(true) : this ).get(); jQuery( insert[i] )[ original ]( elems ); ret = ret.concat( elems ); } return this.pushStack( ret, name, insert.selector ); } }; }); function getAll( elem ) { if ( typeof elem.getElementsByTagName !== "undefined" ) { return elem.getElementsByTagName( "*" ); } else if ( typeof elem.querySelectorAll !== "undefined" ) { return elem.querySelectorAll( "*" ); } else { return []; } } // Used in clean, fixes the defaultChecked property function fixDefaultChecked( elem ) { if ( rcheckableType.test( elem.type ) ) { elem.defaultChecked = elem.checked; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var srcElements, destElements, i, clone; if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { // IE copies events bound via attachEvent when using cloneNode. // Calling detachEvent on the clone will also remove the events // from the original. In order to get around this, we use some // proprietary methods to clear the events. Thanks to MooTools // guys for this hotness. cloneFixAttributes( elem, clone ); // Using Sizzle here is crazy slow, so we use getElementsByTagName instead srcElements = getAll( elem ); destElements = getAll( clone ); // Weird iteration because IE will replace the length property // with an element if you are cloning the body and one of the // elements on the page has a name or id of "length" for ( i = 0; srcElements[i]; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[i] ) { cloneFixAttributes( srcElements[i], destElements[i] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { cloneCopyEvent( elem, clone ); if ( deepDataAndEvents ) { srcElements = getAll( elem ); destElements = getAll( clone ); for ( i = 0; srcElements[i]; ++i ) { cloneCopyEvent( srcElements[i], destElements[i] ); } } } srcElements = destElements = null; // Return the cloned set return clone; }, clean: function( elems, context, fragment, scripts ) { var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, safe = context === document && safeFragment, ret = []; // Ensure that context is a document if ( !context || typeof context.createDocumentFragment === "undefined" ) { context = document; } // Use the already-created safe fragment if context permits for ( i = 0; (elem = elems[i]) != null; i++ ) { if ( typeof elem === "number" ) { elem += ""; } if ( !elem ) { continue; } // Convert html string into DOM nodes if ( typeof elem === "string" ) { if ( !rhtml.test( elem ) ) { elem = context.createTextNode( elem ); } else { // Ensure a safe container in which to render the html safe = safe || createSafeFragment( context ); div = context.createElement("div"); safe.appendChild( div ); // Fix "XHTML"-style tags in all browsers elem = elem.replace(rxhtmlTag, "<$1>"); // Go to html and back, then peel off extra wrappers tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; depth = wrap[0]; div.innerHTML = wrap[1] + elem + wrap[2]; // Move to the right depth while ( depth-- ) { div = div.lastChild; } // Remove IE's autoinserted from table fragments if ( !jQuery.support.tbody ) { // String was a , *may* have spurious hasBody = rtbody.test(elem); tbody = tag === "table" && !hasBody ? div.firstChild && div.firstChild.childNodes : // String was a bare or wrap[1] === "
        " && !hasBody ? div.childNodes : []; for ( j = tbody.length - 1; j >= 0 ; --j ) { if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { tbody[ j ].parentNode.removeChild( tbody[ j ] ); } } } // IE completely kills leading whitespace when innerHTML is used if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); } elem = div.childNodes; // Take out of fragment container (we need a fresh div each time) div.parentNode.removeChild( div ); } } if ( elem.nodeType ) { ret.push( elem ); } else { jQuery.merge( ret, elem ); } } // Fix #11356: Clear elements from safeFragment if ( div ) { elem = div = safe = null; } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !jQuery.support.appendChecked ) { for ( i = 0; (elem = ret[i]) != null; i++ ) { if ( jQuery.nodeName( elem, "input" ) ) { fixDefaultChecked( elem ); } else if ( typeof elem.getElementsByTagName !== "undefined" ) { jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); } } } // Append elements to a provided document fragment if ( fragment ) { // Special handling of each script element handleScript = function( elem ) { // Check if we consider it executable if ( !elem.type || rscriptType.test( elem.type ) ) { // Detach the script and store it in the scripts array (if provided) or the fragment // Return truthy to indicate that it has been handled return scripts ? scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : fragment.appendChild( elem ); } }; for ( i = 0; (elem = ret[i]) != null; i++ ) { // Check if we're done after handling an executable script if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { // Append to fragment and handle embedded scripts fragment.appendChild( elem ); if ( typeof elem.getElementsByTagName !== "undefined" ) { // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); // Splice the scripts into ret after their former ancestor and advance our index beyond them ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); i += jsTags.length; } } } } return ret; }, cleanData: function( elems, /* internal */ acceptData ) { var data, id, elem, type, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, deleteExpando = jQuery.support.deleteExpando, special = jQuery.event.special; for ( ; (elem = elems[i]) != null; i++ ) { if ( acceptData || jQuery.acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( deleteExpando ) { delete elem[ internalKey ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( internalKey ); } else { elem[ internalKey ] = null; } jQuery.deletedIds.push( id ); } } } } } }); // Limit scope pollution from any deprecated API (function() { var matched, browser; // Use of jQuery.browser is frowned upon. // More details: http://api.jquery.com/jQuery.browser // jQuery.uaMatch maintained for back-compat jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; matched = jQuery.uaMatch( navigator.userAgent ); browser = {}; if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if ( browser.chrome ) { browser.webkit = true; } else if ( browser.webkit ) { browser.safari = true; } jQuery.browser = browser; jQuery.sub = function() { function jQuerySub( selector, context ) { return new jQuerySub.fn.init( selector, context ); } jQuery.extend( true, jQuerySub, this ); jQuerySub.superclass = this; jQuerySub.fn = jQuerySub.prototype = this(); jQuerySub.fn.constructor = jQuerySub; jQuerySub.sub = this.sub; jQuerySub.fn.init = function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { context = jQuerySub( context ); } return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); }; jQuerySub.fn.init.prototype = jQuerySub.fn; var rootjQuerySub = jQuerySub(document); return jQuerySub; }; })(); var curCSS, iframe, iframeDoc, ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, rposition = /^(top|right|bottom|left)$/, // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, rmargin = /^margin/, rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), elemdisplay = { BODY: "block" }, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: 0, fontWeight: 400 }, cssExpand = [ "Top", "Right", "Bottom", "Left" ], cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], eventsToggle = jQuery.fn.toggle; // return a css property mapped to a potentially vendor prefixed property function vendorPropName( style, name ) { // shortcut for names that are not vendor prefixed if ( name in style ) { return name; } // check for vendor prefixed names var capName = name.charAt(0).toUpperCase() + name.slice(1), origName = name, i = cssPrefixes.length; while ( i-- ) { name = cssPrefixes[ i ] + capName; if ( name in style ) { return name; } } return origName; } function isHidden( elem, el ) { elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); } function showHide( elements, show ) { var elem, display, values = [], index = 0, length = elements.length; for ( ; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } values[ index ] = jQuery._data( elem, "olddisplay" ); if ( show ) { // Reset the inline display of this element to learn if it is // being hidden by cascaded rules or not if ( !values[ index ] && elem.style.display === "none" ) { elem.style.display = ""; } // Set elements which have been overridden with display: none // in a stylesheet to whatever the default browser style is // for such an element if ( elem.style.display === "" && isHidden( elem ) ) { values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); } } else { display = curCSS( elem, "display" ); if ( !values[ index ] && display !== "none" ) { jQuery._data( elem, "olddisplay", display ); } } } // Set the display of most of the elements in a second loop // to avoid the constant reflow for ( index = 0; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } if ( !show || elem.style.display === "none" || elem.style.display === "" ) { elem.style.display = show ? values[ index ] || "" : "none"; } } return elements; } jQuery.fn.extend({ css: function( name, value ) { return jQuery.access( this, function( elem, name, value ) { return value !== undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); }, name, value, arguments.length > 1 ); }, show: function() { return showHide( this, true ); }, hide: function() { return showHide( this ); }, toggle: function( state, fn2 ) { var bool = typeof state === "boolean"; if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { return eventsToggle.apply( this, arguments ); } return this.each(function() { if ( bool ? state : isHidden( this ) ) { jQuery( this ).show(); } else { jQuery( this ).hide(); } }); } }); jQuery.extend({ // Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks: { opacity: { get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity var ret = curCSS( elem, "opacity" ); return ret === "" ? "1" : ret; } } } }, // Exclude the following css properties to add px cssNumber: { "fillOpacity": true, "fontWeight": true, "lineHeight": true, "opacity": true, "orphans": true, "widows": true, "zIndex": true, "zoom": true }, // Add in properties whose names you wish to fix before // setting or getting the value cssProps: { // normalize float css property "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" }, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { // Don't set styles on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { return; } // Make sure that we're working with the right name var ret, type, hooks, origName = jQuery.camelCase( name ), style = elem.style; name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // Check if we're setting a value if ( value !== undefined ) { type = typeof value; // convert relative number strings (+= or -=) to relative numbers. #7345 if ( type === "string" && (ret = rrelNum.exec( value )) ) { value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type = "number"; } // Make sure that NaN and null values aren't set. See: #7116 if ( value == null || type === "number" && isNaN( value ) ) { return; } // If a number was passed in, add 'px' to the (except for certain CSS properties) if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { // Wrapped to prevent IE from throwing errors when 'invalid' values are provided // Fixes bug #5509 try { style[ name ] = value; } catch(e) {} } } else { // If a hook was provided get the non-computed value from there if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { return ret; } // Otherwise just get the value from the style object return style[ name ]; } }, css: function( elem, name, numeric, extra ) { var val, num, hooks, origName = jQuery.camelCase( name ); // Make sure that we're working with the right name name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // If a hook was provided get the computed value from there if ( hooks && "get" in hooks ) { val = hooks.get( elem, true, extra ); } // Otherwise, if a way to get the computed value exists, use that if ( val === undefined ) { val = curCSS( elem, name ); } //convert "normal" to computed value if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform[ name ]; } // Return, converting to number if forced or a qualifier was provided and val looks numeric if ( numeric || extra !== undefined ) { num = parseFloat( val ); return numeric || jQuery.isNumeric( num ) ? num || 0 : val; } return val; }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { var ret, name, old = {}; // Remember the old values, and insert the new ones for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } ret = callback.call( elem ); // Revert the old values for ( name in options ) { elem.style[ name ] = old[ name ]; } return ret; } }); // NOTE: To any future maintainer, we've window.getComputedStyle // because jsdom on node.js will break without it. if ( window.getComputedStyle ) { curCSS = function( elem, name ) { var ret, width, minWidth, maxWidth, computed = window.getComputedStyle( elem, null ), style = elem.style; if ( computed ) { // getPropertyValue is only needed for .css('filter') in IE9, see #12537 ret = computed.getPropertyValue( name ) || computed[ name ]; if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { ret = jQuery.style( elem, name ); } // A tribute to the "awesome hack by Dean Edwards" // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { width = style.width; minWidth = style.minWidth; maxWidth = style.maxWidth; style.minWidth = style.maxWidth = style.width = ret; ret = computed.width; style.width = width; style.minWidth = minWidth; style.maxWidth = maxWidth; } } return ret; }; } else if ( document.documentElement.currentStyle ) { curCSS = function( elem, name ) { var left, rsLeft, ret = elem.currentStyle && elem.currentStyle[ name ], style = elem.style; // Avoid setting ret to empty string here // so we don't default to auto if ( ret == null && style && style[ name ] ) { ret = style[ name ]; } // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels // but not position css attributes, as those are proportional to the parent element instead // and we can't measure the parent instead because it might trigger a "stacking dolls" problem if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { // Remember the original values left = style.left; rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; // Put in the new values to get a computed value out if ( rsLeft ) { elem.runtimeStyle.left = elem.currentStyle.left; } style.left = name === "fontSize" ? "1em" : ret; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; if ( rsLeft ) { elem.runtimeStyle.left = rsLeft; } } return ret === "" ? "auto" : ret; }; } function setPositiveNumber( elem, value, subtract ) { var matches = rnumsplit.exec( value ); return matches ? Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : value; } function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? // If we already have the right measurement, avoid augmentation 4 : // Otherwise initialize for horizontal or vertical properties name === "width" ? 1 : 0, val = 0; for ( ; i < 4; i += 2 ) { // both box models exclude margin, so add it if we want it if ( extra === "margin" ) { // we use jQuery.css instead of curCSS here // because of the reliableMarginRight CSS hook! val += jQuery.css( elem, extra + cssExpand[ i ], true ); } // From this point on we use curCSS for maximum performance (relevant in animations) if ( isBorderBox ) { // border-box includes padding, so remove it if we want content if ( extra === "content" ) { val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; } // at this point, extra isn't border nor margin, so remove border if ( extra !== "margin" ) { val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; } } else { // at this point, extra isn't content, so add padding val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; // at this point, extra isn't content nor padding, so add border if ( extra !== "padding" ) { val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; } } } return val; } function getWidthOrHeight( elem, name, extra ) { // Start with offset property, which is equivalent to the border-box value var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, valueIsBorderBox = true, isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; // some non-html elements return undefined for offsetWidth, so check for null/undefined // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 if ( val <= 0 || val == null ) { // Fall back to computed then uncomputed css if necessary val = curCSS( elem, name ); if ( val < 0 || val == null ) { val = elem.style[ name ]; } // Computed unit is not pixels. Stop here and return. if ( rnumnonpx.test(val) ) { return val; } // we need the check for style in case a browser which returns unreliable values // for getComputedStyle silently falls back to the reliable elem.style valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); // Normalize "", auto, and prepare for extra val = parseFloat( val ) || 0; } // use the active box-sizing model to add/subtract irrelevant styles return ( val + augmentWidthOrHeight( elem, name, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox ) ) + "px"; } // Try to determine the default display value of an element function css_defaultDisplay( nodeName ) { if ( elemdisplay[ nodeName ] ) { return elemdisplay[ nodeName ]; } var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), display = elem.css("display"); elem.remove(); // If the simple way fails, // get element's real default display by attaching it to a temp iframe if ( display === "none" || display === "" ) { // Use the already-created iframe if possible iframe = document.body.appendChild( iframe || jQuery.extend( document.createElement("iframe"), { frameBorder: 0, width: 0, height: 0 }) ); // Create a cacheable copy of the iframe document on first call. // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML // document to it; WebKit & Firefox won't allow reusing the iframe document. if ( !iframeDoc || !iframe.createElement ) { iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; iframeDoc.write(""); iframeDoc.close(); } elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); display = curCSS( elem, "display" ); document.body.removeChild( iframe ); } // Store the correct default display elemdisplay[ nodeName ] = display; return display; } jQuery.each([ "height", "width" ], function( i, name ) { jQuery.cssHooks[ name ] = { get: function( elem, computed, extra ) { if ( computed ) { // certain elements can have dimension info if we invisibly show them // however, it must have a current display style that would benefit from this if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { return jQuery.swap( elem, cssShow, function() { return getWidthOrHeight( elem, name, extra ); }); } else { return getWidthOrHeight( elem, name, extra ); } } }, set: function( elem, value, extra ) { return setPositiveNumber( elem, value, extra ? augmentWidthOrHeight( elem, name, extra, jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" ) : 0 ); } }; }); if ( !jQuery.support.opacity ) { jQuery.cssHooks.opacity = { get: function( elem, computed ) { // IE uses filters for opacity return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : computed ? "1" : ""; }, set: function( elem, value ) { var style = elem.style, currentStyle = elem.currentStyle, opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", filter = currentStyle && currentStyle.filter || style.filter || ""; // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom = 1; // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && style.removeAttribute ) { // Setting style.filter to null, "" & " " still leave "filter:" in the cssText // if "filter:" is present at all, clearType is disabled, we want to avoid this // style.removeAttribute is IE Only, but so apparently is this code path... style.removeAttribute( "filter" ); // if there there is no filter style applied in a css rule, we are done if ( currentStyle && !currentStyle.filter ) { return; } } // otherwise, set new filter values style.filter = ralpha.test( filter ) ? filter.replace( ralpha, opacity ) : filter + " " + opacity; } }; } // These hooks cannot be added until DOM ready because the support test // for it is not run until after DOM ready jQuery(function() { if ( !jQuery.support.reliableMarginRight ) { jQuery.cssHooks.marginRight = { get: function( elem, computed ) { // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right // Work around by temporarily setting element display to inline-block return jQuery.swap( elem, { "display": "inline-block" }, function() { if ( computed ) { return curCSS( elem, "marginRight" ); } }); } }; } // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 // getComputedStyle returns percent when specified for top/left/bottom/right // rather than make the css module depend on the offset module, we just check for it here if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { jQuery.each( [ "top", "left" ], function( i, prop ) { jQuery.cssHooks[ prop ] = { get: function( elem, computed ) { if ( computed ) { var ret = curCSS( elem, prop ); // if curCSS returns percentage, fallback to offset return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; } } }; }); } }); if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.hidden = function( elem ) { return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); }; jQuery.expr.filters.visible = function( elem ) { return !jQuery.expr.filters.hidden( elem ); }; } // These hooks are used by animate to expand properties jQuery.each({ margin: "", padding: "", border: "Width" }, function( prefix, suffix ) { jQuery.cssHooks[ prefix + suffix ] = { expand: function( value ) { var i, // assumes a single number if not a string parts = typeof value === "string" ? value.split(" ") : [ value ], expanded = {}; for ( i = 0; i < 4; i++ ) { expanded[ prefix + cssExpand[ i ] + suffix ] = parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; } return expanded; } }; if ( !rmargin.test( prefix ) ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } }); var r20 = /%20/g, rbracket = /\[\]$/, rCRLF = /\r?\n/g, rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, rselectTextarea = /^(?:select|textarea)/i; jQuery.fn.extend({ serialize: function() { return jQuery.param( this.serializeArray() ); }, serializeArray: function() { return this.map(function(){ return this.elements ? jQuery.makeArray( this.elements ) : this; }) .filter(function(){ return this.name && !this.disabled && ( this.checked || rselectTextarea.test( this.nodeName ) || rinput.test( this.type ) ); }) .map(function( i, elem ){ var val = jQuery( this ).val(); return val == null ? null : jQuery.isArray( val ) ? jQuery.map( val, function( val, i ){ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; }) : { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; }).get(); } }); //Serialize an array of form elements or a set of //key/values into a query string jQuery.param = function( a, traditional ) { var prefix, s = [], add = function( key, value ) { // If value is a function, invoke it and return its value value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); }; // Set traditional to true for jQuery <= 1.3.2 behavior. if ( traditional === undefined ) { traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; } // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); }); } else { // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( prefix in a ) { buildParams( prefix, a[ prefix ], traditional, add ); } } // Return the resulting serialization return s.join( "&" ).replace( r20, "+" ); }; function buildParams( prefix, obj, traditional, add ) { var name; if ( jQuery.isArray( obj ) ) { // Serialize array item. jQuery.each( obj, function( i, v ) { if ( traditional || rbracket.test( prefix ) ) { // Treat each array item as a scalar. add( prefix, v ); } else { // If array item is non-scalar (array or object), encode its // numeric index to resolve deserialization ambiguity issues. // Note that rack (as of 1.0.0) can't currently deserialize // nested arrays properly, and attempting to do so may cause // a server error. Possible fixes are to modify rack's // deserialization algorithm or to provide an option or flag // to force array serialization to be shallow. buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); } }); } else if ( !traditional && jQuery.type( obj ) === "object" ) { // Serialize object item. for ( name in obj ) { buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); } } else { // Serialize scalar item. add( prefix, obj ); } } var // Document location ajaxLocParts, ajaxLocation, rhash = /#.*$/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL // #7653, #8125, #8152: local protocol detection rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, rquery = /\?/, rscript = /)<[^<]*)*<\/script>/gi, rts = /([?&])_=[^&]*/, rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, // Keep a copy of the old load method _load = jQuery.fn.load, /* Prefilters * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) * 2) These are called: * - BEFORE asking for a transport * - AFTER param serialization (s.data is a string if s.processData is true) * 3) key is the dataType * 4) the catchall symbol "*" can be used * 5) execution will start with transport dataType and THEN continue down to "*" if needed */ prefilters = {}, /* Transports bindings * 1) key is the dataType * 2) the catchall symbol "*" can be used * 3) selection will start with transport dataType and THEN go to "*" if needed */ transports = {}, // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression allTypes = ["*/"] + ["*"]; // #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set try { ajaxLocation = location.href; } catch( e ) { // Use the href attribute of an A element // since IE will modify it given document.location ajaxLocation = document.createElement( "a" ); ajaxLocation.href = ""; ajaxLocation = ajaxLocation.href; } // Segment location into parts ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { // dataTypeExpression is optional and defaults to "*" return function( dataTypeExpression, func ) { if ( typeof dataTypeExpression !== "string" ) { func = dataTypeExpression; dataTypeExpression = "*"; } var dataType, list, placeBefore, dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), i = 0, length = dataTypes.length; if ( jQuery.isFunction( func ) ) { // For each dataType in the dataTypeExpression for ( ; i < length; i++ ) { dataType = dataTypes[ i ]; // We control if we're asked to add before // any existing element placeBefore = /^\+/.test( dataType ); if ( placeBefore ) { dataType = dataType.substr( 1 ) || "*"; } list = structure[ dataType ] = structure[ dataType ] || []; // then we add to the structure accordingly list[ placeBefore ? "unshift" : "push" ]( func ); } } }; } // Base inspection function for prefilters and transports function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, dataType /* internal */, inspected /* internal */ ) { dataType = dataType || options.dataTypes[ 0 ]; inspected = inspected || {}; inspected[ dataType ] = true; var selection, list = structure[ dataType ], i = 0, length = list ? list.length : 0, executeOnly = ( structure === prefilters ); for ( ; i < length && ( executeOnly || !selection ); i++ ) { selection = list[ i ]( options, originalOptions, jqXHR ); // If we got redirected to another dataType // we try there if executing only and not done already if ( typeof selection === "string" ) { if ( !executeOnly || inspected[ selection ] ) { selection = undefined; } else { options.dataTypes.unshift( selection ); selection = inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, selection, inspected ); } } } // If we're only executing or nothing was selected // we try the catchall dataType if not done already if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { selection = inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, "*", inspected ); } // unnecessary when only executing (prefilters) // but it'll be ignored by the caller in that case return selection; } // A special extend for ajax options // that takes "flat" options (not to be deep extended) // Fixes #9887 function ajaxExtend( target, src ) { var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {}; for ( key in src ) { if ( src[ key ] !== undefined ) { ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; } } if ( deep ) { jQuery.extend( true, target, deep ); } } jQuery.fn.load = function( url, params, callback ) { if ( typeof url !== "string" && _load ) { return _load.apply( this, arguments ); } // Don't do a request if no elements are being requested if ( !this.length ) { return this; } var selector, type, response, self = this, off = url.indexOf(" "); if ( off >= 0 ) { selector = url.slice( off, url.length ); url = url.slice( 0, off ); } // If it's a function if ( jQuery.isFunction( params ) ) { // We assume that it's the callback callback = params; params = undefined; // Otherwise, build a param string } else if ( params && typeof params === "object" ) { type = "POST"; } // Request the remote document jQuery.ajax({ url: url, // if "type" variable is undefined, then "GET" method will be used type: type, dataType: "html", data: params, complete: function( jqXHR, status ) { if ( callback ) { self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); } } }).done(function( responseText ) { // Save response for use in complete callback response = arguments; // See if a selector was specified self.html( selector ? // Create a dummy div to hold the results jQuery("
        ") // inject the contents of the document in, removing the scripts // to avoid any 'Permission Denied' errors in IE .append( responseText.replace( rscript, "" ) ) // Locate the specified elements .find( selector ) : // If not, just inject the full result responseText ); }); return this; }; // Attach a bunch of functions for handling common AJAX events jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ jQuery.fn[ o ] = function( f ){ return this.on( o, f ); }; }); jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // shift arguments if data argument was omitted if ( jQuery.isFunction( data ) ) { type = type || callback; callback = data; data = undefined; } return jQuery.ajax({ type: method, url: url, data: data, success: callback, dataType: type }); }; }); jQuery.extend({ getScript: function( url, callback ) { return jQuery.get( url, undefined, callback, "script" ); }, getJSON: function( url, data, callback ) { return jQuery.get( url, data, callback, "json" ); }, // Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. ajaxSetup: function( target, settings ) { if ( settings ) { // Building a settings object ajaxExtend( target, jQuery.ajaxSettings ); } else { // Extending ajaxSettings settings = target; target = jQuery.ajaxSettings; } ajaxExtend( target, settings ); return target; }, ajaxSettings: { url: ajaxLocation, isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), global: true, type: "GET", contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: true, async: true, /* timeout: 0, data: null, dataType: null, username: null, password: null, cache: null, throws: false, traditional: false, headers: {}, */ accepts: { xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": allTypes }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: "responseXML", text: "responseText" }, // List of data converters // 1) key format is "source_type destination_type" (a single space in-between) // 2) the catchall symbol "*" can be used for source_type converters: { // Convert anything to text "* text": window.String, // Text to html (true = no transformation) "text html": true, // Evaluate text as a json expression "text json": jQuery.parseJSON, // Parse text as xml "text xml": jQuery.parseXML }, // For options that shouldn't be deep extended: // you can add your own custom options here if // and when you create one that shouldn't be // deep extended (see ajaxExtend) flatOptions: { context: true, url: true } }, ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), ajaxTransport: addToPrefiltersOrTransports( transports ), // Main method ajax: function( url, options ) { // If url is an object, simulate pre-1.5 signature if ( typeof url === "object" ) { options = url; url = undefined; } // Force options to be an object options = options || {}; var // ifModified key ifModifiedKey, // Response headers responseHeadersString, responseHeaders, // transport transport, // timeout handle timeoutTimer, // Cross-domain detection vars parts, // To know if global events are to be dispatched fireGlobals, // Loop variable i, // Create the final options object s = jQuery.ajaxSetup( {}, options ), // Callbacks context callbackContext = s.context || s, // Context for global events // It's the callbackContext if one was provided in the options // and if it's a DOM node or a jQuery collection globalEventContext = callbackContext !== s && ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? jQuery( callbackContext ) : jQuery.event, // Deferreds deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks( "once memory" ), // Status-dependent callbacks statusCode = s.statusCode || {}, // Headers (they are sent all at once) requestHeaders = {}, requestHeadersNames = {}, // The jqXHR state state = 0, // Default abort message strAbort = "canceled", // Fake xhr jqXHR = { readyState: 0, // Caches the header setRequestHeader: function( name, value ) { if ( !state ) { var lname = name.toLowerCase(); name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; requestHeaders[ name ] = value; } return this; }, // Raw string getAllResponseHeaders: function() { return state === 2 ? responseHeadersString : null; }, // Builds headers hashtable if needed getResponseHeader: function( key ) { var match; if ( state === 2 ) { if ( !responseHeaders ) { responseHeaders = {}; while( ( match = rheaders.exec( responseHeadersString ) ) ) { responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; } } match = responseHeaders[ key.toLowerCase() ]; } return match === undefined ? null : match; }, // Overrides response content-type header overrideMimeType: function( type ) { if ( !state ) { s.mimeType = type; } return this; }, // Cancel the request abort: function( statusText ) { statusText = statusText || strAbort; if ( transport ) { transport.abort( statusText ); } done( 0, statusText ); return this; } }; // Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) function done( status, nativeStatusText, responses, headers ) { var isSuccess, success, error, response, modified, statusText = nativeStatusText; // Called once if ( state === 2 ) { return; } // State is "done" now state = 2; // Clear timeout if it exists if ( timeoutTimer ) { clearTimeout( timeoutTimer ); } // Dereference transport for early garbage collection // (no matter how long the jqXHR object will be used) transport = undefined; // Cache response headers responseHeadersString = headers || ""; // Set readyState jqXHR.readyState = status > 0 ? 4 : 0; // Get response data if ( responses ) { response = ajaxHandleResponses( s, jqXHR, responses ); } // If successful, handle type chaining if ( status >= 200 && status < 300 || status === 304 ) { // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { modified = jqXHR.getResponseHeader("Last-Modified"); if ( modified ) { jQuery.lastModified[ ifModifiedKey ] = modified; } modified = jqXHR.getResponseHeader("Etag"); if ( modified ) { jQuery.etag[ ifModifiedKey ] = modified; } } // If not modified if ( status === 304 ) { statusText = "notmodified"; isSuccess = true; // If we have data } else { isSuccess = ajaxConvert( s, response ); statusText = isSuccess.state; success = isSuccess.data; error = isSuccess.error; isSuccess = !error; } } else { // We extract error from statusText // then normalize statusText and status for non-aborts error = statusText; if ( !statusText || status ) { statusText = "error"; if ( status < 0 ) { status = 0; } } } // Set data for the fake xhr object jqXHR.status = status; jqXHR.statusText = ( nativeStatusText || statusText ) + ""; // Success/Error if ( isSuccess ) { deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); } else { deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); } // Status-dependent callbacks jqXHR.statusCode( statusCode ); statusCode = undefined; if ( fireGlobals ) { globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), [ jqXHR, s, isSuccess ? success : error ] ); } // Complete completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); if ( fireGlobals ) { globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); // Handle the global AJAX counter if ( !( --jQuery.active ) ) { jQuery.event.trigger( "ajaxStop" ); } } } // Attach deferreds deferred.promise( jqXHR ); jqXHR.success = jqXHR.done; jqXHR.error = jqXHR.fail; jqXHR.complete = completeDeferred.add; // Status-dependent callbacks jqXHR.statusCode = function( map ) { if ( map ) { var tmp; if ( state < 2 ) { for ( tmp in map ) { statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; } } else { tmp = map[ jqXHR.status ]; jqXHR.always( tmp ); } } return this; }; // Remove hash character (#7531: and string promotion) // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) // We also use the url parameter if available s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); // Extract dataTypes list s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); // A cross-domain request is in order when we have a protocol:host:port mismatch if ( s.crossDomain == null ) { parts = rurl.exec( s.url.toLowerCase() ); s.crossDomain = !!( parts && ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) ); } // Convert data if not already a string if ( s.data && s.processData && typeof s.data !== "string" ) { s.data = jQuery.param( s.data, s.traditional ); } // Apply prefilters inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); // If request was aborted inside a prefilter, stop there if ( state === 2 ) { return jqXHR; } // We can fire global events as of now if asked to fireGlobals = s.global; // Uppercase the type s.type = s.type.toUpperCase(); // Determine if request has content s.hasContent = !rnoContent.test( s.type ); // Watch for a new set of requests if ( fireGlobals && jQuery.active++ === 0 ) { jQuery.event.trigger( "ajaxStart" ); } // More options handling for requests with no content if ( !s.hasContent ) { // If data is available, append data to url if ( s.data ) { s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; // #9682: remove data so that it's not used in an eventual retry delete s.data; } // Get ifModifiedKey before adding the anti-cache parameter ifModifiedKey = s.url; // Add anti-cache in url if needed if ( s.cache === false ) { var ts = jQuery.now(), // try replacing _= if it is there ret = s.url.replace( rts, "$1_=" + ts ); // if nothing was replaced, add timestamp to the end s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); } } // Set the correct header, if data is being sent if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { jqXHR.setRequestHeader( "Content-Type", s.contentType ); } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { ifModifiedKey = ifModifiedKey || s.url; if ( jQuery.lastModified[ ifModifiedKey ] ) { jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); } if ( jQuery.etag[ ifModifiedKey ] ) { jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); } } // Set the Accepts header for the server, depending on the dataType jqXHR.setRequestHeader( "Accept", s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s.accepts[ "*" ] ); // Check for headers option for ( i in s.headers ) { jqXHR.setRequestHeader( i, s.headers[ i ] ); } // Allow custom headers/mimetypes and early abort if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { // Abort if not done already and return return jqXHR.abort(); } // aborting is no longer a cancellation strAbort = "abort"; // Install callbacks on deferreds for ( i in { success: 1, error: 1, complete: 1 } ) { jqXHR[ i ]( s[ i ] ); } // Get transport transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); // If no transport, we auto-abort if ( !transport ) { done( -1, "No Transport" ); } else { jqXHR.readyState = 1; // Send global event if ( fireGlobals ) { globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); } // Timeout if ( s.async && s.timeout > 0 ) { timeoutTimer = setTimeout( function(){ jqXHR.abort( "timeout" ); }, s.timeout ); } try { state = 1; transport.send( requestHeaders, done ); } catch (e) { // Propagate exception as error if not done if ( state < 2 ) { done( -1, e ); // Simply rethrow otherwise } else { throw e; } } } return jqXHR; }, // Counter for holding the number of active queries active: 0, // Last-Modified header cache for next request lastModified: {}, etag: {} }); /* Handles responses to an ajax request: * - sets all responseXXX fields accordingly * - finds the right dataType (mediates between content-type and expected dataType) * - returns the corresponding response */ function ajaxHandleResponses( s, jqXHR, responses ) { var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes, responseFields = s.responseFields; // Fill responseXXX fields for ( type in responseFields ) { if ( type in responses ) { jqXHR[ responseFields[type] ] = responses[ type ]; } } // Remove auto dataType and get content-type in the process while( dataTypes[ 0 ] === "*" ) { dataTypes.shift(); if ( ct === undefined ) { ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); } } // Check if we're dealing with a known content-type if ( ct ) { for ( type in contents ) { if ( contents[ type ] && contents[ type ].test( ct ) ) { dataTypes.unshift( type ); break; } } } // Check to see if we have a response for the expected dataType if ( dataTypes[ 0 ] in responses ) { finalDataType = dataTypes[ 0 ]; } else { // Try convertible dataTypes for ( type in responses ) { if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { finalDataType = type; break; } if ( !firstDataType ) { firstDataType = type; } } // Or just use first one finalDataType = finalDataType || firstDataType; } // If we found a dataType // We add the dataType to the list if needed // and return the corresponding response if ( finalDataType ) { if ( finalDataType !== dataTypes[ 0 ] ) { dataTypes.unshift( finalDataType ); } return responses[ finalDataType ]; } } // Chain conversions given the request and the original response function ajaxConvert( s, response ) { var conv, conv2, current, tmp, // Work with a copy of dataTypes in case we need to modify it for conversion dataTypes = s.dataTypes.slice(), prev = dataTypes[ 0 ], converters = {}, i = 0; // Apply the dataFilter if provided if ( s.dataFilter ) { response = s.dataFilter( response, s.dataType ); } // Create converters map with lowercased keys if ( dataTypes[ 1 ] ) { for ( conv in s.converters ) { converters[ conv.toLowerCase() ] = s.converters[ conv ]; } } // Convert to each sequential dataType, tolerating list modification for ( ; (current = dataTypes[++i]); ) { // There's only work to do if current dataType is non-auto if ( current !== "*" ) { // Convert response if prev dataType is non-auto and differs from current if ( prev !== "*" && prev !== current ) { // Seek a direct converter conv = converters[ prev + " " + current ] || converters[ "* " + current ]; // If none found, seek a pair if ( !conv ) { for ( conv2 in converters ) { // If conv2 outputs current tmp = conv2.split(" "); if ( tmp[ 1 ] === current ) { // If prev can be converted to accepted input conv = converters[ prev + " " + tmp[ 0 ] ] || converters[ "* " + tmp[ 0 ] ]; if ( conv ) { // Condense equivalence converters if ( conv === true ) { conv = converters[ conv2 ]; // Otherwise, insert the intermediate dataType } else if ( converters[ conv2 ] !== true ) { current = tmp[ 0 ]; dataTypes.splice( i--, 0, current ); } break; } } } } // Apply converter (if not an equivalence) if ( conv !== true ) { // Unless errors are allowed to bubble, catch and return them if ( conv && s["throws"] ) { response = conv( response ); } else { try { response = conv( response ); } catch ( e ) { return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; } } } } // Update prev for next iteration prev = current; } } return { state: "success", data: response }; } var oldCallbacks = [], rquestion = /\?/, rjsonp = /(=)\?(?=&|$)|\?\?/, nonce = jQuery.now(); // Default jsonp settings jQuery.ajaxSetup({ jsonp: "callback", jsonpCallback: function() { var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); this[ callback ] = true; return callback; } }); // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { var callbackName, overwritten, responseContainer, data = s.data, url = s.url, hasCallback = s.jsonp !== false, replaceInUrl = hasCallback && rjsonp.test( url ), replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( data ); // Handle iff the expected data type is "jsonp" or we have a parameter to set if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { // Get callback name, remembering preexisting value associated with it callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback; overwritten = window[ callbackName ]; // Insert callback into url or form data if ( replaceInUrl ) { s.url = url.replace( rjsonp, "$1" + callbackName ); } else if ( replaceInData ) { s.data = data.replace( rjsonp, "$1" + callbackName ); } else if ( hasCallback ) { s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; } // Use data converter to retrieve json after script execution s.converters["script json"] = function() { if ( !responseContainer ) { jQuery.error( callbackName + " was not called" ); } return responseContainer[ 0 ]; }; // force json dataType s.dataTypes[ 0 ] = "json"; // Install callback window[ callbackName ] = function() { responseContainer = arguments; }; // Clean-up function (fires after converters) jqXHR.always(function() { // Restore preexisting value window[ callbackName ] = overwritten; // Save back as free if ( s[ callbackName ] ) { // make sure that re-using the options doesn't screw things around s.jsonpCallback = originalSettings.jsonpCallback; // save the callback name for future use oldCallbacks.push( callbackName ); } // Call if it was a function and we have a response if ( responseContainer && jQuery.isFunction( overwritten ) ) { overwritten( responseContainer[ 0 ] ); } responseContainer = overwritten = undefined; }); // Delegate to script return "script"; } }); // Install script dataType jQuery.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /javascript|ecmascript/ }, converters: { "text script": function( text ) { jQuery.globalEval( text ); return text; } } }); // Handle cache's special case and global jQuery.ajaxPrefilter( "script", function( s ) { if ( s.cache === undefined ) { s.cache = false; } if ( s.crossDomain ) { s.type = "GET"; s.global = false; } }); // Bind script tag hack transport jQuery.ajaxTransport( "script", function(s) { // This transport only deals with cross domain requests if ( s.crossDomain ) { var script, head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; return { send: function( _, callback ) { script = document.createElement( "script" ); script.async = "async"; if ( s.scriptCharset ) { script.charset = s.scriptCharset; } script.src = s.url; // Attach handlers for all browsers script.onload = script.onreadystatechange = function( _, isAbort ) { if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { // Handle memory leak in IE script.onload = script.onreadystatechange = null; // Remove the script if ( head && script.parentNode ) { head.removeChild( script ); } // Dereference the script script = undefined; // Callback if not abort if ( !isAbort ) { callback( 200, "success" ); } } }; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709 and #4378). head.insertBefore( script, head.firstChild ); }, abort: function() { if ( script ) { script.onload( 0, 1 ); } } }; } }); var xhrCallbacks, // #5280: Internet Explorer will keep connections alive if we don't abort on unload xhrOnUnloadAbort = window.ActiveXObject ? function() { // Abort all pending requests for ( var key in xhrCallbacks ) { xhrCallbacks[ key ]( 0, 1 ); } } : false, xhrId = 0; // Functions to create xhrs function createStandardXHR() { try { return new window.XMLHttpRequest(); } catch( e ) {} } function createActiveXHR() { try { return new window.ActiveXObject( "Microsoft.XMLHTTP" ); } catch( e ) {} } // Create the request object // (This is still attached to ajaxSettings for backward compatibility) jQuery.ajaxSettings.xhr = window.ActiveXObject ? /* Microsoft failed to properly * implement the XMLHttpRequest in IE7 (can't request local files), * so we use the ActiveXObject when it is available * Additionally XMLHttpRequest can be disabled in IE7/IE8 so * we need a fallback. */ function() { return !this.isLocal && createStandardXHR() || createActiveXHR(); } : // For all other browsers, use the standard XMLHttpRequest object createStandardXHR; // Determine support properties (function( xhr ) { jQuery.extend( jQuery.support, { ajax: !!xhr, cors: !!xhr && ( "withCredentials" in xhr ) }); })( jQuery.ajaxSettings.xhr() ); // Create transport if the browser can provide an xhr if ( jQuery.support.ajax ) { jQuery.ajaxTransport(function( s ) { // Cross domain only allowed if supported through XMLHttpRequest if ( !s.crossDomain || jQuery.support.cors ) { var callback; return { send: function( headers, complete ) { // Get a new xhr var handle, i, xhr = s.xhr(); // Open the socket // Passing null username, generates a login popup on Opera (#2865) if ( s.username ) { xhr.open( s.type, s.url, s.async, s.username, s.password ); } else { xhr.open( s.type, s.url, s.async ); } // Apply custom fields if provided if ( s.xhrFields ) { for ( i in s.xhrFields ) { xhr[ i ] = s.xhrFields[ i ]; } } // Override mime type if needed if ( s.mimeType && xhr.overrideMimeType ) { xhr.overrideMimeType( s.mimeType ); } // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. if ( !s.crossDomain && !headers["X-Requested-With"] ) { headers[ "X-Requested-With" ] = "XMLHttpRequest"; } // Need an extra try/catch for cross domain requests in Firefox 3 try { for ( i in headers ) { xhr.setRequestHeader( i, headers[ i ] ); } } catch( _ ) {} // Do send the request // This may raise an exception which is actually // handled in jQuery.ajax (so no try/catch here) xhr.send( ( s.hasContent && s.data ) || null ); // Listener callback = function( _, isAbort ) { var status, statusText, responseHeaders, responses, xml; // Firefox throws exceptions when accessing properties // of an xhr when a network error occurred // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) try { // Was never called and is aborted or complete if ( callback && ( isAbort || xhr.readyState === 4 ) ) { // Only called once callback = undefined; // Do not keep as active anymore if ( handle ) { xhr.onreadystatechange = jQuery.noop; if ( xhrOnUnloadAbort ) { delete xhrCallbacks[ handle ]; } } // If it's an abort if ( isAbort ) { // Abort it manually if needed if ( xhr.readyState !== 4 ) { xhr.abort(); } } else { status = xhr.status; responseHeaders = xhr.getAllResponseHeaders(); responses = {}; xml = xhr.responseXML; // Construct response list if ( xml && xml.documentElement /* #4958 */ ) { responses.xml = xml; } // When requesting binary data, IE6-9 will throw an exception // on any attempt to access responseText (#11426) try { responses.text = xhr.responseText; } catch( e ) { } // Firefox throws an exception when accessing // statusText for faulty cross-domain requests try { statusText = xhr.statusText; } catch( e ) { // We normalize with Webkit giving an empty statusText statusText = ""; } // Filter status for non standard behaviors // If the request is local and we have data: assume a success // (success with no data won't get notified, that's the best we // can do given current implementations) if ( !status && s.isLocal && !s.crossDomain ) { status = responses.text ? 200 : 404; // IE - #1450: sometimes returns 1223 when it should be 204 } else if ( status === 1223 ) { status = 204; } } } } catch( firefoxAccessException ) { if ( !isAbort ) { complete( -1, firefoxAccessException ); } } // Call complete if needed if ( responses ) { complete( status, statusText, responses, responseHeaders ); } }; if ( !s.async ) { // if we're in sync mode we fire the callback callback(); } else if ( xhr.readyState === 4 ) { // (IE6 & IE7) if it's in cache and has been // retrieved directly we need to fire the callback setTimeout( callback, 0 ); } else { handle = ++xhrId; if ( xhrOnUnloadAbort ) { // Create the active xhrs callbacks list if needed // and attach the unload handler if ( !xhrCallbacks ) { xhrCallbacks = {}; jQuery( window ).unload( xhrOnUnloadAbort ); } // Add to list of active xhrs callbacks xhrCallbacks[ handle ] = callback; } xhr.onreadystatechange = callback; } }, abort: function() { if ( callback ) { callback(0,1); } } }; } }); } var fxNow, timerId, rfxtypes = /^(?:toggle|show|hide)$/, rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), rrun = /queueHooks$/, animationPrefilters = [ defaultPrefilter ], tweeners = { "*": [function( prop, value ) { var end, unit, tween = this.createTween( prop, value ), parts = rfxnum.exec( value ), target = tween.cur(), start = +target || 0, scale = 1, maxIterations = 20; if ( parts ) { end = +parts[2]; unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); // We need to compute starting value if ( unit !== "px" && start ) { // Iteratively approximate from a nonzero starting point // Prefer the current property, because this process will be trivial if it uses the same units // Fallback to end or a simple constant start = jQuery.css( tween.elem, prop, true ) || end || 1; do { // If previous iteration zeroed out, double until we get *something* // Use a string for doubling factor so we don't accidentally see scale as unchanged below scale = scale || ".5"; // Adjust and apply start = start / scale; jQuery.style( tween.elem, prop, start + unit ); // Update scale, tolerating zero or NaN from tween.cur() // And breaking the loop if scale is unchanged or perfect, or if we've just had enough } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); } tween.unit = unit; tween.start = start; // If a +=/-= token was provided, we're doing a relative animation tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; } return tween; }] }; // Animations created synchronously will run synchronously function createFxNow() { setTimeout(function() { fxNow = undefined; }, 0 ); return ( fxNow = jQuery.now() ); } function createTweens( animation, props ) { jQuery.each( props, function( prop, value ) { var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), index = 0, length = collection.length; for ( ; index < length; index++ ) { if ( collection[ index ].call( animation, prop, value ) ) { // we're done with this property return; } } }); } function Animation( elem, properties, options ) { var result, index = 0, tweenerIndex = 0, length = animationPrefilters.length, deferred = jQuery.Deferred().always( function() { // don't match elem in the :animated selector delete tick.elem; }), tick = function() { var currentTime = fxNow || createFxNow(), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, length = animation.tweens.length; for ( ; index < length ; index++ ) { animation.tweens[ index ].run( percent ); } deferred.notifyWith( elem, [ animation, percent, remaining ]); if ( percent < 1 && length ) { return remaining; } else { deferred.resolveWith( elem, [ animation ] ); return false; } }, animation = deferred.promise({ elem: elem, props: jQuery.extend( {}, properties ), opts: jQuery.extend( true, { specialEasing: {} }, options ), originalProperties: properties, originalOptions: options, startTime: fxNow || createFxNow(), duration: options.duration, tweens: [], createTween: function( prop, end, easing ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, stop: function( gotoEnd ) { var index = 0, // if we are going to the end, we want to run all the tweens // otherwise we skip this part length = gotoEnd ? animation.tweens.length : 0; for ( ; index < length ; index++ ) { animation.tweens[ index ].run( 1 ); } // resolve when we played the last frame // otherwise, reject if ( gotoEnd ) { deferred.resolveWith( elem, [ animation, gotoEnd ] ); } else { deferred.rejectWith( elem, [ animation, gotoEnd ] ); } return this; } }), props = animation.props; propFilter( props, animation.opts.specialEasing ); for ( ; index < length ; index++ ) { result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { return result; } } createTweens( animation, props ); if ( jQuery.isFunction( animation.opts.start ) ) { animation.opts.start.call( elem, animation ); } jQuery.fx.timer( jQuery.extend( tick, { anim: animation, queue: animation.opts.queue, elem: elem }) ); // attach callbacks from options return animation.progress( animation.opts.progress ) .done( animation.opts.done, animation.opts.complete ) .fail( animation.opts.fail ) .always( animation.opts.always ); } function propFilter( props, specialEasing ) { var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass for ( index in props ) { name = jQuery.camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( jQuery.isArray( value ) ) { easing = value[ 1 ]; value = props[ index ] = value[ 0 ]; } if ( index !== name ) { props[ name ] = value; delete props[ index ]; } hooks = jQuery.cssHooks[ name ]; if ( hooks && "expand" in hooks ) { value = hooks.expand( value ); delete props[ name ]; // not quite $.extend, this wont overwrite keys already present. // also - reusing 'index' from above because we have the correct "name" for ( index in value ) { if ( !( index in props ) ) { props[ index ] = value[ index ]; specialEasing[ index ] = easing; } } } else { specialEasing[ name ] = easing; } } } jQuery.Animation = jQuery.extend( Animation, { tweener: function( props, callback ) { if ( jQuery.isFunction( props ) ) { callback = props; props = [ "*" ]; } else { props = props.split(" "); } var prop, index = 0, length = props.length; for ( ; index < length ; index++ ) { prop = props[ index ]; tweeners[ prop ] = tweeners[ prop ] || []; tweeners[ prop ].unshift( callback ); } }, prefilter: function( callback, prepend ) { if ( prepend ) { animationPrefilters.unshift( callback ); } else { animationPrefilters.push( callback ); } } }); function defaultPrefilter( elem, props, opts ) { var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, anim = this, style = elem.style, orig = {}, handled = [], hidden = elem.nodeType && isHidden( elem ); // handle queue: false promises if ( !opts.queue ) { hooks = jQuery._queueHooks( elem, "fx" ); if ( hooks.unqueued == null ) { hooks.unqueued = 0; oldfire = hooks.empty.fire; hooks.empty.fire = function() { if ( !hooks.unqueued ) { oldfire(); } }; } hooks.unqueued++; anim.always(function() { // doing this makes sure that the complete handler will be called // before this completes anim.always(function() { hooks.unqueued--; if ( !jQuery.queue( elem, "fx" ).length ) { hooks.empty.fire(); } }); }); } // height/width overflow pass if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { // Make sure that nothing sneaks out // Record all 3 overflow attributes because IE does not // change the overflow attribute when overflowX and // overflowY are set to the same value opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; // Set display property to inline-block for height/width // animations on inline elements that are having width/height animated if ( jQuery.css( elem, "display" ) === "inline" && jQuery.css( elem, "float" ) === "none" ) { // inline-level elements accept inline-block; // block-level elements need to be inline with layout if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { style.display = "inline-block"; } else { style.zoom = 1; } } } if ( opts.overflow ) { style.overflow = "hidden"; if ( !jQuery.support.shrinkWrapBlocks ) { anim.done(function() { style.overflow = opts.overflow[ 0 ]; style.overflowX = opts.overflow[ 1 ]; style.overflowY = opts.overflow[ 2 ]; }); } } // show/hide pass for ( index in props ) { value = props[ index ]; if ( rfxtypes.exec( value ) ) { delete props[ index ]; toggle = toggle || value === "toggle"; if ( value === ( hidden ? "hide" : "show" ) ) { continue; } handled.push( index ); } } length = handled.length; if ( length ) { dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); if ( "hidden" in dataShow ) { hidden = dataShow.hidden; } // store state if its toggle - enables .stop().toggle() to "reverse" if ( toggle ) { dataShow.hidden = !hidden; } if ( hidden ) { jQuery( elem ).show(); } else { anim.done(function() { jQuery( elem ).hide(); }); } anim.done(function() { var prop; jQuery.removeData( elem, "fxshow", true ); for ( prop in orig ) { jQuery.style( elem, prop, orig[ prop ] ); } }); for ( index = 0 ; index < length ; index++ ) { prop = handled[ index ]; tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); if ( !( prop in dataShow ) ) { dataShow[ prop ] = tween.start; if ( hidden ) { tween.end = tween.start; tween.start = prop === "width" || prop === "height" ? 1 : 0; } } } } } function Tween( elem, options, prop, end, easing ) { return new Tween.prototype.init( elem, options, prop, end, easing ); } jQuery.Tween = Tween; Tween.prototype = { constructor: Tween, init: function( elem, options, prop, end, easing, unit ) { this.elem = elem; this.prop = prop; this.easing = easing || "swing"; this.options = options; this.start = this.now = this.cur(); this.end = end; this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); }, cur: function() { var hooks = Tween.propHooks[ this.prop ]; return hooks && hooks.get ? hooks.get( this ) : Tween.propHooks._default.get( this ); }, run: function( percent ) { var eased, hooks = Tween.propHooks[ this.prop ]; if ( this.options.duration ) { this.pos = eased = jQuery.easing[ this.easing ]( percent, this.options.duration * percent, 0, 1, this.options.duration ); } else { this.pos = eased = percent; } this.now = ( this.end - this.start ) * eased + this.start; if ( this.options.step ) { this.options.step.call( this.elem, this.now, this ); } if ( hooks && hooks.set ) { hooks.set( this ); } else { Tween.propHooks._default.set( this ); } return this; } }; Tween.prototype.init.prototype = Tween.prototype; Tween.propHooks = { _default: { get: function( tween ) { var result; if ( tween.elem[ tween.prop ] != null && (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { return tween.elem[ tween.prop ]; } // passing any value as a 4th parameter to .css will automatically // attempt a parseFloat and fallback to a string if the parse fails // so, simple values such as "10px" are parsed to Float. // complex values such as "rotate(1rad)" are returned as is. result = jQuery.css( tween.elem, tween.prop, false, "" ); // Empty strings, null, undefined and "auto" are converted to 0. return !result || result === "auto" ? 0 : result; }, set: function( tween ) { // use step hook for back compat - use cssHook if its there - use .style if its // available and use plain properties where available if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { tween.elem[ tween.prop ] = tween.now; } } } }; // Remove in 2.0 - this supports IE8's panic based approach // to setting things on disconnected nodes Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { set: function( tween ) { if ( tween.elem.nodeType && tween.elem.parentNode ) { tween.elem[ tween.prop ] = tween.now; } } }; jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" || // special check for .toggle( handler, handler, ... ) ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? cssFn.apply( this, arguments ) : this.animate( genFx( name, true ), speed, easing, callback ); }; }); jQuery.fn.extend({ fadeTo: function( speed, to, easing, callback ) { // show any hidden elements after setting opacity to 0 return this.filter( isHidden ).css( "opacity", 0 ).show() // animate to the value specified .end().animate({ opacity: to }, speed, easing, callback ); }, animate: function( prop, speed, easing, callback ) { var empty = jQuery.isEmptyObject( prop ), optall = jQuery.speed( speed, easing, callback ), doAnimation = function() { // Operate on a copy of prop so per-property easing won't be lost var anim = Animation( this, jQuery.extend( {}, prop ), optall ); // Empty animations resolve immediately if ( empty ) { anim.stop( true ); } }; return empty || optall.queue === false ? this.each( doAnimation ) : this.queue( optall.queue, doAnimation ); }, stop: function( type, clearQueue, gotoEnd ) { var stopQueue = function( hooks ) { var stop = hooks.stop; delete hooks.stop; stop( gotoEnd ); }; if ( typeof type !== "string" ) { gotoEnd = clearQueue; clearQueue = type; type = undefined; } if ( clearQueue && type !== false ) { this.queue( type || "fx", [] ); } return this.each(function() { var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, data = jQuery._data( this ); if ( index ) { if ( data[ index ] && data[ index ].stop ) { stopQueue( data[ index ] ); } } else { for ( index in data ) { if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { stopQueue( data[ index ] ); } } } for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { timers[ index ].anim.stop( gotoEnd ); dequeue = false; timers.splice( index, 1 ); } } // start the next in the queue if the last step wasn't forced // timers currently will call their complete callbacks, which will dequeue // but only if they were gotoEnd if ( dequeue || !gotoEnd ) { jQuery.dequeue( this, type ); } }); } }); // Generate parameters to create a standard animation function genFx( type, includeWidth ) { var which, attrs = { height: type }, i = 0; // if we include width, step value is 1 to do all cssExpand values, // if we don't include width, step value is 2 to skip over Left and Right includeWidth = includeWidth? 1 : 0; for( ; i < 4 ; i += 2 - includeWidth ) { which = cssExpand[ i ]; attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; } if ( includeWidth ) { attrs.opacity = attrs.width = type; } return attrs; } // Generate shortcuts for custom animations jQuery.each({ slideDown: genFx("show"), slideUp: genFx("hide"), slideToggle: genFx("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function( name, props ) { jQuery.fn[ name ] = function( speed, easing, callback ) { return this.animate( props, speed, easing, callback ); }; }); jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing }; opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; // normalize opt.queue - true/undefined/null -> "fx" if ( opt.queue == null || opt.queue === true ) { opt.queue = "fx"; } // Queueing opt.old = opt.complete; opt.complete = function() { if ( jQuery.isFunction( opt.old ) ) { opt.old.call( this ); } if ( opt.queue ) { jQuery.dequeue( this, opt.queue ); } }; return opt; }; jQuery.easing = { linear: function( p ) { return p; }, swing: function( p ) { return 0.5 - Math.cos( p*Math.PI ) / 2; } }; jQuery.timers = []; jQuery.fx = Tween.prototype.init; jQuery.fx.tick = function() { var timer, timers = jQuery.timers, i = 0; fxNow = jQuery.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; // Checks the timer has not already been removed if ( !timer() && timers[ i ] === timer ) { timers.splice( i--, 1 ); } } if ( !timers.length ) { jQuery.fx.stop(); } fxNow = undefined; }; jQuery.fx.timer = function( timer ) { if ( timer() && jQuery.timers.push( timer ) && !timerId ) { timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); } }; jQuery.fx.interval = 13; jQuery.fx.stop = function() { clearInterval( timerId ); timerId = null; }; jQuery.fx.speeds = { slow: 600, fast: 200, // Default speed _default: 400 }; // Back Compat <1.8 extension point jQuery.fx.step = {}; if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.animated = function( elem ) { return jQuery.grep(jQuery.timers, function( fn ) { return elem === fn.elem; }).length; }; } var rroot = /^(?:body|html)$/i; jQuery.fn.offset = function( options ) { if ( arguments.length ) { return options === undefined ? this : this.each(function( i ) { jQuery.offset.setOffset( this, options, i ); }); } var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, box = { top: 0, left: 0 }, elem = this[ 0 ], doc = elem && elem.ownerDocument; if ( !doc ) { return; } if ( (body = doc.body) === elem ) { return jQuery.offset.bodyOffset( elem ); } docElem = doc.documentElement; // Make sure it's not a disconnected DOM node if ( !jQuery.contains( docElem, elem ) ) { return box; } // If we don't have gBCR, just use 0,0 rather than error // BlackBerry 5, iOS 3 (original iPhone) if ( typeof elem.getBoundingClientRect !== "undefined" ) { box = elem.getBoundingClientRect(); } win = getWindow( doc ); clientTop = docElem.clientTop || body.clientTop || 0; clientLeft = docElem.clientLeft || body.clientLeft || 0; scrollTop = win.pageYOffset || docElem.scrollTop; scrollLeft = win.pageXOffset || docElem.scrollLeft; return { top: box.top + scrollTop - clientTop, left: box.left + scrollLeft - clientLeft }; }; jQuery.offset = { bodyOffset: function( body ) { var top = body.offsetTop, left = body.offsetLeft; if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { top += parseFloat( jQuery.css(body, "marginTop") ) || 0; left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; } return { top: top, left: left }; }, setOffset: function( elem, options, i ) { var position = jQuery.css( elem, "position" ); // set position first, in-case top/left are set even on static elem if ( position === "static" ) { elem.style.position = "relative"; } var curElem = jQuery( elem ), curOffset = curElem.offset(), curCSSTop = jQuery.css( elem, "top" ), curCSSLeft = jQuery.css( elem, "left" ), calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, props = {}, curPosition = {}, curTop, curLeft; // need to be able to calculate position if either top or left is auto and position is either absolute or fixed if ( calculatePosition ) { curPosition = curElem.position(); curTop = curPosition.top; curLeft = curPosition.left; } else { curTop = parseFloat( curCSSTop ) || 0; curLeft = parseFloat( curCSSLeft ) || 0; } if ( jQuery.isFunction( options ) ) { options = options.call( elem, i, curOffset ); } if ( options.top != null ) { props.top = ( options.top - curOffset.top ) + curTop; } if ( options.left != null ) { props.left = ( options.left - curOffset.left ) + curLeft; } if ( "using" in options ) { options.using.call( elem, props ); } else { curElem.css( props ); } } }; jQuery.fn.extend({ position: function() { if ( !this[0] ) { return; } var elem = this[0], // Get *real* offsetParent offsetParent = this.offsetParent(), // Get correct offsets offset = this.offset(), parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; // Add offsetParent borders parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; // Subtract the two offsets return { top: offset.top - parentOffset.top, left: offset.left - parentOffset.left }; }, offsetParent: function() { return this.map(function() { var offsetParent = this.offsetParent || document.body; while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { offsetParent = offsetParent.offsetParent; } return offsetParent || document.body; }); } }); // Create scrollLeft and scrollTop methods jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { var top = /Y/.test( prop ); jQuery.fn[ method ] = function( val ) { return jQuery.access( this, function( elem, method, val ) { var win = getWindow( elem ); if ( val === undefined ) { return win ? (prop in win) ? win[ prop ] : win.document.documentElement[ method ] : elem[ method ]; } if ( win ) { win.scrollTo( !top ? val : jQuery( win ).scrollLeft(), top ? val : jQuery( win ).scrollTop() ); } else { elem[ method ] = val; } }, method, val, arguments.length, null ); }; }); function getWindow( elem ) { return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false; } // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { // margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) { var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); return jQuery.access( this, function( elem, type, value ) { var doc; if ( jQuery.isWindow( elem ) ) { // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there // isn't a whole lot we can do. See pull request at this URL for discussion: // https://github.com/jquery/jquery/pull/764 return elem.document.documentElement[ "client" + name ]; } // Get document width or height if ( elem.nodeType === 9 ) { doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. return Math.max( elem.body[ "scroll" + name ], doc[ "scroll" + name ], elem.body[ "offset" + name ], doc[ "offset" + name ], doc[ "client" + name ] ); } return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat jQuery.css( elem, type, value, extra ) : // Set width or height on the element jQuery.style( elem, type, value, extra ); }, type, chainable ? margin : undefined, chainable, null ); }; }); }); // Expose jQuery to the global object window.jQuery = window.$ = jQuery; // Expose jQuery as an AMD module, but only for AMD loaders that // understand the issues with loading multiple versions of jQuery // in a page that all might call define(). The loader will indicate // they have special allowances for multiple jQuery versions by // specifying define.amd.jQuery = true. Register as a named module, // since jQuery can be concatenated with other files that may use define, // but not use a proper concatenation script that understands anonymous // AMD modules. A named AMD is safest and most robust way to register. // Lowercase jquery is used because AMD module names are derived from // file names, and jQuery is normally delivered in a lowercase file name. // Do this after creating the global so that if an AMD module wants to call // noConflict to hide this version of jQuery, it will work. if ( typeof define === "function" && define.amd && define.amd.jQuery ) { define( "jquery", [], function () { return jQuery; } ); } })( window ); ================================================ FILE: src/main/webapp/jslib/eu_js/lightmvc.js ================================================ /** * @author 鸵鸟 * * @requires jQuery * * 当页面加载完毕关闭加载进度 * **/ $(window).load(function(){ $("#loading").fadeOut(); }); /** * @author 鸵鸟 * * @requires jQuery * * 防止退格键导致页面回退 */ $(document).keydown(function (e) { var doPrevent; if (e.keyCode == 8) { var d = e.srcElement || e.target; if (d.tagName.toUpperCase() == 'INPUT' || d.tagName.toUpperCase() == 'TEXTAREA') { doPrevent = d.readOnly || d.disabled; }else{ doPrevent = true; } }else{ doPrevent = false; } if (doPrevent) e.preventDefault(); }); ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_emot/default/config.txt ================================================ 'default':{name:'Ĭ��',width:24,height:24,line:7,list:{'smile':'΢Ц','tongue':'����ͷ','titter':'͵Ц','laugh':'��Ц','sad':'�ѹ�','wronged':'ί��','fastcry':'������','cry':'��','wail':'����','mad':'����','knock':'�ô�','curse':'����','crazy':'ץ��','angry':'����','ohmy':'����','awkward':'����','panic':'����','shy':'����','cute':'����','envy':'��Ľ','proud':'����','struggle':'�ܶ�','quiet':'����','shutup':'����','doubt':'����','despise':'����','sleep':'˯��','bye':'�ټ�'}} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_emot/ipb/config.txt ================================================ ipb:{name:'IPB',width:20,height:25,line:8,list:{smile:'΢Ц',joyful:'����',laugh:'Ц',biglaugh:'��Ц',w00t:'����',wub:'��ϲ',depres:'��ɥ',sad:'����',cry:'����',angry:'����',devil:'ħ��',blush:'����',kiss:'��',surprised:'����',wondering:'�ɻ�',unsure:'��ȷ��',tongue:'����ͷ',cool:'ˣ��',blink:'գ��',whistling:'������',glare:'����',pinch:'��',sideways:'����',sleep:'˯��',sick:'����',ninja:'����',bandit:'ǿ��',police:'����',angel:'��ʹ',magician:'ħ��ʦ',alien:'������',heart:'�Ķ�'}} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_emot/pidgin/config.txt ================================================ pidgin:{name:'Pidgin',width:22,height:25,line:8,list:{smile:'΢Ц',cute:'�ɰ�',wink:'գ��',laugh:'��Ц',victory:'ʤ��',sad:'����',cry:'����',angry:'����',shout:'����',curse:'����',devil:'ħ��',blush:'����',tongue:'����ͷ',envy:'��Ľ',cool:'ˣ��',kiss:'��',shocked:'����',sweat:'��',sick:'����',bye:'�ټ�',tired:'��',sleepy:'˯��',question:'����',rose:'õ��',gift:'����',coffee:'����',music:'����',soccer:'����',good:'��ͬ',bad:'����',love:'��',brokenheart:'����'}} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_lang/en.js ================================================ /** * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved. * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt */ XHEDITOR.setLang({ 'default': 'Default', 'none': 'None', 'defaultReadTip': 'WYSIWYG Editor,press alt+1-9,toogle to tool area,press tab,select button,press esc,return editor', 'Cut': 'Cut (Ctrl+X)', 'Copy': 'Copy (Ctrl+C)', 'Paste': 'Paste (Ctrl+V)', 'Pastetext': 'Paste as plain text', 'PastetextTip': 'Use Ctrl+V on your keyboard to paste the text.', 'Blocktag': 'Block tag', 'Fontface': 'Font family', 'FontSize': 'Font size', 'Bold': 'Bold (Ctrl+B)', 'Italic': 'Italic (Ctrl+I)', 'Underline': 'Underline (Ctrl+U)', 'Strikethrough': 'Strikethrough', 'FontColor': 'Select text color', 'BackColor': 'Select background color', 'SelectAll': 'SelectAll (Ctrl+A)', 'Removeformat': 'Remove formatting', 'Align': 'Align', 'List': 'List', 'Outdent': 'Outdent', 'Indent': 'Indent', 'Link': 'Insert/edit link (Ctrl+L)', 'Unlink': 'Unlink', 'Anchor': 'Anchor', 'Img': 'Insert/edit image', 'Flash': 'Insert/edit flash', 'Media': 'Insert/edit media', 'Hr': 'Horizontal rule', 'Emot': 'Emotions', 'Table': 'Insert a new table', 'Source': 'Edit source code', 'WYSIWYG': 'WYSIWYG mode', 'Preview': 'Preview', 'Print': 'Print (Ctrl+P)', 'Fullscreen': 'Toggle fullscreen (Esc)', 'About': 'About xhEditor', 'dialogOk': 'Ok', 'dialogCancel': 'Cancel', 'cutDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+X) instead.', 'copyDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+C) instead.', 'pasteDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+V) instead.', 'close': 'Close', 'listFontname': [{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}], 'listBlocktag': { 'p': 'Paragraph', 'h1': 'Heading 1', 'h2': 'Heading 2', 'h3': 'Heading 3', 'h4': 'Heading 4', 'h5': 'Heading 5', 'h6': 'Heading 6', 'pre': 'Preformatted', 'address': 'Address' }, 'fontsize': { 'x-small': '1', 'small': '2', 'medium': '3', 'large': '4', 'x-large': '5', 'xx-large': '6', '-webkit-xxx-large': '7' }, 'align': { 'justifyleft': 'Align left', 'justifycenter': 'Align center', 'justifyright': 'Align right', 'justifyfull': 'Align full' }, 'list': { 'insertOrderedList': 'Ordered list', 'insertUnorderedList': 'Unordered list' }, 'link': { 'url': 'Link URL: ', 'target': 'Target:   ', 'targetBlank': 'New window', 'targetSelf': 'Same window', 'targetParent': 'Parent window', 'linkText': 'Link Text:', 'defText': 'Click here', 'anchor': 'Anchor:   ', 'anchorNone': 'None selected' }, 'anchor': { 'name': 'Anchor name: ' }, 'img': { 'url': 'Img URL:  ', 'alt': 'Alt text: ', 'align': 'Alignment:', 'alignLeft': 'Left', 'alignRight': 'Right', 'alignTop': 'Top', 'alignMiddle': 'Middle', 'alignBaseline': 'Baseline', 'alignBottom': 'Bottom', 'width': 'Width:    ', 'height': 'Height:   ', 'border': 'Border:   ', 'hspace': 'Hspace:   ', 'vspace': 'Vspace:   ' }, 'flash': { 'url': 'Flash URL:', 'width': 'Width:    ', 'height': 'Height:   ' }, 'media': { 'url': 'Media URL:', 'width': 'Width:    ', 'height': 'Height:   ' }, 'emot.default': { 'smile': 'Smile', 'tongue': 'Tongue', 'titter': 'Titter', 'laugh': 'Laugh', 'sad': 'Sad', 'wronged': 'Wronged', 'fastcry': 'Fast cry', 'cry': 'Cry', 'wail': 'Wail', 'mad': 'Mad', 'knock': 'Knock', 'curse': 'Curse', 'crazy': 'Crazy', 'angry': 'Angry', 'ohmy': 'Oh my', 'awkward': 'Awkward', 'panic': 'Panic', 'shy': 'Shy', 'cute': 'Cute', 'envy': 'Envy', 'proud': 'Proud', 'struggle': 'Struggle', 'quiet': 'Quiet', 'shutup': 'Shut up', 'doubt': 'Doubt', 'despise': 'Despise', 'sleep': 'Sleep', 'bye': 'Bye' }, 'table': { 'rows': 'Rows:       ', 'columns': 'Cols:       ', 'headers': 'Headers:    ', 'headersRow': 'First row', 'headersCol': 'First column', 'headersBoth': 'Both', 'width': 'Width:      ', 'height': 'Height:     ', 'border': 'Border:     ', 'cellSpacing': 'CellSpacing:', 'cellPadding': 'CellPadding:', 'align': 'Align:      ', 'alignLeft': 'Left', 'alignCenter': 'Center', 'alignRight': 'Right', 'caption': 'Caption:    ' }, 'upload': { 'btnText' : 'Upload', 'browserTitle': 'Browser file', 'progressTitle': 'File uploading(Esc cancel)', 'progressTip': 'File uploading,please wait...', 'countLimit': 'Please do not upload more then {$0} files.', 'extLimit': 'Upload file extension required for this: {$0}', 'typeLimit': 'You can only drag and drop the same type of files.', 'apiError': '{$0} upload interface error!\r\n\r\nreturn error:\r\n\r\n{$1}' }, 'aboutXheditor': 'xhEditor is a platform independent WYSWYG XHTML editor based by jQuery,released as Open Source under LGPL.' }); ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_lang/zh-cn.js ================================================ /** * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved. * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt */ XHEDITOR.setLang({ 'default': '默认', 'none': '无', 'defaultReadTip': '可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑', 'Cut': '剪切 (Ctrl+X)', 'Copy': '复制 (Ctrl+C)', 'Paste': '粘贴 (Ctrl+V)', 'Pastetext': '粘贴文本', 'PastetextTip': '使用键盘快捷键(Ctrl+V)把内容粘贴到方框里,按 确定', 'Blocktag': '段落标签', 'Fontface': '字体', 'FontSize': '字体大小', 'Bold': '加粗 (Ctrl+B)', 'Italic': '斜体 (Ctrl+I)', 'Underline': '下划线 (Ctrl+U)', 'Strikethrough': '删除线', 'FontColor': '字体颜色', 'BackColor': '背景颜色', 'SelectAll': '全选 (Ctrl+A)', 'Removeformat': '删除文字格式', 'Align': '对齐', 'List': '列表', 'Outdent': '减少缩进', 'Indent': '增加缩进', 'Link': '超链接 (Ctrl+L)', 'Unlink': '取消超链接', 'Anchor': '锚点', 'Img': '图片', 'Flash': 'Flash动画', 'Media': '多媒体文件', 'Hr': '插入水平线', 'Emot': '表情', 'Table': '表格', 'Source': '源代码', 'WYSIWYG': '可视化编辑', 'Preview': '预览', 'Print': '打印 (Ctrl+P)', 'Fullscreen': '全屏编辑 (Esc)', 'About': '关于 xhEditor', 'dialogOk': '确定', 'dialogCancel': '取消', 'cutDisabledTip': '您的浏览器安全设置不允许使用剪切操作,请使用键盘快捷键(Ctrl + X)来完成', 'copyDisabledTip': '您的浏览器安全设置不允许使用复制操作,请使用键盘快捷键(Ctrl + C)来完成', 'pasteDisabledTip': '您的浏览器安全设置不允许使用粘贴操作,请使用键盘快捷键(Ctrl + V)来完成', 'close': '关闭', 'listFontname': [{n:'宋体',c:'SimSun'},{n:'仿宋体',c:'FangSong_GB2312'},{n:'黑体',c:'SimHei'},{n:'楷体',c:'KaiTi_GB2312'},{n:'微软雅黑',c:'Microsoft YaHei'},{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}], 'listBlocktag': { 'p': '普通段落', 'h1': '标题1', 'h2': '标题2', 'h3': '标题3', 'h4': '标题4', 'h5': '标题5', 'h6': '标题6', 'pre': '已编排格式', 'address': '地址' }, 'fontsize': { 'x-small': '极小', 'small': '特小', 'medium': '小', 'large': '中', 'x-large': '大', 'xx-large': '特大', '-webkit-xxx-large': '极大' }, 'align': { 'justifyleft': '左对齐', 'justifycenter': '居中', 'justifyright': '右对齐', 'justifyfull': '两端对齐' }, 'list': { 'insertOrderedList': '数字列表', 'insertUnorderedList': '符号列表' }, 'link': { 'url': '链接地址: ', 'target': '打开方式: ', 'targetBlank': '新窗口', 'targetSelf': '当前窗口', 'targetParent': '父窗口', 'linkText': '链接文字: ', 'defText': '点击打开链接', 'anchor': '页内锚点: ', 'anchorNone': '未选择' }, 'anchor': { 'name': '锚点名称: ' }, 'img': { 'url': '图片文件: ', 'alt': '替换文本: ', 'align': '对齐方式: ', 'alignLeft': '左对齐', 'alignRight': '右对齐', 'alignTop': '顶端', 'alignMiddle': '居中', 'alignBaseline': '基线', 'alignBottom': '底边', 'width': '宽  度: ', 'height': '高  度: ', 'border': '边框大小: ', 'hspace': '水平间距: ', 'vspace': '垂直间距: ' }, 'flash': { 'url': '动画文件: ', 'width': '宽  度: ', 'height': '高  度: ' }, 'media': { 'url': '媒体文件: ', 'width': '宽  度: ', 'height': '高  度: ' }, 'emot.default': { 'smile': '微笑', 'tongue': '吐舌头', 'titter': '偷笑', 'laugh': '大笑', 'sad': '难过', 'wronged': '委屈', 'fastcry': '快哭了', 'cry': '哭', 'wail': '大哭', 'mad': '生气', 'knock': '敲打', 'curse': '骂人', 'crazy': '抓狂', 'angry': '发火', 'ohmy': '惊讶', 'awkward': '尴尬', 'panic': '惊恐', 'shy': '害羞', 'cute': '可怜', 'envy': '羡慕', 'proud': '得意', 'struggle': '奋斗', 'quiet': '安静', 'shutup': '闭嘴', 'doubt': '疑问', 'despise': '鄙视', 'sleep': '睡觉', 'bye': '再见' }, 'table': { 'rows': '行  数: ', 'columns': '列  数: ', 'headers': '标题单元: ', 'headersRow': '第一行', 'headersCol': '第一列', 'headersBoth': '第一行和第一列', 'width': '宽  度: ', 'height': '高  度: ', 'border': '边框大小: ', 'cellSpacing': '表格间距: ', 'cellPadding': '表格填充: ', 'align': '对齐方式: ', 'alignLeft': '左对齐', 'alignCenter': '居中', 'alignRight': '右对齐', 'caption': '表格标题: ' }, 'upload': { 'btnText' : '上传', 'browserTitle': '浏览文件', 'progressTitle': '文件上传中(Esc取消上传)', 'progressTip': '文件上传中,请稍候……', 'countLimit': '请不要一次上传超过{$0}个文件', 'extLimit': '文件的扩展名必需为:{$0}', 'typeLimit': '每次只能拖放上传同一类型文件', 'apiError': '{$0} 上传接口发生错误!\r\n\r\n返回的错误内容为: \r\n\r\n{$1}' }, 'aboutXheditor': 'xhEditor是基于jQuery开发的跨平台轻量可视化XHTML编辑器,基于LGPL开源协议发布。' }); ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_lang/zh-tw.js ================================================ /** * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved. * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt */ XHEDITOR.setLang({ 'default': '預設', 'none': '無', 'defaultReadTip': '可視化編輯器,alt+1到9鍵,切換到工具區,tab鍵,選擇按鈕,esc鍵,返回編輯', 'Cut': '剪下 (Ctrl+X)', 'Copy': '複製 (Ctrl+C)', 'Paste': '貼上 (Ctrl+V)', 'Pastetext': '貼上文本', 'PastetextTip': '使用鍵盤快捷鍵(Ctrl+V)把內容貼上到方框裡,按 確定', 'Blocktag': '段落標籤', 'Fontface': '字型', 'FontSize': '字型大小', 'Bold': '粗體 (Ctrl+B)', 'Italic': '斜體 (Ctrl+I)', 'Underline': '底線 (Ctrl+U)', 'Strikethrough': '刪除線', 'FontColor': '字型顏色', 'BackColor': '背景顏色', 'SelectAll': '全選 (Ctrl+A)', 'Removeformat': '刪除文字格式', 'Align': '對齊', 'List': '列表', 'Outdent': '減少縮排', 'Indent': '增加縮排', 'Link': '超連結 (Ctrl+L)', 'Unlink': '取消超連結', 'Anchor': '錨點', 'Img': '圖片', 'Flash': 'Flash動畫', 'Media': '多媒體文件', 'Hr': '插入水平線', 'Emot': '表情', 'Table': '表格', 'Source': '原始碼', 'WYSIWYG': '可視化編輯', 'Preview': '預覽', 'Print': '打印 (Ctrl+P)', 'Fullscreen': '全螢幕編輯 (Esc)', 'About': '關於 xhEditor', 'dialogOk': '確定', 'dialogCancel': '取消', 'cutDisabledTip': '您的瀏覽器安全設置不允許使用剪下操作,請使用鍵盤快捷鍵(Ctrl + X)來完成', 'copyDisabledTip': '您的瀏覽器安全設置不允許使用複製操作,請使用鍵盤快捷鍵(Ctrl + C)來完成', 'pasteDisabledTip': '您的瀏覽器安全設置不允許使用貼上操作,請使用鍵盤快捷鍵(Ctrl + V)來完成', 'close': '關閉', 'listFontname': [{n:'新細明體',c:'PMingLiu'},{n:'細明體',c:'mingliu'},{n:'標楷體',c:'DFKai-SB'},{n:'微軟正黑體',c:'Microsoft JhengHei'},{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}], 'listBlocktag': { 'p': '普通段落', 'h1': '標題1', 'h2': '標題2', 'h3': '標題3', 'h4': '標題4', 'h5': '標題5', 'h6': '標題6', 'pre': '已編排格式', 'address': '地址' }, 'fontsize': { 'x-small': '極小', 'small': '特小', 'medium': '小', 'large': '中', 'x-large': '大', 'xx-large': '特大', '-webkit-xxx-large': '極大' }, 'align': { 'justifyleft': '靠左對齊', 'justifycenter': '置中', 'justifyright': '靠右對齊', 'justifyfull': '左右對齊' }, 'list': { 'insertOrderedList': '數字列表', 'insertUnorderedList': '符號列表' }, 'link': { 'url': '鏈接地址: ', 'target': '打開方式: ', 'targetBlank': '新窗口', 'targetSelf': '當前窗口', 'targetParent': '父窗口', 'linkText': '鏈接文字: ', 'defText': '點擊打開鏈接', 'anchor': '頁內錨點: ', 'anchorNone': '未選擇' }, 'anchor': { 'name': '錨點名稱: ' }, 'img': { 'url': '圖片文件: ', 'alt': '替換文本: ', 'align': '對齊方式: ', 'alignLeft': '靠左對齊', 'alignRight': '靠右對齊', 'alignTop': '頂端', 'alignMiddle': '置中', 'alignBaseline': '基線', 'alignBottom': '底邊', 'width': '寬  度: ', 'height': '高  度: ', 'border': '邊框大小: ', 'hspace': '水平間距: ', 'vspace': '垂直間距: ' }, 'flash': { 'url': '動畫文件: ', 'width': '寬  度: ', 'height': '高  度: ' }, 'media': { 'url': '媒體文件: ', 'width': '寬  度: ', 'height': '高  度: ' }, 'emot.default': { 'smile': '微笑', 'tongue': '吐舌頭', 'titter': '偷笑', 'laugh': '大笑', 'sad': '難過', 'wronged': '委屈', 'fastcry': '快哭了', 'cry': '哭', 'wail': '大哭', 'mad': '生氣', 'knock': '敲打', 'curse': '罵人', 'crazy': '抓狂', 'angry': '發火', 'ohmy': '驚訝', 'awkward': '尷尬', 'panic': '驚恐', 'shy': '害羞', 'cute': '可憐', 'envy': '羨慕', 'proud': '得意', 'struggle': '奮鬥', 'quiet': '安靜', 'shutup': '閉嘴', 'doubt': '疑問', 'despise': '鄙視', 'sleep': '睡覺', 'bye': '再見' }, 'table': { 'rows': '行  數: ', 'columns': '列  數: ', 'headers': '標題單元: ', 'headersRow': '第一行', 'headersCol': '第一列', 'headersBoth': '第一行和第一列', 'width': '寬  度: ', 'height': '高  度: ', 'border': '邊框大小: ', 'cellSpacing': '表格間距: ', 'cellPadding': '表格填充: ', 'align': '對齊方式: ', 'alignLeft': '靠左對齊', 'alignCenter': '置中', 'alignRight': '靠右對齊', 'caption': '表格標題: ' }, 'upload': { 'btnText' : '上傳', 'browserTitle': '瀏覽文件', 'progressTitle': '文件上傳中(Esc取消上傳)', 'progressTip': '文件上傳中,請稍候……', 'countLimit': '請不要一次上傳超過{$0}個文件', 'extLimit': '文件的擴展名必需為:{$0}', 'typeLimit': '每次只能拖放上傳同一類型文件', 'apiError': '{$0} 上傳接口發生錯誤!\r\n\r\n返回的錯誤內容為: \r\n\r\n{$1}' }, 'aboutXheditor': 'xhEditor是基於jQuery開發的跨平台輕量可視化XHTML編輯器,基於LGPL開源協議發佈。' }); ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/html2markdown.js ================================================ /** * HTML2Markdown - An HTML to Markdown converter. * * This implementation uses HTML DOM parsing for conversion. Parsing code was * abstracted out in a parsing function which should be easy to remove in favor * of other parsing libraries. * * Converted MarkDown was tested with ShowDown library for HTML rendering. And * it tries to create MarkDown that does not confuse ShowDown when certain * combination of HTML tags come together. * * @author Himanshu Gilani * @author Kates Gasis (original author) * */ if (typeof require != "undefined") { var htmlparser = require("./htmldomparser"); var HTMLParser = htmlparser.HTMLParser; } /** * HTML2Markdown * @param html - html string to convert * @return converted markdown text */ function HTML2Markdown(html, opts) { var logging = false; var nodeList = []; var listTagStack = []; var linkAttrStack = []; var blockquoteStack = []; var preStack = []; var links = []; opts = opts || {}; var inlineStyle = opts['inlineStyle'] || false; var markdownTags = { "hr": "- - -\n\n", "br": " \n", "title": "# ", "h1": "# ", "h2": "## ", "h3": "### ", "h4": "#### ", "h5": "##### ", "h6": "###### ", "b": "**", "strong": "**", "i": "_", "em": "_", "dfn": "_", "var": "_", "cite": "_", "span": " ", "ul": "* ", "ol": "1. ", "dl": "- ", "blockquote": "> " }; function getListMarkdownTag() { var listItem = ""; if(listTagStack) { for ( var i = 0; i < listTagStack.length - 1; i++) { listItem += " "; } } listItem += peek(listTagStack); return listItem; } function convertAttrs(attrs) { var attributes = {}; for(var k in attrs) { var attr = attrs[k]; attributes[attr.name] = attr; } return attributes; } function peek(list) { if(list && list.length > 0) { return list.slice(-1)[0]; } return ""; } function peekTillNotEmpty(list) { if(!list) { return ""; } for(var i = list.length - 1; i>=0; i-- ){ if(list[i] != "") { return list[i]; } } return ""; } function removeIfEmptyTag(start) { var cleaned = false; if(start == peekTillNotEmpty(nodeList)) { while(peek(nodeList) != start) { nodeList.pop(); } nodeList.pop(); cleaned = true; } return cleaned; } function sliceText(start) { var text = []; while(nodeList.length > 0 && peek(nodeList) != start) { var t = nodeList.pop(); text.unshift(t); } return text.join(""); } function block(isEndBlock) { var lastItem = nodeList.pop(); if (!lastItem) { return; } if(!isEndBlock) { var block; if(/\s*\n\n\s*$/.test(lastItem)) { lastItem = lastItem.replace(/\s*\n\n\s*$/, "\n\n"); block = ""; } else if(/\s*\n\s*$/.test(lastItem)) { lastItem = lastItem.replace(/\s*\n\s*$/, "\n"); block = "\n"; } else if(/\s+$/.test(lastItem)) { block = "\n\n"; } else { block = "\n\n"; } nodeList.push(lastItem); nodeList.push(block); } else { nodeList.push(lastItem); if(!lastItem.endsWith("\n")) { nodeList.push("\n\n"); } } } function listBlock() { if(nodeList.length > 0) { var li = peek(nodeList); if(!li.endsWith("\n")) { nodeList.push("\n"); } } else { nodeList.push("\n"); } } try { var dom; if(html) { var e = document.createElement('div'); e.innerHTML = html; dom = e; } else { dom = window.document.body; } HTMLParser(dom,{ start: function(tag, attrs, unary) { tag = tag.toLowerCase(); if(logging) { console.log("start: "+ tag); } if(unary && (tag != "br" && tag != "hr" && tag != "img")) { return; } switch (tag) { case "br": nodeList.push(markdownTags[tag]); break; case "hr": block(); nodeList.push(markdownTags[tag]); break; case "title": case "h1": case "h2": case "h3": case "h4": case "h5": case "h6": block(); nodeList.push(markdownTags[tag]); break; case "b": case "strong": case "i": case "em": case "dfn": case "var": case "cite": nodeList.push(markdownTags[tag]); break; case "span": if(! /\s+$/.test(peek(nodeList))) { nodeList.push(markdownTags[tag]); } break; case "p": case "div": case "td": block(); break; case "ul": case "ol": case "dl": listTagStack.push(markdownTags[tag]); // lists are block elements if(listTagStack.length > 1) { listBlock(); } else { block(); } break; case "li": case "dt": var li = getListMarkdownTag(); nodeList.push(li); break; case "a": var attribs = convertAttrs(attrs); linkAttrStack.push(attribs); nodeList.push("["); break; case "img": var attribs = convertAttrs(attrs); var alt, title, url; attribs["src"] ? url = getNormalizedUrl(attribs["src"].value) : url = ""; if(!url) { break; } attribs['alt'] ? alt = attribs['alt'].value.trim() : alt = ""; attribs['title'] ? title = attribs['title'].value.trim() : title = ""; // if parent of image tag is nested in anchor tag use inline style if(!inlineStyle && !peekTillNotEmpty(nodeList).startsWith("[")) { var l = links.indexOf(url); if(l == -1) { links.push(url); l=links.length-1; } block(); nodeList.push("!["); if(alt!= "") { nodeList.push(alt); } else if (title != null) { nodeList.push(title); } nodeList.push("][" + l + "]"); block(); } else { //if image is not a link image then treat images as block elements if(!peekTillNotEmpty(nodeList).startsWith("[")) { block(); } nodeList.push("![" + alt + "](" + url + (title ? " \"" + title + "\"" : "") + ")"); if(!peekTillNotEmpty(nodeList).startsWith("[")) { block(true); } } break; case "blockquote": block(); blockquoteStack.push(markdownTags[tag]); nodeList.push(blockquoteStack.join("")); break; case "pre": case "code": block(); preStack.push(true); break; } }, chars: function(text) { if(preStack.length > 0) { text = " " + text.replace(/\n/g,"\n "); } else if(text.trim() != "") { text = text.replace(/\s+/g, " "); var prevText = peekTillNotEmpty(nodeList); if(/\s+$/.test(prevText)) { text = text.replace(/^\s+/g, ""); } } else { nodeList.push(""); return; } if(logging) { console.log("text: "+ text); } nodeList.push(text); }, end: function(tag) { tag = tag.toLowerCase(); if(logging) { console.log("end: "+ tag); } switch (tag) { case "title": case "h1": case "h2": case "h3": case "h4": case "h5": case "h6": if(!removeIfEmptyTag(markdownTags[tag])) { block(true); } break; case "p": case "div": case "td": while(nodeList.length > 0 && peek(nodeList).trim() == "") { nodeList.pop(); } block(true); break; case "b": case "strong": case "i": case "em": case "dfn": case "var": case "cite": if(!removeIfEmptyTag(markdownTags[tag])) { nodeList.push(sliceText(markdownTags[tag]).trim()); nodeList.push(markdownTags[tag]); } break; case "a": var text = sliceText("["); text = text.replace(/\s+/g, " "); text = text.trim(); if(text == "") { nodeList.pop(); break; } var attrs = linkAttrStack.pop(); var url; attrs["href"] && attrs["href"].value != "" ? url = getNormalizedUrl(attrs["href"].value) : url = ""; if(url == "") { nodeList.pop(); nodeList.push(text); break; } nodeList.push(text); if(!inlineStyle && !peek(nodeList).startsWith("!")){ var l = links.indexOf(url); if(l == -1) { links.push(url); l=links.length-1; } nodeList.push("][" + l + "]"); } else { if(peek(nodeList).startsWith("!")){ var text = nodeList.pop(); text = nodeList.pop() + text; block(); nodeList.push(text); } var title = attrs["title"]; nodeList.push("](" + url + (title ? " \"" + title.value.trim().replace(/\s+/g, " ") + "\"" : "") + ")"); if(peek(nodeList).startsWith("!")){ block(true); } } break; case "ul": case "ol": case "dl": listBlock(); listTagStack.pop(); break; case "li": case "dt": var li = getListMarkdownTag(); if(!removeIfEmptyTag(li)) { var text = sliceText(li).trim(); if(text.startsWith("[![")) { nodeList.pop(); block(); nodeList.push(text); block(true); } else { nodeList.push(text); listBlock(); } } break; case "blockquote": blockquoteStack.pop(); break; case "pre": case "code": block(true); preStack.pop(); break; case "span": if(peek(nodeList).trim() == "") { nodeList.pop(); if(peek(nodeList) == " ") { nodeList.pop(); } else { nodeList.push(markdownTags[tag]); } } else { var text = nodeList.pop(); nodeList.push(text.trim()); nodeList.push(markdownTags[tag]); } break; case "br": case "hr": case "img": case "table": case "tr": break; } } }, {"nodesToIgnore": ["script", "noscript", "object", "iframe", "frame", "head", "style", "label"]}); if(!inlineStyle) { for ( var i = 0; i < links.length; i++) { if(i == 0) { var lastItem = nodeList.pop(); nodeList.push(lastItem.replace(/\s+$/g, "")); nodeList.push("\n\n[" + i + "]: " + links[i]); } else { nodeList.push("\n[" + i + "]: " + links[i]); } } } } catch(e) { console.log(e.stack); console.trace(); } return nodeList.join(""); } function getNormalizedUrl(s) { var urlBase = location.href; var urlDir = urlBase.replace(/\/[^\/]*$/, '/'); var urlPage = urlBase.replace(/#[^\/#]*$/, ''); var url; if(/^[a-zA-Z]([a-zA-Z0-9 -.])*:/.test(s)) { // already absolute url url = s; } else if(/^\x2f/.test(s)) {// %2f --> / // url is relative to site location.protocol != "" ? url = location.protocol + "//" : url =""; url+= location.hostname; if(location.port != "80") { url+=":"+location.port; } url += s; } else if(/^#/.test(s)) { // url is relative to page url = urlPage + s; } else { url = urlDir + s; } return encodeURI(url); } if (typeof exports != "undefined") { exports.HTML2Markdown = HTML2Markdown; } if (typeof exports != "undefined") { exports.HTML2MarkDown = HTML2MarkDown; } /* add the useful functions to String object*/ if (typeof String.prototype.trim != 'function') { String.prototype.trim = function() { return replace(/^\s+|\s+$/g,""); }; } if (typeof String.prototype.isNotEmpty != 'function') { String.prototype.isNotEmpty = function() { if (/\S/.test(this)) { return true; } else { return false; } }; } if (typeof String.prototype.replaceAll != 'function') { String.prototype.replaceAll = function(stringToFind,stringToReplace){ var temp = this; var index = temp.indexOf(stringToFind); while(index != -1){ temp = temp.replace(stringToFind,stringToReplace); index = temp.indexOf(stringToFind); } return temp; }; } if (typeof String.prototype.startsWith != 'function') { String.prototype.startsWith = function(str) { return this.indexOf(str) == 0; }; } if (typeof String.prototype.endsWith != 'function') { String.prototype.endsWith = function(suffix) { return this.match(suffix+"$") == suffix; }; } if (typeof Array.prototype.indexOf != 'function') { Array.prototype.indexOf = function(obj, fromIndex) { if (fromIndex == null) { fromIndex = 0; } else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); } for ( var i = fromIndex, j = this.length; i < j; i++) { if (this[i] === obj) return i; } return -1; }; } ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/htmldomparser.js ================================================ /* * HTMLParser - This implementation of parser assumes we are parsing HTML in browser * and user DOM methods available in browser for parsing HTML. * * @author Himanshu Gilani * */ var HTMLParser = function(node, handler, opts) { opts = opts || {}; var nodesToIgnore = opts['nodesToIgnore'] || []; var parseHiddenNodes = opts['parseHiddenNodes'] || 'false'; var c = node.childNodes; for ( var i = 0; i < c.length; i++) { try { var ignore = false; for(var k=0; k< nodesToIgnore.length; k++) { if(c[i].nodeName.toLowerCase() == nodesToIgnore[k]) { ignore= true; break; } } //NOTE hidden node testing is expensive in FF. if (ignore || (!parseHiddenNodes && isHiddenNode(c[i])) ){ continue; } if (c[i].nodeName.toLowerCase() != "#text" && c[i].nodeName.toLowerCase() != "#comment") { var attrs = []; if (c[i].hasAttributes()) { var attributes = c[i].attributes; for ( var a = 0; a < attributes.length; a++) { var attribute = attributes.item(a); attrs.push({ name : attribute.nodeName, value : attribute.nodeValue, }); } } if (handler.start) { if (c[i].hasChildNodes()) { handler.start(c[i].nodeName, attrs, false); if (c[i].nodeName.toLowerCase() == "pre" || c[i].nodeName.toLowerCase() == "code") { handler.chars(c[i].innerHTML); } else if (c[i].nodeName.toLowerCase() == "iframe" || c[i].nodeName.toLowerCase() == "frame") { if (c[i].contentDocument && c[i].contentDocument.documentElement) { return HTMLParser(c[i].contentDocument.documentElement, handler, opts); } } else if (c[i].hasChildNodes()) { HTMLParser(c[i], handler, opts); } if (handler.end) { handler.end(c[i].nodeName); } } else { handler.start(c[i].nodeName, attrs, true); } } } else if (c[i].nodeName.toLowerCase() == "#text") { if (handler.chars) { handler.chars(c[i].nodeValue); } } else if (c[i].nodeName.toLowerCase() == "#comment") { if (handler.comment) { handler.comment(c[i].nodeValue); } } } catch (e) { //properly log error console.log("error while parsing node: " + c[i].nodeName.toLowerCase()); } } }; function isHiddenNode(node) { if(node.nodeName.toLowerCase() == "title"){ return false; } if (window.getComputedStyle) { try { var style = window.getComputedStyle(node, null); if (style.getPropertyValue && style.getPropertyValue('display') == 'none') { return true; } } catch (e) { // consume and ignore. node styles are not accessible } return false; } } ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/multiupload/multiupload.css ================================================ html,body{ font-size:12px; padding:0px;margin:0; overflow:hidden; width:100%;height:100%; } #buttonArea{ background:url(img/bg1.gif); border-top:1px solid #F0F5FA; border-bottom:1px solid #99BBE8; padding:3px; } #controlBtns{ float:right; } .btn{ display:inline-block; color:#000; text-decoration:none; padding-right:3px; cursor:pointer; } .btn span{ display:inline-block; height:17px; line-height:17px; padding:2px; } .btn img{border:0;vertical-align:text-bottom;} .btn:hover{background:url(img/btnbgr.gif) top right;} .btn:hover span{background:url(img/btnbg.gif);} #listArea{ overflow-x:hidden; overflow-y:auto; } #listTitle tr{background:url(img/bg2.gif);} #listTitle td{padding:5px;border-top:1px solid #F0F5FA;border-left:1px solid #fff;border-right:1px solid #ccc;border-bottom:1px solid #D0D0D0;} #listBody tr{cursor:pointer;} #listBody .hover{background:#F0F0F0;} #listBody .select{background:#DFE8F6;} #listBody td{padding:5px;border-bottom:1px solid #EDEDED;} #progressArea{ background:#D4E1F2; border-top:1px solid #99BBE8; padding:3px; } #progressBar{ position: relative; border:1px solid #6593CF; padding:1px; } #progress{ height:16px; background:#8FB5E8 url(img/progressbg.gif); } #progressBar span{ position: absolute; text-align: center; width:100%;line-height:16px; color:#396095; } ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/multiupload/multiupload.html ================================================ MultiUpload Demo
        文件名大小状态
        0%
        ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/multiupload/multiupload.js ================================================ /*! * MultiUpload for xheditor * @requires xhEditor * * @author Yanis.Wang * @site http://xheditor.com/ * @licence LGPL(http://www.opensource.org/licenses/lgpl-license.php) * * @Version: 0.9.2 (build 100505) */ var swfu,selQueue=[],selectID,arrMsg=[],allSize=0,uploadSize=0; function removeFile() { var file; if(!selectID)return; for(var i in selQueue) { file=selQueue[i]; if(file.id==selectID) { selQueue.splice(i,1); allSize-=file.size; swfu.cancelUpload(file.id); $('#'+file.id).remove(); selectID=null; break; } } $('#btnClear').hide(); if(selQueue.length==0)$('#controlBtns').hide(); } function startUploadFiles() { if(swfu.getStats().files_queued>0) { $('#controlBtns').hide(); swfu.startUpload(); } else alert('上传前请先添加文件'); } function setFileState(fileid,txt) { $('#'+fileid+'_state').text(txt); } function fileQueued(file)//队列添加成功 { for(var i in selQueue)if(selQueue[i].name==file.name){swfu.cancelUpload(file.id);return false;}//防止同名文件重复添加 if(selQueue.length==0)$('#controlBtns').show(); selQueue.push(file); allSize+=file.size; $('#listBody').append(''+file.name+''+formatBytes(file.size)+'就绪'); $('#'+file.id).hover(function(){$(this).addClass('hover');},function(){$(this).removeClass('hover');}) .click(function(){selectID=file.id;$('#listBody tr').removeClass('select');$(this).removeClass('hover').addClass('select');$('#btnClear').show();}) } function fileQueueError(file, errorCode, message)//队列添加失败 { var errorName=''; switch (errorCode) { case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED: errorName = "只能同时上传 "+this.settings.file_upload_limit+" 个文件"; break; case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: errorName = "选择的文件超过了当前大小限制:"+this.settings.file_size_limit; break; case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: errorName = "零大小文件"; break; case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: errorName = "文件扩展名必需为:"+this.settings.file_types_description+" ("+this.settings.file_types+")"; break; default: errorName = "未知错误"; break; } alert(errorName); } function uploadStart(file)//单文件上传开始 { setFileState(file.id,'上传中…'); } function uploadProgress(file, bytesLoaded, bytesTotal)//单文件上传进度 { var percent=Math.ceil((uploadSize+bytesLoaded)/allSize*100); $('#progressBar span').text(percent+'% ('+formatBytes(uploadSize+bytesLoaded)+' / '+formatBytes(allSize)+')'); $('#progressBar div').css('width',percent+'%'); } function uploadSuccess(file, serverData)//单文件上传成功 { var data=Object; try{eval("data=" + serverData);}catch(ex){}; if(data.err!=undefined&&data.msg!=undefined) { if(!data.err) { uploadSize+=file.size; arrMsg.push(data.msg); setFileState(file.id,'上传成功'); } else { setFileState(file.id,'上传失败'); alert(data.err); } } else setFileState(file.id,'上传失败!'); } function uploadError(file, errorCode, message)//单文件上传错误 { setFileState(file.id,'上传失败!'); } function uploadComplete(file)//文件上传周期结束 { if(swfu.getStats().files_queued>0)swfu.startUpload(); else uploadAllComplete(); } function uploadAllComplete()//全部文件上传成功 { callback(arrMsg); } function formatBytes(bytes) { var s = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB']; var e = Math.floor(Math.log(bytes)/Math.log(1024)); return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e]; } ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/multiupload/swfupload/swfupload.js ================================================ /** * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com * * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ * * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilz�n and Mammon Media and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * */ /* ******************* */ /* Constructor & Init */ /* ******************* */ var SWFUpload; if (SWFUpload == undefined) { SWFUpload = function (settings) { this.initSWFUpload(settings); }; } SWFUpload.prototype.initSWFUpload = function (settings) { try { this.customSettings = {}; // A container where developers can place their own settings associated with this instance. this.settings = settings; this.eventQueue = []; this.movieName = "SWFUpload_" + SWFUpload.movieCount++; this.movieElement = null; // Setup global control tracking SWFUpload.instances[this.movieName] = this; // Load the settings. Load the Flash movie. this.initSettings(); this.loadFlash(); this.displayDebugInfo(); } catch (ex) { delete SWFUpload.instances[this.movieName]; throw ex; } }; /* *************** */ /* Static Members */ /* *************** */ SWFUpload.instances = {}; SWFUpload.movieCount = 0; SWFUpload.version = "2.2.0 2009-03-25"; SWFUpload.QUEUE_ERROR = { QUEUE_LIMIT_EXCEEDED : -100, FILE_EXCEEDS_SIZE_LIMIT : -110, ZERO_BYTE_FILE : -120, INVALID_FILETYPE : -130 }; SWFUpload.UPLOAD_ERROR = { HTTP_ERROR : -200, MISSING_UPLOAD_URL : -210, IO_ERROR : -220, SECURITY_ERROR : -230, UPLOAD_LIMIT_EXCEEDED : -240, UPLOAD_FAILED : -250, SPECIFIED_FILE_ID_NOT_FOUND : -260, FILE_VALIDATION_FAILED : -270, FILE_CANCELLED : -280, UPLOAD_STOPPED : -290 }; SWFUpload.FILE_STATUS = { QUEUED : -1, IN_PROGRESS : -2, ERROR : -3, COMPLETE : -4, CANCELLED : -5 }; SWFUpload.BUTTON_ACTION = { SELECT_FILE : -100, SELECT_FILES : -110, START_UPLOAD : -120 }; SWFUpload.CURSOR = { ARROW : -1, HAND : -2 }; SWFUpload.WINDOW_MODE = { WINDOW : "window", TRANSPARENT : "transparent", OPAQUE : "opaque" }; // Private: takes a URL, determines if it is relative and converts to an absolute URL // using the current site. Only processes the URL if it can, otherwise returns the URL untouched SWFUpload.completeURL = function(url) { if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) { return url; } var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : ""); var indexSlash = window.location.pathname.lastIndexOf("/"); if (indexSlash <= 0) { path = "/"; } else { path = window.location.pathname.substr(0, indexSlash) + "/"; } return /*currentURL +*/ path + url; }; /* ******************** */ /* Instance Members */ /* ******************** */ // Private: initSettings ensures that all the // settings are set, getting a default value if one was not assigned. SWFUpload.prototype.initSettings = function () { this.ensureDefault = function (settingName, defaultValue) { this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName]; }; // Upload backend settings this.ensureDefault("upload_url", ""); this.ensureDefault("preserve_relative_urls", false); this.ensureDefault("file_post_name", "Filedata"); this.ensureDefault("post_params", {}); this.ensureDefault("use_query_string", false); this.ensureDefault("requeue_on_error", false); this.ensureDefault("http_success", []); this.ensureDefault("assume_success_timeout", 0); // File Settings this.ensureDefault("file_types", "*.*"); this.ensureDefault("file_types_description", "All Files"); this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited" this.ensureDefault("file_upload_limit", 0); this.ensureDefault("file_queue_limit", 0); // Flash Settings this.ensureDefault("flash_url", "swfupload.swf"); this.ensureDefault("prevent_swf_caching", true); // Button Settings this.ensureDefault("button_image_url", ""); this.ensureDefault("button_width", 1); this.ensureDefault("button_height", 1); this.ensureDefault("button_text", ""); this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;"); this.ensureDefault("button_text_top_padding", 0); this.ensureDefault("button_text_left_padding", 0); this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES); this.ensureDefault("button_disabled", false); this.ensureDefault("button_placeholder_id", ""); this.ensureDefault("button_placeholder", null); this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW); this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW); // Debug Settings this.ensureDefault("debug", false); this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API // Event Handlers this.settings.return_upload_start_handler = this.returnUploadStart; this.ensureDefault("swfupload_loaded_handler", null); this.ensureDefault("file_dialog_start_handler", null); this.ensureDefault("file_queued_handler", null); this.ensureDefault("file_queue_error_handler", null); this.ensureDefault("file_dialog_complete_handler", null); this.ensureDefault("upload_start_handler", null); this.ensureDefault("upload_progress_handler", null); this.ensureDefault("upload_error_handler", null); this.ensureDefault("upload_success_handler", null); this.ensureDefault("upload_complete_handler", null); this.ensureDefault("debug_handler", this.debugMessage); this.ensureDefault("custom_settings", {}); // Other settings this.customSettings = this.settings.custom_settings; // Update the flash url if needed if (!!this.settings.prevent_swf_caching) { this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime(); } if (!this.settings.preserve_relative_urls) { //this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url); // Don't need to do this one since flash doesn't look at it this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url); this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url); } delete this.ensureDefault; }; // Private: loadFlash replaces the button_placeholder element with the flash movie. SWFUpload.prototype.loadFlash = function () { var targetElement, tempParent; // Make sure an element with the ID we are going to use doesn't already exist if (document.getElementById(this.movieName) !== null) { throw "ID " + this.movieName + " is already in use. The Flash Object could not be added"; } // Get the element where we will be placing the flash movie targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder; if (targetElement == undefined) { throw "Could not find the placeholder element: " + this.settings.button_placeholder_id; } // Append the container and load the flash tempParent = document.createElement("div"); tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers) targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement); // Fix IE Flash/Form bug if (window[this.movieName] == undefined) { window[this.movieName] = this.getMovieElement(); } }; // Private: getFlashHTML generates the object tag needed to embed the flash in to the document SWFUpload.prototype.getFlashHTML = function () { // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay return ['', '', '', '', '', '', '', ''].join(""); }; // Private: getFlashVars builds the parameter string that will be passed // to flash in the flashvars param. SWFUpload.prototype.getFlashVars = function () { // Build a string from the post param object var paramString = this.buildParamString(); var httpSuccessString = this.settings.http_success.join(","); // Build the parameter string return ["movieName=", encodeURIComponent(this.movieName), "&uploadURL=", encodeURIComponent(this.settings.upload_url), "&useQueryString=", encodeURIComponent(this.settings.use_query_string), "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), "&httpSuccess=", encodeURIComponent(httpSuccessString), "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), "&params=", encodeURIComponent(paramString), "&filePostName=", encodeURIComponent(this.settings.file_post_name), "&fileTypes=", encodeURIComponent(this.settings.file_types), "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), "&buttonWidth=", encodeURIComponent(this.settings.button_width), "&buttonHeight=", encodeURIComponent(this.settings.button_height), "&buttonText=", encodeURIComponent(this.settings.button_text), "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), "&buttonAction=", encodeURIComponent(this.settings.button_action), "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), "&buttonCursor=", encodeURIComponent(this.settings.button_cursor) ].join(""); }; // Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload // The element is cached after the first lookup SWFUpload.prototype.getMovieElement = function () { if (this.movieElement == undefined) { this.movieElement = document.getElementById(this.movieName); } if (this.movieElement === null) { throw "Could not find Flash element"; } return this.movieElement; }; // Private: buildParamString takes the name/value pairs in the post_params setting object // and joins them up in to a string formatted "name=value&name=value" SWFUpload.prototype.buildParamString = function () { var postParams = this.settings.post_params; var paramStringPairs = []; if (typeof(postParams) === "object") { for (var name in postParams) { if (postParams.hasOwnProperty(name)) { paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString())); } } } return paramStringPairs.join("&"); }; // Public: Used to remove a SWFUpload instance from the page. This method strives to remove // all references to the SWF, and other objects so memory is properly freed. // Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state. // Credits: Major improvements provided by steffen SWFUpload.prototype.destroy = function () { try { // Make sure Flash is done before we try to remove it this.cancelUpload(null, false); // Remove the SWFUpload DOM nodes var movieElement = null; movieElement = this.getMovieElement(); if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE // Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround) for (var i in movieElement) { try { if (typeof(movieElement[i]) === "function") { movieElement[i] = null; } } catch (ex1) {} } // Remove the Movie Element from the page try { movieElement.parentNode.removeChild(movieElement); } catch (ex) {} } // Remove IE form fix reference window[this.movieName] = null; // Destroy other references SWFUpload.instances[this.movieName] = null; delete SWFUpload.instances[this.movieName]; this.movieElement = null; this.settings = null; this.customSettings = null; this.eventQueue = null; this.movieName = null; return true; } catch (ex2) { return false; } }; // Public: displayDebugInfo prints out settings and configuration // information about this SWFUpload instance. // This function (and any references to it) can be deleted when placing // SWFUpload in production. SWFUpload.prototype.displayDebugInfo = function () { this.debug( [ "---SWFUpload Instance Info---\n", "Version: ", SWFUpload.version, "\n", "Movie Name: ", this.movieName, "\n", "Settings:\n", "\t", "upload_url: ", this.settings.upload_url, "\n", "\t", "flash_url: ", this.settings.flash_url, "\n", "\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n", "\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n", "\t", "http_success: ", this.settings.http_success.join(", "), "\n", "\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n", "\t", "file_post_name: ", this.settings.file_post_name, "\n", "\t", "post_params: ", this.settings.post_params.toString(), "\n", "\t", "file_types: ", this.settings.file_types, "\n", "\t", "file_types_description: ", this.settings.file_types_description, "\n", "\t", "file_size_limit: ", this.settings.file_size_limit, "\n", "\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n", "\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n", "\t", "debug: ", this.settings.debug.toString(), "\n", "\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n", "\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n", "\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", "\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n", "\t", "button_width: ", this.settings.button_width.toString(), "\n", "\t", "button_height: ", this.settings.button_height.toString(), "\n", "\t", "button_text: ", this.settings.button_text.toString(), "\n", "\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n", "\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n", "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", "\t", "button_action: ", this.settings.button_action.toString(), "\n", "\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n", "\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n", "Event Handlers:\n", "\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", "\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", "\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", "\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", "\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", "\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", "\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", "\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", "\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n" ].join("") ); }; /* Note: addSetting and getSetting are no longer used by SWFUpload but are included the maintain v2 API compatibility */ // Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used. SWFUpload.prototype.addSetting = function (name, value, default_value) { if (value == undefined) { return (this.settings[name] = default_value); } else { return (this.settings[name] = value); } }; // Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found. SWFUpload.prototype.getSetting = function (name) { if (this.settings[name] != undefined) { return this.settings[name]; } return ""; }; // Private: callFlash handles function calls made to the Flash element. // Calls are made with a setTimeout for some functions to work around // bugs in the ExternalInterface library. SWFUpload.prototype.callFlash = function (functionName, argumentArray) { argumentArray = argumentArray || []; var movieElement = this.getMovieElement(); var returnValue, returnString; // Flash's method if calling ExternalInterface methods (code adapted from MooTools). try { returnString = movieElement.CallFunction('' + __flash__argumentsToXML(argumentArray, 0) + ''); returnValue = eval(returnString); } catch (ex) { throw "Call to " + functionName + " failed"; } // Unescape file post param values if (returnValue != undefined && typeof returnValue.post === "object") { returnValue = this.unescapeFilePostParams(returnValue); } return returnValue; }; /* ***************************** -- Flash control methods -- Your UI should use these to operate SWFUpload ***************************** */ // WARNING: this function does not work in Flash Player 10 // Public: selectFile causes a File Selection Dialog window to appear. This // dialog only allows 1 file to be selected. SWFUpload.prototype.selectFile = function () { this.callFlash("SelectFile"); }; // WARNING: this function does not work in Flash Player 10 // Public: selectFiles causes a File Selection Dialog window to appear/ This // dialog allows the user to select any number of files // Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names. // If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around // for this bug. SWFUpload.prototype.selectFiles = function () { this.callFlash("SelectFiles"); }; // Public: startUpload starts uploading the first file in the queue unless // the optional parameter 'fileID' specifies the ID SWFUpload.prototype.startUpload = function (fileID) { this.callFlash("StartUpload", [fileID]); }; // Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index. // If you do not specify a fileID the current uploading file or first file in the queue is cancelled. // If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter. SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) { if (triggerErrorEvent !== false) { triggerErrorEvent = true; } this.callFlash("CancelUpload", [fileID, triggerErrorEvent]); }; // Public: stopUpload stops the current upload and requeues the file at the beginning of the queue. // If nothing is currently uploading then nothing happens. SWFUpload.prototype.stopUpload = function () { this.callFlash("StopUpload"); }; /* ************************ * Settings methods * These methods change the SWFUpload settings. * SWFUpload settings should not be changed directly on the settings object * since many of the settings need to be passed to Flash in order to take * effect. * *********************** */ // Public: getStats gets the file statistics object. SWFUpload.prototype.getStats = function () { return this.callFlash("GetStats"); }; // Public: setStats changes the SWFUpload statistics. You shouldn't need to // change the statistics but you can. Changing the statistics does not // affect SWFUpload accept for the successful_uploads count which is used // by the upload_limit setting to determine how many files the user may upload. SWFUpload.prototype.setStats = function (statsObject) { this.callFlash("SetStats", [statsObject]); }; // Public: getFile retrieves a File object by ID or Index. If the file is // not found then 'null' is returned. SWFUpload.prototype.getFile = function (fileID) { if (typeof(fileID) === "number") { return this.callFlash("GetFileByIndex", [fileID]); } else { return this.callFlash("GetFile", [fileID]); } }; // Public: addFileParam sets a name/value pair that will be posted with the // file specified by the Files ID. If the name already exists then the // exiting value will be overwritten. SWFUpload.prototype.addFileParam = function (fileID, name, value) { return this.callFlash("AddFileParam", [fileID, name, value]); }; // Public: removeFileParam removes a previously set (by addFileParam) name/value // pair from the specified file. SWFUpload.prototype.removeFileParam = function (fileID, name) { this.callFlash("RemoveFileParam", [fileID, name]); }; // Public: setUploadUrl changes the upload_url setting. SWFUpload.prototype.setUploadURL = function (url) { this.settings.upload_url = url.toString(); this.callFlash("SetUploadURL", [url]); }; // Public: setPostParams changes the post_params setting SWFUpload.prototype.setPostParams = function (paramsObject) { this.settings.post_params = paramsObject; this.callFlash("SetPostParams", [paramsObject]); }; // Public: addPostParam adds post name/value pair. Each name can have only one value. SWFUpload.prototype.addPostParam = function (name, value) { this.settings.post_params[name] = value; this.callFlash("SetPostParams", [this.settings.post_params]); }; // Public: removePostParam deletes post name/value pair. SWFUpload.prototype.removePostParam = function (name) { delete this.settings.post_params[name]; this.callFlash("SetPostParams", [this.settings.post_params]); }; // Public: setFileTypes changes the file_types setting and the file_types_description setting SWFUpload.prototype.setFileTypes = function (types, description) { this.settings.file_types = types; this.settings.file_types_description = description; this.callFlash("SetFileTypes", [types, description]); }; // Public: setFileSizeLimit changes the file_size_limit setting SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) { this.settings.file_size_limit = fileSizeLimit; this.callFlash("SetFileSizeLimit", [fileSizeLimit]); }; // Public: setFileUploadLimit changes the file_upload_limit setting SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) { this.settings.file_upload_limit = fileUploadLimit; this.callFlash("SetFileUploadLimit", [fileUploadLimit]); }; // Public: setFileQueueLimit changes the file_queue_limit setting SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) { this.settings.file_queue_limit = fileQueueLimit; this.callFlash("SetFileQueueLimit", [fileQueueLimit]); }; // Public: setFilePostName changes the file_post_name setting SWFUpload.prototype.setFilePostName = function (filePostName) { this.settings.file_post_name = filePostName; this.callFlash("SetFilePostName", [filePostName]); }; // Public: setUseQueryString changes the use_query_string setting SWFUpload.prototype.setUseQueryString = function (useQueryString) { this.settings.use_query_string = useQueryString; this.callFlash("SetUseQueryString", [useQueryString]); }; // Public: setRequeueOnError changes the requeue_on_error setting SWFUpload.prototype.setRequeueOnError = function (requeueOnError) { this.settings.requeue_on_error = requeueOnError; this.callFlash("SetRequeueOnError", [requeueOnError]); }; // Public: setHTTPSuccess changes the http_success setting SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) { if (typeof http_status_codes === "string") { http_status_codes = http_status_codes.replace(" ", "").split(","); } this.settings.http_success = http_status_codes; this.callFlash("SetHTTPSuccess", [http_status_codes]); }; // Public: setHTTPSuccess changes the http_success setting SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) { this.settings.assume_success_timeout = timeout_seconds; this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]); }; // Public: setDebugEnabled changes the debug_enabled setting SWFUpload.prototype.setDebugEnabled = function (debugEnabled) { this.settings.debug_enabled = debugEnabled; this.callFlash("SetDebugEnabled", [debugEnabled]); }; // Public: setButtonImageURL loads a button image sprite SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) { if (buttonImageURL == undefined) { buttonImageURL = ""; } this.settings.button_image_url = buttonImageURL; this.callFlash("SetButtonImageURL", [buttonImageURL]); }; // Public: setButtonDimensions resizes the Flash Movie and button SWFUpload.prototype.setButtonDimensions = function (width, height) { this.settings.button_width = width; this.settings.button_height = height; var movie = this.getMovieElement(); if (movie != undefined) { movie.style.width = width + "px"; movie.style.height = height + "px"; } this.callFlash("SetButtonDimensions", [width, height]); }; // Public: setButtonText Changes the text overlaid on the button SWFUpload.prototype.setButtonText = function (html) { this.settings.button_text = html; this.callFlash("SetButtonText", [html]); }; // Public: setButtonTextPadding changes the top and left padding of the text overlay SWFUpload.prototype.setButtonTextPadding = function (left, top) { this.settings.button_text_top_padding = top; this.settings.button_text_left_padding = left; this.callFlash("SetButtonTextPadding", [left, top]); }; // Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button SWFUpload.prototype.setButtonTextStyle = function (css) { this.settings.button_text_style = css; this.callFlash("SetButtonTextStyle", [css]); }; // Public: setButtonDisabled disables/enables the button SWFUpload.prototype.setButtonDisabled = function (isDisabled) { this.settings.button_disabled = isDisabled; this.callFlash("SetButtonDisabled", [isDisabled]); }; // Public: setButtonAction sets the action that occurs when the button is clicked SWFUpload.prototype.setButtonAction = function (buttonAction) { this.settings.button_action = buttonAction; this.callFlash("SetButtonAction", [buttonAction]); }; // Public: setButtonCursor changes the mouse cursor displayed when hovering over the button SWFUpload.prototype.setButtonCursor = function (cursor) { this.settings.button_cursor = cursor; this.callFlash("SetButtonCursor", [cursor]); }; /* ******************************* Flash Event Interfaces These functions are used by Flash to trigger the various events. All these functions a Private. Because the ExternalInterface library is buggy the event calls are added to a queue and the queue then executed by a setTimeout. This ensures that events are executed in a determinate order and that the ExternalInterface bugs are avoided. ******************************* */ SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) { // Warning: Don't call this.debug inside here or you'll create an infinite loop if (argumentArray == undefined) { argumentArray = []; } else if (!(argumentArray instanceof Array)) { argumentArray = [argumentArray]; } var self = this; if (typeof this.settings[handlerName] === "function") { // Queue the event this.eventQueue.push(function () { this.settings[handlerName].apply(this, argumentArray); }); // Execute the next queued event setTimeout(function () { self.executeNextEvent(); }, 0); } else if (this.settings[handlerName] !== null) { throw "Event handler " + handlerName + " is unknown or is not a function"; } }; // Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout // we must queue them in order to garentee that they are executed in order. SWFUpload.prototype.executeNextEvent = function () { // Warning: Don't call this.debug inside here or you'll create an infinite loop var f = this.eventQueue ? this.eventQueue.shift() : null; if (typeof(f) === "function") { f.apply(this); } }; // Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have // properties that contain characters that are not valid for JavaScript identifiers. To work around this // the Flash Component escapes the parameter names and we must unescape again before passing them along. SWFUpload.prototype.unescapeFilePostParams = function (file) { var reg = /[$]([0-9a-f]{4})/i; var unescapedPost = {}; var uk; if (file != undefined) { for (var k in file.post) { if (file.post.hasOwnProperty(k)) { uk = k; var match; while ((match = reg.exec(uk)) !== null) { uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16))); } unescapedPost[uk] = file.post[k]; } } file.post = unescapedPost; } return file; }; // Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working) SWFUpload.prototype.testExternalInterface = function () { try { return this.callFlash("TestExternalInterface"); } catch (ex) { return false; } }; // Private: This event is called by Flash when it has finished loading. Don't modify this. // Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded. SWFUpload.prototype.flashReady = function () { // Check that the movie element is loaded correctly with its ExternalInterface methods defined var movieElement = this.getMovieElement(); if (!movieElement) { this.debug("Flash called back ready but the flash movie can't be found."); return; } this.cleanUp(movieElement); this.queueEvent("swfupload_loaded_handler"); }; // Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE. // This function is called by Flash each time the ExternalInterface functions are created. SWFUpload.prototype.cleanUp = function (movieElement) { // Pro-actively unhook all the Flash functions try { if (this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)"); for (var key in movieElement) { try { if (typeof(movieElement[key]) === "function") { movieElement[key] = null; } } catch (ex) { } } } } catch (ex1) { } // Fix Flashes own cleanup code so if the SWFMovie was removed from the page // it doesn't display errors. window["__flash__removeCallback"] = function (instance, name) { try { if (instance) { instance[name] = null; } } catch (flashEx) { } }; }; /* This is a chance to do something before the browse window opens */ SWFUpload.prototype.fileDialogStart = function () { this.queueEvent("file_dialog_start_handler"); }; /* Called when a file is successfully added to the queue. */ SWFUpload.prototype.fileQueued = function (file) { file = this.unescapeFilePostParams(file); this.queueEvent("file_queued_handler", file); }; /* Handle errors that occur when an attempt to queue a file fails. */ SWFUpload.prototype.fileQueueError = function (file, errorCode, message) { file = this.unescapeFilePostParams(file); this.queueEvent("file_queue_error_handler", [file, errorCode, message]); }; /* Called after the file dialog has closed and the selected files have been queued. You could call startUpload here if you want the queued files to begin uploading immediately. */ SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) { this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]); }; SWFUpload.prototype.uploadStart = function (file) { file = this.unescapeFilePostParams(file); this.queueEvent("return_upload_start_handler", file); }; SWFUpload.prototype.returnUploadStart = function (file) { var returnValue; if (typeof this.settings.upload_start_handler === "function") { file = this.unescapeFilePostParams(file); returnValue = this.settings.upload_start_handler.call(this, file); } else if (this.settings.upload_start_handler != undefined) { throw "upload_start_handler must be a function"; } // Convert undefined to true so if nothing is returned from the upload_start_handler it is // interpretted as 'true'. if (returnValue === undefined) { returnValue = true; } returnValue = !!returnValue; this.callFlash("ReturnUploadStart", [returnValue]); }; SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) { file = this.unescapeFilePostParams(file); this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]); }; SWFUpload.prototype.uploadError = function (file, errorCode, message) { file = this.unescapeFilePostParams(file); this.queueEvent("upload_error_handler", [file, errorCode, message]); }; SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) { file = this.unescapeFilePostParams(file); this.queueEvent("upload_success_handler", [file, serverData, responseReceived]); }; SWFUpload.prototype.uploadComplete = function (file) { file = this.unescapeFilePostParams(file); this.queueEvent("upload_complete_handler", file); }; /* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the internal debug console. You can override this event and have messages written where you want. */ SWFUpload.prototype.debug = function (message) { this.queueEvent("debug_handler", message); }; /* ********************************** Debug Console The debug console is a self contained, in page location for debug message to be sent. The Debug Console adds itself to the body if necessary. The console is automatically scrolled as messages appear. If you are using your own debug handler or when you deploy to production and have debug disabled you can remove these functions to reduce the file size and complexity. ********************************** */ // Private: debugMessage is the default debug_handler. If you want to print debug messages // call the debug() function. When overriding the function your own function should // check to see if the debug setting is true before outputting debug information. SWFUpload.prototype.debugMessage = function (message) { if (this.settings.debug) { var exceptionMessage, exceptionValues = []; // Check for an exception object and print it nicely if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { for (var key in message) { if (message.hasOwnProperty(key)) { exceptionValues.push(key + ": " + message[key]); } } exceptionMessage = exceptionValues.join("\n") || ""; exceptionValues = exceptionMessage.split("\n"); exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); SWFUpload.Console.writeLine(exceptionMessage); } else { SWFUpload.Console.writeLine(message); } } }; SWFUpload.Console = {}; SWFUpload.Console.writeLine = function (message) { var console, documentForm; try { console = document.getElementById("SWFUpload_Console"); if (!console) { documentForm = document.createElement("form"); document.getElementsByTagName("body")[0].appendChild(documentForm); console = document.createElement("textarea"); console.id = "SWFUpload_Console"; console.style.fontFamily = "monospace"; console.setAttribute("wrap", "off"); console.wrap = "off"; console.style.overflow = "auto"; console.style.width = "700px"; console.style.height = "350px"; console.style.margin = "5px"; documentForm.appendChild(console); } console.value += message + "\n"; console.scrollTop = console.scrollHeight - console.clientHeight; } catch (ex) { alert("Exception: " + ex.name + " Message: " + ex.message); } }; ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_plugins/showdown.js ================================================ // // showdown.js -- A javascript port of Markdown. // // Copyright (c) 2007 John Fraser. // // Original Markdown Copyright (c) 2004-2005 John Gruber // // // Redistributable under a BSD-style open source license. // See license.txt for more information. // // The full source distribution is at: // // A A L // T C A // T K B // // // // // Wherever possible, Showdown is a straight, line-by-line port // of the Perl version of Markdown. // // This is not a normal parser design; it's basically just a // series of string substitutions. It's hard to read and // maintain this way, but keeping Showdown close to the original // design makes it easier to port new features. // // More importantly, Showdown behaves like markdown.pl in most // edge cases. So web applications can do client-side preview // in Javascript, and then build identical HTML on the server. // // This port needs the new RegExp functionality of ECMA 262, // 3rd Edition (i.e. Javascript 1.5). Most modern web browsers // should do fine. Even with the new regular expression features, // We do a lot of work to emulate Perl's regex functionality. // The tricky changes in this file mostly have the "attacklab:" // label. Major or self-explanatory changes don't. // // Smart diff tools like Araxis Merge will be able to match up // this file with markdown.pl in a useful way. A little tweaking // helps: in a copy of markdown.pl, replace "#" with "//" and // replace "$text" with "text". Be sure to ignore whitespace // and line endings. // // // Showdown usage: // // var text = "Markdown *rocks*."; // // var converter = new Showdown.converter(); // var html = converter.makeHtml(text); // // alert(html); // // Note: move the sample code to the bottom of this // file before uncommenting it. // // // Showdown namespace // var Showdown={extensions:{}},forEach=Showdown.forEach=function(a,b){if(typeof a.forEach=="function")a.forEach(b);else{var c,d=a.length;for(c=0;c?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|(?=~0))/gm,function(a,d,e,f,g){return d=d.toLowerCase(),b[d]=G(e),f?f+g:(g&&(c[d]=g.replace(/"/g,""")),"")}),a=a.replace(/~0/,""),a},m=function(a){a=a.replace(/\n/g,"\n\n");var b="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside",c="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside";return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,n),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm,n),a=a.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,n),a=a.replace(/(\n\n[ ]{0,3}[ \t]*(?=\n{2,}))/g,n),a=a.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,n),a=a.replace(/\n\n/g,"\n"),a},n=function(a,b){var c=b;return c=c.replace(/\n\n/g,"\n"),c=c.replace(/^\n/,""),c=c.replace(/\n+$/g,""),c="\n\n~K"+(d.push(c)-1)+"K\n\n",c},o=function(a){a=v(a);var b=A("
        ");return a=a.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,b),a=x(a),a=y(a),a=E(a),a=m(a),a=F(a),a},p=function(a){return a=B(a),a=q(a),a=H(a),a=t(a),a=r(a),a=I(a),a=G(a),a=D(a),a=a.replace(/ +\n/g,"
        \n"),a},q=function(a){var b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\/?code>(?=.)/g,"$1`");return b=N(b,"\\`*_"),b}),a},r=function(a){return a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,s),a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,s),a=a.replace(/(\[([^\[\]]+)\])()()()()()/g,s),a},s=function(a,d,e,f,g,h,i,j){j==undefined&&(j="");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(b[m]!=undefined)n=b[m],c[m]!=undefined&&(o=c[m]);else{if(!(k.search(/\(\s*\)$/m)>-1))return k;n=""}}n=N(n,"*_");var p='",p},t=function(a){return a=a.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,u),a=a.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,u),a},u=function(a,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o="");if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(b[m]==undefined)return k;n=b[m],c[m]!=undefined&&(o=c[m])}l=l.replace(/"/g,"""),n=N(n,"*_");var p=''+l+''+p(c)+"")}),a=a.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(a,c){return A('

        '+p(c)+"

        ")}),a=a.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(a,c,d){var e=c.length;return A("'+p(d)+"")}),a},w,x=function(a){a+="~0";var b=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;return e?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?"ul":"ol";d=d.replace(/\n{2,}/g,"\n\n\n");var f=w(d);return f=f.replace(/\s+$/,""),f="<"+e+">"+f+"\n",f}):(b=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?"ul":"ol",f=f.replace(/\n{2,}/g,"\n\n\n"),h=w(f);return h=e+"<"+g+">\n"+h+"\n",h})),a=a.replace(/~0/,""),a};w=function(a){return e++,a=a.replace(/\n{2,}$/,"\n"),a+="~0",a=a.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(a,b,c,d,e){var f=e,g=b,h=c;return g||f.search(/\n{2,}/)>-1?f=o(L(f)):(f=x(L(f)),f=f.replace(/\n$/,""),f=p(f)),"
      • "+f+"
      • \n"}),a=a.replace(/~0/g,""),e--,a};var y=function(a){return a+="~0",a=a.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=C(L(d)),d=M(d),d=d.replace(/^\n+/g,""),d=d.replace(/\n+$/g,""),d="
        "+d+"\n
        ",A(d)+e}),a=a.replace(/~0/,""),a},z=function(a){return a+="~0",a=a.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g,function(a,b,c){var d=b,e=c;return e=C(e),e=M(e),e=e.replace(/^\n+/g,""),e=e.replace(/\n+$/g,""),e="
        "+e+"\n
        ",A(e)}),a=a.replace(/~0/,""),a},A=function(a){return a=a.replace(/(^\n+|\n+$)/g,""),"\n\n~K"+(d.push(a)-1)+"K\n\n"},B=function(a){return a=a.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ \t]*)/g,""),f=f.replace(/[ \t]*$/g,""),f=C(f),b+""+f+""}),a},C=function(a){return a=a.replace(/&/g,"&"),a=a.replace(//g,">"),a=N(a,"*_{}[]\\",!1),a},D=function(a){return a=a.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"$2"),a=a.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"$2"),a},E=function(a){return a=a.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \t]*>[ \t]?/gm,"~0"),c=c.replace(/~0/g,""),c=c.replace(/^[ \t]+$/gm,""),c=o(c),c=c.replace(/(^|\n)/g,"$1 "),c=c.replace(/(\s*
        [^\r]+?<\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^  /mg,"~0"),c=c.replace(/~0/g,""),c}),A("
        \n"+c+"\n
        ")}),a},F=function(a){a=a.replace(/^\n+/g,""),a=a.replace(/\n+$/g,"");var b=a.split(/\n{2,}/g),c=[],e=b.length;for(var f=0;f=0?c.push(g):g.search(/\S/)>=0&&(g=p(g),g=g.replace(/^([ \t]*)/g,"

        "),g+="

        ",c.push(g))}e=c.length;for(var f=0;f=0){var h=d[RegExp.$1];h=h.replace(/\$/g,"$$$$"),c[f]=c[f].replace(/~K\d+K/,h)}return c.join("\n\n")},G=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&"),a=a.replace(/<(?![a-z\/?\$!])/gi,"<"),a},H=function(a){return a=a.replace(/\\(\\)/g,O),a=a.replace(/\\([`*_{}\[\]()>#+-.!])/g,O),a},I=function(a){return a=a.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'
        $1'),a=a.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(a,b){return J(K(b))}),a},J=function(a){var b=[function(a){return"&#"+a.charCodeAt(0)+";"},function(a){return"&#x"+a.charCodeAt(0).toString(16)+";"},function(a){return a}];return a="mailto:"+a,a=a.replace(/./g,function(a){if(a=="@")a=b[Math.floor(Math.random()*2)](a);else if(a!=":"){var c=Math.random();a=c>.9?b[2](a):c>.45?b[1](a):b[0](a)}return a}),a=''+a+"",a=a.replace(/">.+:/g,'">'),a},K=function(a){return a=a.replace(/~E(\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)}),a},L=function(a){return a=a.replace(/^(\t|[ ]{1,4})/gm,"~0"),a=a.replace(/~0/g,""),a},M=function(a){return a=a.replace(/\t(?=\t)/g," "),a=a.replace(/\t/g,"~A~B"),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f * @site http://xheditor.com/ * @licence LGPL(http://www.opensource.org/licenses/lgpl-license.php) * * @Version: 0.9.12 (build 120228) */ function ubb2html(sUBB) { var i,sHtml=String(sUBB),arrcode=new Array(),cnum=0; var arrFontsize=['10px','13px','16px','18px','24px','32px','48px']; sHtml=sHtml.replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&','"':'"'}[c];}); sHtml=sHtml.replace(/\r?\n/g,"
        "); sHtml=sHtml.replace(/\[code\s*(?:=\s*([^\]]+?))?\]([\s\S]*?)\[\/code\]/ig,function(all,t,c){//code特殊处理 cnum++;arrcode[cnum]=all; return "[\tubbcodeplace_"+cnum+"\t]"; }); sHtml=sHtml.replace(/\[(\/?)(b|u|i|s|sup|sub)\]/ig,'<$1$2>'); sHtml=sHtml.replace(/\[color\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/ig,''); sHtml=sHtml.replace(/\[font\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/ig,''); sHtml=sHtml.replace(/\[\/(color|font)\]/ig,''); sHtml=sHtml.replace(/\[size\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/ig,function(all,size){ if(size.match(/^\d+$/))size=arrFontsize[size-1]; return ''; }); sHtml=sHtml.replace(/\[back\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]/ig,''); sHtml=sHtml.replace(/\[\/(size|back)\]/ig,''); for(i=0;i<3;i++)sHtml=sHtml.replace(/\[align\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\](((?!\[align(?:\s+[^\]]+)?\])[\s\S])*?)\[\/align\]/ig,'

        $2

        '); sHtml=sHtml.replace(/\[img\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/img\]/ig,''); sHtml=sHtml.replace(/\[img\s*=([^,\]]*)(?:\s*,\s*(\d*%?)\s*,\s*(\d*%?)\s*)?(?:,?\s*(\w+))?\s*\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*)?\s*\[\/img\]/ig,function(all,alt,p1,p2,p3,src){ var str=''+alt+''); sHtml=sHtml.replace(/\[url\]\s*(((?!")[\s\S])*?)(?:"[\s\S]*?)?\s*\[\/url\]/ig,'$1'); sHtml=sHtml.replace(/\[url\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]\s*([\s\S]*?)\s*\[\/url\]/ig,'$2'); sHtml=sHtml.replace(/\[email\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/email\]/ig,'$1'); sHtml=sHtml.replace(/\[email\s*=\s*([^\]"]+?)(?:"[^\]]*?)?\s*\]\s*([\s\S]+?)\s*\[\/email\]/ig,'$2'); sHtml=sHtml.replace(/\[quote\]/ig,'
        '); sHtml=sHtml.replace(/\[\/quote\]/ig,'
        '); sHtml=sHtml.replace(/\[flash\s*(?:=\s*(\d+)\s*,\s*(\d+)\s*)?\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/flash\]/ig,function(all,w,h,url){ if(!w)w=480;if(!h)h=400; return ''; }); sHtml=sHtml.replace(/\[media\s*(?:=\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+)\s*)?)?\]\s*(((?!")[\s\S])+?)(?:"[\s\S]*?)?\s*\[\/media\]/ig,function(all,w,h,play,url){ if(!w)w=480;if(!h)h=400; return ''; }); sHtml=sHtml.replace(/\[table\s*(?:=\s*(\d{1,4}%?)\s*(?:,\s*([^\]"]+)(?:"[^\]]*?)?)?)?\s*\]/ig,function(all,w,b){ var str=''; }); sHtml=sHtml.replace(/\[tr\s*(?:=\s*([^\]"]+?)(?:"[^\]]*?)?)?\s*\]/ig,function(all,bg){ return ''; }); sHtml=sHtml.replace(/\[td\s*(?:=\s*(\d{1,2})\s*,\s*(\d{1,2})\s*(?:,\s*(\d{1,4}%?))?)?\s*\]/ig,function(all,col,row,w){ return '1?' colspan="'+col+'"':'')+(row>1?' rowspan="'+row+'"':'')+(w?' width="'+w+'"':'')+'>'; }); sHtml=sHtml.replace(/\[\/(table|tr|td)\]/ig,''); sHtml=sHtml.replace(/\[\*\]((?:(?!\[\*\]|\[\/list\]|\[list\s*(?:=[^\]]+)?\])[\s\S])+)/ig,'
      • $1
      • '); sHtml=sHtml.replace(/\[list\s*(?:=\s*([^\]"]+?)(?:"[^\]]*?)?)?\s*\]/ig,function(all,type){ var str=''; }); sHtml=sHtml.replace(/\[\/list\]/ig,''); sHtml=sHtml.replace(/\[hr\/\]/ig,'
        '); for(i=1;i<=cnum;i++)sHtml=sHtml.replace("[\tubbcodeplace_"+i+"\t]", arrcode[i]); sHtml=sHtml.replace(/(^|<\/?\w+(?:\s+[^>]*?)?>)([^<$]+)/ig, function(all,tag,text){ return tag+text.replace(/[\t ]/g,function(c){return {'\t':'        ',' ':' '}[c];}); }); function isNum(s){if(s!=null&&s!='')return !isNaN(s);else return false;} return sHtml; } function html2ubb(sHtml) { var regSrc=/\s+src\s*=\s*(["']?)\s*(.+?)\s*\1(\s|$)/i,regWidth=/\s+width\s*=\s*(["']?)\s*(\d+(?:\.\d+)?%?)\s*\1(\s|$)/i,regHeight=/\s+height\s*=\s*(["']?)\s*(\d+(?:\.\d+)?%?)\s*\1(\s|$)/i,regBg=/(?:background|background-color|bgcolor)\s*[:=]\s*(["']?)\s*((rgb\s*\(\s*\d{1,3}%?,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\))|(#[0-9a-f]{3,6})|([a-z]{1,20}))\s*\1/i var i,sUBB=String(sHtml),arrcode=new Array(),cnum=0; sUBB=sUBB.replace(/[ \t]*\r?\n[ \t]*/g,''); sUBB = sUBB.replace(/<(script|style)(\s+[^>]*?)?>[\s\S]*?<\/\1>/ig, ''); sUBB = sUBB.replace(//ig,''); sUBB=sUBB.replace(/]*)?\/?>/ig,"\r\n"); sUBB=sUBB.replace(/\[code\s*(=\s*([^\]]+?))?\]([\s\S]*?)\[\/code\]/ig,function(all,t,c){//code特殊处理 cnum++;arrcode[cnum]=all; return "[\tubbcodeplace_"+cnum+"\t]"; }); sUBB=sUBB.replace(/<(\/?)(b|u|i|s)(\s+[^>]*?)?>/ig,'[$1$2]'); sUBB=sUBB.replace(/<(\/?)strong(\s+[^>]*?)?>/ig,'[$1b]'); sUBB=sUBB.replace(/<(\/?)em(\s+[^>]*?)?>/ig,'[$1i]'); sUBB=sUBB.replace(/<(\/?)(strike|del)(\s+[^>]*?)?>/ig,'[$1s]'); sUBB=sUBB.replace(/<(\/?)(sup|sub)(\s+[^>]*?)?>/ig,'[$1$2]'); //font转ubb function font2ubb(all,tag,attrs,content) { if(!attrs)return content; var arrStart=[],arrEnd=[]; var match; match=attrs.match(/ face\s*=\s*"\s*([^"]+)\s*"/i); if(match){ arrStart.push('[font='+match[1]+']'); arrEnd.push('[/font]'); } match=attrs.match(/ size\s*=\s*"\s*(\d+)\s*"/i); if(match){ arrStart.push('[size='+match[1]+']'); arrEnd.push('[/size]'); } match=attrs.match(/ color\s*=\s*"\s*([^"]+)\s*"/i); if(match){ arrStart.push('[color='+formatColor(match[1])+']'); arrEnd.push('[/color]'); } return arrStart.join('')+content+arrEnd.join(''); } sUBB = sUBB.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/ig,font2ubb);//第3层 sUBB = sUBB.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?)<\/\1>/ig,font2ubb);//第2层 sUBB = sUBB.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/ig,font2ubb);//最里层 for(i=0;i<3;i++)sUBB=sUBB.replace(/<(span)(?:\s+[^>]*?)?\s+style\s*=\s*"((?:[^"]*?;)*\s*(?:font-family|font-size|color|background|background-color)\s*:[^"]*)"(?: [^>]+)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/ig,function(all,tag,style,content){ var face=style.match(/(?:^|;)\s*font-family\s*:\s*([^;]+)/i),size=style.match(/(?:^|;)\s*font-size\s*:\s*([^;]+)/i),color=style.match(/(?:^|;)\s*color\s*:\s*([^;]+)/i),back=style.match(/(?:^|;)\s*(?:background|background-color)\s*:\s*([^;]+)/i),str=content; var arrStart=[],arrEnd=[]; if(face){ arrStart.push('[font='+face[1]+']'); arrEnd.push('[/font]'); } if(size){ arrStart.push('[size='+size[1]+']'); arrEnd.push('[/size]'); } if(color){ arrStart.push('[color='+formatColor(color[1])+']'); arrEnd.push('[/color]'); } if(back){ arrStart.push('[back='+formatColor(back[1])+']'); arrEnd.push('[/back]'); } return arrStart.join('')+str+arrEnd.join(''); }); function formatColor(c) { var matchs; if(matchs=c.match(/\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i)){c=(matchs[1]*65536+matchs[2]*256+matchs[3]*1).toString(16);while(c.length<6)c='0'+c;c='#'+c;} c=c.replace(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i,'#$1$1$2$2$3$3'); return c; } for(i=0;i<3;i++)sUBB=sUBB.replace(/<(div|p)(?:\s+[^>]*?)?[\s"';]\s*(?:text-)?align\s*[=:]\s*(["']?)\s*(left|center|right)\s*\2[^>]*>(((?!<\1(\s+[^>]*?)?>)[\s\S])+?)<\/\1>/ig,'[align=$3]$4[/align]'); for(i=0;i<3;i++)sUBB=sUBB.replace(/<(center)(?:\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/ig,'[align=center]$2[/align]'); for(i=0;i<3;i++)sUBB=sUBB.replace(/<(p|div)(?:\s+[^>]*?)?\s+style\s*=\s*"(?:[^;"]*;)*\s*text-align\s*:([^;"]*)[^"]*"(?: [^>]+)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/ig,function(all,tag,align,content){ return '[align='+align+']'+content+'[/align]'; }); sUBB=sUBB.replace(/]*?)?\s+href=(["'])\s*(.+?)\s*\1[^>]*>\s*([\s\S]*?)\s*<\/a>/ig,function(all,q,url,text){ if(!(url&&text))return ''; var tag='url',str; if(url.match(/^mailto:/i)) { tag='email'; url=url.replace(/mailto:(.+?)/i,'$1'); } str='['+tag; if(url!=text)str+='='+url; return str+']'+text+'[/'+tag+']'; }); sUBB=sUBB.replace(/]*?)\/?>/ig,function(all,attr){ var emot=attr.match(/\s+emot\s*=\s*(["']?)\s*(.+?)\s*\1(\s|$)/i); if(emot)return '[emot='+emot[2]+'/]'; var url=attr.match(regSrc),alt=attr.match(/\s+alt\s*=\s*(["']?)\s*(.*?)\s*\1(\s|$)/i),w=attr.match(regWidth),h=attr.match(regHeight),align=attr.match(/\s+align\s*=\s*(["']?)\s*(\w+)\s*\1(\s|$)/i),str='[img',p=''; if(!url)return ''; p+=alt[2]; if(w||h)p+=','+(w?w[2]:'')+','+(h?h[2]:''); if(align)p+=','+align[2]; if(p)str+='='+p; str+=']'+url[2]+'[/img]'; return str; }); sUBB=sUBB.replace(/]*?)?>/ig,'[quote]'); sUBB=sUBB.replace(/<\/blockquote>/ig,'[/quote]'); sUBB=sUBB.replace(/]*?)?(?:\s+type\s*=\s*"\s*application\/x-shockwave-flash\s*"|\s+classid\s*=\s*"\s*clsid:d27cdb6e-ae6d-11cf-96b8-4445535400000\s*")[^>]*?)\/?>/ig,function(all,attr){ var url=attr.match(regSrc),w=attr.match(regWidth),h=attr.match(regHeight),str='[flash'; if(!url)return ''; if(w&&h)str+='='+w[2]+','+h[2]; str+=']'+url[2]; return str+'[/flash]'; }); sUBB=sUBB.replace(/]*?)?(?:\s+type\s*=\s*"\s*application\/x-mplayer2\s*"|\s+classid\s*=\s*"\s*clsid:6bf52a52-394a-11d3-b153-00c04f79faa6\s*")[^>]*?)\/?>/ig,function(all,attr){ var url=attr.match(regSrc),w=attr.match(regWidth),h=attr.match(regHeight),p=attr.match(/\s+autostart\s*=\s*(["']?)\s*(.+?)\s*\1(\s|$)/i),str='[media',auto='0'; if(!url)return ''; if(p)if(p[2]=='true')auto='1'; if(w&&h)str+='='+w[2]+','+h[2]+','+auto; str+=']'+url[2]; return str+'[/media]'; }); sUBB=sUBB.replace(/]*?)?>/ig,function(all,attr){ var str='[table'; if(attr) { var w=attr.match(regWidth),b=attr.match(regBg); if(w) { str+='='+w[2]; if(b)str+=','+b[2]; } } return str+']'; }); sUBB=sUBB.replace(/]*?)?>/ig,function(all,attr){ var str='[tr'; if(attr) { var bg=attr.match(regBg) if(bg)str+='='+bg[2]; } return str+']'; }); sUBB=sUBB.replace(/<(?:th|td)(\s+[^>]*?)?>/ig,function(all,attr){ var str='[td'; if(attr) { var col=attr.match(/\s+colspan\s*=\s*(["']?)\s*(\d+)\s*\1(\s|$)/i),row=attr.match(/\s+rowspan\s*=\s*(["']?)\s*(\d+)\s*\1(\s|$)/i),w=attr.match(regWidth); col=col?col[2]:1; row=row?row[2]:1; if(col>1||row>1||w)str+='='+col+','+row; if(w)str+=','+w[2]; } return str+']'; }); sUBB=sUBB.replace(/<\/(table|tr)>/ig,'[/$1]'); sUBB=sUBB.replace(/<\/(th|td)>/ig,'[/td]'); sUBB=sUBB.replace(/]*?)?>/ig,function(all,attr){ var t; if(attr)t=attr.match(/\s+type\s*=\s*(["']?)\s*(.+?)\s*\1(\s|$)/i); return '[list'+(t?'='+t[2]:'')+']'; }); sUBB=sUBB.replace(/]*?)?>/ig,'[list=1]'); sUBB=sUBB.replace(/]*?)?>/ig,'[*]'); sUBB=sUBB.replace(/<\/li>/ig,''); sUBB=sUBB.replace(/<\/(ul|ol)>/ig,'[/list]'); sUBB=sUBB.replace(/]*?)?>/ig,function(all,n){return '\r\n\r\n[size='+(7-n)+'][b]'}); sUBB=sUBB.replace(/<\/h[1-6]>/ig,'[/b][/size]\r\n\r\n'); sUBB=sUBB.replace(/]*?)?>/ig,'\r\n[i]'); sUBB=sUBB.replace(/<\/address>/ig,'[i]\r\n'); sUBB=sUBB.replace(/]*?)?\/>/ig,'[hr/]'); for(i=0;i<3;i++)sUBB=sUBB.replace(/<(p)(?:\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/ig,"\r\n\r\n$2\r\n\r\n"); for(i=0;i<3;i++)sUBB=sUBB.replace(/<(div)(?:\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/ig,"\r\n$2\r\n"); sUBB=sUBB.replace(/((\s| )*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次换行 sUBB=sUBB.replace(/^((\s| )*\r?\n)+/g,'');//清除开头换行 sUBB=sUBB.replace(/((\s| )*\r?\n)+$/g,'');//清除结尾换行 for(i=1;i<=cnum;i++)sUBB=sUBB.replace("[\tubbcodeplace_"+i+"\t]", arrcode[i]); sUBB=sUBB.replace(/<[^<>]+?>/g,'');//删除所有HTML标签 var arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'}; sUBB=sUBB.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];}); //清除空内容的UBB标签 sUBB=sUBB.replace(/\[([a-z]+)(?:=[^\[\]]+)?\]\s*\[\/\1\]/ig,''); return sUBB; } ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/default/iframe.css ================================================ html{height:100%;background-color:#FFFFFF;} body,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;} body{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} .xhe-border{border:1px dotted #d3d3d3;} .xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;} .wordImage{border:1px dotted #c00;background:url(img/wordimg.gif) #ffc center center no-repeat;} .editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;} .editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;} .editMode embed{display:inline-block;border:1px dotted #c00;} .editMode embed[type="application/x-shockwave-flash"]{background:url(img/flash.gif) #ffc center center no-repeat;} .editMode embed[type="application/x-mplayer2"]{background:url(img/wmp.gif) center center no-repeat;} .editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;} .editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;} .sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;} .sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;} .previewMode{margin:5px;padding:0px;} .showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;} .showBlocktag p{background-image:url(img/tag-p.gif);} .showBlocktag h1{background-image:url(img/tag-h1.gif);} .showBlocktag h2{background-image:url(img/tag-h2.gif);} .showBlocktag h3{background-image:url(img/tag-h3.gif);} .showBlocktag h4{background-image:url(img/tag-h4.gif);} .showBlocktag h5{background-image:url(img/tag-h5.gif);} .showBlocktag h6{background-image:url(img/tag-h6.gif);} .showBlocktag pre{background-image:url(img/tag-pre.gif);} .showBlocktag address{background-image:url(img/tag-address.gif);} .showBlocktag div{background-image:url(img/tag-div.gif);} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/default/ui.css ================================================ .xhe_default table, .xhe_default tr, .xhe_default td, .xhe_default iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000} .xhe_default table.xheLayout {display:inline-table;background:#F0F0EE; border:1px solid #C5C5C5;width:100%;height:100%;} .xhe_default td.xheTool{padding:0px 3px;border-bottom:1px solid #C5C5C5;} .xhe_default td.xheTool span{float:left;margin:2px 0px;} .xhe_default td.xheTool br{clear:left;} .xhe_default span.xheGStart{display:none;} .xhe_default span.xheGEnd{display:none;} .xhe_default span.xheSeparator{display:block;height:22px;width:4px;margin:2px 2px !important;background:url(img/icons.gif) no-repeat -660px 0;} .xhe_default a.xheButton{display:inline-block;margin:1px;border:0px;cursor:pointer;text-decoration:none;} .xhe_default a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} .xhe_default a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);} .xhe_default a.xheEnabled:hover {margin:0px;border:1px solid #999;background:#fff;} .xhe_default a.xheActive{margin:0px;border:1px solid #999; background:#fff;} .xhe_default a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;} .xhe_default span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px} .xhe_default span.xheBtnCut {background-position:0 0} .xhe_default span.xheBtnCopy {background-position:-20px 0} .xhe_default span.xheBtnPaste {background-position:-40px 0} .xhe_default span.xheBtnPastetext {background-position:-60px 0} .xhe_default span.xheBtnBlocktag {background-position:-80px 0} .xhe_default span.xheBtnFontface {background-position:-100px 0} .xhe_default span.xheBtnFontSize {background-position:-120px 0} .xhe_default span.xheBtnBold {background-position:-140px 0} .xhe_default span.xheBtnItalic {background-position:-160px 0} .xhe_default span.xheBtnUnderline {background-position:-180px 0} .xhe_default span.xheBtnStrikethrough {background-position:-200px 0} .xhe_default span.xheBtnFontColor {background-position:-220px 0} .xhe_default span.xheBtnBackColor {background-position:-240px 0} .xhe_default span.xheBtnSelectAll {background-position:-260px 0} .xhe_default span.xheBtnRemoveformat {background-position:-280px 0} .xhe_default span.xheBtnAlign {background-position:-300px 0} .xhe_default span.xheBtnList {background-position:-320px 0} .xhe_default span.xheBtnOutdent {background-position:-340px 0} .xhe_default span.xheBtnIndent {background-position:-360px 0} .xhe_default span.xheBtnLink {background-position:-380px 0} .xhe_default span.xheBtnUnlink {background-position:-400px 0} .xhe_default span.xheBtnAnchor {background-position:-420px 0} .xhe_default span.xheBtnImg {background-position:-440px 0} .xhe_default span.xheBtnFlash {background-position:-460px 0} .xhe_default span.xheBtnMedia {background-position:-480px 0} .xhe_default span.xheBtnHr {background-position:-500px 0} .xhe_default span.xheBtnEmot {background-position:-520px 0} .xhe_default span.xheBtnTable {background-position:-540px 0} .xhe_default span.xheBtnSource {background-position:-560px 0} .xhe_default span.xheBtnPreview {background-position:-580px 0} .xhe_default span.xheBtnPrint {background-position:-600px 0} .xhe_default span.xheBtnFullscreen {background-position:-620px 0} .xhe_default span.xheBtnAbout {background-position:-640px 0} .xhe_default .xheIframeArea{height:100%;} .xhe_default iframe {display:block;background:#fff;width:100%;height:100%;} #xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;} #xhePanel{display:none;position:absolute;z-index:1000000;border:#999 1px solid;background:#fff;text-align:left;} #xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);} .xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);} .xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;} .xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;} .xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;} .xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;} .xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0} .xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;} .xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;} .xheEmot div a:hover{border:1px solid #999;padding:2px;} .xheEmot ul{border-top:1px solid #999;list-style:none;padding:0 10px;margin:0;font-size:12px;} .xheEmot li{float:left;margin:0 2px 5px 0;} .xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;} .xheEmot li a:hover{text-decoration:underline;} .xheEmot li.cur{border:1px solid #999;border-top:none;position:relative;bottom:1px;} .xheEmot li.cur a{cursor:text;padding-top:1px;} .xheEmot li.cur a:hover{text-decoration:none;} .xheColor{padding:5px;} .xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;} .xheColor a:hover{border:#000 1px solid;} .xheColor a img{display:none;} .xheDialog{padding:10px;font-size:12px;font-family:monospace;} .xheDialog a{text-decoration:underline;color:#00f;} .xheDialog a:hover{text-decoration:underline;color:#00f} .xheDialog div{padding:2px 0;} .xheDialog input{ margin:0;border-width:1px;border-style:solid;font-size:12px; *border-width:expression((type!="checkbox")?'1px':0);*padding:expression((type=="text")?'1px':'auto');*width:expression((type=="text")?'160px':'auto');*border-color:expression((type=="text")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type=="button")?'#F0F0F0':'#FFFFFF');*cursor:expression((type=="button")?'pointer':'');*font-size:expression((type=="button")?'13px':'12px'); } .xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;} .xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;} .xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;} .xheDialog input[type=file]{font-size:13px;} .xheDialog input[type=checkbox]{border:0;} .xheDialog select{margin:0;border:1px #ABADB3 solid;padding:1px;} .xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;} .xheDialog .xheUpload{position: relative;display:inline-block;width:164px;} .xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;} .xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;} .xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;} .xheModal{ position: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #BBB;font-size:12px; _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } .xheModalTitle{padding:5px;background:#F0F0EE;border-bottom:1px solid #BBB;} .xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;} .xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;} .xheModalShadow{ position:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px'); } .xheModalOverlay{ position: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px'); } *html{ background-image:url(about:blank); background-attachment:fixed; } .xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;} .xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#222;text-shadow: 1px 1px 0 #eee;} .xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;} .xhe_Fullfix{overflow:hidden;} .xhe_Fullfix body{width:100%;height:100%;} .xhe_Fullscreen{ top:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff; _position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px'); } .xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/nostyle/iframe.css ================================================ html{height:100%;background-color:#FFFFFF;} body,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;} body{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} .xhe-border{border:1px dotted #d3d3d3;} .xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;} .editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;} .editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;} .editMode embed{display:inline-block;border:1px dashed #FF4E4E;} .editMode embed[type="application/x-shockwave-flash"]{background:url(img/flash.gif) center center no-repeat;} .editMode embed[type="application/x-mplayer2"]{background:url(img/wmp.gif) center center no-repeat;} .editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;} .editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;} .sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;} .sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;outline:0;} .previewMode{margin:5px;padding:0px;} .showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;} .showBlocktag p{background-image:url(img/tag-p.gif);} .showBlocktag h1{background-image:url(img/tag-h1.gif);} .showBlocktag h2{background-image:url(img/tag-h2.gif);} .showBlocktag h3{background-image:url(img/tag-h3.gif);} .showBlocktag h4{background-image:url(img/tag-h4.gif);} .showBlocktag h5{background-image:url(img/tag-h5.gif);} .showBlocktag h6{background-image:url(img/tag-h6.gif);} .showBlocktag pre{background-image:url(img/tag-pre.gif);} .showBlocktag address{background-image:url(img/tag-address.gif);} .showBlocktag div{background-image:url(img/tag-div.gif);} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/nostyle/ui.css ================================================ .xhe_nostyle table, .xhe_nostyle tr, .xhe_nostyle td, .xhe_nostyle iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000} .xhe_nostyle table.xheLayout {display:inline-table;background:#FFF; border:1px solid #C5C5C5;width:100%;height:100%;} .xhe_nostyle td.xheTool{padding:0px 3px;border-bottom:1px solid #C5C5C5;} .xhe_nostyle td.xheTool span{float:left;margin:2px 0px;} .xhe_nostyle td.xheTool br{clear:left;} .xhe_nostyle span.xheGStart{display:none;} .xhe_nostyle span.xheGEnd{display:none;} .xhe_nostyle span.xheSeparator{display:block;height:22px;width:4px;margin:2px 2px !important;background:url(img/icons.gif) no-repeat -660px 0;} .xhe_nostyle a.xheButton{display:inline-block;margin:1px;border:0px;cursor:pointer;text-decoration:none;} .xhe_nostyle a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} .xhe_nostyle a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);} .xhe_nostyle a.xheEnabled:hover {margin:0px;border:1px solid #999;background:#fff;} .xhe_nostyle a.xheActive{margin:0px;border:1px solid #999; background:#fff;} .xhe_nostyle a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;} .xhe_nostyle span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px} .xhe_nostyle span.xheBtnCut {background-position:0 0} .xhe_nostyle span.xheBtnCopy {background-position:-20px 0} .xhe_nostyle span.xheBtnPaste {background-position:-40px 0} .xhe_nostyle span.xheBtnPastetext {background-position:-60px 0} .xhe_nostyle span.xheBtnBlocktag {background-position:-80px 0} .xhe_nostyle span.xheBtnFontface {background-position:-100px 0} .xhe_nostyle span.xheBtnFontSize {background-position:-120px 0} .xhe_nostyle span.xheBtnBold {background-position:-140px 0} .xhe_nostyle span.xheBtnItalic {background-position:-160px 0} .xhe_nostyle span.xheBtnUnderline {background-position:-180px 0} .xhe_nostyle span.xheBtnStrikethrough {background-position:-200px 0} .xhe_nostyle span.xheBtnFontColor {background-position:-220px 0} .xhe_nostyle span.xheBtnBackColor {background-position:-240px 0} .xhe_nostyle span.xheBtnSelectAll {background-position:-260px 0} .xhe_nostyle span.xheBtnRemoveformat {background-position:-280px 0} .xhe_nostyle span.xheBtnAlign {background-position:-300px 0} .xhe_nostyle span.xheBtnList {background-position:-320px 0} .xhe_nostyle span.xheBtnOutdent {background-position:-340px 0} .xhe_nostyle span.xheBtnIndent {background-position:-360px 0} .xhe_nostyle span.xheBtnLink {background-position:-380px 0} .xhe_nostyle span.xheBtnUnlink {background-position:-400px 0} .xhe_nostyle span.xheBtnAnchor {background-position:-420px 0} .xhe_nostyle span.xheBtnImg {background-position:-440px 0} .xhe_nostyle span.xheBtnFlash {background-position:-460px 0} .xhe_nostyle span.xheBtnMedia {background-position:-480px 0} .xhe_nostyle span.xheBtnHr {background-position:-500px 0} .xhe_nostyle span.xheBtnEmot {background-position:-520px 0} .xhe_nostyle span.xheBtnTable {background-position:-540px 0} .xhe_nostyle span.xheBtnSource {background-position:-560px 0} .xhe_nostyle span.xheBtnPreview {background-position:-580px 0} .xhe_nostyle span.xheBtnPrint {background-position:-600px 0} .xhe_nostyle span.xheBtnFullscreen {background-position:-620px 0} .xhe_nostyle span.xheBtnAbout {background-position:-640px 0} .xhe_nostyle .xheIframeArea{height:100%;} .xhe_nostyle iframe {display:block;background:#fff;width:100%;height:100%;} #xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;} #xhePanel{display:none;position:absolute;z-index:1000000;border:#999 1px solid;background:#fff;text-align:left;} #xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);} .xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);} .xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;} .xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;} .xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;} .xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;} .xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0} .xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;} .xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;} .xheEmot div a:hover{border:1px solid #999;padding:2px;} .xheEmot ul{border-top:1px solid #999;list-style:none;padding:0 10px;margin:0;font-size:12px;} .xheEmot li{float:left;margin:0 2px 5px 0;} .xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;} .xheEmot li a:hover{text-decoration:underline;} .xheEmot li.cur{border:1px solid #999;border-top:none;position:relative;bottom:1px;} .xheEmot li.cur a{cursor:text;padding-top:1px;} .xheEmot li.cur a:hover{text-decoration:none;} .xheColor{padding:5px;} .xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;} .xheColor a:hover{border:#000 1px solid;} .xheColor a img{display:none;} .xheDialog{padding:10px;font-size:12px;font-family:monospace;} .xheDialog a{text-decoration:underline;color:#00f;} .xheDialog a:hover{text-decoration:underline;color:#00f} .xheDialog div{padding:2px 0;} .xheDialog input{ margin:0;border-width:1px;border-style:solid;font-size:12px; *border-width:expression((type!="checkbox")?'1px':0);*padding:expression((type=="text")?'1px':'auto');*width:expression((type=="text")?'160px':'auto');*border-color:expression((type=="text")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type=="button")?'#F0F0F0':'#FFFFFF');*cursor:expression((type=="button")?'pointer':'');*font-size:expression((type=="button")?'13px':'12px'); } .xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;} .xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;} .xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;} .xheDialog input[type=file]{font-size:13px;} .xheDialog input[type=checkbox]{border:0;} .xheDialog select{margin:0;border:1px #ABADB3 solid;} .xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;} .xheDialog .xheUpload{position: relative;display:inline-block;width:164px;} .xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;} .xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;} .xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;} .xheModal{ position: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #BBB;font-size:12px; _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } .xheModalTitle{padding:5px;background:#F0F0EE;border-bottom:1px solid #BBB;} .xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;} .xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;} .xheModalShadow{ position:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px'); } .xheModalOverlay{ position: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px'); } *html{ background-image:url(about:blank); background-attachment:fixed; } .xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;} .xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#222;text-shadow: 1px 1px 0 #eee;} .xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;} .xhe_Fullfix{overflow:hidden;} .xhe_Fullfix body{width:100%;height:100%;} .xhe_Fullscreen{ top:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff; _position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px'); } .xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/o2007blue/iframe.css ================================================ html{height:100%;background-color:#FFFFFF;} body,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;} body{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} .xhe-border{border:1px dotted #d3d3d3;} .xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;} .editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;} .editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;} .editMode embed{display:inline-block;border:1px dashed #FF4E4E;} .editMode embed[type="application/x-shockwave-flash"]{background:url(img/flash.gif) center center no-repeat;} .editMode embed[type="application/x-mplayer2"]{background:url(img/wmp.gif) center center no-repeat;} .editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;} .editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;} .sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;} .sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;} .previewMode{margin:5px;padding:0px;} .showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;} .showBlocktag p{background-image:url(img/tag-p.gif);} .showBlocktag h1{background-image:url(img/tag-h1.gif);} .showBlocktag h2{background-image:url(img/tag-h2.gif);} .showBlocktag h3{background-image:url(img/tag-h3.gif);} .showBlocktag h4{background-image:url(img/tag-h4.gif);} .showBlocktag h5{background-image:url(img/tag-h5.gif);} .showBlocktag h6{background-image:url(img/tag-h6.gif);} .showBlocktag pre{background-image:url(img/tag-pre.gif);} .showBlocktag address{background-image:url(img/tag-address.gif);} .showBlocktag div{background-image:url(img/tag-div.gif);} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/o2007blue/ui.css ================================================ .xhe_o2007blue table, .xhe_o2007blue tr, .xhe_o2007blue td, .xhe_o2007blue iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000} .xhe_o2007blue table.xheLayout {display:inline-table;background:#E5EFFD; border:1px solid #ABC6DD;width:100%;height:100%;} .xhe_o2007blue td.xheTool {padding:1px 3px;border-bottom:1px solid #ABC6DD;} .xhe_o2007blue td.xheTool span{float:left;margin:2px 0px;} .xhe_o2007blue td.xheTool br{clear:left;} .xhe_o2007blue span.xheGStart{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;} .xhe_o2007blue span.xheGEnd{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;} .xhe_o2007blue span.xheSeparator{display:block;height:22px;width:4px;} .xhe_o2007blue a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;} .xhe_o2007blue a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} .xhe_o2007blue a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100)} .xhe_o2007blue a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} .xhe_o2007blue a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important;} .xhe_o2007blue a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;} .xhe_o2007blue span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px} .xhe_o2007blue span.xheBtnCut {background-position:0 0} .xhe_o2007blue span.xheBtnCopy {background-position:-20px 0} .xhe_o2007blue span.xheBtnPaste {background-position:-40px 0} .xhe_o2007blue span.xheBtnPastetext {background-position:-60px 0} .xhe_o2007blue span.xheBtnBlocktag {background-position:-80px 0} .xhe_o2007blue span.xheBtnFontface {background-position:-100px 0} .xhe_o2007blue span.xheBtnFontSize {background-position:-120px 0} .xhe_o2007blue span.xheBtnBold {background-position:-140px 0} .xhe_o2007blue span.xheBtnItalic {background-position:-160px 0} .xhe_o2007blue span.xheBtnUnderline {background-position:-180px 0} .xhe_o2007blue span.xheBtnStrikethrough {background-position:-200px 0} .xhe_o2007blue span.xheBtnFontColor {background-position:-220px 0} .xhe_o2007blue span.xheBtnBackColor {background-position:-240px 0} .xhe_o2007blue span.xheBtnSelectAll {background-position:-260px 0} .xhe_o2007blue span.xheBtnRemoveformat {background-position:-280px 0} .xhe_o2007blue span.xheBtnAlign {background-position:-300px 0} .xhe_o2007blue span.xheBtnList {background-position:-320px 0} .xhe_o2007blue span.xheBtnOutdent {background-position:-340px 0} .xhe_o2007blue span.xheBtnIndent {background-position:-360px 0} .xhe_o2007blue span.xheBtnLink {background-position:-380px 0} .xhe_o2007blue span.xheBtnUnlink {background-position:-400px 0} .xhe_o2007blue span.xheBtnAnchor {background-position:-420px 0} .xhe_o2007blue span.xheBtnImg {background-position:-440px 0} .xhe_o2007blue span.xheBtnFlash {background-position:-460px 0} .xhe_o2007blue span.xheBtnMedia {background-position:-480px 0} .xhe_o2007blue span.xheBtnHr {background-position:-500px 0} .xhe_o2007blue span.xheBtnEmot {background-position:-520px 0} .xhe_o2007blue span.xheBtnTable {background-position:-540px 0} .xhe_o2007blue span.xheBtnSource {background-position:-560px 0} .xhe_o2007blue span.xheBtnPreview {background-position:-580px 0} .xhe_o2007blue span.xheBtnPrint {background-position:-600px 0} .xhe_o2007blue span.xheBtnFullscreen {background-position:-620px 0} .xhe_o2007blue span.xheBtnAbout {background-position:-640px 0} .xhe_o2007blue .xheIframeArea{height:100%;} .xhe_o2007blue iframe {display:block;background:#fff;width:100%;height:100%;} #xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;} #xhePanel{display:none;position:absolute;z-index:1000000;border:#ABC6DD 1px solid;background:#FDFEFF;text-align:left;} #xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);} .xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);} .xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;} .xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;} .xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;} .xheMenu a:hover{background:#C6DAE9;text-decoration:none;color:#000;} .xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0} .xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;} .xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;} .xheEmot div a:hover{border:1px solid #ABC6DD;padding:2px;} .xheEmot ul{border-top:1px solid #ABC6DD;list-style:none;padding:0 10px;margin:0;font-size:12px;} .xheEmot li{float:left;margin:0 2px 5px 0;} .xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;} .xheEmot li a:hover{text-decoration:underline;} .xheEmot li.cur{border:1px solid #ABC6DD;border-top:none;position:relative;bottom:1px;} .xheEmot li.cur a{cursor:text;padding-top:1px;} .xheEmot li.cur a:hover{text-decoration:none;} .xheColor{padding:5px;} .xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;} .xheColor a:hover{border:#000 1px solid;} .xheColor a img{display:none;} .xheDialog{padding:10px;font-size:12px;font-family:monospace;} .xheDialog a{text-decoration:underline;color:#00f;} .xheDialog a:hover{text-decoration:underline;color:#00f} .xheDialog div{padding:2px 0px;} .xheDialog input{ margin:0;border-width:1px;border-style:solid;font-size:12px; *border-width:expression((type!="checkbox")?'1px':0);*padding:expression((type=="text")?'1px':'auto');*width:expression((type=="text")?'160px':'auto');*border-color:expression((type=="text")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type=="button")?'#F0F0F0':'#FFFFFF');*cursor:expression((type=="button")?'pointer':'');*font-size:expression((type=="button")?'13px':'12px'); } .xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;} .xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;} .xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;} .xheDialog input[type=file]{font-size:13px;} .xheDialog input[type=checkbox]{border:0;} .xheDialog select{margin:0;border:1px #ABADB3 solid;} .xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;} .xheDialog .xheUpload{position: relative;display:inline-block;width:164px;} .xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;} .xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;} .xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;} .xheModal{ position: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #ABC6DD;font-size:12px; _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } .xheModalTitle{padding:5px;background:#D1DEEF;border-bottom:1px solid #ABC6DD;} .xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;} .xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;} .xheModalShadow{ position:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px'); } .xheModalOverlay{ position: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px'); } *html{ background-image:url(about:blank); background-attachment:fixed; } .xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;} .xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;} .xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;} .xhe_Fullfix{overflow:hidden;} .xhe_Fullfix body{width:100%;height:100%;} .xhe_Fullscreen{ top:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff; _position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px'); } .xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/o2007silver/iframe.css ================================================ html{height:100%;background-color:#FFFFFF;} body,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;} body{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} .xhe-border{border:1px dotted #d3d3d3;} .xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;} .editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;} .editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;} .editMode embed{display:inline-block;border:1px dashed #FF4E4E;} .editMode embed[type="application/x-shockwave-flash"]{background:url(img/flash.gif) center center no-repeat;} .editMode embed[type="application/x-mplayer2"]{background:url(img/wmp.gif) center center no-repeat;} .editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;} .editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;} .sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;} .sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;} .previewMode{margin:5px;padding:0px;} .showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;} .showBlocktag p{background-image:url(img/tag-p.gif);} .showBlocktag h1{background-image:url(img/tag-h1.gif);} .showBlocktag h2{background-image:url(img/tag-h2.gif);} .showBlocktag h3{background-image:url(img/tag-h3.gif);} .showBlocktag h4{background-image:url(img/tag-h4.gif);} .showBlocktag h5{background-image:url(img/tag-h5.gif);} .showBlocktag h6{background-image:url(img/tag-h6.gif);} .showBlocktag pre{background-image:url(img/tag-pre.gif);} .showBlocktag address{background-image:url(img/tag-address.gif);} .showBlocktag div{background-image:url(img/tag-div.gif);} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/o2007silver/ui.css ================================================ .xhe_o2007silver table, .xhe_o2007silver tr, .xhe_o2007silver td, .xhe_o2007silver iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000} .xhe_o2007silver table.xheLayout {display:inline-table;background:#EEEEEE; border:1px solid #BBBBBB;width:100%;height:100%;} .xhe_o2007silver td.xheTool {padding:1px 3px;border-bottom:1px solid #BBBBBB;} .xhe_o2007silver td.xheTool span{float:left;margin:2px 0px;} .xhe_o2007silver td.xheTool br{clear:left;} .xhe_o2007silver span.xheGStart{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;} .xhe_o2007silver span.xheGEnd{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;} .xhe_o2007silver span.xheSeparator{display:block;height:22px;width:4px;} .xhe_o2007silver a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;} .xhe_o2007silver a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} .xhe_o2007silver a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100)} .xhe_o2007silver a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} .xhe_o2007silver a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important} .xhe_o2007silver a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;} .xhe_o2007silver span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px} .xhe_o2007silver span.xheBtnCut {background-position:0 0} .xhe_o2007silver span.xheBtnCopy {background-position:-20px 0} .xhe_o2007silver span.xheBtnPaste {background-position:-40px 0} .xhe_o2007silver span.xheBtnPastetext {background-position:-60px 0} .xhe_o2007silver span.xheBtnBlocktag {background-position:-80px 0} .xhe_o2007silver span.xheBtnFontface {background-position:-100px 0} .xhe_o2007silver span.xheBtnFontSize {background-position:-120px 0} .xhe_o2007silver span.xheBtnBold {background-position:-140px 0} .xhe_o2007silver span.xheBtnItalic {background-position:-160px 0} .xhe_o2007silver span.xheBtnUnderline {background-position:-180px 0} .xhe_o2007silver span.xheBtnStrikethrough {background-position:-200px 0} .xhe_o2007silver span.xheBtnFontColor {background-position:-220px 0} .xhe_o2007silver span.xheBtnBackColor {background-position:-240px 0} .xhe_o2007silver span.xheBtnSelectAll {background-position:-260px 0} .xhe_o2007silver span.xheBtnRemoveformat {background-position:-280px 0} .xhe_o2007silver span.xheBtnAlign {background-position:-300px 0} .xhe_o2007silver span.xheBtnList {background-position:-320px 0} .xhe_o2007silver span.xheBtnOutdent {background-position:-340px 0} .xhe_o2007silver span.xheBtnIndent {background-position:-360px 0} .xhe_o2007silver span.xheBtnLink {background-position:-380px 0} .xhe_o2007silver span.xheBtnUnlink {background-position:-400px 0} .xhe_o2007silver span.xheBtnAnchor {background-position:-420px 0} .xhe_o2007silver span.xheBtnImg {background-position:-440px 0} .xhe_o2007silver span.xheBtnFlash {background-position:-460px 0} .xhe_o2007silver span.xheBtnMedia {background-position:-480px 0} .xhe_o2007silver span.xheBtnHr {background-position:-500px 0} .xhe_o2007silver span.xheBtnEmot {background-position:-520px 0} .xhe_o2007silver span.xheBtnTable {background-position:-540px 0} .xhe_o2007silver span.xheBtnSource {background-position:-560px 0} .xhe_o2007silver span.xheBtnPreview {background-position:-580px 0} .xhe_o2007silver span.xheBtnPrint {background-position:-600px 0} .xhe_o2007silver span.xheBtnFullscreen {background-position:-620px 0} .xhe_o2007silver span.xheBtnAbout {background-position:-640px 0} .xhe_o2007silver .xheIframeArea{height:100%;} .xhe_o2007silver iframe {display:block;background:#fff;width:100%;height:100%;} #xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;} #xhePanel{display:none;position:absolute;z-index:1000000;border:#BBBBBB 1px solid;background:#FDFEFF;text-align:left;} #xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);} .xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);} .xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;} .xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;} .xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;} .xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;} .xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0} .xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;} .xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;} .xheEmot div a:hover{border:1px solid #BBBBBB;padding:2px;} .xheEmot ul{border-top:1px solid #BBBBBB;list-style:none;padding:0 10px;margin:0;font-size:12px;} .xheEmot li{float:left;margin:0 2px 5px 0;} .xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;} .xheEmot li a:hover{text-decoration:underline;} .xheEmot li.cur{border:1px solid #BBBBBB;border-top:none;position:relative;bottom:1px;} .xheEmot li.cur a{cursor:text;padding-top:1px;} .xheEmot li.cur a:hover{text-decoration:none;} .xheColor{padding:5px;} .xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;} .xheColor a:hover{border:#000 1px solid;} .xheColor a img{display:none;} .xheDialog{padding:10px;font-size:12px;font-family:monospace;} .xheDialog a{text-decoration:underline;color:#00f;} .xheDialog a:hover{text-decoration:underline;color:#00f} .xheDialog div{padding:2px 0px;} .xheDialog input{ margin:0;border-width:1px;border-style:solid;font-size:12px; *border-width:expression((type!="checkbox")?'1px':0);*padding:expression((type=="text")?'1px':'auto');*width:expression((type=="text")?'160px':'auto');*border-color:expression((type=="text")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type=="button")?'#F0F0F0':'#FFFFFF');*cursor:expression((type=="button")?'pointer':'');*font-size:expression((type=="button")?'13px':'12px'); } .xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;} .xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;} .xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;} .xheDialog input[type=file]{font-size:13px;} .xheDialog input[type=checkbox]{border:0;} .xheDialog select{margin:0;border:1px #ABADB3 solid;} .xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;} .xheDialog .xheUpload{position: relative;display:inline-block;width:164px;} .xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;} .xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;} .xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;} .xheModal{ position: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #AAA;font-size:12px; _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } .xheModalTitle{padding:5px;background:#DDD;border-bottom:1px solid #AAA;} .xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;} .xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;} .xheModalShadow{ position:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px'); } .xheModalOverlay{ position: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px'); } *html{ background-image:url(about:blank); background-attachment:fixed; } .xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;} .xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;} .xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;} .xhe_Fullfix{overflow:hidden;} .xhe_Fullfix body{width:100%;height:100%;} .xhe_Fullscreen{ top:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff; _position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height: expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px'); } .xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/vista/iframe.css ================================================ html{height:100%;background-color:#FFFFFF;} body,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;} body{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} .xhe-border{border:1px dotted #d3d3d3;} .xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;} .editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;} .editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;} .editMode embed{display:inline-block;border:1px dashed #FF4E4E;} .editMode embed[type="application/x-shockwave-flash"]{background:url(img/flash.gif) center center no-repeat;} .editMode embed[type="application/x-mplayer2"]{background:url(img/wmp.gif) center center no-repeat;} .editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;} .editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;} .sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;} .sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;} .previewMode{margin:5px;padding:0px;} .showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;} .showBlocktag p{background-image:url(img/tag-p.gif);} .showBlocktag h1{background-image:url(img/tag-h1.gif);} .showBlocktag h2{background-image:url(img/tag-h2.gif);} .showBlocktag h3{background-image:url(img/tag-h3.gif);} .showBlocktag h4{background-image:url(img/tag-h4.gif);} .showBlocktag h5{background-image:url(img/tag-h5.gif);} .showBlocktag h6{background-image:url(img/tag-h6.gif);} .showBlocktag pre{background-image:url(img/tag-pre.gif);} .showBlocktag address{background-image:url(img/tag-address.gif);} .showBlocktag div{background-image:url(img/tag-div.gif);} ================================================ FILE: src/main/webapp/jslib/eu_js/xheditor/xheditor_skin/vista/ui.css ================================================ .xhe_vista table, .xhe_vista tr, .xhe_vista td, .xhe_vista iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000} .xhe_vista table.xheLayout {display:inline-table;background:#E0E8F5; border:1px solid #99BBE8;width:100%;height:100%;} .xhe_vista td.xheTool {padding:1px 3px;border-bottom:1px solid #99BBE8;} .xhe_vista td.xheTool span{float:left;margin:2px 0px;} .xhe_vista td.xheTool br{clear:left;} .xhe_vista span.xheGStart{display:block;width:4px;height:22px;background:url(img/buttonbg.gif) -22px 0;} .xhe_vista span.xheGEnd{display:block;width:4px;height:22px;background:url(img/buttonbg.gif) -26px 0;} .xhe_vista span.xheSeparator{display:block;height:22px;width:4px;} .xhe_vista a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;} .xhe_vista a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} .xhe_vista a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);} .xhe_vista a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} .xhe_vista a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important;} .xhe_vista a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;} .xhe_vista span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px} .xhe_vista span.xheBtnCut {background-position:0 0} .xhe_vista span.xheBtnCopy {background-position:-20px 0} .xhe_vista span.xheBtnPaste {background-position:-40px 0} .xhe_vista span.xheBtnPastetext {background-position:-60px 0} .xhe_vista span.xheBtnBlocktag {background-position:-80px 0} .xhe_vista span.xheBtnFontface {background-position:-100px 0} .xhe_vista span.xheBtnFontSize {background-position:-120px 0} .xhe_vista span.xheBtnBold {background-position:-140px 0} .xhe_vista span.xheBtnItalic {background-position:-160px 0} .xhe_vista span.xheBtnUnderline {background-position:-180px 0} .xhe_vista span.xheBtnStrikethrough {background-position:-200px 0} .xhe_vista span.xheBtnFontColor {background-position:-220px 0} .xhe_vista span.xheBtnBackColor {background-position:-240px 0} .xhe_vista span.xheBtnSelectAll {background-position:-260px 0} .xhe_vista span.xheBtnRemoveformat {background-position:-280px 0} .xhe_vista span.xheBtnAlign {background-position:-300px 0} .xhe_vista span.xheBtnList {background-position:-320px 0} .xhe_vista span.xheBtnOutdent {background-position:-340px 0} .xhe_vista span.xheBtnIndent {background-position:-360px 0} .xhe_vista span.xheBtnLink {background-position:-380px 0} .xhe_vista span.xheBtnUnlink {background-position:-400px 0} .xhe_vista span.xheBtnAnchor {background-position:-420px 0} .xhe_vista span.xheBtnImg {background-position:-440px 0} .xhe_vista span.xheBtnFlash {background-position:-460px 0} .xhe_vista span.xheBtnMedia {background-position:-480px 0} .xhe_vista span.xheBtnHr {background-position:-500px 0} .xhe_vista span.xheBtnEmot {background-position:-520px 0} .xhe_vista span.xheBtnTable {background-position:-540px 0} .xhe_vista span.xheBtnSource {background-position:-560px 0} .xhe_vista span.xheBtnPreview {background-position:-580px 0} .xhe_vista span.xheBtnPrint {background-position:-600px 0} .xhe_vista span.xheBtnFullscreen {background-position:-620px 0} .xhe_vista span.xheBtnAbout {background-position:-640px 0} .xhe_vista .xheIframeArea{height:100%;} .xhe_vista iframe {display:block;background:#fff;width:100%;height:100%;} #xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;} #xhePanel{display:none;position:absolute;z-index:1000000;border:#99BBE8 1px solid;background:#FDFEFF;text-align:left;} #xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);} .xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);} .xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;} .xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;} .xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;} .xheMenu a:hover{background:#B8CFEE;text-decoration:none;color:#000;} .xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0} .xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;} .xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;} .xheEmot div a:hover{border:1px solid #99BBE8;padding:2px;} .xheEmot ul{border-top:1px solid #99BBE8;list-style:none;padding:0 10px;margin:0;font-size:12px;} .xheEmot li{float:left;margin:0 2px 5px 0;} .xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;} .xheEmot li a:hover{text-decoration:underline;} .xheEmot li.cur{border:1px solid #99BBE8;border-top:none;position:relative;bottom:1px;} .xheEmot li.cur a{cursor:text;padding-top:1px;} .xheEmot li.cur a:hover{text-decoration:none;} .xheColor{padding:5px;} .xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;} .xheColor a:hover{border:#000 1px solid;} .xheColor a img{display:none;} .xheDialog{padding:10px;font-size:12px;font-family:monospace;} .xheDialog a{text-decoration:underline;color:#00f;} .xheDialog a:hover{text-decoration:underline;color:#00f} .xheDialog div{padding:2px 0px;} .xheDialog input{ margin:0;border-width:1px;border-style:solid;font-size:12px; *border-width:expression((type!="checkbox")?'1px':0);*padding:expression((type=="text")?'1px':'auto');*width:expression((type=="text")?'160px':'auto');*border-color:expression((type=="text")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type=="button")?'#F0F0F0':'#FFFFFF');*cursor:expression((type=="button")?'pointer':'');*font-size:expression((type=="button")?'13px':'12px'); } .xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;} .xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;} .xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;} .xheDialog input[type=file]{font-size:13px;} .xheDialog input[type=checkbox]{border:0;} .xheDialog select{margin:0;border:1px #ABADB3 solid;} .xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;} .xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;} .xheDialog .xheUpload{position: relative;display:inline-block;width:164px;} .xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;} .xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;} .xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;} .xheModal{ position: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #99BBE8;font-size:12px; _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); } .xheModalTitle{padding:3px;line-height:18px;background:url(img/titlebg.gif) repeat-x;border-bottom:1px solid #99BBE8;} .xheModalClose{float:right;width:30px;height:18px;background:url(img/close.gif);cursor:pointer;} .xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;} .xheModalShadow{ position:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px'); } .xheModalOverlay{ position: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20); _position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px'); } *html{ background-image:url(about:blank); background-attachment:fixed; } .xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;} .xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;} .xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;} .xhe_Fullfix{overflow:hidden;} .xhe_Fullfix body{width:100%;height:100%;} .xhe_Fullscreen{ top:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff; _position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px'); } .xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;} ================================================ FILE: src/main/webapp/style/eu/index/article.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .searcharticle{ width: 240px; height: 35px; background: url("../images/index/sss.png") no-repeat; position: relative; cursor: pointer;} .searcharticle input{ width: 190px; height: 35px; border: 0px transparent; padding: 0px 10px; font-size: 16px; background: transparent; outline: none; font-family: "微软雅黑", "宋体", "Times New Roman";} .searchdate{ position: relative; margin-bottom: 10px;} .searchdate input{ width: 150px; outline: none;} .categorySearch { margin-top: 20px; border: 1px solid #19840E; padding: 5px; width: 220px;} .categoryHead { border-bottom: solid 1px #89CDAC;} .categoryHead span b{ font-size: 18px;} table.categoryList tr{ height: 30px; overflow: hidden;} table.categoryList tr td{ vertical-align: middle;} table.categoryList span.categoryicon{ display: block; width: 16px; height:16px; background: url("../images/index/category_icon.png") no-repeat;} table.categoryList a { cursor: pointer;} .articlelist{ width:680px;} .articlelist ul li .pic{ float:left; display:block; overflow:hidden;} .articlelist li .time{ width:100%; display:block;color:#eb302f; font-size:14px; line-height:1.5em; } .articlelist li a{ font-size:18px; line-height:2em; color:#333; text-decoration:none;} .articlelist ul li p{ font-size:12px; color:#999;} .articlelist ul li{ width:670px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} .articlelist table{} .articlelist table tr{ height: 32px; line-height: 32px;} .articlelist table a{ line-height: 32px;} .articletitle{ width: 100%; border-bottom: dashed #D5D5D5 1px; padding 10px; display: block; text-align: center;} .articletitle .title{ font-size: 28px; line-height: 1.5em; color: #333; font-weight: bold;} .articletitle .time{ font-size: 18px; line-height: 2em; color: #333;} .news_model ul li{ width: 256px; float: left; padding: 4px 0; border-bottom: dashed #D5D5D5 1px; } .news_model ul li a { font-size: 12px; color: #333; text-decoration: none; float: left;} .news_model ul li .time { float: right; width: 50px; } ================================================ FILE: src/main/webapp/style/eu/index/comment.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .searchquestion{ width: 240px; height: 35px; background: url("../images/index/sss.png") no-repeat; position: relative; cursor: pointer;} .searchquestion input{ width: 190px; height: 35px; border: 0px transparent; padding: 0px 10px; font-size: 16px; background: transparent; outline: none; font-family: "微软雅黑", "宋体", "Times New Roman";} .askquestion{ width: 173px; height: 43px; cursor: pointer; background: url("../images/index/askquestion.png"); } .askquestion:hover{ background: url("../images/index/askquestion_s.png"); } .myquestion{ width: 120px; height: 35px; line-height: 30px; margin-top: 15px; margin-right: 15px; border: 1px solid #045bb2; border-radius: 4px; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); color: #fff; font-size: 24px; text-align: center; text-shadow: 0 1px 1px rgba(0,0,0,.12); outline: 0; cursor: pointer;} .comment_list{width: 620px;} .comment_list ul{ border: 1px solid #ddd; border-radius: 4px; box-shadow: 0 1px 1px rgba(0,0,0,.05);} .comment_list ul li.commentitem{ list-style: none; display: block; background: none; width: 100%; overflow: hidden; clear: both; margin: 0;} .comment_list textarea{ outline:none; resize: none; font-size: 13px; line-height: 20px;} .comment_list .comment_post{ position: relative; padding: 0px 10px;} .comment_list .comment_post .avatar{box-shadow: 0 1px 1px rgba(255,255,255,0.75); position: relative; border-radius: 3px; background-color: #fff; float: left;} .comment_list .comment_post .avatar img{ display: block; width: 50px; height: 50px; max-width: none; box-shadow: 0 1px 3px rgba(0,0,0,0.22); -webkit-border-radius: 3px; border-radius: 3px;} .comment_list .comment_post .comment_body{ padding-left: 60px;} .comment_list .comment_post .comment_body .comment_header{ padding-top: 1px;} .comment_list .comment_post .comment_body .comment_header .user_name{ font-size: 14px; margin-right: 8px; color: #d32 !important;} .comment_list .comment_post .comment_body p{ font-size: 13px; line-height: 1.5em; margin: .5em 0; word-wrap: break-word; text-indent: 0; clear: none;} .comment_list .comment_post .comment_body .comment_footer{ line-height: 1.5em; font-size: 12px; color: #999;} .comment_list .comment_post .comment_body .comment_footer .comment_time{ margin-right: 8px;} .comment_list .comment_post .comment_body .comment_footer a{ margin: 0 6px 0 0; padding: 0 6px 0 0; color: #999;} .comment_list .comment_post .comment_body .comment_footer .comment_icon{ vertical-align: middle; display: inline-block; overflow: hidden; background: transparent url("../images/Sprites_Embed.png") no-repeat; position: relative; top: -1px;} .comment_list .comment_post .comment_body .comment_footer .comment_icon_reply{ width: 18px; height: 13px; background-position: 0 -105px;} .comment_list .comment_post .comment_body .comment_footer .comment_icon_like{ width: 14px; height: 13px; background-position: 0 -117px;} .comment_list .comment_post .comment_body .comment_footer .comment_likes_count{ float:right; color: #999; font-size: 13px;} .comment_list .comment_post .comment_body .comment_replylittlebox{ padding: 3px 30px;} .comment_list .comment_post .comment_body .replylittlebox_textarea{ position: relative; border: 1px solid #ccc; border-bottom: none; padding-right: 20px; background: #fff; overflow: hidden; border-top-right-radius: 3px; border-top-left-radius: 3px;} .comment_list .comment_post .comment_body .replylittlebox_textarea textarea{ display: block; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; border: none; box-shadow: none; -webkit-appearance: none; overflow: auto; padding: 10px; height: 20px; margin: 0; color: #999; width: 100%;} .comment_list .comment_post .comment_body .replylittlebox_toolbar{position: relative; width: 100%; box-shadow: 0 1px 0 rgba(255,255,255,0.6);} .comment_list .comment_post .comment_body .replylittlebox_toolbar .replylittlebox_gradient{position: relative; margin-right: 100px; height: 30px; border: 1px solid #ccc; border-right: none; border-bottom-color: #aaa; border-bottom-left-radius: 3px; -webkit-border-bottom-left-radius: 3px;} .comment_list .comment_post .comment_body .replylittlebox_toolbar .replylittlebox_button{outline:none;cursor: pointer; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; position: absolute; right: 0; top: 0; height: 32px; width: 100px; text-align: center; text-shadow: 0 1px 0 #fff; color: #555; font-size: 14px; font-weight: bold; border: 1px solid #ccc; border-bottom-color: #aaa; border-bottom-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; background-color: #e6e6e6; background-repeat: no-repeat; background-image: linear-gradient(#fcfcfc, #fcfcfc 25%, #e6e6e6); transition: all .15s linear; box-shadow: inset 0 0 1px #fff;} .comment_list .comment_paginator{ text-align: right; padding: 10px 0px; clear: both; line-height: 1em;} .comment_list .comment_paginator a{ font-size: 12px; margin: 0 3px; padding: 2px 5px; border: 1px solid transparent; cursor: pointer; text-decoration: none; color: #777;} .comment_list .comment_paginator a.paginator_current{ border-radius: 3px; background-color: rgba(0,0,0,0.03); border: 1px solid #ccc; color: #d32; } .comment_list .comment_paginator a:hover{ border-radius: 3px; background-color: rgba(0,0,0,0.03); border: 1px solid #ccc; } .comment_list .comment_replybox{width: auto; font-size: 12px; z-index: 3; margin: 0; padding: 0 0 0 60px; position: relative;} .comment_list .comment_replybox .replybox_avatar{ position: absolute; top: 0; left: 0; float: left; box-shadow: 0 1px 3px rgba(0,0,0,0.22); -webkit-border-radius: 3px; border-radius: 3px;} .comment_list .comment_replybox .replybox_textarea{ position: relative; border: 1px solid #ccc; border-bottom: none; padding-right: 20px; background: #fff; overflow: hidden; border-top-right-radius: 3px; border-top-left-radius: 3px;} .comment_list .comment_replybox .replybox_textarea textarea{ display: block; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; border: none; box-shadow: none; -webkit-appearance: none; overflow: auto; padding: 10px; height: 54px; margin: 0; color: #999; width: 100%;} .comment_list .comment_replybox .replybox_toolbar{position: relative; width: 100%; box-shadow: 0 1px 0 rgba(255,255,255,0.6);} .comment_list .comment_replybox .replybox_toolbar .replybox_gradient{position: relative; margin-right: 100px; height: 30px; border: 1px solid #ccc; border-right: none; border-bottom-color: #aaa; border-bottom-left-radius: 3px; -webkit-border-bottom-left-radius: 3px;} .comment_list .comment_replybox .replybox_toolbar .replybox_button{outline:none;cursor: pointer; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; position: absolute; right: 0; top: 0; height: 32px; width: 100px; text-align: center; text-shadow: 0 1px 0 #fff; color: #555; font-size: 14px; font-weight: bold; border: 1px solid #ccc; border-bottom-color: #aaa; border-bottom-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; background-color: #e6e6e6; background-repeat: no-repeat; background-image: linear-gradient(#fcfcfc, #fcfcfc 25%, #e6e6e6); transition: all .15s linear; box-shadow: inset 0 0 1px #fff;} .answerlist{ width:630px;} .answerlist li .time{ float: right; width: 50px; padding-right: 18px} .answerlist li a{ font-size: 14px;color: #333;text-decoration: none;float: left;} .answerlist li p{ margin-top: 20px; margin-left: 10px; font-size: 13px; line-height: 1.5; color: #999;} .answerlist ul li{ width:620px;float:left; padding: 3px 0; border-bottom: dashed #D5D5D5 1px;} .answerlist ul li .highline{ color: red;} ================================================ FILE: src/main/webapp/style/eu/index/commpany.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .applycommpany{ width: 173px; height: 43px; cursor: pointer; background: url("../images/index/applycompany.png"); } .applycommpany:hover{ background: url("../images/index/applycompany_s.png"); } .btn_applycompany{ width: 173px; height: 43px; cursor: pointer; background: url("../images/index/publish.png"); } .btn_applycompany:hover{ background: url("../images/index/publish_s.png"); } .companylist{ width:630px;} .companylist ul li#fiest .pic{ float:left; display:block; overflow:hidden;} .companylist li .news_modle1_title,.news_modle2 ul li p,.news_modle2 ul li#fiest .time{ float:left; display:block; width:196px; margin-left:10px;overflow:hidden; height:16px;} .companylist li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .companylist li span{ font-size: 20px; line-height: 2em; color:#333; text-decoration:none;} .companylist li p{ font-size:14px; line-height: 1.2em; color:#999;; text-decoration:none;} .companylist ul li a b{ color:#eb302f;text-transform:uppercase;} .companylist ul li{ width:620px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} ================================================ FILE: src/main/webapp/style/eu/index/countryside.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .applycountryside{ width: 173px; height: 43px; cursor: pointer; background: url("../images/index/applyxiaxiang.png"); } .applycountryside:hover{ background: url("../images/index/applyxiaxiang_s.png"); } .countrysidelist{ width:630px;} .countrysidelist ul li#fiest .pic{ float:left; display:block; overflow:hidden;} .countrysidelist li .news_modle1_title,.news_modle2 ul li p,.news_modle2 ul li#fiest .time{ float:left; display:block; width:196px; margin-left:10px;overflow:hidden; height:16px;} .countrysidelist li a{ font-size:18px; color:#333; text-decoration:none; line-height:2em;} .countrysidelist li p{ font-size: 12px; color: #999; line-height: 1.4em;} .countrysidelist ul li a b{ color:#eb302f;text-transform:uppercase;} .countrysidelist ul li{ width:620px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} #provincecity label { width: 20px; height: 30px; line-height: 30px; text-align: right; float: left; font-weight: bold; color: #666; margin: 12px 10px 0 0;} #tpersonlist thead th { background-color: rgb(81, 130, 187); color: #fff; border-bottom-width: 0; text-align: center;} #tpersonlist td { color: #000; position: relative;} #tpersonlist tr, #tpersonlist th { border: 1px solid rgb(81, 130, 187);} #tpersonlist td, #tpersonlist th { padding: 5px 8px; font-size: 12px; font-family: Verdana; font-weight: bold;} .del_btn{ width: 18px; display: block; position: absolute; right: -13px; top: -2px; cursor: pointer; padding: 3px 0; text-align: center; border-radius: 4px; line-height: 25px; font-size: 18px; filter:alpha(opacity=80); -moz-opacity:0.8; -khtml-opacity: 0.8; opacity: 0.8;} i.del_icon { width: 18px;height: 18px; background-image: url(../images/littleicon.png); background-repeat: no-repeat; background-position: -145px -201px; position: absolute; left: 0px;} ================================================ FILE: src/main/webapp/style/eu/index/css.css ================================================ html, body { height: 100%; } .wrapper{ min-height: 100%; height: auto !important; height: 100%; } .z_footerk{ margin: -90px auto 0; } .re_index{ padding-bottom: 90px; } .z_indexk{ padding-bottom: 90px; } .z_indexk:after { clear: both; display: block; height: 0; visibility: hidden; content: "."; } .re_index:after { clear: both; display: block; height: 0; visibility: hidden; content: "."; } .z_gap{ height:10px; clear:both; background:#FFF; width:100%; margin:0px; display:block; padding:0px; } .container1{ width:951px; margin:0 auto; } @font-face { font-family: Hiragino; src: url('../Hiragino Sans GB W3.otf') ,url('../HiraginoSansGB-W3-Alphabetic.eot'); } .z_clear{ padding: 0px; margin: 0px; } .z_color{ color:#3b4d63; } .green{ color:#5dbd06; } .yellow{ color:#feb825; } .red{ color:#e63c53; } .gray{ color:#323232; } .orange{ color: #ec5221; } /*start:濠电偛顦崝宀勫船閿燂拷*/ .re_bg{ background: url(../img/re-bg.png) no-repeat center top; background-size: 100% auto; width:100%; height:225px; padding-top:20px; } .re_logo{ float: left; padding-top: 45px; padding-bottom: 10px; } .re_conntent{ width:590px; height: 120px; padding-top: 253px; float: left; font-size:11px; } .re_box{ width:322px; /**height:350px;**/ background: url(../img/re-box.png) no-repeat; float: right; background-size: 322px 350px; padding-top: 40px; } .re_box ul li input{ padding-top:0px; padding-bottom:0px; } .re_box ul li label{ line-height: 30px; } .z_input{ border:1px solid #3b4d63; } .re-btn{ background:url(../img/zhuce.png) no-repeat 0px 0px; width:100px; height:34px; float:right; border:0px; cursor:pointer; display: block; margin-right: 30px; } .re-btn:hover{ background:url(../img/zhuce.png) no-repeat 0px -35px; width:100px; height:34px; float:right; border:0px; cursor:pointer; display: block; margin-right: 30px; } /*end:濠电偛顦崝宀勫船閿燂拷*/ /*start:闂佽皫鍡╁殭缂傚秴绉瑰畷銉︽償椤垶绠芥俊鐐�閹凤拷*/ .logo{ float: left; padding-top: 10px; padding-bottom: 10px; } .nav-pad{ padding-top: 20px; padding-bottom: 15px; } .logo-right{ font-size: 13px; height:80px; float: right; } .logo-right ul li img{ font: left; } .z_per { padding-top: 20px; padding-bottom: 10px; float: right; } .z_per, .z_per li ul{ list-style: none; } .z_per li ,.z_per li ul li{ float: left; } .z_notice{ background: url(../img/notice.png) no-repeat; width: 21px; height: 15px; color: #FFF; display: inline-block; text-align: center; font-size: 11px; line-height: 15px; position: absolute; top:-15px; right:135px; } .heng{ background: url(../img/index-heng.png) no-repeat center top; background-size: 100% 100%; height:5px; } .re_index{ margin-top: 15px; } .re_indexbg{ background: #e8edf0; overflow:hidden; zoom:1; } .content-left{ float: left; width: 210px; } .content-rightk{ float: right; width: 741px; background: green; min-height:710px; background: #FFF; overflow:hidden; zoom:1; } .left-top{ /*padding: 10px 20px 2px 20px;*/ padding:10px; background: #e8edf0; } .left-top table tr td{ padding:5px; } .touxk { list-style: none; width: 190px; margin:0px; padding:0px; font-size: 14px; text-align: center; } .touxk li{ text-align:left; list-style:none; } .touxk .toux { width: 190px; display: inline-block; text-align: center; } .touxk .toux li{ font-size: 14px; } .touxk .toux p{ float: right; display: inline-block; width: 110px; } .touxk .toux img{ width: 120px; height: 120px; } .touxk .toux span{ font-size:15px; } .z_size{ font-size: 18px; } .left_candan{ width:210px; float:left; margin:0px; } .left_candan li{ list-style:none; width:210px; height:43px; background:url(../img/left_caidan.png) no-repeat; cursor:pointer; float:left; } .left_candan a{ width:210px; height:45px; float:left; padding:0px; margin:0px; } .left_candan a em{ display:none; } .left_candan .zhuye{background-position:0px 0px;} .left_candan .zhuye:hover{background-position:0px -260px;} .left_candan .zhuti{background-position:0px -43px;} .left_candan .zhuti:hover{background-position:0px -304px;} .left_candan .xinban{background-position:0px -86px;} .left_candan .xinban:hover{background-position:0px -347px;} .left_candan .renling{background-position:0px -129px;} .left_candan .renling:hover{background-position:0px -390px;} .left_candan .biangeng{background-position:0px -172px;} .left_candan .biangeng:hover{background-position:0px -433px;} .left_candan .zhuxiao{background-position:0px -215px;} .left_candan .zhuxiao:hover{background-position:0px -476px;} .download{ background: #f7f7f7; height:200px; clear: both; padding: 20px; border-bottom: 2px solid #bbbbbb; margin:0px; } .download p{ border-bottom:1px solid #abafb2; line-height: 30px; } .download li{ background: url(../img/xztb.png) no-repeat 0px 5px; line-height: 28px; padding-left:24px; } .download li:hover{ background: url(../img/xztb.png) no-repeat 0px -23px; color:#ec4e1b; cursor: pointer; } /*start:闂佽皫鍡╁殭缂傚秴绉瑰畷銉︽償椤垶绠芥俊鐐�濞佳嗐亹閸涘﹦鐟归柨鐕傛嫹*/ .content-right{ float: right; width:730px; } .tab_tablek{ padding: 0 10px; } .z_tab_table thead tr{ border-bottom: 2px solid #81878c; color:#3b4d63; } .z_tab_table thead tr th{ color:#3b4d63; font-weight: 400; font-size: 13px; } .z_tab_table tbody tr{ border: 0px; } .z_tab_table tbody tr td{ font-size: 12px; } /*end:闂佽皫鍡╁殭缂傚秴绉瑰畷銉︽償椤垶绠芥俊鐐�濞佳嗐亹閸涘﹦鐟归柨鐕傛嫹*/ .z_footerk{ height:85px; position: relative; z-index: 10; } .z_footer{ width:100%; background: #efefef; padding:10px 0 5px 0; height:90px; display: block; } .z_footer{ font-size: 11px; line-height: 15px; } .z_footer p{ margin:0px; padding: 0px; line-height:20px; } /*end:闂佽皫鍡╁殭缂傚秴绉瑰畷銉︽償椤垶绠芥俊鐐�閹凤拷*/ /***************start:闂佸搫鍊瑰妯绘叏濞嗘垹纾鹃柟瀵稿Х瑜版煡鏌i姀鐘垫瀮妞ゆ洩鎷�*********************/ .z_content{ border: 1px solid #e8edf0; border-bottom:3px solid #e8edf0 ; min-height: 706px; } .z_content h5{ background: #e8edf0; line-height: 25px; padding-left: 10px; margin: 0px; font-weight: 400; } .z_from{ padding: 10px 25px; clear: both; } .z_from input{ padding-top:2px; padding-bottom: 3px; } .prog2 { background: url(../img/p2.png) no-repeat ; height:61px; width:680px; } .z_from h4{ background: url(../img/yuan.png) no-repeat 0 30px ; font-size: 16px; padding: 25px 0 0 16px; border-top:1px solid #6f7c8d; color:#3b4d63; font-weight: 400; margin-top:20px; } .z_from h4 .tb{ font-size:12px; color:#999999; } .z_from h4 .tb input[type="checkbox"]{ border: 1px solid #999999; vertical-align:sub; } .z_from .form-horizontal .control-group{ margin-bottom:10px; } .z_from .form-horizontal .control-group .control-label{ padding-top: 2px; } .z_from .form-horizontal .control{ margin-left: 170px; } .must{ color:#fe0101; font-size:18px; display: inline-block; } .notic_info{ font-size: 12px; color:#999999; } .z_add a{ font-size:14px; color: #3b4d63; text-decoration: underline; } .z_select{ width:480px; } .z_select select{ padding: 0px; margin:0px; float:left; margin-right:5px; width:80px; line-height:20px; padding:3px; } .z_checkbox{ width:660px; margin-left:20px; } .login_person{ background: #e8edf0; line-height: 25px; padding-left: 10px; margin: 0px; font-weight: 400; } .login_person_con{ width: 740px; height:142px; padding-top: 20px; border-bottom: 3px solid #bbbbbb; margin-bottom: 20px; padding-left: 20px; } .login_person_no{ width:170px; height: 122px; float: left; border-right:3px solid #e1e1e1; padding-right: 25px; } .no1{ width:140px; padding-left: 30px; } .no2{ padding-right:0px; margin-right: 0px; } .login_person_no .text-right img{ margin-right: 15px; } .login_person_no .xing{ margin:25px 0 10px 40px; } .login_person_no .z_ul{ margin:25px 0 10px 15px; } .sq_btn{ background: url(../img/renzheng_01.png) no-repeat; float: left; width: 106px; height: 106px; margin: 10px 0 0 20px; cursor: pointer; } .sq_btn:hover{ background: url(../img/renzheng_02.png) no-repeat; } /***************end:闂佸搫鍊瑰妯绘叏濞嗘垹纾鹃柟瀵稿Х瑜版煡鏌i姀鐘垫瀮妞ゆ洩鎷�*********************/ .index-top{ margin-top: 20px; } .z-index{ margin-bottom:0px; clear:both; float: right; } .z-index li a{ color: #3b4d63; } .z_adbg{ background: url(../img/adbg.png) no-repeat center top; background-size: 100% 100%; height:385px; } .loginbg{ width:318px; /**height:307px;**/ border-bottom: 3px solid #dcdde2; float: right; margin: 8px 20px 0 0; border-radius: 5px; background: #ffffff; padding-top:16px; } .login_tab li{ width: 60%; text-align: center; margin-right: 0px; } .nav-tabs > li > a{ line-height: 30px; } .login_tab li a:hover{ line-height: 30px; } .login_tab .active a{ border-top: 4px solid #e63c53; line-height: 27px; } .logink li label{ line-height: 30px; width:80px; float:left; } .logink li input{ width:160px; float:left; margin-left:10px; } .logink{ padding-top: 10px; } .login-btn{ background:url(../img/login1.png) no-repeat; width:100px; height:35px; float:right; border:0px; cursor:pointer; display: block; margin-right:30px; } .login-btn:hover{ background:url(../img/login2.png) no-repeat; width:100px; height:35px; float:right; border:0px; cursor:pointer; display: block; margin-right:30px; } .z_adleft{ float: left; margin:20px 0 0 15px; } .z_adleft .xuanch{ margin-bottom: 40px; } .z_adleft .liucheng{ margin-left: 60px; } .index_content{ padding-top: 30px; min-height: 450px; } .index_left{ width:650px; float: left; margin-top: -5px; } .tongzhi{ background: url(../img/tongzhi.png) no-repeat; width: 292px; height:186px; margin-left: -5px; padding:30px 5px 20px; } .gongshi{ border: 1px solid #e8edf0; width: 310px; height: 230px; margin-top: -5px; } .gongshi h5{ background: #e8edf0; line-height: 30px; padding-left: 10px; margin: 0px; font-weight: 400; border-top-left-radius: 3px; border-top-right-radius: 3px; } .gongshi h5 span{ float: right; margin-right: 10px; margin-top: 10px; } .z_p{ display: block; overflow: hidden; zoom:1; } .z_p .tit{ width: 80px; background: #3b4d63; height:25px; display: inline-block; line-height: 25px; color: #FFF; padding-left: 15px; float: left; } .more{ float: right; width:42px; margin-right: 10px; margin-top:5px; } .tz_list { clear:both; list-style: none; margin: 10px 5px 0px 15px; height:150px; } .tz_list li{ padding: 4px 0; } .tz_list li .tz_tit{ display: inline-block; width: 162px; white-space:nowrap;/* 婵炴垶鎸哥粔闈涚暦閼碱剚鍋橀柨鐕傛嫹*/ overflow:hidden;/* 闂佸憡鍔曢幊搴敊閹邦喗鎯ラ柛娑卞幖濮e鎮楃涵鍛棄閻庤濞婂顕�醇閺囩噥鍚呴梺鑺ッ换妤冪矓閹绢喖绀勬繛宸簻閸斻儵鏌涢幒鎴烆棤婵炲牊鍨垮畷姗�川椤撗冩櫍 */ text-overflow:ellipsis; } .index_right{ width: 290px; float: right; height: 20px; } .index_left .content{ width: 310px; height: 230px; border: 1px solid #e8edf0; float: right; margin-left: 10px; border-radius:3px; } .index_left .content h5{ background: #e8edf0; line-height: 30px; padding-left: 10px; margin: 0px; font-weight: 400; border-top-left-radius:3px; border-top-right-radius:3px; } .index_left .content h5 span{ float: right; margin-right: 10px; margin-top:10px; } .listr{ padding-bottom: 20px; } .listr li{ width:280px; display: inline-block; white-space:nowrap;/* 婵炴垶鎸哥粔闈涚暦閼碱剚鍋橀柨鐕傛嫹*/ overflow:hidden;/* 闂佸憡鍔曢幊搴敊閹邦喗鎯ラ柛娑卞幖濮e鎮楃涵鍛棄閻庤濞婂顕�醇閺囩噥鍚呴梺鑺ッ换妤冪矓閹绢喖绀勬繛宸簻閸斻儵鏌涢幒鎴烆棤婵炲牊鍨垮畷姗�川椤撗冩櫍 */ text-overflow:ellipsis; } .lianjie { color: #3b4d63; } .lianjie_a a{ font-size: 12px; } .z_shangchuan{ background: url(../img/shangchuan.png) no-repeat; width: 92px; height: 20px; display: inline-block; vertical-align:-5px; } .z_yulan{ background: url(../img/yulan.png) no-repeat; width: 82px; height: 20px; display: inline-block; vertical-align:-5px; } .z_shangchuan:hover{ background: url(../img/shangchuan2.png) no-repeat; width: 92px; height: 20px; display: inline-block; vertical-align:-5px; cursor: pointer; } .z_fasong{ background: url(../img/fasong.png) no-repeat; width: 108px; height: 20px; display: inline-block; vertical-align:-5px; } .z_fasong:hover{ background: url(../img/fasong2.png) no-repeat; width: 108px; height: 20px; display: inline-block; vertical-align:-5px; cursor: pointer; } .tshi_content{ font-size: 12px; } .tshi_content h6{ font-weight: 400; font-size: 14px; } .tshi_content p{ text-indent:2em; } .z_tijiao{ border: 0px; width: 63px; height: 20px; background: url(../img/baocuntijiao.png) no-repeat -68px -28px; display: inline-block; } .z_tijiao:hover{ border: 0px; width: 63px; height: 20px; background: url(../img/baocuntijiao.png) no-repeat -68px 0px; display: inline-block; cursor: pointer; } .zt_table,.zt_table td{ font-size: 12px; } .zt_table tr td{ width: 25%; } .zt_table .zt_table_left{ text-align: right; } /*start閻庢鍠氶幊鎾诲吹椤撶儐娴栭柛婵堟儷s*/ .t_shangchuan{ width:860px; height:560px; margin-left:-420px; } .shangchuan_left{ width: 550px; height:480px; float: left; } .shangchuan_right { float: right; width: 280px; height:480px; } .shangchuan_left .z_tc_img{ display: block; margin:40px; width: 450px; height: 300px; text-align: center; } .shangchuan_left .z_tc_img img{ max-height:300px; max-width:450px; } .z_tc_btn{ width: 100%; text-align: center; } .z_tc_shili li{ border: 1px solid #bbbbbb; width:270px; height: 180px; display: block; margin-top: 20px; } /*end閻庢鍠氶幊鎾诲吹椤撶儐娴栭柛婵堟儷s*/ .z_yes{ color:#666666; } .z_no{ color:#b3b3b3; } .pager .z_anniu a{ border:1px solid #b3b3b3; color:#b3b3b3; } .z_container{ width: 684px; margin: 0 auto; margin-top: 20px; } .z_img_s{ overflow:hidden; border:1px solid #c2c2c2; float:left; background:#d6d6d6; } .z_one{ width:120px; height:120px; } .z_two{ width:110px; height:110px; margin:10px 0 0px 20px; } .z_three{ width:90px; height:90px; margin:30px 0 0px 20px; } .z_img_s img{ max-width:none; margin:5px; } /* 开办主体Loading */ .over { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #f5f5f5; filter:alpha(opacity=50); /*IE滤镜,透明度50%*/ -moz-opacity:0.5; /*Firefox私有,透明度50%*/ opacity:0.5;/*其他,透明度50%*/ z-index: 1000; } .layout { display: none; position: absolute; bottom: 30%; left: 40%; width: 20%; height: 20%; z-index: 1001; text-align:center; } #memberSelection{ width: 100px; } .row-fluid p{ margin-left: 40px; display: inline-block; } ================================================ FILE: src/main/webapp/style/eu/index/default.css ================================================ /*the main demo bar (div)*/ /*set the position of demo bar at plugin page > Look & Feel*/ html{ } /*padding-top:43px;*/ #wpthemedemobar { position:absolute; /*top:0px;*/ left:0px; width:100%; height:43px; padding:0px; margin:0px; background-color:#f1f1f1; border-bottom:1px solid #cccccc; color:#444444; font-weight: bold; font-family: tahoma; font-size: 11px; text-align:center; z-index:100; } #openthemesbar{ position: fixed; top:0px; right:0px; width:29px; height:20px; padding:0px; margin:0px; background-color:#f1f1f1; border-bottom:1px solid #cccccc; color:#444444; cursor:pointer; font-weight: bold; font-family: tahoma; font-size: 11px; text-align:center; z-index:99999999999999999999; background:url(http://www.themepark.com.cn/demo/wp-content/plugins/wordpress-theme-demo-bar/images/bar.jpg) } #ad_thmemesbar{ position:absolute; left:20px; top:10px; font-size:14px; color:#06C;} .wpthemedemobar_wrapper { width:100%; position:relative; padding-top:7px; } .wptdb_left a{ line-height:53px;}#gbds_thmemesbar{ cursor:pointer;} /*currently not in used (a)*/ #wpthemedemobar a,#wpthemedemobar a:link,#wpthemedemobar a:visited { font-weight: bold; font-family: tahoma; } /*the theme's name (span)*/ .wptdb_themename { border-bottom:1px solid #cccccc; } /*the left content including close button and etc (div)*/ .wptdb_left { position:absolute; top:3px; right:5px; z-index:99999999999; } /*the images in the left content including close button and etc (img)*/ .wptdb_left img { margin-right:4px; } /*the "currently previewing theme (previewed x times)" part (div)*/ .wptdb_current { margin:0 auto; text-align:center; font-size:14px; line-height:34px; } /*the text : previewed x times (span)*/ .wptdb_popularity { color:#888888; font-weight:normal } /*quick jump area (div)*/ .wptdb_jumpbar_wrapper { position:absolute; top:3px; right:15px; } /*quick jump : select menu (select)*/ .wptdb_jumpbar_select { background-color:#f1f1f1; border:1px solid #cccccc; font-size:11px; font-weight:bold; font-family:tahoma; color:#333333; vertical-align:top; margin-top:3px; } /*quick jump : select menu > option (option)*/ .wptdb_jumpbar_select option { padding:1px; } /*quick jump (input type=button)*/ #wpthemedemobar .wptdb_jumpbar_preview_button { background-color:#2885B7; border:1px solid #cccccc; font:bold 11px tahoma; color:#fff; margin-left:5px; padding:4px; padding-left:9px; padding-right:9px; -moz-border-radius:5px; } /* qTip - Tooltip script */ div#wptdb_qTip { padding: 6px; border: 1px solid #cccccc; display: none; background: #fff; color: #333333; font: 11px Verdana, Arial, sans-serif; text-align: left; position: absolute; z-index: 1000; } ================================================ FILE: src/main/webapp/style/eu/index/detailinputunit.css ================================================ .into_unit { width: 600px; border: 1px solid #ccc; padding: 10px 10px; overflow: hidden; background: #fff; margin-bottom: 10px; position: relative; box-shadow: 0 0 20px rgba(0,0,0,.15); border-radius: 4px; } .info_title{ background-color: #ffffff; height: 30px; line-height: 30px; position: absolute; z-index: 1000; text-align: center; letter-spacing: 1px; font-size: 13px;} .info_detail { width: 500px; margin: 20px 30px; padding: 10px 20px 10px 20px; border: 1px dashed #dddddd; float: left; text-align: left; position: relative;} .info_detail div{ overflow: hidden; table-layout: fixed; word-wrap: break-word; font-size: 14px; color: #333;} .info_detail p{ margin-top: 15px;} .info_detail span input, .info_detail span textarea, .info_detail select{ outline: none; border-radius: 3px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-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 0.5s ease, box-shadow 0.5s ease; -moz-transition: border 0.5s ease, box-shadow 0.5s ease; -o-transition: border 0.5s ease, box-shadow 0.5s ease; transition: border 0.5s ease, box-shadow 0.5s ease;} .info_detail span input{ width: 200px; height: 14px; line-height: 20px; float: left; padding: 6px; border: 1px solid #bbb; text-align: left; font-size: 16px;} .info_detail span{ float: left; width: 100%; margin-top: 2px; clear: both;} .info_detail strong{ font-size: 14px; font-weight: bold; color: #666; float: left;} .info_detail select{ height: 28px; float: left; padding: 4px; border: 1px solid #bbb; text-align: left; font-size: 16px;} .info_detail select option, .info_detail span textarea{ font-size: 16px;} .edit_password_btn { width: 120px; height: 36px; padding: 0; background: #fff; zoom: 1; cursor: pointer; color: #fff; font-size: 20px; font-family: "΢ź"; text-shadow: 0 1px 0 #fff, 0 2px 0 #333; border-radius: 4px; border: 1px solid #0095d8; border-color: #009de4 #0095d8 #0073a7; box-shadow: 0 2px 2px rgba(0, 0, 0, .15), inset 0 1px 0 rgba(255, 255, 255, .5), 0 0 15px rgba(0,0,0,.3); background: #0095d8;} .edit_password_btn:hover{ border-color: #00b0ff #009fe6 #0081bb; background: #009fe6; background: -webkit-gradient(linear, left top, left bottom, from(#00a3ec),to(#0093d5));} .edit_publish_btn { width: 120px; height: 36px; padding: 0; background: #fff; zoom: 1; cursor: pointer; color: #fff; font-size: 20px; font-family: "΢ź"; text-shadow: 0 1px 0 #fff, 0 2px 0 #333; border-radius: 4px; border: 1px solid #0095d8; border-color: #009de4 #0095d8 #0073a7; box-shadow: 0 2px 2px rgba(0, 0, 0, .15), inset 0 1px 0 rgba(255, 255, 255, .5), 0 0 15px rgba(0,0,0,.3); background: #0095d8;} .edit_publish_btn:hover{ border-color: #00b0ff #009fe6 #0081bb; background: #009fe6; background: -webkit-gradient(linear, left top, left bottom, from(#00a3ec),to(#0093d5));} ================================================ FILE: src/main/webapp/style/eu/index/embed.default.css ================================================ #ds-ssr{display:none !important}#ds-reset,#ds-related-reads{font-weight:normal;font-size:13px;font-size-adjust:none;color:#333;line-height:1;text-align:left}#ds-reset *,#ds-related-reads *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}#ds-reset input[type=button],#ds-related-reads input[type=button],#ds-reset input[type=submit],#ds-related-reads input[type=submit],#ds-reset input[type=reset],#ds-related-reads input[type=reset],#ds-reset button,#ds-related-reads button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#ds-reset div,#ds-related-reads div,#ds-reset ul,#ds-related-reads ul,#ds-reset ol,#ds-related-reads ol,#ds-reset li,#ds-related-reads li,#ds-reset ul li,#ds-related-reads ul li,#ds-reset ol li,#ds-related-reads ol li,#ds-reset iframe,#ds-related-reads iframe,#ds-reset h1,#ds-related-reads h1,#ds-reset h2,#ds-related-reads h2,#ds-reset h3,#ds-related-reads h3,#ds-reset h4,#ds-related-reads h4,#ds-reset h5,#ds-related-reads h5,#ds-reset h6,#ds-related-reads h6,#ds-reset p,#ds-related-reads p,#ds-reset img,#ds-related-reads img,#ds-reset blockquote,#ds-related-reads blockquote,#ds-reset a,#ds-related-reads a,#ds-reset span,#ds-related-reads span,#ds-reset pre,#ds-related-reads pre,#ds-reset code,#ds-related-reads code,#ds-reset strong,#ds-related-reads strong,#ds-reset sub,#ds-related-reads sub,#ds-reset sup,#ds-related-reads sup,#ds-reset fieldset,#ds-related-reads fieldset,#ds-reset form,#ds-related-reads form,#ds-reset label,#ds-related-reads label,#ds-reset input,#ds-related-reads input,#ds-reset textarea,#ds-related-reads textarea,#ds-reset header,#ds-related-reads header,#ds-reset section,#ds-related-reads section,#ds-reset article,#ds-related-reads article,#ds-reset select,#ds-related-reads select{border:0;padding:0;margin:0;vertical-align:baseline;font:inherit;line-height:inherit;background:none;width:auto;height:auto;float:none;overflow:visible;transition:none}#ds-reset strong,#ds-related-reads strong{font-weight:bold}#ds-reset p,#ds-related-reads p{text-indent:0;clear:none}#ds-reset span,#ds-related-reads span,#ds-reset strong,#ds-related-reads strong,#ds-reset label,#ds-related-reads label,#ds-reset input,#ds-related-reads input{display:inline;margin:0}#ds-reset textarea:focus,#ds-related-reads textarea:focus,#ds-reset input:focus,#ds-related-reads input:focus{outline:none}#ds-reset ul,#ds-related-reads ul,#ds-reset ol,#ds-related-reads ol,#ds-reset ul li,#ds-related-reads ul li,#ds-reset ol li,#ds-related-reads ol li{list-style:none;display:block}#ds-reset input,#ds-related-reads input,#ds-reset button,#ds-related-reads button{-webkit-border-radius:3px;border-radius:3px}#ds-indicator{display:none;position:fixed;z-index:99999;top:150px;left:0;padding:8px;border-bottom-right-radius:3px;border-top-right-radius:3px;width:16px;height:16px;background:#666 url("data:image/gif;base64,R0lGODlhEAAQAPQAAGZmZv///2lpadzc3K+vr/r6+ufn5319fZmZmfDw8Le3t8DAwHV1daOjo4eHh9LS0srKygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==") 8px 8px no-repeat;*background-image:url("../images/loading.gif");*position:absolute;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}#ds-waiting{cursor:wait;display:block;width:16px;height:11px;padding:0 0 3px 5px;margin:0;background:url("data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA") 0 0 no-repeat;*background-image:url("../images/waiting.gif")}#ds-reset .ds-highlight{color:#d32 !important}#ds-reset .ds-rounded{-webkit-border-radius:3px;border-radius:3px}#ds-reset .ds-rounded-top{-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px}#ds-reset .ds-rounded-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px}#ds-reset .ds-gradient-bg{background:url("../images/bg_sprites.png") 0 -60px repeat-x}#ds-reset .ds-avatar{box-shadow:0 1px 1px rgba(255,255,255,0.75);position:relative;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;float:left}#ds-reset .ds-avatar img{display:block;width:50px;height:50px;max-width:none;box-shadow:0 1px 3px rgba(0,0,0,0.22);-webkit-border-radius:3px;border-radius:3px}#ds-reset .ds-avatar .ds-service-icon{display:block;position:absolute;bottom:-4px;right:-4px}#ds-reset img.ds-smiley{margin:0;padding:0;display:inline;border:none}#ds-reset .ds-icon{vertical-align:middle;display:inline-block;overflow:hidden;background:transparent url("../images/Sprites_Embed.png") no-repeat;_background-image:url("../images/sprites.gif")}#ds-reset a .ds-icon{opacity:.6;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;transition:opacity .15s linear}#ds-reset a:hover .ds-icon{opacity:1}#ds-reset .ds-service-list a{vertical-align:middle;padding-right:3px}#ds-reset .ds-service-list li:hover a{color:#333}#ds-reset .ds-service-icon,#ds-reset .ds-service-icon-grey{width:16px !important;height:16px !important;line-height:100px;display:inline-block;background:url("../images/service-icons-color.png?v=2") no-repeat;_background-image:url("../images/service-icons-color.gif?v=2");overflow:hidden}#ds-reset .ds-service-icon-grey{background-image:url("../images/service-icons-grey.png");_background-image:url("../images/service-icons-grey.gif")}#ds-reset .ds-service-link{height:16px !important;line-height:16px;padding-left:20px;display:block;background:url("../images/service-icons-color.png?v=2") no-repeat;_background-image:url("../images/service-icons-color.gif?v=2");overflow:hidden}#ds-reset .ds-weibo{background-position:0 0}#ds-reset .ds-renren{background-position:0 -32px}#ds-reset .ds-qqt{background-position:0 -64px}#ds-reset .ds-kaixin{background-position:0 -80px}#ds-reset .ds-douban{background-position:0 -96px}#ds-reset .ds-qzone{background-position:0 -128px}#ds-reset .ds-duoshuo{background-position:0 -144px}#ds-reset .ds-qq{background-position:0 -192px}#ds-reset .ds-baidu{background-position:0 -208px}#ds-reset .ds-google{background-position:0 -240px}#ds-reset .ds-weixin{background-position:0 -272px}#ds-reset .ds-wechat{background-position:0 -272px}.ds-icons-32 a{display:block;cursor:pointer;width:32px !important;height:32px !important;background:url("../images/icons_large.png") no-repeat !important;overflow:hidden;text-indent:-9999px}.ds-icons-32 a.ds-weibo{background-position:-37px 0 !important}.ds-icons-32 a.ds-qzone{background-position:0 0 !important}.ds-icons-32 a.ds-qqt{background-position:-74px 0 !important}.ds-icons-32 a.ds-renren{background-position:-148px 0 !important}.ds-icons-32 a.ds-kaixin{background-position:-111px 0 !important}.ds-icons-32 a.ds-weixin{background-position:-224px 0 !important}.ds-icons-32 a.ds-wechat{background-position:-224px 0 !important}.ds-icons-32 a.ds-qq{background-position:-488px 0 !important}.ds-icons-32 a.ds-douban{background-position:-186px 0 !important}.ds-icons-32 a.ds-baidu{background-position:-262px 0 !important}#ds-reset #ds-ctx{padding:0;margin:8px 0;max-width:640px}#ds-reset #ds-ctx .ds-ctx-entry{padding:6px;margin:0;border-bottom:1px solid #e6e6e6}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-head a{color:#e77064}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-head a:hover{color:#d32}#ds-reset #ds-ctx .ds-ctx-entry .ds-avatar{margin:0;width:30px;height:30px}#ds-reset #ds-ctx .ds-ctx-entry .ds-avatar img{width:30px;height:30px;box-shadow:none}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-body{margin-left:38px}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-head{position:relative;_zoom:1;line-height:1em;padding:1px 0 0;margin:0 0 .25em}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-nth{color:#999;font-size:12px;position:absolute;top:2px;right:0}#ds-reset #ds-ctx .ds-ctx-entry .ds-time{font-size:12px;*font-size:12px;margin-left:8px;color:#999;_zoom:1}#ds-reset #ds-ctx .ds-ctx-entry .ds-ctx-content{position:relative;_zoom:1;padding:0;margin:0;overflow:hidden;line-height:1.5em}#ds-reset #ds-ctx .ds-ctx-entry:hover .ds-comment-actions{display:block}#ds-reset #ds-ctx .ds-comment-actions{bottom:0;right:0;line-height:18px;position:absolute;display:none;*display:block}#ds-reset #ds-ctx .ds-comment-actions a{margin:0 0 0 6px}#ds-reset.ds-touch #ds-ctx .ds-ctx-entry .ds-comment-actions{display:block}#ds-reset .ds-comment-body #ds-ctx{border-left:3px solid #ccc;background-color:rgba(0,0,0,0.03)}#ds-reset.ds-no-opacity .ds-comment-body #ds-ctx{background:#f8f8f8}#ds-reset .ds-dialog-body #ds-ctx .ds-ctx-entry:hover .ds-comment-actions{display:none}#ds-thread{clear:both;position:relative;overflow:visible;_zoom:1}#ds-thread #ds-reset a{cursor:pointer;text-decoration:none;color:#777;background-color:transparent;-webkit-transition:color .15s linear;-moz-transition:color .15s linear;transition:color .15s linear}#ds-thread #ds-reset a:hover{color:#333}#ds-thread #ds-reset ul,#ds-thread #ds-reset ul li{background:none;margin:0;padding:0}#ds-thread #ds-reset .ds-arrow{position:absolute;width:0;height:0;font-size:0 !important;line-height:0 !important;_border-right-color:#ffc0cb !important;_border-left-color:#ffc0cb !important;_filter:chroma(color=#ffc0cb) !important}#ds-thread #ds-reset .ds-arrow-down{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #fff}#ds-thread #ds-reset button{cursor:pointer;margin:0;padding:0;border-radius:0}#ds-thread #ds-reset .ds-meta{position:relative;padding:8px 0;line-height:24px;border-bottom:1px solid rgba(0,0,0,0.13)}#ds-thread #ds-reset .ds-like-tooltip{position:absolute;z-index:9999;background-color:#fcfcfc;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fcfcfc), to(#f9f9f9));background:-moz-linear-gradient(top, #fcfcfc 0, #f9f9f9 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcfcfc), color-stop(100%, #f9f9f9));background:-webkit-linear-gradient(top, #fcfcfc 0, #f9f9f9 100%);background:-ms-linear-gradient(top, #fcfcfc 0, #f9f9f9 100%);background:linear-gradient(top, #fcfcfc 0, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fcfcfc',endColorstr='#f9f9f9',GradientType=0);border:1px solid #aaa;box-shadow:0 0 2px rgba(0,0,0,0.2);text-shadow:0 1px 0 #fff;font-size:12px;padding:8px 14px}#ds-thread #ds-reset .ds-like-tooltip ul{width:84px;float:left}#ds-thread #ds-reset .ds-like-tooltip li{line-height:16px;margin:6px 0}#ds-thread #ds-reset .ds-like-tooltip p{clear:both;margin:6px 0}#ds-thread #ds-reset .ds-like-tooltip .ds-like-tooltip-footer{text-align:right}#ds-thread #ds-reset a.ds-like-thread-button{color:#555;padding:4px 8px;border:1px solid #ccc;border-bottom-color:#aaa;box-shadow:inset 0 0 1px #fff;margin-right:15px;text-shadow:0 1px 0 #fff;background-color:#e0e0e0;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e0e0e0));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e0e0e0);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e0e0e0);background-image:-ms-linear-gradient(#fff, #fff 25%, #e0e0e0);background-image:linear-gradient(#fff, #fff 25%, #e0e0e0)}#ds-thread #ds-reset a.ds-like-thread-button .ds-icon-heart{position:relative;top:-2px;opacity:1}#ds-thread #ds-reset a.ds-like-thread-button span{color:#555}#ds-thread #ds-reset .ds-thread-cancel-like{display:none}#ds-thread #ds-reset a.ds-thread-liked{background:#e9e9e9}#ds-thread #ds-reset a.ds-thread-liked:hover .ds-thread-cancel-like{display:inline}#ds-thread #ds-reset a.ds-thread-liked:hover .ds-thread-like-text{display:none}#ds-thread #ds-reset #ds-hot-posts{border:1px solid #ccc;overflow:hidden;margin:8px 0;padding:0;_height:100%}#ds-thread #ds-reset .ds-header{font-weight:bold;font-size:14px;color:#555;line-height:30px;padding:0 12px}#ds-thread #ds-reset .ds-toolbar{position:relative;z-index:5;font-size:12px;padding:8px 0;width:100%;clear:both}#ds-thread #ds-reset .ds-toolbar:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-thread #ds-reset .ds-visitor{float:right;line-height:1.5em;margin-right:6px}#ds-thread #ds-reset .ds-account-control{float:right;position:relative;font-size:12px;cursor:pointer;text-align:right;line-height:18px;padding-bottom:3px;width:75px}#ds-thread #ds-reset .ds-account-control span{display:block;float:left;color:#999}#ds-thread #ds-reset .ds-account-control ul{display:none;position:absolute;top:19px;left:0;border:1px solid #aaa;background:#f8f8f8;box-shadow:inset 0 1px 1px #fff,0 1px 1px rgba(0,0,0,0.3);border-radius:3px;text-align:center}#ds-thread #ds-reset .ds-account-control ul li a{border-top:1px solid #fff;border-bottom:1px solid #ddd;display:block;padding:3px 10px;text-shadow:0 1px 0 #fff}#ds-thread #ds-reset .ds-account-control ul li a:hover{color:#555}#ds-thread #ds-reset .ds-account-control.ds-active span{color:#555}#ds-thread #ds-reset .ds-account-control.ds-active ul{display:block}#ds-thread #ds-reset .ds-alert{margin:.5em 0;border:1px solid #fbeed5;border-radius:3px;padding:6px 6px;color:#c09853;background-color:#fcf8e3;line-height:1.5em}#ds-thread #ds-reset .ds-login-buttons{width:100%;position:relative;padding:10px 0 6px}#ds-thread #ds-reset .ds-login-buttons p{float:left;line-height:24px;margin:0}#ds-thread #ds-reset .ds-login-buttons .ds-service-list li{float:left;height:16px;width:54px;padding:4px 0;margin:0 0 0 6px}#ds-thread #ds-reset .ds-login-buttons .ds-more-services{color:#d32 !important;line-height:16px;display:block}#ds-thread #ds-reset .ds-login-buttons .ds-more-services:hover{color:#e77064 !important}#ds-thread #ds-reset .ds-login-buttons .ds-additional-services{display:none}#ds-thread #ds-reset .ds-login-buttons .ds-social-links{float:left;width:306px}#ds-thread #ds-reset .ds-login-buttons:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-thread #ds-reset a.ds-unread-comments-count{display:none;background-color:#d32;color:#fff !important;margin-right:6px;padding:1px 5px;font-weight:bold;-webkit-border-radius:5px;border-radius:5px;box-shadow:inset 0 1px 1px rgba(255,255,255,0.4),0 1px 1px rgba(0,0,0,0.3);text-shadow:0 1px 1px rgba(0,0,0,0.3)}#ds-thread #ds-reset a.ds-unread-comments-count:hover{background:#f00}#ds-thread #ds-reset .ds-replybox{width:auto;font-size:12px;z-index:3;margin:8px 0;padding:0 0 0 60px;position:relative;_zoom:1}#ds-thread #ds-reset .ds-replybox:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-thread #ds-reset .ds-replybox .ds-avatar{position:absolute;top:0;left:0}#ds-thread #ds-reset .ds-replybox .ds-avatar img{width:50px;height:50px;visibility:visible;margin:0}#ds-thread #ds-reset .ds-inline-replybox{margin:8px 0 2px 0;padding-left:38px}#ds-thread #ds-reset .ds-inline-replybox .ds-avatar img{width:30px;height:30px;box-shadow:0 1px 2px rgba(0,0,0,0.22)}#ds-thread #ds-reset .ds-textarea-wrapper{position:relative;border:1px solid #ccc;border-bottom:none;padding-right:20px;background:#fff url("../images/bg_sprites.png") 0 -90px repeat-x;overflow:hidden}#ds-thread #ds-reset .ds-textarea-wrapper textarea{box-shadow:none;-webkit-appearance:none;overflow:auto;padding:10px;height:54px;margin:0;resize:none;color:#999;width:100%}#ds-thread #ds-reset .ds-textarea-wrapper textarea:focus{color:#333}#ds-thread #ds-reset .ds-textarea-wrapper .ds-hidden-text{word-wrap:break-word;visibility:hidden;position:absolute;top:0;left:10px;right:10px}#ds-thread #ds-reset .ds-textarea-wrapper textarea,#ds-thread #ds-reset .ds-textarea-wrapper .ds-hidden-text{display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;border:none}#ds-thread #ds-reset .ds-post-toolbar{position:relative;width:100%;box-shadow:0 1px 0 rgba(255,255,255,0.6)}#ds-thread #ds-reset .ds-post-toolbar span,#ds-thread #ds-reset .ds-post-toolbar input,#ds-thread #ds-reset .ds-post-toolbar label,#ds-thread #ds-reset .ds-post-toolbar a{vertical-align:middle;width:auto}#ds-thread #ds-reset .ds-post-options{position:relative;margin-right:100px;height:30px;border:1px solid #ccc;border-right:none;border-bottom-color:#aaa;border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px}#ds-thread #ds-reset .ds-toolbar-buttons{position:absolute;top:5px;left:6px}#ds-thread #ds-reset .ds-toolbar-button{display:block;width:19px !important;height:19px;float:left;margin-right:4px;background:transparent url("../images/Sprites_Embed.png") no-repeat;_background-image:url("../images/sprites.gif");vertical-align:middle;opacity:.6;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;transition:opacity .15s linear}#ds-thread #ds-reset .ds-toolbar-button:hover{opacity:1}#ds-thread #ds-reset .ds-add-image{background-position:0 -48px}#ds-thread #ds-reset .ds-add-image:hover{background-position:0 -66px}#ds-thread #ds-reset .ds-add-emote{background-position:0 -12px}#ds-thread #ds-reset .ds-add-emote:hover{background-position:0 -30px}#ds-thread #ds-reset .ds-sync{font-size:12px;color:#999;line-height:30px;position:absolute;right:5px}#ds-thread #ds-reset .ds-sync label{color:#777;cursor:pointer;-webkit-transition:color .15s linear;-moz-transition:color .15s linear;transition:color .15s linear}#ds-thread #ds-reset .ds-sync label:hover{color:#555}#ds-thread #ds-reset .ds-sync a.ds-service-icon,#ds-thread #ds-reset .ds-sync a.ds-service-icon-grey{margin:7px 2px 7px 3px}#ds-thread #ds-reset .ds-post-button{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;position:absolute;right:0;top:0;height:32px;width:100px;text-align:center;text-shadow:0 1px 0 #fff;color:#555;font-size:14px;font-weight:bold;border:1px solid #ccc;border-bottom-color:#aaa;border-bottom-right-radius:3px;-webkit-border-bottom-right-radius:3px;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fcfcfc), color-stop(25%, #fcfcfc), to(#e6e6e6));background-image:-webkit-linear-gradient(#fcfcfc, #fcfcfc 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fcfcfc, #fcfcfc 25%, #e6e6e6);background-image:-ms-linear-gradient(#fcfcfc, #fcfcfc 25%, #e6e6e6);background-image:linear-gradient(#fcfcfc, #fcfcfc 25%, #e6e6e6);-webkit-transition:all .15s linear;-moz-transition:all .15s linear;transition:all .15s linear;box-shadow:inset 0 0 1px #fff}#ds-thread #ds-reset .ds-post-button:hover{background-position:0 -15px;color:#333}#ds-thread #ds-reset .ds-post-button:active{-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}#ds-thread #ds-reset .ds-comments-info{width:100%;font-size:13px;margin-top:10px;padding:8px 0;line-height:25px;position:relative}#ds-thread #ds-reset .ds-sort{position:absolute;right:0;top:8px}#ds-thread #ds-reset .ds-sort a{color:#999;padding:0 4px;margin:0 2px}#ds-thread #ds-reset .ds-sort a:hover{color:#333}#ds-thread #ds-reset .ds-sort a.ds-current,#ds-thread #ds-reset .ds-sort a:active{color:#d32}#ds-thread #ds-reset ul.ds-comments-tabs .ds-highlight{margin:0 2px 0 0}#ds-thread #ds-reset ul.ds-comments-tabs .ds-service-icon{vertical-align:middle;margin:0 2px 1px 0}#ds-thread #ds-reset li.ds-tab{display:inline;font-size:13px;margin:0 5px 0 0;padding:0}#ds-thread #ds-reset li.ds-tab a{text-shadow:0 1px 0 #fff;padding:3px 5px;display:inline;-webkit-border-radius:5px;border-radius:5px}#ds-thread #ds-reset li.ds-tab a.ds-current{border:1px solid #ccc;background-color:rgba(0,0,0,0.04)}#ds-thread #ds-reset li.ds-tab a:hover{background-color:rgba(0,0,0,0.04)}#ds-thread #ds-reset .ds-comments{width:100%;border-bottom:1px solid rgba(0,0,0,0.13)}#ds-thread #ds-reset .ds-comments:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-thread #ds-reset li.ds-post{width:100%;overflow:hidden;clear:both;border-top:1px solid rgba(0,0,0,0.13);margin:0;padding:0;list-style:none}#ds-thread #ds-reset li.ds-post-placeholder{text-align:center;color:#999;padding:1em 0}#ds-thread #ds-reset .ds-post-self{position:relative;padding:10px;border-top:1px solid rgba(255,255,255,0.7)}#ds-thread #ds-reset .ds-post-self:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-thread #ds-reset .ds-post-self:hover .ds-post-delete,#ds-thread #ds-reset .ds-post-self:hover .ds-post-report{display:inline-block}#ds-thread #ds-reset.ds-touch .ds-post-self .ds-post-delete,#ds-thread #ds-reset.ds-touch .ds-post-self .ds-post-report{display:inline-block}#ds-thread #ds-reset .ds-comment-body{padding-left:60px}#ds-thread #ds-reset .ds-comment-body p{font-size:13px;line-height:1.5em;margin:.5em 0;word-wrap:break-word}#ds-thread #ds-reset .ds-comment-body img{max-width:100%;vertical-align:text-bottom;box-shadow:none}#ds-thread #ds-reset .ds-comment-body embed{max-width:100%}#ds-thread #ds-reset .ds-comment-body code{display:block;font-size:12px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;padding:8px 12px;background-color:#f0f0f0;margin:8px 0;border-radius:3px;border:1px solid #ddd;color:#666}#ds-thread #ds-reset .ds-comment-body a{color:#777}#ds-thread #ds-reset .ds-comment-body a:hover{color:#555}#ds-thread #ds-reset a.ds-comment-context{position:relative;margin:.5em 0;color:#e77064}#ds-thread #ds-reset a.ds-comment-context:hover{color:#d32}#ds-thread #ds-reset #ds-bubble{position:absolute;background-color:#fff;-webkit-border-radius:5px;border-radius:5px;padding:10px;color:#333;border:1px solid #aaa;box-shadow:0 0 2px rgba(0,0,0,0.2);z-index:9999;font-size:13px}#ds-thread #ds-reset #ds-bubble a{color:#e77064}#ds-thread #ds-reset #ds-bubble a:hover{color:#d32}#ds-thread #ds-reset #ds-bubble p{line-height:18px}#ds-thread #ds-reset #ds-bubble .ds-arrow-border{border-top-color:#aaa;bottom:-6px}#ds-thread #ds-reset #ds-bubble .ds-arrow{left:32px;bottom:-5px}#ds-thread #ds-reset #ds-ctx-bubble{width:300px}#ds-thread #ds-reset #ds-ctx-bubble .ds-bubble-footer{padding:6px 0 0 0;line-height:18px}#ds-thread #ds-reset #ds-user-card{width:276px;min-height:50px}#ds-thread #ds-reset #ds-user-card .ds-avatar{margin-right:10px}#ds-thread #ds-reset #ds-user-card .ds-avatar img{width:50px;height:50px}#ds-thread #ds-reset #ds-user-card .ds-user-name{vertical-align:top;display:inline-block;max-width:8em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:14px}#ds-thread #ds-reset #ds-user-card .ds-user-card-meta{margin:14px 0 0 62px}#ds-thread #ds-reset #ds-user-card .ds-user-description{border-top:1px dotted #ddd;margin-top:.5em;color:#aaa}#ds-thread #ds-reset #ds-user-card .ds-service-icon{margin-right:3px}#ds-thread #ds-reset .ds-comment-header{padding-top:1px}#ds-thread #ds-reset .ds-comment-footer{line-height:1.5em}#ds-thread #ds-reset .ds-comment-footer a{margin:0 6px 0 0;padding:0 6px 0 0}#ds-thread #ds-reset .ds-comment-actions a{font-size:12px;color:#999}#ds-thread #ds-reset .ds-comment-actions a .ds-icon{position:relative;top:-1px}#ds-thread #ds-reset .ds-user-name{color:#777;font-size:13px;margin-right:8px}#ds-thread #ds-reset .ds-post-liked .ds-icon-like{background-position:0 -130px}#ds-thread #ds-reset .ds-post-liked a.ds-post-likes{color:#d32}#ds-thread #ds-reset .ds-reply-active{display:block}#ds-thread #ds-reset .ds-reply-active .ds-post-reply{color:#333}#ds-thread #ds-reset .ds-reply-active .ds-post-reply .ds-icon{opacity:1}#ds-thread #ds-reset .ds-post-delete,#ds-thread #ds-reset .ds-post-report{display:none}#ds-thread #ds-reset .ds-icon-heart{width:14px;height:13px;background-position:0 -130px}#ds-thread #ds-reset .ds-icon-settings{width:12px;height:12px;margin:3px 4px 0;opacity:1}#ds-thread #ds-reset .ds-icon-like{width:14px;height:13px;background-position:0 -117px}#ds-thread #ds-reset .ds-icon-share{width:18px;height:13px;background-position:0 -234px}#ds-thread #ds-reset .ds-icon-reply{width:18px;height:13px;background-position:0 -105px}#ds-thread #ds-reset .ds-icon-delete{width:13px;height:13px;background-position:0 -176px}#ds-thread #ds-reset .ds-icon-report{width:12px;height:12px;background-position:0 -189px}#ds-thread #ds-reset .ds-time{font-size:12px;*font-size:12px;margin-right:8px;color:#999;_zoom:1}#ds-thread #ds-reset ul.ds-children{margin-left:38px}#ds-thread #ds-reset ul.ds-children .ds-avatar{width:30px;height:30px}#ds-thread #ds-reset ul.ds-children .ds-avatar img{width:30px;height:30px}#ds-thread #ds-reset ul.ds-children .ds-post-self{padding-left:0}#ds-thread #ds-reset ul.ds-children .ds-comment-body{padding-left:38px}#ds-thread #ds-reset .ds-paginator{border-bottom:1px solid rgba(0,0,0,0.13);text-align:right;padding-bottom:15px;clear:both;line-height:1em}#ds-thread #ds-reset .ds-paginator div.ds-border{border-top:1px solid rgba(255,255,255,0.7);margin-bottom:15px}#ds-thread #ds-reset .ds-paginator a{font-size:12px;margin:0 3px;padding:2px 5px;border:1px solid transparent}#ds-thread #ds-reset .ds-paginator a:hover,#ds-thread #ds-reset .ds-paginator a.ds-current{-webkit-border-radius:3px;border-radius:3px;background-color:rgba(0,0,0,0.03)}#ds-thread #ds-reset .ds-paginator a.ds-current{color:#d32;border:1px solid #ccc}#ds-thread #ds-reset .ds-powered-by{font-size:12px;text-align:right;padding:10px 0}#ds-thread #ds-reset .ds-powered-by a{color:#999;text-decoration:none}#ds-thread #ds-reset .ds-powered-by a:hover{color:#555}#ds-thread #ds-reset.ds-no-transition .ds-post-button,#ds-thread #ds-reset.ds-no-transition .ds-more a{background:url("../images/bg_sprites.png") repeat-x !important}#ds-thread #ds-reset.ds-no-transition .ds-post-button:hover,#ds-thread #ds-reset.ds-no-transition .ds-more a:hover{background-position:0 -30px !important}#ds-thread #ds-reset.ds-no-transition .ds-like-thread-button{background:url("../images/bg_sprites.png") repeat-x}#ds-thread #ds-reset.ds-no-opacity li.ds-post{border-top:1px solid #ddd}#ds-thread #ds-reset.ds-no-opacity .ds-comments,#ds-thread #ds-reset.ds-no-opacity .ds-paginator{border-bottom:1px solid #ddd}#ds-thread #ds-reset.ds-no-opacity .ds-post-self{border-top:none}#ds-thread #ds-reset.ds-no-opacity .ds-tab a.ds-current{background:#f8f8f8}#ds-thread #ds-reset.ds-ie6 .ds-post-report,#ds-thread #ds-reset.ds-ie6 .ds-post-delete{display:inline !important}#ds-thread #ds-reset.ds-ie6 .ds-textarea-wrapper{padding:10px 10px}#ds-thread #ds-reset.ds-ie6 .ds-textarea-wrapper textarea{width:95%;color:#333;padding:0}#ds-thread #ds-reset.ds-ie6 .ds-post{width:100%;float:left}#ds-thread #ds-reset.ds-ie6 .ds-tab a.ds-current{padding-bottom:5px}#ds-thread #ds-reset.ds-ie6 #ds-ctx-bubble .ds-arrow{bottom:-8px}#ds-thread #ds-reset.ds-ie6 #ds-ctx-bubble .ds-arrow-border{bottom:-9px}#ds-thread.ds-narrow #ds-reset .ds-post-self{padding:8px}#ds-thread.ds-narrow #ds-reset .ds-comment-body,#ds-thread.ds-narrow #ds-reset .ds-replybox{padding-left:38px}#ds-thread.ds-narrow #ds-reset .ds-avatar img{width:30px;height:30px}#ds-thread.ds-narrow #ds-reset .ds-post-button{width:70px}#ds-thread.ds-narrow #ds-reset .ds-post-options{margin-right:70px}#ds-smilies-tooltip{border:1px solid #aaa;position:absolute;width:400px;background-color:#fff;z-index:9999;box-shadow:0 0 2px rgba(0,0,0,0.2);text-shadow:0 1px 0 #fff;-webkit-border-radius:3px;border-radius:3px}#ds-smilies-tooltip a{cursor:pointer}#ds-smilies-tooltip ul{list-style-type:none;padding:0;margin:0}#ds-smilies-tooltip ul.ds-smilies-tabs{width:119px;position:absolute;top:0;left:0;height:159px;overflow-y:auto;background:#f8f8f8;border-right:1px solid #ccc;border-top-left-radius:3px;border-bottom-left-radius:3px}#ds-smilies-tooltip ul.ds-smilies-tabs li a{color:#999;padding:6px 10px;display:block;border-bottom:1px solid #ccc;background-color:#fff;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fff), to(#e9e9e9));background:-moz-linear-gradient(top, #fff 0, #e9e9e9 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(100%, #e9e9e9));background:-webkit-linear-gradient(top, #fff 0, #e9e9e9 100%);background:-ms-linear-gradient(top, #fff 0, #e9e9e9 100%);background:linear-gradient(top, #fff 0, #e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#e9e9e9',GradientType=0);font-size:12px;line-height:1.3em}#ds-smilies-tooltip ul.ds-smilies-tabs li:first-child a{border-top-left-radius:3px}#ds-smilies-tooltip ul.ds-smilies-tabs li a.ds-current{color:#666;background:#e3e3e3;filter:none;box-shadow:inset 0 0 4px rgba(0,0,0,0.1)}#ds-smilies-tooltip .ds-smilies-container{padding:10px 5px;height:140px;margin-left:125px;overflow-y:auto}#ds-smilies-tooltip .ds-smilies-container li{list-style:none;float:left;width:26px;height:26px;text-align:center;cursor:pointer}#ds-smilies-tooltip .ds-smilies-container li img{visibility:visible}#ds-smilies-tooltip .ds-smilies-container li:hover{position:relative;top:-1px}#ds-wrapper{left:0;right:0;top:20%;bottom:0;width:100%;margin:auto;z-index:9999;position:fixed;_position:absolute;text-align:center;color:#777}#ds-wrapper .ds-dialog,#ds-wrapper #ds-reset.ds-dialog{margin:0 auto;text-align:left;_zoom:1;width:480px;max-width:100%}#ds-wrapper #ds-reset.ds-dialog-bind-more .ds-service-list{width:50%}#ds-wrapper #ds-reset a{cursor:pointer;text-decoration:none;color:#777}#ds-wrapper #ds-reset .ds-dialog-inner{width:100%;position:relative;border:1px solid #aaa;background:#fff url("../images/bg_sprites.png") 0 -90px repeat-x;text-shadow:0 1px 0 #fff;box-shadow:inset 0 1px 1px #fff,0 2px 6px rgba(0,0,0,0.4)}#ds-wrapper #ds-reset .ds-dialog-inner .ds-unread-list{max-height:300px;overflow-y:auto}#ds-wrapper #ds-reset .ds-control-group{margin:18px 0;position:relative;padding-right:80px;max-width:166px}#ds-wrapper #ds-reset .ds-control-group input{color:#777;width:100%;font-size:13px;border:1px solid #ccc;padding:4px 80px 6px 6px;box-shadow:inset 0 1px 3px rgba(0,0,0,0.1)}#ds-wrapper #ds-reset .ds-control-group input:focus{border-color:#08b5fb}#ds-wrapper #ds-reset .ds-control-group label{font-size:13px;color:#ccc;letter-spacing:1px;position:absolute;right:0;top:8px}#ds-wrapper #ds-reset tr{height:45px}#ds-wrapper #ds-reset button{cursor:pointer;color:#555;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:-ms-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);-webkit-transition:all .15s linear;-moz-transition:all .15s linear;transition:all .15s linear;border:1px solid #aaa;display:inline-block;font-size:15px;height:30px;width:100px;padding:0}#ds-wrapper #ds-reset button:hover{background-position:0 -15px;color:#333}#ds-wrapper #ds-reset button:active{top:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}#ds-wrapper #ds-reset h2{display:block;font-weight:normal;font-size:16px;margin:0 0 15px 0;color:#555}#ds-wrapper #ds-reset .ds-dialog-body{padding:30px 30px 25px;position:relative;overflow:hidden}#ds-wrapper #ds-reset .ds-icons-32{height:32px;margin-bottom:20px;overflow:hidden}#ds-wrapper #ds-reset .ds-icons-32 a{float:left;margin:0 5px 0 0}#ds-wrapper #ds-reset ul li{margin:10px 0}#ds-wrapper #ds-reset .ds-service-list{width:45%;float:left}#ds-wrapper #ds-reset .ds-service-list .ds-more-services{display:none}#ds-wrapper #ds-reset .ds-icon-ok{background-position:0 -203px;width:12px;height:12px}#ds-wrapper #ds-reset .ds-quote{margin:10px 0;padding:6px 10px;background:#f8f8f8;line-height:1.5em;font-size:12px;overflow-y:auto;max-height:180px}#ds-wrapper #ds-reset .ds-textarea-wrapper{border:1px solid #ccc;padding:0 20px 0 0;position:relative;margin:12px 0}#ds-wrapper #ds-reset .ds-textarea-wrapper textarea{width:100%;height:54px;margin:0;resize:none;padding:6px 10px;overflow:auto}#ds-wrapper #ds-reset .ds-textarea-wrapper .ds-hidden-text{top:0;left:10px;right:10px;position:absolute;visibility:hidden;word-wrap:break-word}#ds-wrapper #ds-reset .ds-textarea-wrapper textarea,#ds-wrapper #ds-reset .ds-textarea-wrapper .ds-hidden-text{font-size:13px;line-height:1.5em}#ds-wrapper #ds-reset .ds-actions{position:relative;height:30px}#ds-wrapper #ds-reset .ds-actions button{display:block;position:absolute;top:0;right:0}#ds-wrapper #ds-reset .ds-dialog-close{position:absolute;bottom:13px;right:11px;display:block;width:13px;height:13px;overflow:hidden;background:transparent url("../images/Sprites_Embed.png") 0 -163px no-repeat;_background-image:url("../images/sprites.gif")}#ds-wrapper #ds-reset .ds-dialog-close:hover{background-position:0 -176px}#ds-wrapper #ds-reset .ds-logo{display:inline-block;width:64px;height:21px;margin-right:10px;background:url("../images/logo.png") 0 0 no-repeat}#ds-wrapper #ds-reset .ds-dialog-footer{clear:both;border-top:1px dotted #ccc;padding:10px 15px 6px}#ds-wrapper #ds-reset .ds-dialog-footer span{color:#999;position:relative;top:-6px}#ds-wrapper #ds-reset .ds-connect{display:none}#ds-wrapper #ds-reset .ds-unread-list li{position:relative;margin:0;padding:8px 0;border-top:1px solid #eee;line-height:1.5em;color:#777}#ds-wrapper #ds-reset .ds-unread-list li a{color:#d32}#ds-wrapper #ds-reset .ds-unread-list li a:hover{color:#e45c4e}#ds-wrapper #ds-reset .ds-unread-list li a[rel~="author"]{color:#777}#ds-wrapper #ds-reset .ds-unread-list li .ds-delete{display:none;position:absolute;right:0;bottom:10px;text-indent:-9999px;width:14px;height:14px;overflow:hidden;background:transparent url("../images/delete.gif") no-repeat scroll 0 -14px}#ds-wrapper #ds-reset .ds-unread-list li:hover .ds-delete{display:block}#ds-wrapper #ds-reset.ds-touch .ds-unread-list li .ds-delete{display:block}#ds-wrapper.ds-no-transition #ds-reset button{background:url("../images/bg_sprites.png") repeat-x !important}#ds-wrapper.ds-no-transition #ds-reset button:hover{background-position:0 -30px !important}#ds-wrapper.ds-no-transition #ds-reset.ds-dialog{background-image:url("../images/black.png")}#ds-wrapper.ds-ie6 #ds-reset{margin-top:0}#ds-wrapper.ds-ie6 #ds-reset .ds-dialog-footer span{top:-3px}#ds-notify{position:fixed;*position:absolute;z-index:9999;max-width:144px;_width:130px;display:block;float:none;padding:8px 12px;background-color:#fff;-webkit-border-radius:5px;border-radius:5px;box-shadow:0 1px 1px rgba(0,0,0,0.25);border:1px solid #aaa}#ds-notify #ds-reset{line-height:14px}#ds-notify #ds-reset a.ds-logo{width:18px;height:14px;background:transparent url("../images/Sprites_Embed.png") 0 -220px no-repeat;_background-image:url("../images/sprites.gif");position:absolute;display:block;top:8px;left:12px}#ds-notify #ds-reset span.ds-unread-count{font-weight:bold;color:#e32}#ds-notify #ds-reset ul.ds-notify-unread{line-height:150%;display:inline-block;margin:0 0 0 22px;padding:0}#ds-notify #ds-reset ul.ds-notify-unread li a{color:#d32;text-decoration:none}#ds-recent-comments li.ds-comment{list-style-type:none;position:relative !important;margin:0 !important;padding:6px 0 !important;_zoom:1;border-top:1px solid #dcdcdc;word-wrap:break-word;font-size:13px}#ds-recent-comments li.ds-comment a{display:inline}#ds-recent-comments li.ds-comment div{padding:0;margin:0}#ds-recent-comments li.ds-comment .ds-avatar{position:absolute !important;top:6px !important;left:0 !important}#ds-recent-comments li.ds-comment .ds-avatar a{display:block}#ds-recent-comments li.ds-comment .ds-meta{*margin-left:-15px;_margin-left:0}#ds-recent-comments li.ds-comment .ds-time{font-size:10px;color:#999;margin-left:5px}#ds-recent-comments li.ds-comment .ds-thread-title{margin:0 0 4px 0;line-height:13px;font-size:12px;color:#777}#ds-recent-comments li.ds-comment .ds-thread-title a{font-size:12px}#ds-recent-comments li.ds-comment .ds-excerpt{line-height:18px}#ds-recent-comments li.ds-comment.ds-show-avatars{padding-left:38px !important}#ds-recent-visitors .ds-avatar{display:inline;padding:0 !important;margin:4px !important}#ds-login .ds-icons-32 a{float:left;margin:0 5px 0 0}#ds-share #ds-reset.ds-share-aside-left ul,#ds-share #ds-reset.ds-share-aside-right ul,#ds-share #ds-reset.ds-share-inline ul{list-style:none;margin:0;padding:0;*zoom:1}#ds-share #ds-reset.ds-share-aside-left ul:after,#ds-share #ds-reset.ds-share-aside-right ul:after,#ds-share #ds-reset.ds-share-inline ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}#ds-share #ds-reset.ds-share-aside-left ul li,#ds-share #ds-reset.ds-share-aside-right ul li,#ds-share #ds-reset.ds-share-inline ul li{list-style:none;float:left;font-size:14px;padding:7px 0}#ds-share #ds-reset.ds-share-inline{position:relative}#ds-share #ds-reset.ds-share-inline ul li{margin-left:8px}#ds-share #ds-reset.ds-share-inline ul li:first-child{margin-left:0}#ds-share #ds-reset.ds-share-aside-left,#ds-share #ds-reset.ds-share-aside-right{position:fixed;top:50%;z-index:1000;-webkit-transition:all .2s linear;-moz-transition:all .2s linear;transition:all .2s linear}#ds-share #ds-reset.ds-share-aside-left{left:0;-webkit-transform:translate(-100%, -50%);-ms-transform:translate(-100%, -50%);-o-transform:translate(-100%, -50%);transform:translate(-100%, -50%)}#ds-share #ds-reset.ds-share-aside-right{right:0;-webkit-transform:translate(100%, -50%);-ms-transform:translate(100%, -50%);-o-transform:translate(100%, -50%);transform:translate(100%, -50%)}#ds-share #ds-reset .ds-share-aside-toggle{width:28px;padding:23px 2px;background:#e94c4c;color:#fff;position:absolute;top:0;text-align:center;font-size:16px;font-weight:bolder;cursor:pointer}#ds-share #ds-reset.ds-share-aside-left .ds-share-aside-toggle{right:-32px;border-top-right-radius:3px;border-bottom-right-radius:3px}#ds-share #ds-reset.ds-share-aside-left .ds-share-icons{border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}#ds-share #ds-reset.ds-share-aside-right .ds-share-aside-toggle{left:-32px;border-top-left-radius:3px;border-bottom-left-radius:3px}#ds-share #ds-reset.ds-share-aside-right .ds-share-icons{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-right:none}#ds-share #ds-reset.slide-to-left{-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);-o-transform:translate(0, -50%);transform:translate(0, -50%)}#ds-share #ds-reset.slide-to-right{-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);-o-transform:translate(0, -50%);transform:translate(0, -50%)}#ds-share #ds-reset .ds-share-icons-32 .ds-weibo,#ds-share #ds-reset .ds-share-icons-32 .ds-sohu,#ds-share #ds-reset .ds-share-icons-32 .ds-renren,#ds-share #ds-reset .ds-share-icons-32 .ds-netease,#ds-share #ds-reset .ds-share-icons-32 .ds-qqt,#ds-share #ds-reset .ds-share-icons-32 .ds-kaixin,#ds-share #ds-reset .ds-share-icons-32 .ds-douban,#ds-share #ds-reset .ds-share-icons-32 .ds-msn,#ds-share #ds-reset .ds-share-icons-32 .ds-qzone,#ds-share #ds-reset .ds-share-icons-32 .ds-duoshuo,#ds-share #ds-reset .ds-share-icons-32 .ds-360,#ds-share #ds-reset .ds-share-icons-32 .ds-alipay,#ds-share #ds-reset .ds-share-icons-32 .ds-qq,#ds-share #ds-reset .ds-share-icons-32 .ds-baidu,#ds-share #ds-reset .ds-share-icons-32 .ds-taobao,#ds-share #ds-reset .ds-share-icons-32 .ds-google,#ds-share #ds-reset .ds-share-icons-32 .ds-more,#ds-share #ds-reset .ds-share-icons-32 .ds-wechat,#ds-share #ds-reset .ds-share-icons-32 .ds-diandian,#ds-share #ds-reset .ds-share-icons-32 .ds-huaban,#ds-share #ds-reset .ds-share-icons-32 .ds-duitang,#ds-share #ds-reset .ds-share-icons-32 .ds-youdao,#ds-share #ds-reset .ds-share-icons-32 .ds-pengyou,#ds-share #ds-reset .ds-share-icons-32 .ds-facebook,#ds-share #ds-reset .ds-share-icons-32 .ds-twitter,#ds-share #ds-reset .ds-share-icons-32 .ds-linkedin,#ds-share #ds-reset .ds-share-icons-32 .ds-meilishuo,#ds-share #ds-reset .ds-share-icons-32 .ds-mogujie{height:32px;width:32px;text-decoration:none;color:#999;display:block;overflow:hidden;background-image:url("../images/service-icons-color-32.png");background-repeat:no-repeat;_background-image:url("../images/service-icons-color-32.gif")}#ds-share #ds-reset .ds-share-icons-32 .ds-weibo{background-position:0 0}#ds-share #ds-reset .ds-share-icons-32 .ds-sohu{background-position:0 -32px}#ds-share #ds-reset .ds-share-icons-32 .ds-renren{background-position:0 -64px}#ds-share #ds-reset .ds-share-icons-32 .ds-netease{background-position:0 -96px}#ds-share #ds-reset .ds-share-icons-32 .ds-qqt{background-position:0 -128px}#ds-share #ds-reset .ds-share-icons-32 .ds-kaixin{background-position:0 -160px}#ds-share #ds-reset .ds-share-icons-32 .ds-douban{background-position:0 -192px}#ds-share #ds-reset .ds-share-icons-32 .ds-msn{background-position:0 -224px}#ds-share #ds-reset .ds-share-icons-32 .ds-qzone{background-position:0 -256px}#ds-share #ds-reset .ds-share-icons-32 .ds-duoshuo{background-position:0 -288px}#ds-share #ds-reset .ds-share-icons-32 .ds-360{background-position:0 -320px}#ds-share #ds-reset .ds-share-icons-32 .ds-alipay{background-position:0 -352px}#ds-share #ds-reset .ds-share-icons-32 .ds-qq{background-position:0 -384px}#ds-share #ds-reset .ds-share-icons-32 .ds-baidu{background-position:0 -416px}#ds-share #ds-reset .ds-share-icons-32 .ds-taobao{background-position:0 -448px}#ds-share #ds-reset .ds-share-icons-32 .ds-google{background-position:0 -480px}#ds-share #ds-reset .ds-share-icons-32 .ds-more{background-position:0 -512px}#ds-share #ds-reset .ds-share-icons-32 .ds-wechat{background-position:0 -544px}#ds-share #ds-reset .ds-share-icons-32 .ds-diandian{background-position:0 -576px}#ds-share #ds-reset .ds-share-icons-32 .ds-huaban{background-position:0 -608px}#ds-share #ds-reset .ds-share-icons-32 .ds-duitang{background-position:0 -640px}#ds-share #ds-reset .ds-share-icons-32 .ds-youdao{background-position:0 -672px}#ds-share #ds-reset .ds-share-icons-32 .ds-pengyou{background-position:0 -704px}#ds-share #ds-reset .ds-share-icons-32 .ds-facebook{background-position:0 -736px}#ds-share #ds-reset .ds-share-icons-32 .ds-twitter{background-position:0 -768px}#ds-share #ds-reset .ds-share-icons-32 .ds-linkedin{background-position:0 -800px}#ds-share #ds-reset .ds-share-icons-32 .ds-meilishuo{background-position:0 -832px}#ds-share #ds-reset .ds-share-icons-32 .ds-mogujie{background-position:0 -864px}#ds-share #ds-reset .ds-share-icons-32 .flat{background-image:url("../images/service-icons-color-flat-32.png");_background-image:url("../images/service-icons-color-flat-32.gif")}#ds-share #ds-reset .ds-share-icons-16 .ds-weibo,#ds-share #ds-reset .ds-share-icons-16 .ds-sohu,#ds-share #ds-reset .ds-share-icons-16 .ds-renren,#ds-share #ds-reset .ds-share-icons-16 .ds-netease,#ds-share #ds-reset .ds-share-icons-16 .ds-qqt,#ds-share #ds-reset .ds-share-icons-16 .ds-kaixin,#ds-share #ds-reset .ds-share-icons-16 .ds-douban,#ds-share #ds-reset .ds-share-icons-16 .ds-msn,#ds-share #ds-reset .ds-share-icons-16 .ds-qzone,#ds-share #ds-reset .ds-share-icons-16 .ds-duoshuo,#ds-share #ds-reset .ds-share-icons-16 .ds-360,#ds-share #ds-reset .ds-share-icons-16 .ds-alipay,#ds-share #ds-reset .ds-share-icons-16 .ds-qq,#ds-share #ds-reset .ds-share-icons-16 .ds-baidu,#ds-share #ds-reset .ds-share-icons-16 .ds-taobao,#ds-share #ds-reset .ds-share-icons-16 .ds-google,#ds-share #ds-reset .ds-share-icons-16 .ds-more,#ds-share #ds-reset .ds-share-icons-16 .ds-wechat,#ds-share #ds-reset .ds-share-icons-16 .ds-diandian,#ds-share #ds-reset .ds-share-icons-16 .ds-huaban,#ds-share #ds-reset .ds-share-icons-16 .ds-duitang,#ds-share #ds-reset .ds-share-icons-16 .ds-youdao,#ds-share #ds-reset .ds-share-icons-16 .ds-pengyou,#ds-share #ds-reset .ds-share-icons-16 .ds-facebook,#ds-share #ds-reset .ds-share-icons-16 .ds-twitter,#ds-share #ds-reset .ds-share-icons-16 .ds-linkedin,#ds-share #ds-reset .ds-share-icons-16 .ds-meilishuo,#ds-share #ds-reset .ds-share-icons-16 .ds-mogujie{line-height:16px;padding-left:20px;text-decoration:none;color:#999;display:block;overflow:hidden;background-image:url("../images/service-icons-color.png?v=2");background-repeat:no-repeat;_background-image:url("../images/service-icons-color.gif?v=2")}#ds-share #ds-reset .ds-share-icons-16 .ds-weibo{background-position:0 0}#ds-share #ds-reset .ds-share-icons-16 .ds-sohu{background-position:0 -16px}#ds-share #ds-reset .ds-share-icons-16 .ds-renren{background-position:0 -32px}#ds-share #ds-reset .ds-share-icons-16 .ds-netease{background-position:0 -48px}#ds-share #ds-reset .ds-share-icons-16 .ds-qqt{background-position:0 -64px}#ds-share #ds-reset .ds-share-icons-16 .ds-kaixin{background-position:0 -80px}#ds-share #ds-reset .ds-share-icons-16 .ds-douban{background-position:0 -96px}#ds-share #ds-reset .ds-share-icons-16 .ds-msn{background-position:0 -112px}#ds-share #ds-reset .ds-share-icons-16 .ds-qzone{background-position:0 -128px}#ds-share #ds-reset .ds-share-icons-16 .ds-duoshuo{background-position:0 -144px}#ds-share #ds-reset .ds-share-icons-16 .ds-360{background-position:0 -160px}#ds-share #ds-reset .ds-share-icons-16 .ds-alipay{background-position:0 -176px}#ds-share #ds-reset .ds-share-icons-16 .ds-qq{background-position:0 -192px}#ds-share #ds-reset .ds-share-icons-16 .ds-baidu{background-position:0 -208px}#ds-share #ds-reset .ds-share-icons-16 .ds-taobao{background-position:0 -224px}#ds-share #ds-reset .ds-share-icons-16 .ds-google{background-position:0 -240px}#ds-share #ds-reset .ds-share-icons-16 .ds-more{background-position:0 -256px}#ds-share #ds-reset .ds-share-icons-16 .ds-wechat{background-position:0 -272px}#ds-share #ds-reset .ds-share-icons-16 .ds-diandian{background-position:0 -288px}#ds-share #ds-reset .ds-share-icons-16 .ds-huaban{background-position:0 -304px}#ds-share #ds-reset .ds-share-icons-16 .ds-duitang{background-position:0 -320px}#ds-share #ds-reset .ds-share-icons-16 .ds-youdao{background-position:0 -336px}#ds-share #ds-reset .ds-share-icons-16 .ds-pengyou{background-position:0 -352px}#ds-share #ds-reset .ds-share-icons-16 .ds-facebook{background-position:0 -368px}#ds-share #ds-reset .ds-share-icons-16 .ds-twitter{background-position:0 -384px}#ds-share #ds-reset .ds-share-icons-16 .ds-linkedin{background-position:0 -400px}#ds-share #ds-reset .ds-share-icons-16 .ds-meilishuo{background-position:0 -416px}#ds-share #ds-reset .ds-share-icons-16 .ds-mogujie{background-position:0 -432px}#ds-share #ds-reset .ds-share-icons-16 .flat{background-image:url("../images/service-icons-color-flat.png");_background-image:url("../images/service-icons-color-flat.gif")}#ds-share #ds-reset .ds-share-icons{border:1px solid #ccc;background:#fff;border-radius:3px}#ds-share #ds-reset .ds-share-icons .ds-share-icons-inner{width:208px;padding:10px}#ds-share #ds-reset .ds-share-icons .ds-share-icons-inner ul{margin:0;padding:0}#ds-share #ds-reset .ds-share-icons .ds-share-icons-inner ul li{padding-left:8px;margin-left:0;width:92px;font-size:12px}#ds-share #ds-reset .ds-share-icons .ds-share-icons-inner ul li:hover{border-radius:3px;background:#eee}#ds-share #ds-reset .ds-share-icons .ds-share-icons-inner ul li:nth-child(even){margin-left:8px}#ds-share #ds-reset .ds-share-icons .ds-share-icons-footer{text-align:right;line-height:30px;font-size:12px;color:#ccc;background-color:#eee;padding-right:10px}#ds-share #ds-reset .ds-share-icons-more{top:30px;left:0;position:absolute;z-index:1000}#ds-share.ds-no-transition #ds-reset.ds-share-aside-left{left:-229px;transform:none}#ds-share.ds-no-transition #ds-reset.ds-share-aside-right{right:-229px;transform:none}#ds-share .ds-share-aside-left,#ds-share .ds-share-aside-right{width:230px;_position:absolute;_bottom:auto;_top:expression(eval(document.documentElement.scrollTop+200))}#ds-share .ds-share-aside-left{_left:expression(eval(document.documentElement.scrollLeft-230))}#ds-share .ds-share-aside-right{_right:auto;_left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0 - 230))}#ds-related-reads .ds-reads-expand{margin:1rem 0 0}#ds-related-reads .ds-reads-expand h2,#ds-related-reads .ds-reads-expand .ds-header{display:inline-block}#ds-related-reads .ds-reads-expand .ds-header{border-left:6px solid #f94a47;padding-left:9px;font-size:18px;line-height:1.5;color:#999}#ds-related-reads .ds-reads-expand section{margin-top:15px}#ds-related-reads .ds-reads-expand .ds-reads-item{display:block;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);margin-bottom:16.5px}#ds-related-reads .ds-reads-expand .ds-reads-item:last-child{margin-bottom:0}#ds-related-reads .ds-reads-expand .ds-reads-item:after{content:"";display:table;clear:both}#ds-related-reads .ds-reads-expand h2,#ds-related-reads .ds-reads-expand .ds-reads-title{font-size:18px;font-weight:bold;color:#333;line-height:1.125}#ds-related-reads .ds-reads-expand .ds-reads-item:visited h2,#ds-related-reads .ds-reads-expand .ds-reads-item:visited .ds-reads-title{color:#999}#ds-related-reads .ds-reads-expand .ds-reads-pics{margin-top:12px}#ds-related-reads .ds-reads-expand ul:after{content:"";display:table;clear:both}#ds-related-reads .ds-reads-expand li{float:left;box-sizing:border-box;width:33.3%;position:relative;overflow:hidden}#ds-related-reads .ds-reads-expand li:first-child{border-right:3px solid transparent}#ds-related-reads .ds-reads-expand li:last-child{border-left:3px solid transparent}#ds-related-reads .ds-reads-expand li:nth-child(2){border-right:1.5px solid transparent;border-left:1.5px solid transparent}#ds-related-reads .ds-reads-expand .ds-reads-pic-wrap{position:absolute;top:0;left:0;bottom:0;right:0;background-position:center center;background-size:cover;background-repeat:none}#ds-related-reads .ds-reads-expand .ds-reads-dumb{width:100%;margin-top:65.26%}#ds-related-reads .ds-reads-expand .ds-reads-info{margin-top:12px}#ds-related-reads .ds-reads-expand .ds-reads-info span{vertical-align:middle;font-size:12px;color:#999;display:inline-block;line-height:18px;height:18px}#ds-related-reads .ds-reads-expand .ds-reads-info span.ds-reads-app-special{width:7em;background:#f94a47;color:#fff;text-align:center;border-radius:3px;margin-right:3px}#ds-related-reads .ds-reads-expand .ds-reads-info span.ds-reads-from{margin-right:9px}#ds-related-reads .ds-reads-expand .ds-reads-desc{float:left;width:66.6%}#ds-related-reads .ds-reads-expand .ds-reads-desc .ds-reads-title{display:-webkit-box;display:box;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;box-orient:vertical;line-height:1.125em;-webkit-line-clamp:2}#ds-related-reads .ds-reads-expand .ds-reads-desc.ds-reads-only{float:none;width:100%}#ds-related-reads .ds-reads-expand .ds-reads-pic-right{float:left;width:33.3%;position:relative;border-left:3px solid transparent;box-sizing:border-box;overflow:hidden}#ds-related-reads .ds-reads-expand .ds-reads-pic-right .ds-reads-vid-info{position:absolute;height:16px;font-size:10px;bottom:0;right:0;padding:4px 8px 4px 30px;z-index:1;color:#fff;background:rgba(0,0,0,0.5) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAkCAYAAADPRbkKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZVJREFUWMNj+P//P8NQxgyjHhhEHmAF4lIgvgrEP//TB3wH4tNAnAjEjJR4gA2Id/8fWDCfHE/AGDX/BwcII9LhoBjbAsR+MIFbSIZMBWJuOqVhISDehGT3VgLqOYB4DpL6jzCJP0iCSnTOiM5Idl/Co04OiE+hRxlMEhnI0dkDNkR4wAmIX2FLc4PBA6JA/AEpIyPLgTJ1CVoK+TvYPADC0kDsAsQsSGI8QLwKzW0vgNh3MHoAHatD6yNkcAzqUf7B7gF/UOmC5qZpQMwOlR+0HmAG4hYg/odWUyegqRuUHmjAkmQeALERFrWDzgOGWEpHULNGGId6/sFcD4CKyDZocmIYih64RIT6UQ+MemDUA0PEA2pAPBOIU9F6akPGA1uRxFdCG3dDygPT0dx1BRorQ8YD7Fg8Aeo3xA61TJwEbdT9H6w9MmJKIWMgfojPA0OhUy8CxHtweeA22rAK1yAdVgE18jqR+gxvh+rAljcQLwRix2EztAgb3C0D4mtA/ItOjv4BxGegJQ1Fg7uj8wOjHiATAwCwU/nx3nM/GAAAAABJRU5ErkJggg==) no-repeat;background-position:8px center;background-size:16px;line-height:1.5} ================================================ FILE: src/main/webapp/style/eu/index/expert.css ================================================ .searchexpert{ width: 240px; height: 35px; background: url("../images/index/sss.png") no-repeat; position: relative; cursor: pointer;} .searchexpert input{ width: 190px; height: 35px; border: 0px transparent; padding: 0px 10px; font-size: 16px; background: transparent; outline: none; font-family: "微软雅黑", "宋体", "Times New Roman";} .categorySearch { margin-top: 20px; border: 1px solid #19840E; padding: 5px; width: 220px;} .categoryHead { border-bottom: solid 1px #89CDAC;} .categoryHead span b{ font-size: 18px;} table.categoryList tr{ height: 30px; overflow: hidden;} table.categoryList tr td{ vertical-align: middle;} table.categoryList span.categoryicon{ display: block; width: 16px; height:16px; background: url("../images/index/category_icon.png") no-repeat;} table.categoryList a { cursor: pointer;} .expertlist{ width:680px;} .expertlist ul li .pic{ float:left; display:block; overflow:hidden;} .expertlist li .time{ width:100%; display:block;color:#eb302f; font-size:14px; line-height:1.5em; } .expertlist li a{ font-size:18px; line-height:2em; color:#333; text-decoration:none;} .expertlist ul li p{ font-size:12px; color:#999;} .expertlist ul li{ width:670px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} .expertlist img { width: 150px !important; height: 150px !important; float: left; border-radius: 4px; margin: 1px 10px 5px 0;} .expertlist .expertname { font-family: "微软雅黑", "宋体", "Times New Roman"; font-size:16px;} .expertlist .expertcontent { font-size: 13px; color: #888;} .expertlist table{} .expertlist table tr{ height: 32px; line-height: 32px;} .expertlist table a{ line-height: 32px;} .articletitle{ width: 100%; border-bottom: dashed #D5D5D5 1px; padding 10px; display: block; text-align: center;} .articletitle .title{ font-size: 28px; line-height: 1.5em; color: #333; font-weight: bold;} .articletitle .time{ font-size: 18px; line-height: 2em; color: #333;} .news_model ul li{ width: 256px; float: left; padding: 4px 0; border-bottom: dashed #D5D5D5 1px; } .news_model ul li a { font-size: 12px; color: #333; text-decoration: none; float: left;} .news_model ul li .time { float: right; width: 50px; } ================================================ FILE: src/main/webapp/style/eu/index/information.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .searchdate{ position: relative; margin-bottom: 10px;} .searchdate input{ width: 150px; outline: none;} .informationlist{ width:630px;} .informationlist li .time{ float: right; width: 150px; font-size: 14px; line-height: 2em; color: #eb302f; margin-top: 4px; } .informationlist li a{ font-size: 16px;line-height: 2em;color: #333;text-decoration: none;float: left;} .informationlist ul li{ width:620px;float:left; padding: 10px 0; border-bottom: dashed #D5D5D5 1px;} ================================================ FILE: src/main/webapp/style/eu/index/knowledgedata.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .knowledgecontent{ width: 960px; height: auto; padding: 20px 0; margin: 0 auto; overflow: hidden;} .knowledgecontent .widget{ width: 960px;} .selectknowledge{ width: 960px; height: 41px; background: url("../images/index/basis.png") no-repeat; position:relative} .selectknowledge ul{ width: 960px; height: 41px; display: block; list-style: none; padding: 0px;} .selectknowledge ul li{ float: left; width: 145px; height: 41px; display: block; position: relative; margin-top: -5px; cursor: pointer;} .selectknowledge .itemlabel{ width: 145px; height: 41px; z-index: -999; background: url("../images/index/label_s.png") no-repeat; position: relative;} .selectknowledge .selectedlabel1{ background: url("../images/index/label1.png") no-repeat; z-index: 100;} .selectknowledge .selectedlabel2{ background: url("../images/index/label2.png") no-repeat; z-index: 100;} .selectknowledge .selectedlabel3{ background: url("../images/index/label3.png") no-repeat; z-index: 100;} .selectknowledge .selectedlabel4{ background: url("../images/index/label4.png") no-repeat; z-index: 100;} .selectknowledge .searchknowledge{ width: 240px; height: 35px; background: url("../images/index/sss.png") no-repeat; position: absolute; top: -3px; right: 0px; cursor: pointer;} .selectknowledge .searchknowledge input{ width: 210px; height: 35px; border: 0px transparent; padding: 3px 10px; font-size: 16px; background: transparent; outline: none; font-family: "微软雅黑", "宋体", "Times New Roman";} .knowledgelist ul li{ float: left; width:100%; padding:10px 0; border-bottom: dashed #D5D5D5 1px;} .knowledge_title{ color: #259; font-size:14px; display:block; width:100%;} .knowledge_expandable{ margin-top:5px; font-size:13px; line-height: 1.5;color:#999;cursor: pointer;} .knowledge_expandable img{ width:98px !important; height:73px !important; float:left; border-radius: 4px;margin: 1px 10px 5px 0; position: inherit !important;} .knowledge_expandable .toggle-expand{display: inline-block; padding: 0 3px; color: #0c5897; border-radius: 2px; font-size: .9em;} .knowledge_collapse{ color: #fff; float:right; z-index: 1; margin: 0; background-color: #81baeb; padding: 1px 6px; border-radius: 3px; cursor: pointer;opacity: 0.9;border: 0;} .knowledge_collapse i{display: inline-block;line-height: 10px;vertical-align: 0;background-image: url(../images/littleicon2.png) !important;background-repeat: no-repeat;margin-right: 5px; background-position: -70px -38px; width: 8px; height: 9px;} .knowledge_content{color: #333; margin: 10px 0px; line-height: 20px;} .knowledge_actions{ margin-top:3px; display:block;} .knowledge_actions a{ margin: 0 5px;} .knowledge_actions .highlight{ color: red; padding: 0 2px;} .knowledge_actions a{text-shadow: 0 1px 0 #fff;display: inline;text-decoration: none;color: #777;} .knowledgecategory { position:relative; width:950px; text-align:center;overflow: hidden; border: 2px dashed #89CDAC; margin: 0 auto;} .knowledgecategory ul { float:left; left:50%; padding: 8px 0px; position: relative; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} .knowledgecategory li { float: left; position:relative; right:50%; text-align: center; list-style-type: none; position: relative; padding: 0px 5px; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} .knowledgecategory li a{ border: 1px solid #ccc; padding: 5px 10px; text-decoration: none; color: #666; font-family: arial, verdana, tahoma; font-size: 11px; display: inline-block; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} .knowledgecategory li a:hover{ background: #c8e4f8; color: #000; border: 1px solid #94a0b4;} .knowledgecategory li a.selected{ background: #c8e4f8; color: #000; border: 1px solid #94a0b4;} .knowledgecategory div.separate { clear: both; border: 1px dashed #89CDAC;} .knowledgecategory div.categoryname { position: absolute; margin-top: 10px; left: 10px;color: #666;font-family: '微软雅黑', '宋体', 'Times New Roman';} .tree ul { padding-top: 20px; position: relative; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} .tree li { float: left; text-align: center; list-style-type: none; position: relative; padding: 20px 5px 0 5px; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} /*We will use ::before and ::after to draw the connectors*/ .tree li::before, .tree li::after{ content: ''; position: absolute; top: 0; right: 50%; border-top: 1px solid #ccc; width:50%; height: 20px;} .tree li::after{ right: auto; left: 50%; border-left: 1px solid #ccc;} /*We need to remove left-right connectors from elements without any siblings*/ .tree li:only-child::after, .tree li:only-child::before { display: none;} /*Remove space from the top of single children*/ .tree li:only-child{ padding-top: 0;} /*Remove left connector from first child and right connector from last child*/ .tree li:first-child::before, .tree li:last-child::after{ border: 0 none;} /*Adding back the vertical connector to the last nodes*/ .tree li:last-child::before{ border-right: 1px solid #ccc; border-radius: 0 5px 0 0; -webkit-border-radius: 0 5px 0 0; -moz-border-radius: 0 5px 0 0;} .tree li:first-child::after{ border-radius: 5px 0 0 0; -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0;} /*Time to add downward connectors from parents*/ .tree ul ul::before{ content: ''; position: absolute; top: 0; left: 50%; border-left: 1px solid #ccc; width: 0; height: 20px;} .tree li a{ border: 1px solid #ccc; padding: 5px 10px; text-decoration: none; color: #666; font-family: arial, verdana, tahoma; font-size: 11px; display: inline-block; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; transition: all 0.5s; -webkit-transition: all 0.5s; -moz-transition: all 0.5s;} /*Time for some hover effects*/ /*We will apply the hover effect the the lineage of the element also*/ .tree li a:hover, .tree li a:hover+ul li a { background: #c8e4f8; color: #000; border: 1px solid #94a0b4;} .tree li a.selectedchild { background: #c8e4f8; color: #000; border: 1px solid #94a0b4;} /*Connector styles on hover*/ .tree li a:hover+ul li::after, .tree li a:hover+ul li::before, .tree li a:hover+ul::before, .tree li a:hover+ul ul::before{ border-color: #94a0b4;} ================================================ FILE: src/main/webapp/style/eu/index/login.css ================================================ .login{ margin: 0px; padding: 100px 0 0 0; background: #F8FFFD;} .loginform{ margin: 0px auto; width:326px; height: 292px; background:url("../images/index/Group.png") no-repeat;} .loginform label{ font-family: "΢ź", "", "Times New Roman"; font-size: 13px; font-weight: 600;} .loginform input{ margin-top: 5px; width: 250px; height: auto; font-size: 13px; padding: 2px 5px; vertical-align: middle; line-height: 20px;} .username{ display: block; margin: 0px auto; width: 260px; padding-top: 85px;} .password{ display: block; margin: 0px auto; width: 260px; margin-top: 15px;} .button{ display: block; margin-top: 20px;} .forgetpassword{ color: #7c7c7c; text-decoration: none; float: right; font-size: 13px; font-weight: 400;} .Login_Button{width: 78px; height: 43px; background:url("../images/index/login_b.png"); cursor: pointer; margin-left: 20px; float: left; } .Login_Button:hover{background:url("../images/index/login_bs.png");} .Register_Button{width: 173px; height: 43px; background:url("../images/index/register_e.png"); cursor: pointer; margin-left: 25px; float: left;} .Register_Button:hover{background:url("../images/index/register_es.png");} ================================================ FILE: src/main/webapp/style/eu/index/performance.css ================================================ .searchbox{ position: relative;} .searchbox input{ padding: 7px 50px 7px 10px; width: 100%; color: #49525c; font-size: 14px; line-height: 17px; background-color: #e1eaf2; border: 1px solid #045bb2; border-radius: 4px; box-shadow: inset 0 1px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1); outline: 0; box-sizing: border-box;} .searchbox button{ position: absolute; top: 0; right: 0; width: 40px; height: 100%; background: #0e78e7; background: -webkit-linear-gradient(top,#0e7bef,#0d73da); background: linear-gradient(to bottom,#0e7bef,#0d73da); border: 1px solid #045bb2; border-top-right-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,.05),inset 0 1px 1px rgba(255,255,255,.15); box-sizing: border-box; outline: 0; cursor: pointer;} .searchbox button i{ background: transparent url("../images/littleicon2.png") no-repeat; } .searchbox button .search_icon{ background-position: -82px 0; width: 15px; height: 15px; position:absolute; top: 8px; left: 10px;} .performancelist{ width:630px; margin: 10px 0px; border-bottom: dashed 1px #CCCCCC; } .performancelist ul li .pic{ width: 120px; height: 155px; float: left; display: block; overflow: hidden;} .performancelist ul li .pic img{ width: 120px; height: 155px; border: none;} .performancelist ul li .performance_title{ float: left;display: block; width: 164px; margin-left: 10px;} .performancelist li { float:left; display:block; margin-left:10px; overflow:hidden; height:16px;width: 320px; margin-right: 10px;} .performancelist li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .performancelist ul li a b{ color:#eb302f;text-transform:uppercase;} .performancelist .loop_big_caj_nav{ width: 380px; margin: 10px 0px;} .performancelist .widge_hd p{ margin: 0px;} .performancelist .performance_title{ margin-left: 150px; font-size: 16px; line-height: 25px;} .performancelist .performance_days{ margin-left: 5px;line-height: 25px;font-size: 16px;color: red;} .performancelist ul li .del_btn{ width: 27px; display: block; position: absolute; cursor: pointer; padding: 3px 0; text-align: center; border-radius: 4px; line-height: 25px; font-size: 18px; filter:alpha(opacity=80); -moz-opacity:0.8; -khtml-opacity: 0.8; opacity: 0.8;} .performancelist ul li i.del_icon { width: 27px;height: 27px; background-image: url(../images/littleicon.png); background-repeat: no-repeat; background-position: -12px -168px; position: absolute; left: 0px;} .performancelist2{ width: 660px; height: auto; padding: 10px; } .performancelist2 ul{ padding: 10px 0 0 0!important; float: left;} .performancelist2 ul li{ width: 200px; height: 190px; margin: 7px 10px; overflow: hidden; float: left; position: relative;} .performancelist2 ul li img{ width: 100%; height: 100%;} .performancelist2 ul li .del_btn{ width: 27px; display: block; position: absolute; cursor: pointer; padding: 3px 0; text-align: center; border-radius: 4px; line-height: 25px; font-size: 18px; filter:alpha(opacity=80); -moz-opacity:0.8; -khtml-opacity: 0.8; opacity: 0.8;} .performancelist2 ul li i.del_icon { width: 27px;height: 27px; background-image: url(../images/littleicon.png); background-repeat: no-repeat; background-position: -12px -168px; position: absolute; left: 0px;} .performancelist2 .dateselect a.date { font-size: 12px; margin: 2px; padding: 2px 5px; border: 1px solid #ccc; cursor: pointer; text-decoration: none; color: #777; border-radius: 3px; float: left;} .performancelist2 .dateselect a.emptydate { color: red !important; border: 1px solid red !important;} .performancelist2 .dateselect a:hover{ background-color: #89CDAC;} .performancelist2 .dateselect a.selected{ background-color: #89CDAC;} .performancedetail ul li{ width: 100%; margin: 3px 0px;} .performancedetail ul li span{ display: block;} ================================================ FILE: src/main/webapp/style/eu/index/personalquestionlist.css ================================================ .personaltabs { width: 100%; outline: 0;} .personaltabs .personal_message_head{ margin: 0 auto; padding: 0; width: 350px; border: 1px solid #ABE9F1; border-radius: 10px; box-shadow: 0 1px 4px rgba(0,0,0,.3);} .personal_message_container{ outline: 0;} .personal_message_item { float: left; width: 50%; text-align: center; vertical-align: middle; position: relative; cursor: pointer; background: 0 0; border: 0; outline: 0;} button.personal_message_item{ padding: 0; line-height: 1.7; border-radius: 10px;} .personal_message_item .icon { position: relative; width: 22px; line-height: 40px; margin: 9px; opacity: .6; font-size: 14pt; font-weight: bold; color: #11798C;} .personal_message_item.current{ background-color: #40ADAD; box-shadow: 0 1px 3px rgba(0,0,0,.3);} .personal_message_item.current span{ color: white;} .personal_message_border{ height: 3px; width: 100%; position: relative; background: linear-gradient(to right,rgba(250,250,250,.1) 0,rgba(240,240,240,.8) 1%,#ddd 4%,#ddd 96%,rgba(240,240,240,.8) 99%,rgba(250,250,250,.1) 100%); box-shadow: 0 1px 1px rgba(0,0,0,.05);} .clearfix:before, .clearfix:after { display: table; content: "";} .clearfix:after { clear: both;} .personal_message_frame{ width: 100%; position: relative;} ================================================ FILE: src/main/webapp/style/eu/index/play.css ================================================ @charset "utf-8"; .x-player { width: 100%; height: 100%; position: relative; background: #000000; -webkit-user-select: none; overflow: hidden; } .x-player p, .x-player li, .x-player ul, .x-player h1,.x-player button { margin: 0; padding: 0; list-style: none; } .x-mask { display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; opacity: 0.7; background: #000; z-index: 10; } .x-trigger { width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index:50; } .x-fs-console { zoom:1.5; } .x-fs-console .x-control-btn .x-playing{ background:url(./img/ico_playbtn@2x.png) no-repeat center center;; background-size:contain; } .x-fs-console .x-control-btn .x-pause{ background:url(./img/ico_pausebtn@2x.png) no-repeat center center;; background-size:16px 16px; } .x-fs-console .x-control-btn .x-zoomout{ background:url(./img/ico_zoomout@2x.png) no-repeat center center;; background-size:16px 16px; } .x-fs-console .x-settings .x-panel li{ font-size:14px; } .x-console { display:none; position: absolute; bottom: 0; left: 0; width: 100%; } .x-showmore a { position: absolute; top: 0px; right: 15px; color: #bbbbbb; text-decoration: none; font-size: 14px; z-index: 20; line-height: 35px; } .x-video-poster,.x-video-logo{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; } .x-video-poster img { width: 100%; height: 100%; } .x-video-logo{ display: none; } .x-icon-exclusive{ position:absolute; width:15%; height:7.5%; max-height: 54px; max-width: 196px; right: 3%; top: 4%; background: url(./img/icon-exclusive-min.png) no-repeat center center; background-size: contain; } .x-video-player { width: 100%; height: 100%; position: relative; padding: 0; margin: 0; } .x-video-button { width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 85; } .x-video-button .x-video-play-ico { width: 86px; height: 86px; position: absolute; left: 50%; top: 50%; margin-left: -43px; margin-top: -43px; background: url(./img/xplayerv4.png) no-repeat 0 0; } .x-player .x-btn { display: inline-block; padding: 2px 8px; margin-bottom: 0; font-size: 12px; line-height: 20px; text-align: center; vertical-align: middle; color: #333333; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); background-repeat: repeat-x; border-color: #e6e6e6 #e6e6e6 #bfbfbf; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border: 1px solid #bbbbbb; border-bottom-color: #a2a2a2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); } .x-player .x-btn-pay { color: #ffffff; background-color: #ff822e; background-image: -moz-linear-gradient(top, #ff944d, #ff6600); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff944d), to(#ff6600)); background-image: -webkit-linear-gradient(top, #ff944d, #ff6600); background-image: -o-linear-gradient(top, #ff944d, #ff6600); background-image: linear-gradient(to bottom, #ff944d, #ff6600); background-repeat: repeat-x; border-color: #ff6600 #ff6600 #b34700; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .x-player .x-btn-major { color: #ffffff; background-color: #2c8ce0; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#47a4f4), color-stop(5%, #2e8ee2), to(#2683d8)); background-image: -webkit-linear-gradient(#47a4f4, #2e8ee2 5%, #2683d8); background-image: -moz-linear-gradient(top, #47a4f4, #2e8ee2 5%, #2683d8); background-image: -o-linear-gradient(#47a4f4, #2e8ee2 5%, #2683d8); background-image: linear-gradient(#47a4f4, #2e8ee2 5%, #2683d8); background-repeat: repeat-x; border-color: #ff6600 #ff6600 #b34700; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .x-video-info { display: none; width: 100%; height: 35px; position: absolute; left: 0; top: 0; line-height: 35px; z-index: 20; } .x-video-info .x-title { position: relative; font-size: 14px; color: #bbbbbb; padding: 0 15px; z-index: 20; line-height: 35px; } .x-feedback { display: none; width: 100%; height: 35px; position: absolute; left: 0; top: 0; line-height: 35px; z-index: 60; } .x-message { width: auto; height: 35px; padding: 0 15px; position: relative; z-index: 20; color: #bbbbbb; } .x-message-btn { position: absolute; right: 15px; top: 0px; } .x-message-input { position: absolute; right: 65px; top: 3px; height: 25px; padding: 0 3px; width: 150px; } .x-dashboard { width: 100%; height: 60px; position: absolute; bottom: 0; left: 0; z-index: 80; } .x-progress { width: 100%; height: 20px; position: relative; } .x-progress-track { width: 100%; height: 10px; position: absolute; left: 0; bottom: 0; background: #555555; } .x-progress-load { width: 80%; height: 10px; position: absolute; left: 0; bottom: 0; background: #909090; } .x-progress-play { width: 30%; height: 10px; position: absolute; left: 0; bottom: 0; background: #eb3c10; } .x-controls { width: 100%; height: 40px; display: -moz-box; display: -webkit-box; display: box; -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-orient: horizontal; background: #222222; } .x-control-btn { display: block; width: 100%; height: 100%; background: none; border: none; } .x-control-btn em { display: none; } .x-control-btn b { width: 100%; height: 100%; display: block; background: url(./img/xplayerv4.png) no-repeat -85px 0; } .x-control-btn .x-playing { background-position: -85px 0; } .x-control-btn .x-pause { background-position: -260px 12px; } .x-control-btn .x-zoomin { background-position: -142px 11px; } .x-control-btn .x-zoomout { background-position: -206px 11px; } .x-play-control { width: 70px; height: 40px; } .x-time-display { width: 100px; line-height: 40px; color: #555555; font-size: 14px; text-align: center; font-family: Arial, sans-serif } .x-settings { -moz-box-flex: 1; -webkit-box-flex: 1; box-flex: 1; display: -moz-box; display: -webkit-box; display: box; -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-orient: horizontal; position: relative; padding-right:50px; -moz-box-pack:end; -webkit-box-pack:end; -o-box-pack:end; box-pack:end; } .x-fullscreen { width: 50px; height: 40px; position: absolute; right: 0; top: 0; } .x-quality,.x-localization,.x-playshow,.x-playspeed { width: 60px; height: 30px; text-align: center; text-align: center; padding-top:10px; } .x-playspeed{ display:none; /* margin-right:10px;*/ } .x-quality .x-control-btn,.x-localization .x-control-btn,.x-playshow .x-control-btn,.x-playspeed .x-control-btn{ display: inline-block; width: 35px; height: 20px; padding:0 3px; background: none; background: #626262; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; color: #e5e5e5; font-size: 12px; background: -webkit-gradient(linear, left top, left bottom, from(#7f7f7f), color-stop(0.5, #757575), to(#565656)); } .x-playspeed .x-control-btn{/*width:56px;*/padding:0;} .x-fs-console .x-quality .x-control-btn,.x-fs-console .x-localization .x-control-btn,.x-fs-console .x-playshow .x-control-btn ,.x-fs-console .x-playspeed .x-control-btn{ font-size:14px; } .x-progress-seek { width: 18px; height: 24px; display: -moz-box; display: -webkit-box; display: box; -webkit-box-align: center; -moz-box-align: center; -webkit-box-pack: center; -moz-box-pack: center; position: absolute; left: 0; top: -8px; line-height: 25px; } .x-seek-handle { width: 16px; height: 16px; -webkit-border-radius: 22px; -moz-border-radius: 22px; border-radius: 22px; border: 3px solid #eb3c10; background: #ececec; } .x-settings .x-panel { display:none; width: 60px; height: auto; position: absolute; bottom: 40px; } .x-settings .x-panel ul { width: 100%; height: 100%; position: relative; top: -2px; z-index: 20; } .x-settings .x-panel li { color: #bbbbbb; font-size: 12px; height: 24px; list-style: none; margin-bottom: 5px; line-height: 24px; } .x-settings .x-panel li:last-child { margin: 0; } .x-settings .x-panel .selected { background: #2ea5e4; color: #222222; } .x-settings .x-mask { top: -4px; left: -2px; padding: 2px; } .x-settings .pressed .x-control-btn { background: #06a7e1; color: #ffffff; } .x-progress-mini { display: none; width: 100%; height: 3px; position: absolute; left: 0; bottom: 0; } .x-progress-track-mini { width: 100%; height: 3px; position: absolute; left: 0; bottom: 0; background: #555555; } .x-progress-load-mini { width: 80%; height: 3px; position: absolute; left: 0; bottom: 0; background: #909090; } .x-progress-play-mini { width: 30%; height: 3px; position: absolute; left: 0; bottom: 0; background: #eb3c10; } .x-prompt { display: none; width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 40; } .x-prompt-mode { width: 80px; height: 45px; position: absolute; bottom: 44%; left: 50%; margin-left: -50px; z-index: 20; color: #bbbbbb; line-height: 22px; padding: 5px 10px; text-align: center; } .x-prompt-forward { position: relative; text-align: left; background: url(./img/xplayerv4.png) no-repeat 45px -142px; font-size: 18px; z-index: 20; } .x-prompt-time { position: relative; z-index: 20; } .x-prompt-current { line-height: 45px; font-size: 18px; } .x-prompt-back { position: relative; text-align: right; background: url(./img/xplayerv4.png) no-repeat -91px -142px; font-size: 18px; z-index: 20; } .x-prompt-status { width: 75px; height: 40px; position: absolute; left: 50%; margin-left: -38px; bottom: 80px; line-height: 40px; text-align: center; } .x-prompt-txt { position: relative; z-index: 20; color: #bbbbbb; font-size: 18px; line-height: 40px; } .x-tips { display: none; width: 100%; height: 35px; position: absolute; left: 0; bottom: 50px; z-index: 70; } .x-tips-txt { line-height: 35px; padding: 0 15px; color: #bbbbbb; position: relative; z-index: 20; font-size: 14px; } .x-tips-txt a { margin-left: 5px; color: #06a7e1; } .x-tips-close { width: 35px; height: 35px; position: absolute; right: 0; top: 0; z-index: 20; } .x-tips-close a { display: block; width: 100%; height: 100%; background: url(./img/xplayerv4.png) no-repeat -23px -86px; } .x-tips-close em { display: none; } .x-pay { display: none; width: 100%; height: 35px; position: absolute; left: 0; top: 0px; z-index:90; } .x-pay-txt { width: auto; height: 35px; overflow: hidden; position: absolute; left: 0; top: 0; line-height: 35px; padding-right: 200px; font-size: 18px; color: #bbbbbb; z-index: 20; } .x-pay-txt h1 { font-size: 14px; padding: 0 15px; line-height:35px; } .x-pay-txt .x-vip,.x-pay-panel .x-vip { font-style: normal; color: #ff6600; } .x-pay-tips { font-size: 14px; padding: 0 15px; } .x-pay-btn { width: 180px; height: 35px; line-height: 35px; position: absolute; right: 0; top: 0; z-index: 20; } .x-pay-btn .x-btn { margin-right: 10px; } .x-pay-trial { font-size: 12px; color: #bbbbbb; margin: 0 10px; } .x-showlist { display:none; width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 60; -webkit-backface-visibility:hidden; -moz-backface-visibility:hidden; -ms-backface-visibility:hidden; -o-backface-visibility:hidden; backface-visibility:hidden } .x-showlist-inner { width: 500px; height: 360px; position: absolute; left: 50%; top: 50%; margin-left: -250px; margin-top: -180px; z-index: 20; -webkit-backface-visibility:hidden; -moz-backface-visibility:hidden; -ms-backface-visibility:hidden; -o-backface-visibility:hidden; backface-visibility:hidden } .x-showlist-hd { position: relative; z-index: 20; } .x-showlist-hd label { position: absolute; top: 5px; left: 5px; font-size: 14px; color: #bbbbbb; } .x-showlist-close { width: 32px; height: 32px; position: absolute; top: 0; right: 0; background: url(./img/xplayerv4.png) no-repeat 8px -88px; z-index: 20; } .x-showlist-bd { width: 410px; height: auto; position: absolute; left: 50%; top: 50%; margin-left: -200px; margin-top: -130px; overflow: hidden; z-index: 20; } .x-showlist-bullet{ width: 410px; height: 265px; overflow-y: scroll; overflow-x: hidden; } .x-showlist-bd a{ text-decoration:none; color:white; } .x-showlist-bullet li { width: 100%; height: 40px; background: #000000; margin-bottom: 1px; line-height: 40px; color: #bbbbbb; text-indent:10px; overflow:hidden; } .x-showlist-bullet .selected { background: #06a7e1; color: #222222; } .x-showlist-grid { width: 420px; position: relative; z-index: 20; } .x-showlist-grid li { width: 40px; height: 40px; margin: 0 1px 1px 0; background: #000000; float: left; color: #ffffff; text-align: center; line-height: 40px; font-size: 14px; } .x-showlist-grid .disabled { color: #555555; } .x-showlist-grid .visited { color: #911891; } .x-showlist-ft { width: 100%; height: 65px; line-height: 65px; position: absolute; left: 0; bottom: 0; z-index: 20; } .x-showlist-pages { width: 100%; height: 100%; text-align: center; } .x-showlist-pages ul,.x-showlist-pages li,.x-showlist-pages span { display: inline-block; } .x-showlist-pages li { width: 12px; height: 12px; background: url(./img/xplayerv4.png) no-repeat -288px -96px; margin: 0 5px; } .x-showlist-pages li em { display: none; } .x-showlist-pages .current { background-position: -256px -96px } .x-showlist-pages .x-showlist-pre { width: 32px; height: 32px; vertical-align: middle; background: url(./img/xplayerv4.png) no-repeat -192px -94px; } .x-showlist-pages .x-showlist-next { width: 32px; height: 32px; vertical-align: middle; background: url(./img/xplayerv4.png) no-repeat -208px -94px; } .x-showlist-pages .x-disabled-pre { background-position: -128px -94px; } .x-showlist-pages .x-disabled-next { background-position: -146px -94px; } .x-advert { display: none; width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 80; font-size: 12px; color: #bbbbbb; -webkit-user-select: none; } .x-advert-skip { width: 70px; height: 35px; position: relative; text-align: center; float: right; margin-left: 3px; } .x-advert-countdown { width: 80px; height: 35px; position: relative; text-align: center; float: right; } .x-advert-txt { position: relative; z-index: 20; line-height: 35px; } .x-advert-sec { color: #d83e26; } .x-advert-detail { width: 120px; height: 35px; line-height: 50px; position: absolute; right: 0; bottom: 50px; text-align: center; } .x-advert-detail .x-advert-txt { font-size: 14px; } .x-ico-detail { display: inline-block; width: 15px; height: 15px; background: url(./img/xplayerv4.png) no-repeat -96px -96px; position: relative; top: 3px; left: 5px; } .x-video-loading { display: none; width: 64px; height: 64px; position: absolute; top: 50%; left: 50%; z-index: 60; margin-left: -32px; margin-top: -32px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGODdGMTE3NDA3MjA2ODExODIyQUJFM0Q2NThGMUE2NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5QUJGREFFRTMxNjcxMUUyQTdGQ0MzMTAyNDYwOEM0MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFNjMxMEJBODMxNjUxMUUyQTdGQ0MzMTAyNDYwOEM0MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFCRjExNDMyNzIwNjgxMTgwODNEQjJGMEFDNDg0NjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Rjg3RjExNzQwNzIwNjgxMTgyMkFCRTNENjU4RjFBNjUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6kvxsdAAANkElEQVR42uxbe2xUVRq/5955tJ2ZtjB9QWkpUp6WKIiLLrS7UgK0QhYTuxoNuOIqZotKuiYmm9XgixgSjTH8o3+sr+h2E0LcUJVXwIBQHj4QLCiU0u2WFkrfdDrtzNy5+5273xlPT++9c6dMu7txJ/kyt9N7z9zv9/2+57lDNE2Tfs4vWfqZvxzsgBAyHusT7l0USr0oHqt43oTRkTHfMY5Ky5wowjs7J4THwwhCdCJBSCYAvKVlXFfBdycK/5mCCg9wawxzymv/SwAQwdJUWTeIC9/5YwYEPTcMkoqKR1CiCIyRP2r/bQAQweJMyRSQNFROf1+/fv3Me++99/bi4uJbsrOz8zIzM/2pqakRp9M5ALGnCq+nEvb5fJqqqiQUCkmRSMSIZVrSg8EYUiHhlPaCZIEUgMwFWQxyz6ZNm/5QX1//9/7+/nZYfxgkBBIGieBxEGQQzl0IUgiSQddj90MFQJPy8vKIw+EwCqLJ0TtBAAinfAre9BSQWSB3wI2Wv/7661tbW1vPUuVQySACIIKgglDKLwGZCTJZBICXsrIyAuxIGghjAYDRnfqxB8SPllsAUvrMM8883dbWdgbWugEyABLgQBiyAGAZyGxcz20GAJO1a9dKXq/3phmRKABMeRcqnw1yC7U6ULTy2LFju6LRaC+s0z8GAMpA5uCacQGg0tXVJZWUlNwUCIkAwCtP/T0HKb/kwQcf3Hjt2jVK9x4QCkCfBQhmANwFUmyXAbxUV1eTlJQUmastyHgBwGifg3S9+7nnnqsJBoMtcG0XSLcBCGYsEAFYBDIDZJJVDDCTTz/9lEBWkRNlgl0AWMBjtKeWv3v79u1/DofDbXDddZBOBMGKBaIbRFg2wMyRD5JOgU4UACpnz54l4IoJMcEOAAQLmxSkJ/X5JTU1NVtA+Va4pkMAwA4LGAAh/PwKrDkd0yitGZSxAABCGhoaiN/vtw0Cu9YRh/oKFjeUAZOqqqrmvfLKK09DunPYKEgId45+DPGipbGx8cempqaW5ubmSxDMGvEcFQoiTVEUGtykuro6qaioKKGYNn/+fLJz505tzZo1JBAIsO8mce/ThAGM+l7M8yVQwVVcvXr1FJxLqU+Lm6sg10yYEGMB3My1PXv2/K2ysvL3sM4qkF+B/AJjSRbm/zSMMxRwWvjIWVlZZOvWrZZWF4512bZtm359PCZYuQBP/Sz0+9KjR4/+Fc6j1L+CIPBAiCD0gJt0guK1hYWF98P1v8YKsQSLHgqqD5VO4RokWSix5YKCAgJp1pbyTFavXs13ooYgxAPAiUGJlrd3QLqphjzfDOf9E4UHYhQIHR0d5x966KHNcO1yej1auwCzyCS0uENomYlwwzEg3G63TFOeoLCh8lQGBwdJbm6uYtB+2wJARqvQqD+XlrdXrlw5Cuf8A6XFCgTw8aMzZsygDc4vQeaBTMMg6sN1XQY3RoT7GAUCxAf5gQceIGZKi/Lqq6/ybfkoFpgBwHzfhxZb/Nprr/0J/n8ZpdkKhEuXLh2FSLwOfbwYLe7DQOpgN2IV0eN0ncrDDz9sFwR55syZDjMWWAHAfJ+Wp/e0tLR8Af+/BNLEgTAKCKD96fz8/PtR+VtwDQ+6kxxPcQsQeCYo9AWBTo6nPBWoVxQuuI4AwQwABW96Ksjtjz322Cb430WQRgRBBEIHAXr3ZiiLq5H2xah8ql2rJ8AEnQXp6ekOYJup4rxMnTqVH8KMAkA2+AIHUjYN6LaEG15GheOY7Nu371Btbe15OO4B6QcJ4sSHlrv6K0lzCv2D/v5+acOGDbKNZogsXbpUsjpPNhiTs5FW6uLFixfgl2qc8vxxFPJ84Mknn6yD4z6QG6h8iCmfrOmtMC/Ujh8/Ln/55Zfx5hbS5s2bNat6QDbI/xQAFyA8w+fzeQXLj2LAwYMH61tbW7tE5cd7mKmqqvTiiy8qJlkj9iorK5NycnJM6wEjAHQXKC8vLzaiO+8OtKPbsWPHMZzu8sprWhK3nAQWxJhw8uRJMjw8TCwYoP/v1ltvlQxqDEMAWAxwzp49Oz+O9dX29vYO8H/a0AzhdDecLOpbgMDHAvLhhx9axQL977lz50p2GcBG2w5oL/1mQY/J+fPnmzjl2Vh7Ql+HDh2STXaeYkWWAAAxG4sT3g0yMjJ8nEKjOjt6cPHixXa0epjt7GjjuNtKl+a28PT7hTqFCAFStDJZuHChKQMcBozQmeDxeJwWOzUEAehCy/9HtrXoq7OzUxEMNSoeFBcXM3ZHrRgwAlmXy+WMQ2nS29sbFFLjRADAW5luoFgNP/TPp0yZIpl1hlYDkQn35zHuSslxtvlpdygZBEfN7PkA3ZIhujcVJwhCSeo2Sy/jrHwsaHu9XsWg9+cBIm1tbbbqAIlPdwMDA0Gr8pf6PXRbmQbDjIligJ6xoAGTBSaIQrq7uxU7ADAfpgEtAv7dZ9ED6EFv1qxZWdz2tw4CGacnLXSt/700n66VOXPmGD1/wDNCgcZJsVMKa5xyEaBNV5xKMDp//vyp2D67uY5roqyvb86uWrWKpW4eBF7kH374QTHbajcCgKa18IULF66a0J+lPHXatGnpUGvnciDoTBgPFuCSMqe8g7a6K1asIMKDFyIL5IaGBsVsXREAFQEI7d+/vykeA+CmotXV1QtwhpDKjbtIMkHAtfidab1jve++++iEXjFwgREs+OqrrxSDXuKnWRz3JS4cYVHfzu/r6/sjRPpUsQnhj2/cuDEMhcZfOjo6WuDva9gW0/I4kqyqEO+Nn1V40tLSPOfOnYtOnz5dLMJGKAnlOqF7BnAYwPtirbppFghjbR+sr6+/ECcQqtAyK2+99dZd+KyAj2dCMljAWZ89kKE/efLEE0+4QHmZe7qEfwYpdgzNkttgqEPixQAKwCBcfCZOKtQFqDi3oqKiCEfe6XiTsXgwFiC462RBeQ80N76XXnpJ4TKQSxr5MBZzE8fu3bsdBqW6ZlUHqEiT4EcffXS5qanperxYAGWz9s4779yTk5OThzs96RgXYtPgREDgzlW4zRO6l+AD6md+8MEHTso8afTTZyOU/+yzz1zff/8936uM6leM0laMAXTK8+67756IBwAVyAhpBw4cWAk3locxJBNBSLHLBhOrp+AWXYbb7Z5UW1ubduedd8qCtQ3lzTffdEg/PYGmGpX3fBDkQWHB0A9RNr+xsfF34G+T48wH9ffvvvvu+sqVKw9CULyKQ1J+VBYWLKEJ5e2INMeGsxQAADYDLJ+ybt26sGBRoxhF5wRk+fLl1JC9XACMsO80C4J8OqQXByKRSO8LL7xwiI6/LL4wJrfddtukU6dOrYIvp9thlA25uDOUia7hRWakST89TsceqfPg/9MxntDrskpKSnKPHDmSCcqbWd7JuYFTVVXHs88+q3BTKtNhjWzRCYbQcv2A/EWoC360QH0EGIWFhSmff/55KbjPMr/fX4Cbobm4U+RH5TJRMlDhTPw8C7flcsDqU15++eVpJ06cyABg+a0up0X0d7zxxhvub775JsilvYhZq27kAuIOsV4XZGdnT/v6669/W1BQkGGguGmWgJ5ieNeuXW07duxo+vbbb3vwpnirqMJA1gX1vffRRx9NB5EhsDL/VfkqVIjssc8BLFJeXj4YCAS6uT2KkBgAY3qbACBxvpiKVspevXr17J07d/7G4/EoNkGI3VgUXlBeB8AyvVCbByCuBHp6evRxGhRbSlFRkQuaKwUCnGPBggVRWZZVrjKNcoFM5f7mv1OFrk9aunTpMKzfhb4/wE2qo0ZDVisAeKt4GAiPPPJICaS8FZD6iB0GiEAYyBB3zEfsiKC0kfVjcQnadw2CbwiKt+uc8kGzcZ1VEDTqDYYwmne///77559//vkj4XBYNWCAHTFimix0erJJZyfW/Lr/Dw0NOdavX6+B8r14n4OC5TU7zZAVCCFclNb5ndu3bz+9ZcuWL8DPwiZp0Up5EQij8ZZs0N+LjY4eCLu6upxQiYY/+eSTTiHlhe0Maq1cQLxBVpikoTtMBsrNAHcohRrBEy89GtGWY5gqFCsR4V2kv26Y06dPR8Ele8+cOcOUH7ExazWoteMC4qQowjGBftn1ffv2XVy0aNHuurq6Zohxdq0vmYzaZWFvggiPzsSsD3lefvvtt7Vly5ZdB+VpB8oi/pAd5RNlgNHGCStRWXDMrKqqKtq2bRv9TYDXRunMsyBiECDNWKNCKo7U1NT0HD58uBNdsh9pP5yI8naygNVEVhFLVVrMQNmc+dRTT818/PHHi+fNm5dmp4eIo3jsb6guI1Db93788ccd3FZ8ABk5zK0h2bH8WAEQU6TMsSGVK2V9lZWVeRs3bpxeWlrqh2JGsQGA+Hmkvb09AhVl8L333uuGUrgblR5ApYNCsFMT2Zi5WQDE6G35k5mysjJ/RUVFFvTxXqgk3bm5uQ4ofgi0tnrQHBwcVKFiDIPC4cuXLw81NDQM7t27tw+s3oeKDnLvrLwNce6T8K5UMgCQDHK33R9NKUL+F7NCiPNpXmHez6M3sx+ZTABG7dZI9n42x29UaELhxd7DXN+gChaXpJvYi0z2Dyc1A0Xi/XDSdFfKpGaI3qzSRq/x+OUou0FV2La28/MWO/VDcvcb/v/r8Z/5618CDACSrI8YsjnaagAAAABJRU5ErkJggg==) no-repeat 0 0; -moz-animation-name: loadingAnimations; -moz-animation-duration: 1.2s; -moz-animation-iteration-count: infinite; -moz-animation-timing-function: linear; -webkit-animation-name: loadingAnimations; -webkit-animation-duration: 1.2s; -webkit-animation-iteration-count: infinite; -webkit-animation-timing-function: linear; -o-animation-name: loadingAnimations; -o-animation-duration: 1.2s; -o-animation-iteration-count: infinite; -o-animation-timing-function: linear; } @-webkit-keyframes loadingAnimations { 12.5% { -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg) } 25% { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg) } 37.5% { -webkit-transform: rotate(135deg); -moz-transform: rotate(135deg); -ms-transform: rotate(135deg); -o-transform: rotate(135deg); transform: rotate(135deg) } 50% { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg) } 62.5% { -webkit-transform: rotate(225deg); -moz-transform: rotate(225deg); -ms-transform: rotate(225deg); -o-transform: rotate(225deg); transform: rotate(225deg) } 75% { -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg) } 87.5% { -webkit-transform: rotate(315deg); -moz-transform: rotate(315deg); -ms-transform: rotate(315deg); -o-transform: rotate(315deg); transform: rotate(315deg) } 100% { -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); -ms-transform: rotate(360deg); -o-transform: rotate(360deg); transform: rotate(360deg) } } /*recommend begin*/ .x-recommend { //display: none; position: absolute; left: 0; top: 0; z-index: 90; width: 100%; height: 100%; background: #222222; overflow:hidden; display: -moz-box; display: -webkit-box; display: box; -webkit-box-align: center; -moz-box-align: center; -webkit-box-pack: center; -moz-box-pack: center } .x-recommend .x-pages{ width:auto; height:auto; overflow:hidden; position:relative; text-align:center; padding: 30px 30px; } .x-recommend .x-replay{ position: absolute; z-index: 20; right: 0px; top:0px; width: 150px; height: 85px; } .x-recommend .x-item{ position:relative; z-index: 10; width: 150px; height: 85px; margin: 0 12px 12px 0; overflow: hidden; display: inline-block; vertical-align:middle; } .x-recommend .x-item-noimg img{ width:150px; height:85px; } .x-recommend .x-item-img img{ width:100%; } .x-recommend .x-item-bg { z-index: 1; position: absolute; left: 0; bottom: 0; height: 100%; width: 100%; background: url(./img/item_bg.png) no-repeat left top; } .x-recommend .x-item-title { z-index: 10; position: absolute; left: 0; bottom: 0; width: 100%; height: 40px; overflow: hidden; text-align: left; padding: 0 1px; font-size: 14px; font-weight: normal; color:#ffffff; text-shadow:1px 1px 1px #000000; } .x-recommend .x-item-url { z-index: 20; position: absolute; width: 100%; height: 100%; left: 0; top: 0 } .x-recommend .x-item-url a { position: absolute; top: 0; left: 0; display: block; font-size: 14px; width: 100%; height: 100% } .x-recommend .x-play-loading { display: none; background-size: 32px 32px; width: 32px; height: 32px; margin-left: -16px; margin-top: -16px } .x-ad-pause{ display:none; position:absolute; left:50%; top:50%; margin-left:-300px; margin-top:-225px; z-index: 90; /* > trigger */ } .x-ad-pause .x-pause-close{ position:absolute; width:44px; height:44px; right:0; top:0; background: url(./img/xplayerv4.png) no-repeat -17px -83px; } .x-ad-pause .x-pause-prompt{ position: absolute; left: 0; bottom: 3px; width: 29px; height: 16px; background: url(http://r2.ykimg.com/051000005604C79D67BC3D7CA2063AD4) no-repeat center; background-size: contain; } /*2016.4.18 PlayLimit-----edit by vanery 10分钟限播s*/ .x-app-guide, .x-app-guide-other, .x-app-guide-5min{ background: url(http://player.youku.com/h5player/img/onlytip.png) no-repeat; background-size:contain; width:220px; height: 159px; border-radius: 3px; position:absolute; left:50%; top:50%; margin-left:-110px; margin-top:-74px; z-index:100; } .x-app-guide-other{ height:183px; background: url(http://player.youku.com/h5player/img/onlytipother.png) no-repeat; background-size:contain; } .x-app-guide-5min{ height: 160px; background: url(http://player.youku.com/h5player/img/tip5min.png) no-repeat; background-size:contain; } .x-app-guide .x-app-guide-par{ position: relative; height:100%; } .x-app-guide p{ width:44px; height:44px; position: absolute; right:12px; top: -12px; z-index:102; } .x-app-openapp{ display: block; width:100%; height:40px; position: absolute; left:0; bottom: 0; z-index:101; } .x-app-bg{ width:100%; height:100%; position:absolute; left:0; top:0; background:#000; z-index:90; opacity: .8; } /*e end*/ .x-pay-panel{ width: 100%; height: 100%; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index:90; background-color: #000000; } .x-pay-content{ margin: auto; width: 80%; height: 40%; text-align: center; position: absolute; top: 0; left: 0; right: 0; bottom: 0; } .x-pay-title{ color: #ffffff; text-align: center; font-size: 18px; line-height: 30px; margin: 30px; } .x-icon-prompt{ display: inline-block; vertical-align: middle; position: relative; font-style: normal; direction: ltr; height: 14px; width: 14px; margin: 2px; border: 1px solid #ff6000; overflow: visible; -webkit-border-radius: 50%; -moz-border-radius: 50%; -o-border-radius: 50%; border-radius: 50%; color: #eee; } .x-icon-prompt:after{ position: absolute; left: 50%; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); transform: translateX(-50%); width: 2px; height: 2px; content: ''; pointer-events: none; box-shadow: inset 0 0 0 1px,0 1px,0 2px,0 5px; top: 4px; color: #ff6000; } .x-pay-panel .x-button{ padding: 0 10px; height: 40px; line-height: 40px; font-size: 18px; cursor: pointer; border: none; margin: 0 10px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .x-pay-panel .x-try{ color: #4a5159; background-color: #b4b4b4; } .x-pay-panel .x-buy{ color: #ffffff; background-color: #ff6000; } @media screen and (max-width: 640px) { .x-showlist { zoom: 0.8; } .x-showlist-grid li { font-size: 16px; } } @media screen and (max-width: 480px) { .x-showlist { zoom: 0.7; } .x-showlist-grid li { font-size: 18px; } } @media all and (min-width:620px) { .x-ad-pause{display:block;} } ================================================ FILE: src/main/webapp/style/eu/index/themepark.css ================================================ /* Theme Name: 超级门户 Theme URI:http://www.themepark.com.cn/ Description: WEB主题公园出品的一款内容站主题,也可以用于企业seo优化站,全站小工具布局,模块可重复使用,灵活性超强! Author:WEB主题公园 Author URI: http://www.themepark.com.cn/ Version: 1.35 */ * { margin: 0; padding: 0; } img{ border:none;} body { background: white; font: 14px/1.4 Georgia, Serif; font-family:微软雅黑, Arial, Helvetica, sans-serif;background:url("../images/home_b.gif"); padding: 0px; } .screen-reader-text { position: absolute; left: -9999px; top: -9999px; } .clear { clear: both; } .group:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } * html .group, *:first-child+html .group { zoom: 1; } /* First selector = IE6, Second Selector = IE 7 */ #index_model { width: 960px; margin: 10px auto; overflow:hidden; } #index_model_in{ width:980px; margin:0; padding:0; overflow:hidden; height:auto;} h1, h2, h3 { font-weight: normal; margin: 0 0 10px 0 ; } p { margin: 0 0 5px 0; } ul,li,ol{ list-style:none; display:block;} a{ text-decoration:none;} #header{ width:100%; height:180px; position:relative;background:url("../images/nav_b.png"); padding-bottom:8px;z-index:9999;} #header .top{ width:100%; height:34px; border-top:solid 2px #fff;} #header .top .top_in{ width:960px; height:34px; margin:0 auto;} #header .top .top_gonggao{ width:504px; height:34px; float:left; position: relative; overflow:hidden; padding-left:30px; } #header .top .top_gonggao_bd{ position:absolute; left:0; top:0;background:no-repeat 0px 0px url("../images/Sprites.png"); width:124px; height:34px;} #header .top .top_gonggao_bd_r{ position:absolute; right:0; top:0; background:no-repeat 0px -37px url("../images/Sprites.png"); width:30px; height:34px;} #header .top .top_gonggao_bd b{ font-size:12px; font-weight:normal; color:#FFF; line-height:34px; padding-left:43px;} #header .top .top_gonggao marquee a{ display:block; padding:2px 5px; background:#7a7a7a; border-left: #9bcb18 solid 1px;border-radius:4px; color:#FFF; font-size:12px; margin-top:7px; float:left; margin-right:20px;} #header .top .top_gonggao marquee a:hover{ background:#373737;} #header .top span{ display:block; float: right; height:34px; padding-left:25px; background-image:url("../images/Sprites.png"); background-repeat:no-repeat; line-height:34px; color:#fff; font-size:12px; margin-right:30px;} #header .top .tel{ background-position:4px -103px;} #header .top .mail{ background-position:0 -75px;} #header #header_in{ width:960px; height:134px; margin:0 auto; overflow:hidden;} #header #header_in img{ max-width:100%;} #header #header_in .logo{ width:auto; height:74px; display:block; overflow:hidden; float:left;} #header #header_in .logo img{ height:74px; width:auto;} #header #header_in .header_ad{ float:right; width:636px; height:66px; padding:8px; position:relative; overflow:hidden;} #header #header_in .header_ad span{ width:32px; height:34px; position:absolute;background-image:url("../images/Sprites.png");} #header #header_in .header_ad .left{ left:0; top:0; background-position:0 -139px;} #header #header_in .header_ad .right{ right:0; bottom:0; background-position:0 -232px;} #header #header_in .header_ad a{ display:block; width:636px; height:66px; overflow:hidden;} /* nav */ #header #nav{ width:960px; height:46px; margin:0 auto; } #header #nav .menu_nav{ width:896px; height:45px; margin:0 auto; display:block; float: left;} #header #nav .menu_nav li{ float:left; width:auto; height:45px; display:block; line-height:45px; margin-right:1px; position:relative; z-index:99;white-space:nowrap;} #header #nav .menu_nav li a{ font-size:16px; font-weight:normal; color:#1b1b1b; text-decoration:none; position:relative; z-index:20; width: auto; height:45px; display:block; float:left;padding:0 15px;} #header #nav .menu_nav li .hover{ width:100%; height:43px; position:absolute; top:0; left:0; z-index:8px; display:none; border-top:solid 2px #eb302f;} #nav .menu_nav .current-menu-item .hover,#nav .menu_nav .current-category-ancestor .hover,#nav .menu_nav .current-menu-ancestor .hover,#nav .menu_nav .current-post-parent .hover{ display:block !important;} #nav .menu_nav li .sub-menu{ display:none; height:auto; width:130px; border:solid 5px #FFFFFF; position:absolute; top:44px; left:0; background:#f7f7f7;box-shadow: 0 1px 3px #333333; overflow:hidden; z-index:10; padding:5px;} #nav .menu_nav li .sub-menu li .sub-menu,#nav .menu_nav li .sub-menu li .sub-menu li .sub-menu,#nav .menu_nav li .sub-menu li .sub-menu li .sub-menu{ display:block !important;} #nav .menu_nav li .sub-menu li .current-menu-item a,#nav .menu_nav li .sub-menu li a{ color: #eb302f!important; text-shadow:none !important;} #nav .menu_nav li .sub-menu li a{ width:110px !important; padding:0 10px !important; display:inline; height:auto !important; float:left;} #nav .menu_nav li .sub-menu li a:hover{ background:#333 !important; color:#FFF !important;} #nav .menu_nav li .sub-menu li{ float:left; width:130px; height:auto !important; padding:0; line-height:28px !important; margin:2px 0; border-bottom:dotted 1px #CCCCCC;} #nav .home_url{ width:62px; height:46px; float:left;background:no-repeat 0px -309px url("../images/Sprites.png");} /* pic */ #pic_out{ width:960px; height:359px; overflow:hidden; margin:20px auto; border:solid 1px #CCCCCC; position:relative;} #pic{ width:940px; height:335px; overflow:hidden; position:relative; margin:0 auto; border:10px #FFFFFF solid; background:#FFF;} #pic ul li a{ display:block; width:100%; height:367px; overflow:hidden; position:relative; z-index:2;} #pic ul li {display:block; width:100%; height:421px; position:relative;} #pic .pic_text{ width:100%; height:40px; position:absolute;background:url("../images/black_b2.png"); bottom:86px; right:0; z-index:3;} #pic .pic_text span{ width:44px; height:40px; display:block;background:no-repeat 0px -387px url("../images/Sprites.png"); float:left;} #pic .pic_text b{ font-size:12px; color:#fff; font-weight:normal; line-height:18px;} #pic .prve,#pic .next{ width:80px; height:80px; background-image:url("../images/Sprites.png"); position:absolute; top:131px; display: block;z-index:1000; cursor:pointer;} #pic .prve{ background-position:80px -1px; left:-100px;} #pic .next{background-position:80px -80px; right:-100px;} /* pic */ #pic_out2{ width:100%; height:435px; overflow:hidden; margin-top:-8px; margin-bottom:20px; border-bottom: solid 10px #EBEBEB; position:relative;*margin-top:-8px;_margin-top:-8px; z-index:100; z-index:10;} #pic2{ width:100%; height:435px; overflow:hidden; position:relative; margin:0 auto; background:#FFF;} #pic2 ul li a{ display:block; width:100%; height:435px; overflow:hidden; position:relative; z-index:2;} #pic2 ul li {display:block; width:100%; height:435px; position:relative;} #pic2 .pic_text{ width:100%; height:40px; position:absolute;background:url("../images/black_b2.png"); bottom:0; right:0; z-index:3;} #pic2 .pic_text span{ width:44px; height:40px; display:block;background:no-repeat 0px -387px url("../images/Sprites.png"); float:left;} #pic2 .pic_text b{ font-size:12px; color:#fff; font-weight:normal; line-height:18px;} #pic2 .prve,#pic2 .next{ width:80px; height:80px; background-image:url("../images/Sprites.png"); position:absolute; top:161px; display: block;z-index:1000; cursor:pointer;} #pic2 .prve{ background-position:80px -1px; left:-100px;} #pic2 .next{background-position:80px -80px; right:-100px;} .test_inf{ margin:0 auto; width:960px;height:40px;} /* widget */ .widget{ height:auto; overflow:hidden; float:left; margin: 5px 15px 5px 0px;} .widget .widge_hd{ width:100%; height:34px; float:left; border-bottom:solid 1px #89CDAC;} .widget .widge_hd span{ float:left; display:block; height:34px; width:auto;} .widget .widge_hd span b{ width:100%; display:block; font-size:14px; color:#303030;line-height: 20px;} .widget .widge_hd span p{ display:block; font-size:9px; color: #eb302f; text-transform:uppercase;} .widget .widge_hd a{ width:52px; height:18px;background:0 -435px url("../images/Sprites.png"); display: block; float: right; color: #eb302f; padding:16px 0 0 20px; font-weight:bold; text-decoration:none; font-size:14px;line-height: 14px;} .widget .widge_hd a:hover{ color:#CCC;} #vedio{ width:500px;} .widget ul{ width:100%; height:auto; padding:10px 0 0 0!important; float:left; margin: 0px !important;} .widget ul li{ display:block; float:left;} .widget .time{ width:100%; display:block;color:#eb302f; font-size:14px; line-height:1.5em;} .widget p{ font-size:12px; color:#999;} .widget img{ max-width:100%;} .widget_nav_menu ul li{ width:100%; height: auto; padding:5px 0; display:block; border-bottom:dashed 1px #d6d6d6; background:#fff;} .widget_nav_menu ul li a{ padding:5px 0 5px 20px; color:#666; display:block; width:100%; background:#F5F5F5; border-left:#ccc solid 3px; text-decoration:none;} .widget_nav_menu ul li a:hover{border-left:#eb302f solid 3px;color:#eb302f} .widget_nav_menu ul .current_page_item a,.widget_nav_menu ul .current-cat a{ color:#eb302f;border-left:#eb302f solid 3px;} .widget_nav_menu ul .current-cat .children li a,.widget_nav_menu ul .current_page_item .children li a,.widget_nav_menu ul .current_page_item .sub-menu li a,.widget_nav_menu ul .current-cat .sub-menu li a{color:#666 !important; } .widget_nav_menu ul li .sub-menu,.widget_nav_menu ul li .children{ margin-left:10px; display:block;} .widget_nav_menu ul li .sub-menu li,.widget_nav_menu ul li .children li{ border:none; padding:5px 0 !important;} .widget_nav_menu ul li .sub-menu li a,.widget_nav_menu ul li .children li a{ border:none !important; background:none !important; padding:0 !important; margin-left:20px; } .case525,#new525,#vedios,.case525,.table1,#vedio{ height:370px;} .widget_border{ width: 780px; height: 5px; margin: 3 0px; float: left; background: url("../images/index/headbg.png") repeat;} .widget table{} .widget table span.articleicon{ display: block; width: 9px; height:15px; margin-top: -5px; background: url("../images/index/index_article_icon.gif") no-repeat;} .widget table a{ margin-left: 5px; font-family: "微软雅黑", "宋体", "Times New Roman"; font-size: 14px; line-height: 24px; color: #266AAB; text-decoration:none;} .widget table a b{ color:#eb302f;text-transform:uppercase;} .widget table a:hover{ color: red;} .widget table td{ overflow: hidden; white-space: nowrap; color: #999999;} #widget_news{width:370px; height:220px; border: 1px solid #19840E; padding: 5px;} #widget_news ul li#first{ margin:0;width:228px; height:295px; border:none; } #widget_news ul li#first a{ width:228px; height:295px; overflow:hidden; position:relative; display:block; overflow:hidden;} #widget_news ul li#first a span{ display:block; width:42px; height:40px; position:absolute; left:0l top:0; background:-281px -446px url("../images/Sprites.png");} #widget_news ul li#first div{ width:218px; height: auto; background: no-repeat url("../images/first.png"); position:absolute; bottom:-90px; padding:65px 5px 0 5px;} #widget_news ul li#first div p{ font-size:14px; color:#fff;} #widget_news ul li a,#vedio #bottom_text a{ font-size:18px; line-height:2em; color:#333; text-decoration:none;} #widget_news ul li a:hover,#vedio #bottom_text a:hover{ text-decoration:underline;} #widget_news ul li#first div p b,#widget_news ul li a b,#vedio ul li a b,#vedio #bottom_text a b{ color:#eb302f;text-transform:uppercase;} #widget_news ul li{ width:600px; float:left; padding :3px 0; margin-left:10px; border-bottom: dashed #D5D5D5 1px;} #widget_expert{ width:780px; height: auto;} #widget_expert ul{ width:780px;} #widget_expert ul li{width:230px; height:300px; margin:0 13px 13px 0;} #widget_expert ul li a{ position:relative; display:block; width:230px; height:300px; overflow:hidden;} #widget_expert ul li a .case_title{ width:220px; height:20px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:0; z-index:10;} #widget_expert ul li a .case_title b ,#widget_expert ul li a .case_title p{ font-size:12px; color:#FFF; display:block; margin-right:15px; padding-left:20px; background-image:url("../images/Sprites.png"); background-repeat:no-repeat;} #widget_expert ul li a .case_title b{ background-position:-5px -559px;float:left;} #widget_expert ul li a .case_title p{ background-position:-5px -601px;float:right;} #widget_expert ul li a .case_t{ position:absolute;background:url("../images/first.png"); bottom:-90px; width:220px;height:41px; padding:18px 5px 30px 5px; z-index:11;} #widget_expert ul li a .case_t b{ color:#fff; font-size:14px;} .loop_big_caj_nav{ width:780px; height:auto; text-align: end; float:left;} .loop_big_caj_nav a{ display:inline-block; padding:0px 10px; margin-right:2px; background:#666; color:#FFF; font-size:14px; cursor:pointer;} .loop_big_caj_nav a:hover{ background:#eb302f;} #new525{ width:625px;} #new525 ul li#first{ margin:0;width:228px; height:295px; border:none; } #new525 ul li#first a{ width:228px; height:295px; overflow:hidden; position:relative; display:block; overflow:hidden;} #new525 ul li.scond a{ font-size:16px; margin-bottom:10px; overflow:hidden; display:block; } #new525 ul li#first a span{ display:block; width:42px; height:40px; position:absolute; left:0l top:0; background:-281px -446px url("../images/Sprites.png");} #new525 ul li#first div{ width:218px; height: auto; background: no-repeat url("../images/first.png"); position:absolute; bottom:-90px; padding:65px 5px 0 5px;} #new525 ul li#first div p{ font-size:14px; color:#fff;} #new525 ul li a{ font-size:14px; color:#333; text-decoration:none;} #new525 ul li a:hover,#vedio #bottom_text a:hover{ text-decoration:underline;} #new525 ul li#first div p b,#new525 ul li a b,#vedio ul li a b,#vedio #bottom_text a b{ color:#eb302f;text-transform:uppercase;} #new525 ul li{ width:386px; float:left; padding :5px 0 5px 0; margin-left:10px; border-bottom:dashed #D5D5D5 1px;} #vedio .vidio_fam{ width:290px; height:215px; float:right;} #vedio ul{ width:470px; height:295px;} #vedio ul li{ width:170px; height:48px; overflow:hidden; display:block; margin-bottom:8px;} #vedio ul li a{ font-size:12px; color:#333; text-decoration:none; width:158px; height:36px;display:block;border:1px solid #CCC; padding:5px;} #vedio ul li a:hover,#vedio ul li .in{ border:1px solid #eb302f;} #vedio #bottom_text{ width:471px; height:auto; float:left;} #vedios{ width:315px;} #vedios ul{ width:315px; height:295px;} #vedios ul li{ width:315px; float:left; padding :5px 0 5px 0; margin-left:10px; border-bottom:dashed #D5D5D5 1px;} #vedios ul li a{ font-size:14px; color:#333; text-decoration:none;} #vedios .vedio_kuang{ width:303px; height:200px; padding:5px; background:#FFF; border:#CCC solid 1px;} #vedios .vedio_kuang iframe { width:303px !important; height:200px !important; } .case1{ width:960px !important; height:auto;} .case1 ul{ width:980px;} .case1 ul li{width:230px; height:300px; margin:0 13px 13px 0;} .case1 ul li a{ position:relative; display:block; width:230px; height:300px; overflow:hidden;} .case1 ul li a .case_title{ width:220px; height:20px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:0; z-index:10;} .case1 ul li a .case_title b ,.case1 ul li a .case_title p{ font-size:12px; color:#FFF; display:block; margin-right:15px; padding-left:20px; background-image:url("../images/Sprites.png"); background-repeat:no-repeat;} .case1 ul li a .case_title b{ background-position:-5px -559px;float:left;} .case1 ul li a .case_title p{ background-position:-5px -601px;float:right;} .case1 ul li a .case_t{ position:absolute;background:url("../images/first.png"); bottom:-90px; width:220px;height:41px; padding:18px 5px 30px 5px; z-index:11;} .case1 ul li a .case_t b{ color:#fff; font-size:14px;} .news_modle1,.news_modle2,.news_modle3{ width:306px;} .news_modle1 ul li#fiest .pic{ width:124px; height:93px; float:left; display:block; overflow:hidden;} .news_modle1 ul li#fiest .pic img{ width:124px; height:93px;} .news_modle1 ul li .news_modle1_title,.news_modle1 ul li p,.news_modle1 ul li#fiest .time{ float:left; display:block; width:154px; margin-left:10px; overflow:hidden; height:16px;} .news_modle1 ul li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .news_modle1 ul li a b{ color:#eb302f;text-transform:uppercase;} .news_modle1 ul li{ width:306px;float:left; padding :4px 0; border-bottom: dashed #D5D5D5 1px;} .news_modle1 ul li a:hover{ text-decoration:underline;} .news_modle1 ul li .time{ float:right; width:50px; padding-right:18px;} .news_modle1 ul li#fiest{ padding-bottom:12px;} .func_nav{ width:125px; border: 1px solid #19840E; padding: 5px;} .func_nav ul{ width:125px;} .func_nav li{ width:104px; height:130px; margin: 0px 10px; position:relative; overflow:hidden; border-bottom: 1px dashed #89CDAC;} .func_nav li b{ display:block; width:133px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:-90px; color:#FFF; font-size:12px; font-weight:normal;} .func_nav li b a{color:#FFF; text-decoration:none;} .func_nav li b a:hover{ text-decoration:underline;} #widget_inform{ width:370px; height:220px; border: 1px solid #19840E; padding: 5px;} #widget_inform ul li a{ font-size:18px; color:#333; text-decoration:none; float:left;} #widget_inform ul li a b{ color:#eb302f;text-transform:uppercase;} #widget_inform ul li{ width:620px;float:left; padding :3px 0; border-bottom: dashed #D5D5D5 1px;} #widget_inform ul li a:hover{ text-decoration:underline;} #widget_inform ul li .time{ float:right; width:100px; padding-right:18px;} #widget_link{ width:800px;} #widget_link ul li a{ font-family: "宋体"; font-size:12px; color: #266AAB; text-decoration:none; float:left; text-decoration: none;} #widget_link ul li a b{ color:#eb302f;text-transform:uppercase;} #widget_link ul li{ width:200px;float:left; padding :3px 0; background: url("../images/index/index_nav_icon.gif") no-repeat 8px 8px; text-indent: 20px;} #widget_link ul li a:hover{ color: red;} #widget_question{ width:630px;} #widget_question ul li#fiest .pic{ float:left; display:block; overflow:hidden;} #widget_questionul li .news_modle1_title,.news_modle2 ul li p,.news_modle2 ul li#fiest .time{ float:left; display:block; width:196px; margin-left:10px;overflow:hidden; height:16px;} #widget_questionul li a{ font-size:12px; color:#333; text-decoration:none; float:left;} #widget_question ul li a b{ color:#eb302f;text-transform:uppercase;} #widget_question ul li{ width:620px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} .question_title{ color: #259; font-size:14px; display:block; width:100%;} .question_expandable{ margin-top:5px; font-size:13px; line-height: 1.5;color:#999;cursor: pointer;} .question_expandable img{width:98px !important; height:73px !important; float:left; border-radius: 4px;margin: 1px 10px 5px 0;} .question_expandable .toggle-expand{display: inline-block; padding: 0 3px; color: #0c5897; border-radius: 2px; font-size: .9em;} .question_collapse{ color: #fff; float:right; z-index: 1; margin: 0; background-color: #81baeb; padding: 1px 6px; border-radius: 3px; cursor: pointer;opacity: 0.9;border: 0;} .question_collapse i{display: inline-block;line-height: 10px;vertical-align: 0;background-image: url(../images/littleicon2.png) !important;background-repeat: no-repeat;margin-right: 5px; background-position: -70px -38px; width: 8px; height: 9px;} .question_content{color: #333; margin: 10px 0px; line-height: 20px;} .question_actions{ margin-top:3px; display:block;} .question_actions a{ margin: 0 5px;} .question_actions .highlight{ color: red; padding: 0 2px;} .question_actions i{display: inline-block;line-height: 10px;vertical-align: 0;background-image: url(../images/littleicon.png);background-repeat: no-repeat;margin-right: 5px;} .question_actions a{text-shadow: 0 1px 0 #fff;display: inline;text-decoration: none;color: #777;} .question_actions .comments_count .icon_comment{width: 9px;height: 10px;background-position: -28px -22px;} .question_actions .like_count .icon_like{width: 10px;height: 10px;background-position: -41px -22px;} #widget_company{ width:306px; max-height:370px;} #widget_company ul li span{ font-size: 20px; line-height: 2em; color:#333; text-decoration:none;} #widget_company li p{ font-size:14px; line-height: 1.2em; color:#999;; text-decoration:none;} #widget_company ul li a b{ color:#eb302f;text-transform:uppercase;} #widget_company ul li{ width:295px;float:left; padding :3px 0; border-bottom: dashed #D5D5D5 1px;} #widget_company ul li a:hover{ text-decoration:underline; color: red;} .companylist li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .companylist li span{ font-size: 20px; line-height: 2em; color:#333; text-decoration:none;} .companylist li p{ font-size:14px; line-height: 1.2em; color:#999;; text-decoration:none;} .companylist ul li a b{ color:#eb302f;text-transform:uppercase;} .companylist ul li{ width:620px;float:left; padding :10px 0 ; border-bottom: dashed #D5D5D5 1px;} .list_paginator{text-align: right; padding: 10px 0px;clear: both;line-height: 1em;} .list_paginator a{font-size: 12px; margin: 0 3px;padding: 2px 5px; border: 1px solid transparent; cursor: pointer; text-decoration: none; color: #777;} .list_paginator a.paginator_current { border-radius: 3px; background-color: rgba(0,0,0,0.03); border: 1px solid #ccc; color: #d32;} .list_paginator a:hover{ border-radius: 3px; background-color: rgba(0,0,0,0.03); border: 1px solid #ccc; } .table1{ width:415px;} .table1 .widge_hd2{width:100%; height:34px; float:left; border-bottom:solid 1px #cecece;} .table1 .widge_hd2 a{ font-size:14px; color:#999; margin-right:10px; display:block; padding:2px 10px; float:left; margin-top:10px; cursor:pointer;} .table1 .widge_hd2 a.inopen{ background:#eb302f; box-shadow:0 1px 5px #7d1110 inset; color:#FFF;} .table1 ul{ display:none;} .table1 ul.show{ display:block;} .table1 ul li .table1_title,.table1 ul li p,.table1 ul li#fiest .time{ float:left; display:block; width:154px; margin-left:10px;} .table1 ul li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .table1 ul li a b{ color:#eb302f;text-transform:uppercase;} .table1 ul li{ width:406px;float:left; padding :6px 0; border-bottom: dashed #D5D5D5 1px;} .table1 ul li a:hover{ text-decoration:underline;} .table1 ul li .time{ float:right; width:50px; padding-right:18px;} #ss1{ display:block;} .case525{ width:625px;} .case525 ul{ width:661px;} .case525 ul li#fiest .pic{ width:120px; height:155px; float:left; display:block; overflow:hidden;} .case525 ul li#fiest .pic img{ width:120px; height:155px;} .case525 ul li .news_modle1_title,.case525 ul li p,.case525 ul li#fiest .time{ float:left; display:block; width:164px; margin-left:10px;} .case525 ul li#fiest{ padding-bottom:12px;} .case525 ul li a{ font-size:14px; color:#333; text-decoration:none; float:left;} .case525 ul li#fiest{ width:320px; margin-right:10px;} .case525 ul li#fiest .btn{ width:100px; float:left; display:block; background:#eb302f; color: #FFF; padding:3px 0; text-align:center; border-radius: 4px;margin-left:10px;} .case525 ul li#fiest .btn:hover{ background: #666;} .news_modle2 ul li #pics,.news_modle2 ul li#fiest .pic img{ width:98px !important; height:73px !important; } .news_modle2 ul li #pics img{ width:98px; height:73px;} .news_modle2 ul li#fiest .pic{ float:left; display:block; overflow:hidden;} .news_modle2 ul li .news_modle1_title,.news_modle2 ul li p,.news_modle2 ul li#fiest .time{ float:left; display:block; width:196px; margin-left:10px;overflow:hidden; height:16px;} .news_modle2 ul li a{ font-size:12px; color:#333; text-decoration:none; float:left;} .news_modle2 ul li a b{ color:#eb302f;text-transform:uppercase;} .news_modle2 ul li{ width:306px;float:left; padding :1px 0 ; border-bottom: dashed #D5D5D5 1px;} .news_modle2 ul li a:hover{ text-decoration:underline;} .news_modle3 ul{ width:321px;} .news_modle3 li{ width:143px; height:108px; margin:7px; position:relative; overflow:hidden;} .news_modle3 li b{ display:block; width:133px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:-90px; color:#FFF; font-size:12px; font-weight:normal;} .news_modle3 li b a{color:#FFF; text-decoration:none;} .news_modle3 li b a:hover{ text-decoration:underline;} .case2,.case3{ width:960px; height:auto;} .case2 ul{ width:980px;} .case2 ul li{width:230px; height:180px; margin-right:13px;} .case2 ul li a{ position:relative; display:block; width:230px; height:173px; overflow:hidden;} .case2 ul li a .case_title{ width:220px; height:20px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:0; z-index:10;} .case2 ul li a .case_title b ,.case2 ul li a .case_title p{ font-size:12px; color:#FFF; display:block; margin-right:15px; padding-left:20px; background-image:url("../images/Sprites.png"); background-repeat:no-repeat;} .case2 ul li a .case_title b{ background-position:-5px -559px;float:left;} .case2 ul li a .case_title p{ background-position:-5px -601px;float:right;} .case2 ul li a .case_t{ position:absolute;background:url("../images/first.png"); bottom:-90px; width:220px;height:41px; padding:18px 5px 30px 5px; z-index:11;} .case2 ul li a .case_t b{ color:#fff; font-size:14px;} .case3 ul{ width:980px;} .case3 li#big{ width:485px; height:361px; margin-left:0;overflow:hidden;} .case3 li{ width:230px; height:173px; margin:7px 4px; position:relative;overflow:hidden;} .case3 li#big b{ width:475px;} .case3 li b{ display:block; width:220px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:0; color:#FFF; font-size:12px; font-weight:normal;} .case3 li b a{color:#FFF; text-decoration:none;} .case3 li b a:hover{ text-decoration:underline;} .case4 { width:960px;} .case4 ul{ width:980px;} .case4 li{ width:133px; height:100px; margin:1px; position:relative; border: solid 1px #CCCCCC;} .case4 li b{ display:block; width:216px; padding:5px; background:url("../images/black_b2.png"); position:absolute; bottom:0; color:#FFF; font-size:12px; font-weight:normal;} .case4 li b a{color:#FFF; text-decoration:none;} .case4 li b a:hover{ text-decoration:underline;} #footer{ width:100%; height:auto;; border-top: solid 10px #dadada; background:#3c3c3c; padding:10px 0; position:relative;} #footer_in{ width:960px; height:auto; margin:0 auto; position:relative;} #footer_in .footer_shadow{ width:960px; height:10px; position:absolute; top:-30px;} #footer_in .footer_modle{ width:100%; height:auto; padding:10px 0 20px 0; margin:5px 0; border-bottom:solid 1px #CCCCCC; overflow:hidden; } #footer_in .footer_modle .title{ width:100%; height:auto; float:left; padding-bottom:5px;} #footer_in .footer_modle .title b{ color:#fff;display: block; font-size: 14px; width: 100%;} #footer_in .footer_modle .title a{ color: #eb302f;display: block;font-size: 9px;text-transform: uppercase;} #footer_in .footer_modle .link{ width:211px; height:auto; float:left; overflow:hidden; margin-right:28px;} #footer_in .footer_modle .link ul{ width:100%; height:auto; display:block; overflow:hidden; float:left; border-top: 1px dashed #767676;} #footer_in .footer_modle .link ul li{ border-bottom: 1px dashed #767676;float: left; width:100%; } #footer_in .footer_modle .link ul li a{ color:#ccc; font-size:12px; text-decoration:none; display:block; width:100%;padding: 5px 0; } #footer_in .footer_modle .link ul li a:hover{ background:#767676;} #footer_in .footer_modle .subscription{ float:left; width:262px; height:190px; margin-right:28px;} #footer_in .footer_modle .subscription .rssbook{ background:#2d2d2d !important; border:1px solid #4a4a4a !important; padding:21px 17px !important;} #footer_in .footer_modle .subscription .rssbook input.rsstxt{ width:97% !important; } #footer_in .footer_modle .icon{ width:260px; height:auto; overflow:hidden; float:left; margin-right:28px;} #footer_in .footer_modle .icon ul{ width:280px; height:auto; display: block;} #footer_in .footer_modle .icon ul li{ display:block; width:78px; height:61px; float:left; margin:0 10px 10px 0; border: solid 1px #666;} #footer_in .footer_modle .icon ul li:hover{border: solid 1px #333; } #footer_in .footer_modle .dimensional{ width:138px; float:left;} #footer_in .footer_modle .dimensional img{ width:138px; height:138px;} #footer_in .links{ width:960px; height:auto; display:block;} #footer_in .links li{ display:inline; padding-right:15px;} #footer_in .links li a{ font-size:12px; color:#cacaca; text-decoration:none;} #footer_in .links li a:hover{ color:#FFF;} #footer_in p{ font-size:12px; color:#cacaca;} #footer_in p a{font-size:12px; color:#cacaca; text-decoration:none;} #footer_in p a:hover{ color:#eb302f} /* page_top */ #page_top{ width:100%; height:56px; padding-top:20px; overflow:hidden; background-image: url("../images/pic_b.jpg"); background-position:center; margin-top:-7px;} #page_top .page_top_in{ width:960px; height:76px; margin:0 auto;} #page_top .page_top_in h3{ display:block; width:100%; font-size:24px; color:#fff; font-weight:normal;text-transform:uppercase;} #page_top .page_top_in h3 a{ font-size:14px; color:#FFF; text-transform:uppercase;} #page_top .page_top_in p{ font-size:9px; color:#FFF;} #page_muen_nav{ width:960px; height:auto; padding:10px; margin:0 auto 10px auto ; border-bottom: dashed #D5D5D5 1px;} #page_muen_nav b,#page_muen_nav a{ font-size:12px; color:#666; text-decoration:none;} #page_muen_nav a:hover{color:#eb302f} /* content */ #content{ width:960px; height: auto; padding:20px 0; margin:0 auto; overflow:hidden;} #content .left_mian{ width:240px; height:auto; overflow:hidden; float:left; padding:10px; border:solid 1px #EEE; } #content .right_mian{ width:680px; height:auto; overflow:hidden; float:right;} #content .case_pic{ position:relative; top:0; left:0;} #content .case_pic ul li{ position:relative; } #content .case_pic ul li .bottom_tucase{ width:319px; height:15px; position:absolute; bottom:-15px;background:url("../images/bottom.png");} #content .case_pic ul li a{ overflow:hidden;position:relative;} #content .case_pic ul li .hover_case{ width:319px; height:190px; overflow:hidden; position:absolute; left:0; top:190px; background:url("../images/black_b.png");} #test_list_b{ background:#FFF; margin-top:5px; box-shadow:0 0 3px #CCCCCC; margin-right:3px;}#test_list_b ul{ padding:0;} /* left */ #content .left_mian .widget{ padding-bottom:15px; } #content .left_mian .widget,#content .left_mian .news_modle2 li{ width:240px !important; } #content .left_mian .news_modle2 li .news_modle1_title,#content .left_mian .news_modle2 li p{ width:159px;} #content .left_mian .news_modle1 li .news_modle1_title,#content .left_mian .news_modle1 li p{ width:142px;} #content .left_mian .news_modle3 li,#content .left_mian .news_modle3 li b, #content .left_mian .news_modle3 li a img{ width:124px; height:auto;} #content .left_mian .news_modle2 li .time,#content .left_mian .news_modle1 li .time,#content .left_mian #vedio,#content .left_mian #widget_news,#content .left_mian #new525,,#content .left_mian #vedios ,#content .left_mian .case525,#content .left_mian .table1{ display:none;} #content .left_mian .case4 ul{ width:272px !important; } #content .left_mian .case4 ul li{ border: none;} #content .left_mian .case1 ul,#content .left_mian .case2 ul{ width:270px} #content .left_mian .case1 .caseleft,#content .left_mian .case2 .caseleft{ margin-left:20px;} #content .left_mian .case1 .caseleft ul li,#content .left_mian .case2 .caseleft ul li{ margin-right:20px;} #content .left_mian .case1 .caseleft .loop_big_caj_nav,#content .left_mian .case2 .caseleft .loop_big_caj_nav{ width:191px;} #content .left_mian .case3 ul li#big,#content .left_mian .case3 ul li#big img{ width:270px; height:203px;} #content .left_mian .case3 ul li#big b,#content .left_mian .case3 ul{width:270px; display:block;} #content .left_mian .case3 ul li,#content .left_mian .case3 ul li a,#content .left_mian .case3 ul li a img{ width:127px; height:96px;} #content .left_mian .case3 ul li b{ display: none;} .pager {width:95%;overflow:hidden;white-space:nowrap;padding:4px;float:left;text-align:left; margin:20px 0;} .pager a { background:#333; color:#FFF; font-size:12px;margin:2px;padding:6px 12px; text-decoration:none; float:left;} .pager a.current {background:#eb302f; font-size:12px;margin:2px;padding:6px 12px;} .pager a:hover {background:#eb302f;font-size:12px;color:#fff;text-decoration:none;} .hover_incase{ position:absolute; top:0; left:0; display:none;} /*news_loop_01*/ .news_loop_01{ display:block; width:100%; height:auto; overflow:hidden;} .news_loop_01 li{ float:left; display:block; width:100%; padding:10px 0; border-bottom:dashed #999999 1px;} .news_loop_01 li .news_001_pic{ width:83px; height:83px; display:block; overflow:hidden; float:left; position:relative;} .news_loop_01 li span{ display:block; float:left; padding-left:15px; width:428px;} .news_loop_01 li .news_001_pic img{ width:88px; height:88px; position:absolute;} .news_loop_01 li#fist .news_001_pic,.news_loop_01 li#fist .news_001_pic img{ width:143px; height:108px;} .news_loop_01 li#fist .news_001_pic{ border:8px solid #fff; margin-left:3px; box-shadow: 0 1px 3px #E1E1E1;} .news_loop_01 li#fist a.news_001_pic:hover{border:8px solid #eb302f;} .news_loop_01 li#fist span{ width:450px;} .news_loop_01 li span b{ font-size:18px; color:#333; display:block;} .news_loop_01 li span b a{ color:#333; text-decoration:none;}.news_loop_01 li span b a:hover{ color:#eb302f;} .news_loop_01 li span a.time{ font-size:12px; color:#eb302f; margin:4px 0;} .news_loop_01 li span p{ display:block; font-size:12px; color:#333;} .news_loop_01 li span a.news_btn{ color:#eb302f; font-size:14px; display:block; padding-left:25px;background:0 -615px no-repeat url("../images/Sprites.png"); margin-top:10px; } .news_loop_02 li{ float:left; display:block; width:100%; padding:6px 0; border-bottom:dashed #999999 1px;} .news_loop_02 li a{ font-size:14px; color:#666; padding-left:15px; background:0 -294px no-repeat url("../images/Sprites.png"); text-decoration:none; float:left} .news_loop_02 li p{ float:right; font-size:12px; color:#999;} .news_loop_02 li a:hover{ color:#eb302f} .case_pic{ position:absolute; left:0; top:180px;} .case_pic ul{ width:1004px; height:auto; overflow:hidden; margin:0; padding:0;} .case_pic ul li{ width:290px; height:344px; background:#FFF; margin:0 17px 10px 3px; float:left; display:block; border:8px solid #fff; box-shadow: 0 1px 3px #E1E1E1;} .case_pic ul li a{ display:block; overflow:hidden; width:290px; height:215px; float:left; border-bottom:3px solid #FFF;} .case_pic ul li a:hover{ border-bottom:3px solid #eb302f} .case_pic ul li:hover{border:8px solid #E4E4E4;} .case_pic ul li b{ float:left; padding:7px 10px; font-size:14px; color:#333; } .case_pic ul li p{ float:left; padding:0 10px; font-size:12px; color:#666; margin:0;} #text_list li span{ width:606px !important;} #pic_text_list li#big .news_001_pic,#pic_text_list li#big .news_001_pic img{ width:290px; height:215px;} #pic_text_list li#big .news_001_pic{ margin-left:3px;} #pic_text_list li#big span{ width:302px} #pic_text_list li#big a.news_001_pic:hover{ background:#DFDFDF;} #pic_text_list{ padding:0; margin:0;} #pic_text_list li#big .news_001_pic{ padding:10px; background:#FFF; box-shadow:0 0 3px #CCCCCC;} #pic_text_list .tag{ margin-top:10px;} /* page&single */ .enter{ width:100%; height:auto; overflow:hidden;} .enter p{ font-size:12px; color:#666; line-height:22px;} .enter a{ color:#eb302f} .enter img{ max-width:100%; height:auto;} .title_page{ width:610px; border-left:solid 9px #eb302f; border-right:#CCC solid 1px; border-top:#CCC solid 1px;border-bottom:#CCC solid 1px;background:#FFF; padding:5px;} .enter_full .title_page,#nav_product_mue .title_page{ width:939px;} .title_page h1{ font-size:16px; margin:0;} #nav_product_mue .title_page{ margin-bottom:10px;} #nav_product_mue .title_page a{ font-size:12px; color:#eb302f; margin-left:5px;} .enter_full .des_page{ width:936px;} .title_page h1 .title_page .title_page b{ font-size:16px; color:#333; font-weight:normal; margin:0;} .des_page{ width:650px; padding:10px; margin-bottom:10px; border-bottom:dashed #CCCCCC 1px;} .des_page a{ font-size:12px; color:#999;} .des_page ul{ display:inline-block; margin-left:10px;} .des_page ul li{margin-left:10px;} #nogallery_enter .gallery_xz,#nogallery_enter .list-h,#nogallery_enter #enter_xz{ display:none !important;} #enter_xz{ background:#FFF; border:10px solid #fff;box-shadow: 0 1px 3px #333333; margin:15px 0 10px 5px;border-radius: 5px;} .smaoll_xzs,.smaoll_xzs li{ width:600px !important; min-height:400px;} .big_xzs,.big_xzs li{ width:930px !important; min-height:500px;} #enter_xz ul li{ text-align:center;} #enter_xz .next{ position:absolute; width:91px; height:100%; background: no-repeat center url("../images/next.png"); bottom:0; right:-91px; z-index:100; cursor:pointer;} #enter_xz .prve{ position:absolute; width:91px; height:100%; background:no-repeat center url("../images/prev.png"); bottom:0; left:-91px; z-index:100;cursor:pointer;} .bqc{ border-top:#CCC dotted 1px;} #bandds .list-h{ width:100%; display:block; overflow:hidden; padding:0; margin:0;} #bandds .list-h li{ float:left; margin:9px;} /* product */ .enter_cs{ display:block; width:650px; padding:10px 0 10px 0; font-size:18px; color:#eb302f; margin:15px 0; border-bottom:#999 1px dashed;} .product_pic{ width:624px; height:400px; display:block; overflow:hidden; border:solid #d6d6d6 3px; float:left; position:relative;} .product_pic .loading{ width:624px; height:400px;position:absolute; background: center no-repeat url("../images/loading.gif"); display:none;} .product_pic img{ width:624px; height:400px;} .product_text{ width:627px; height: auto; float:right; overflow:hidden;} .product_text h1{ font-size:18px; color:#333;} .product_text .time{ font-size:12px; color:#999; display:block; width:200px; margin:3px 0;} .tag_pro{ display:block; width:100%; height:auto; overflow:hidden;margin:10px 0;} .product_text ul li{ display:inline-block; margin-right:10px; text-decoration:none;} .product_text ul li a{ font-size:14px; color:#999;} .product_text ul li a:hover{ color:#eb302f;} .tag_pro a{ display:block; background:#666; color: #FFF; font-size:12px; text-decoration: none; margin:0 10px 5px 0; border-radius: 5px; float:left; padding:5px 5px; cursor: pointer;} .tag_pro a.selecttag{ background:#eb302f;} .tag_pro a:hover{ background:#eb302f;} .product_text span,.product_jianjie span{ display:block; width:100%;margin-bottom:0; color:#eb302f; font-size:16px; padding-bottom:5px; border-bottom:solid 1px #999; margin-top:0;} .product_text .de_product{ width:100%; height: auto; overflow:hidden;font-size:12px; color:#666; margin-bottom:5px;}.product_text .de_product span{ border:none;} .product_text .btn,.product_jianjie .btn{ display:block; width:260px; text-align:center; padding:10px 0; background:#ff9c00; border:3px solid #cecece; border-radius: 5px; font-size:18px; color:#FFF; text-decoration:none;} .product_jianjie .btn{ float:left;} .product_text .btn:hover{ background:#333;} .product .list{ width:624px; padding:2px; border:1px solid #CCC; height:79px; background:#FFF; float:left; margin-top:20px; } .product .list .prve,.product .list .next{ display:block; background:#e4e4e4; height:59px; padding:10px; font-size:12px; color:#FFF; float:left; line-height:55px; cursor:pointer; } .product .list .prve:hover,.product .list .next:hover{ background:#eb302f;} .product .list ul{ width: auto; float:left; display:block; height:81px; margin:0; padding:0;} .product .list .lsit_hover{ width:566px; float:left; display:block; height:81px; overflow:hidden;} .product .list ul li{ float:left; display:block; width:100px; height:75px; border:#CCC solid 2px; margin:0 5px;} .product .list ul li a img{ width:100px; height:75px; } .product .list ul li:hover,.bodee{ border:solid 2px #eb302f !important;} .product .list ul li a{ cursor:pointer;} .aligncenter { display: block; margin-left: auto; margin-right: auto; } .aligncenter p.wp-caption-text {display: block;margin-left: auto;margin-right: auto;text-align: center;} #full_prodcts_single{ overflow:hidden; width:100%;}#full_prodcts_single .product{ width:628px;} #full_prodcts_single .product_text{ width:100%; text-align:left;} #full_prodcts_single .product_pic,#full_prodcts_single .list{ float:left; overflow:hidden;} .product_jianjie{ float:right; width:305px; overflow:hidden;} #full_prodcts_single .enter_cs{ width:100%;} #full_prodcts_single .product .list .lsit_hover{ width:894px; float:left; display:block; height:84px; overflow:hidden;} #full_prodcts_single .product .list{ width:952px;} #full_prodcts_single .de_product{ margin:10px 0;} .de_product p{ font-size:14px; color:#333;} .relevant li{ width:470px !important;}.relevant_right li{ width:300px !important;} .relevatright_div,.relevatright_div ul{width:630px !important;} .relevat_b{ display:block; font-size:14px; border-bottom:#CCC dotted 1px; color:#666;} .relevat_div{ padding-top:10px !important;} #respond{ padding:10px 0; border-top:dashed #999999 1px; margin-top:20px;} .liuy3{ padding:10px 0; color:#666; font-size:12px;} .liuy2{ float:left; padding-right:10px; width:50px; overflow: hidden} #commentform input ,#commentform textarea { border:#ccc solid 1px; background:#FFF; padding:5px; } #commentform #submit{ padding:5px 20px; background:#eb302f ; color:#FFF; font-weight:bold; margin:0 0 0 60px; cursor:pointer;border-radius: 5px;} #commentform #submit:hover{ background:#333; } .kefu{ width:50px; height:auto; background:#fff; padding:2px; position:fixed; right:3px; top:200px; _position:absolute; _top:expression(eval(document.documentElement.scrollTop+200)); _left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||3)); border:solid 1px #CCC; z-index:3;} .kefu .kefu_d{ width:50px; height:50px; background-image:url(../images/Sprites.png); border-bottom:dotted 1px #CCCCCC; position:relative;} .kefu .kefu_d:hover{ background-color:#F2F2F2; cursor:pointer;} .kefu #top{ background-position:9px -803px;} .kefu #top a,.kefu #homes a,.kefu #shoucang a{ display:block;width:50px; height:50px;} .kefu #weixin{ background-position:9px -846px;} .kefu #weixin div{ width:201px; height:auto; overflow:hidden;} .kefu #kefu_severs{ background-position:9px -892px;} .kefu #kefu_severs div{ width: auto; height:auto; padding:10px;} .kefu #kefu_severs div a{ display:block; width:100%; float:left; padding:5px 0; border-bottom:#CCC dashed 1px; color:#666; font-size:14px; line-height:24px;} .kefu #shoucang{ background-position:9px -936px;} .kefu #homes{ background-position:9px -981px;} .kefu .kefu_d div{ position:absolute; top:0; right:50px; background:url(../images/white.png); display:none; border:#CCC solid 1px;} /* END screen media */ .left_mian #vedios ul{ width:279px !important; height:auto !important;} .left_mian .vedio_kuang{width:258px !important;} .left_mian #vedios .vedio_kuang iframe { width:259px !important;} .left_mian #s{ width:187px;} .searchd{ width:100%; padding:5px 0; overflow:hidden;} .searchd h2{ font-size:14px; color:#666; margin:2px 0;} #s{ width:230px; padding:3px; border:#999 solid 1px; overflow:hidden; float:left;} #searchform select{ width: auto; padding:2px; border:#999 solid 1px;} #searchsubmit{ background:#eb302f; padding:3px 10px; color:#FFF; cursor:pointer; border:none; text-transform: uppercase; float:left;} #searchsubmit:hover{ background:#333;} #searchform{ padding-bottom:7px; overflow:hidden;} .searchd b{ float:left; font-size:12px;} .searchd a{ font-size:12px; text-decoration:none;border-radius:3px; padding:2px 5px; margin:0 3px 8px 0; float:left; border: solid 1px #999;color:#eb302f;} .searchd a:hover{ background:#eb302f; color:#FFF;} .seach23 #searchform{ float:right; } .seach23 { width:100%; height:23px;} .seach23 p{ float:left; font-size:12px; color:#666; line-height:23px;} /*Alignment*/ .alignleft { display:inline; float:left; margin-right:1.625em;} .alignright {display:inline;float:right; margin-left:1.625em;} .aligncenter { clear:both; display:block; margin-left:auto; margin-right:auto;} .rssbook .btn,.rssbook .subscribeButton{ color: #ffffff; cursor: pointer; display: block;font-weight: bold; height: 22px; line-height: 22px; text-align: center; width: 90px;background:#676767; border: 1px solid #777;float: right;} .rssbook label { width:35px; padding-right:10px; color:#CCC; font-size:12px; display:block; float:left; line-height:26px;} .rssbook .sml_nameinput,.rssbook .sml_emailinput{ width:170px;font-size: 14px;height: 20px;margin-bottom: 5px;padding: 2px 3px; background:#999; border:solid 1px #999999;} .rssbook .required th,.rssbook .required td{ width:128px; float:left; display:block; padding-bottom:5px;} .rssbook .required td input { width:221px; margin-bottom:5px;} .rssbook .required th label{ width:100%;} .nav_product_mu ,#nav_product_mue { display:block; width:960px; height:auto; overflow:hidden;}#nav_product_mue { margin:0 auto; padding:10px 0; border-bottom:1px solid #999;} .nav_product_mu li{ width: auto; height:auto; display:block; float:left;} .nav_product_mu li.menu-item-has-children{ width:100%; margin-bottom:10px;} .nav_product_mu li a{ display:block; width: auto; height:auto; font-size:14px; color:#333; font-weight:bold; padding:2px; float:left; margin-right:10px; text-align:center; text-decoration:none;border-radius:5px;} .nav_product_mu li .sub-menu{ display:block; float:left;} .nav_product_mu li .sub-menu li{ display:inline-block; margin-right:10px;} .nav_product_mu li .sub-menu li a{ color:#999; font-size:12px ; width:auto ; padding:3px; font-weight:normal; cursor:pointer; } .nav_product_mu li .sub-menu li a:hover{ color:#fff !important;background:#ff0000;} #nav_product_mue #choose{ padding:3px 30px; background:#ff0000; color:#FFF; border: none;text-transform: uppercase; cursor:pointer;} #nav_product_mue #choose:hover{background:#333; } .select{ background:#ff0000; color:#FFF !important;font-weight:bold !important;} #tagesulg,#catsulg{ display: none;} #tagesname{ width:730px; background:#EAEAEA; border:none; font-size:14px; color:#666; padding:3px;} .s_search_ys{ background:#FFF; float:left; width:950px; padding:5px;} .order_list{ width:96%; padding:5px 2%; height:auto; display:block; overflow:hidden;} .order_list li{ display:block; width:100%; height:auto; padding-bottom:10px; border:#ccc solid 1px; margin-bottom:10px; overflow:hidden;} .order_list li .order_top{ width:96%; height:auto; padding:5px 2%; background:#E1E1E1; overflow:hidden; border-bottom:1px solid #CCC;} .order_list li .order_top b{ font-size:14px; color:#333; float:left;} .order_list li .order_top .star{ font-size:12px; color:#fff; float:right; display:block; background:#F60; border:#CCC; border-radius:5px; padding:3px; text-decoration:none;} .order_list li .order_top .star:hover{ background:#F30;} .order_list li .order_top em{ float:right; font-size:12px; color:#333;} .order_list li .order_pic{ width:15%; height:auto; overflow:hidden; display:block; float:left; margin:2%; float: left;} .order_list li .order_more{ width:80%; float:left; margin-top:2%;} .order_list li .order_post_name { font-size:14px; color:#333; text-decoration:none; width:100%; font-weight:bold;} .order_list li .red{ font-size:14px; color:#F00;} .order_list li p{ margin:0; color:#333;} .order_list li a{ color:#03F;} .order_list li .orderstatus{ display:block; padding:2px; border:#ccc solid 1px; margin:3px 0;} .order_comment{ width:96%; height:auto; overflow:hidden; padding:2%;} .order_comment p{ display:block; width:100%; overflow:hidden;} .order_star{ display:block; width:21px; height:17px; float:left; cursor:pointer;} #order_comment em{ float:left; margin-left:10px;} #order_stars{ width:107px; height:17px; background-image:url(../images/star_y.png); background-repeat:no-repeat; display:block;} .order_stars_4{ background-position:0 -21px ;} .order_stars_3{ background-position:0 -42px ;} .order_stars_2{ background-position:0 -63px ;} .order_stars_1{ background-position:0 -84px ;} .order_comment textarea{ border:solid #CCC 1px; background:#FFF;border-radius:5px; padding:2%; font-size:14px; color:#666; width:95%;} .order_comment .button-primary{ border:#FFF solid 1px; background:#F60; color:#FFF; padding:5px 8px; cursor:pointer;border-radius:5px; margin-top:10px; } .order_comment .button-primary:hover{ background:#F30;} .order-pagination{ width:96%; padding:2%; height:auto; overflow:hidden; } .order-pagination span{ font-size:14px; color:#333 ; padding:2px 5px; float:left; display: block;margin:0 2px;} .order-pagination a{ display:block; float:left; padding:2px 5px; border:solid #CCC 1px; margin:0 2px; color:#333; text-decoration:none;} .order-pagination a:hover{ color:#FFF; background:#666;} .per_title{ font-size:14px; display:block; width:100%; padding:2px 0; border-bottom:dashed 1px #CCCCCC; font-weight:bold;} .per{ display:block; width:95%; padding:5px 2%; background:#F7F7F7; border: none; font-size:14px; color:#666; font-weight:bold; float:left;} .right_btn{ float:right; color:#069 !important; font-size:12px; font-weight:normal;} /* shop*/ .shop_form{ width:100%; height:auto; overflow:hidden;} .information{ display:block; width:95%; padding:5px 2%; border:#F60 solid 1px; background:#FDEBC6; color:#F00; margin:5px 0 15px 0;font-size:14px; float:left; } .success{border:#9C0 solid 1px; background:#E7F4A8;} .shop_form div{ width:96%; padding:3px 2%; height: auto; float:left; overflow:hidden; margin-bottom:8px;} .shop_form label{ font-size:14px; color:#333; margin-right:10px; width:105px; display:block; float:left; } .shop_form input{ float:left; width:40%;} .shop_form input,.shop_form textarea { padding:3px; border:#999 solid 1px; font-size:14px; color:#666;border-radius:3px;} .shop_form textarea{ width:96%; padding:1.5%; margin:3px 0;} .shop_form div em{ font-size:12px; color:#999;line-height:18px; margin-left:10px;} .shop_form div a{ margin-right:10px;} .shop_form #wp-submit{ padding:5px 25px; background:#F60; color:#FFF; cursor:pointer;float:right;} .shop_form .wp-submit{ padding:5px 45px; background:#F60; color:#FFF; cursor:pointer; border:solid #FFF 1px; margin:5px 0 0 112px;} .shop_form #wp-submit:hover,.shop_form .wp-submit:hover{ background: #F30; } #rememberme{ width:17px; margin:5px 0 0 112px;} .captcha{margin:5px 0 0 112px; } .captcha img{ width:180px; height:auto; border: solid #CCC 1px;} #original{ font-size:14px; color:#666; text-decoration:line-through; margin:0 10px 0 0} #price_now,#price_all{ font-size:14px; color:#F00;} #shop_price{ width:100%; margin:10px 0;} #shop_price_all{ width:100%; margin:0 0 10px 0;} .shop_comment{ width:100%; height:auto; margin:20px 0;} .shop_comment .shop_comment_title{ width:100%; margin:10px 0; font-size:16px; color:#333; border-bottom:dashed 1px #CCCCCC; display:block;} .shop_comment li{ width:100%; height:auto; margin-bottom:5px; border-bottom:#E6E6E6 1px dotted;} .shop_comment li p{ width:100%; height:auto; display: block; overflow:hidden;font-size:12px; color:#666;} .shop_comment li p b{ font-size:14px; color:#333; float:left;} .shop_comment li p span{ font-size:12px; color:#999; float:right;} .btn{ cursor:pointer;} .close_order{ float: right; line-height:21px; color:#999; font-weight:normal; cursor:pointer; font-size:12px;} .de_product p .original_price{ color:#333; text-decoration:line-through; text-decoration:line-through; float:none} .de_product p .price{ color:#F60; font-size:18px;} .shop_form{ width:100%; height:auto; overflow:hidden; padding-top:20px; } .hidden_block{ display:none;} .information{ display:block; width:95%; padding:5px 2%; border:#F60 solid 1px; background:#FDEBC6; color:#F00; margin:5px 0 15px 0;font-size:14px; float:left; } .information a{ font-size:14px; color:#069; margin:0 3px; text-decoration:none;} .success{border:#9C0 solid 1px; background:#E7F4A8;} .enter_cs{ display:block; width:628px; padding:0; margin:15px 0; border:#ccc 1px solid; overflow:hidden;background:#FFF;} .enter_cs a{font-size:14px;padding:5px 15px; float:left; cursor:pointer; color: #333; border-right:solid #ccc 1px; } .enter_cs a.cutyes{ background:#999; color:#FFF; font-weight:bold;} .tag_pro b{display:block; float:left; font-size:14px;} #shop_login{ float:right; height:34px; line-height:34px;} #shop_login a{ font-size:12px; color:#FFF; display:block; margin-right:10px; float:left;} #shop_login a:hover{ text-decoration:underline;} a.btn_login{ display:block; padding:0 18px; background:#a8302f; color:#FFF; height:20px; line-height:20px; margin-top:5px;border-radius:5px; border:#FFF solid 1px; } a.btn_login:hover{ color:#FFF; background:#000; color:#CCC; text-decoration: none !important;} .original_price{ color:#CCC; font-size:12px; float:left; display:block; text-decoration:line-through; margin-right:10px; line-height:20px; padding:1px 3px;} #price{ color:#FFF; margin-left:0; padding:1px 3px; background:#eb302f; font-size:14px;border-radius:3px; float:left;font-weight:bold; font-style:normal;} #price_l{ color:#fff; float:left; margin:0 0 3px 0;padding:1px 5px; background:#333; font-size:14px;border-radius:3px; font-size:14px; } .shop_p .original_price{ color:#666; font-size:12px; width:100px; margin:0;} .shop_p {margin:3px 0 3px 0; } .prices_p,.case_pic .time{ width:100%; display:block; overflow:hidden; padding:0 0 10px 10px;} #white{ color:#CCC; margin-right:5px;} #full_prodcts_single .de_product{ margin:10px 0; max-height:245px;} #black{ color:#333; margin-left:10px;} .case_pic ul li p{ height:55px;} #big #price,#big .original_price{ float:none; display:inline;} .ppre{ margin:5px 0;} /*2015-3-19 shop_community*/ #cat_bbs_list{ width:99%; overflow:hidden; float:left; background:#FFF; border:#CCC solid 1px;} #cat_bbs_list_title{ width:96%;padding:15px 2% 8px 2%;height:auto; background:#fff;border-bottom:#CCC solid 1px; overflow:hidden;} #cat_bbs_list_title span{ display:block; float:left;} #cat_bbs_list .btn_loop{ width:96%;padding:10px 2%; float:left;border-bottom:#CCC solid 1px; overflow:hidden; background:#F3F3F3} #cat_bbs_list .btn_loop a{ font-size:14px; margin-right:15px; color:#333; text-decoration:none; background-image:url(../images/bbs_sp.png); background-repeat: no-repeat; padding-left:25px; line-height:30px;} #cat_bbs_list .btn_loop a:hover{ text-decoration:underline;} #cat_bbs_list .btn_loop a#all{ background-position:-2px -8px; } #cat_bbs_list .btn_loop a#jinghua{ background-position:-2px -44px; } #cat_bbs_list .btn_loop a#huitie{ background-position:-2px -84px; } #cat_bbs_list_title h1,#post_bbs_page_from_title h1{ font-size:16px; color:#666; margin:5px 0; float:left; margin-right:10px;} #cat_bbs_list_title b{ font-size:12px; font-weight:normal; color:#666; float:left; line-height:30px; margin-left:10px;} #cat_bbs_list_title .post_btn,#post_bbs_page_from_title .post_btn{ float:right; display:block; padding:3px 5px; background:#3998C6; color:#FFF; font-size:14px;border-radius:5px; } #cat_bbs_list_title .post_btn:hover{ background:#333;} #cat_bbs_list ul li{ width:96%;padding:0 2%;height:auto; display:block; float:left; border-bottom:#CCC dashed 1px;} #cat_bbs_list ul li:hover{ background:#F3F3F3;} #author_bbs_avatar { width:80px; overflow:hidden; float:left; min-width:50px; text-align:center; padding-bottom:15px; padding-top:15px; position: relative;} #author_bbs_avatar #louzhu{ width:36px; height:36px; position:absolute; top:0; right:0; background: 0 -128px url(../images/bbs_sp.png);} #author_bbs_avatar #huifu{ width:36px; height:36px; position:absolute; top:0; right:0; background: 0 -183px url(../images/bbs_sp.png);} #author_bbs_avatar a{ display:inline-block; padding:3px; border:#999 1px solid; background:#FFF; overflow:hidden; font-size:0;border-radius:100%; } #author_bbs_avatar b{ font-size:14px; color:#999;} #author_bbs_avatar a img{ width:100%; height:auto;border-radius:100%;} #cat_bbs_list ul{ width:100%; padding:0; margin:0; overflow:hidden; display:block;} #cat_bbs_list ul li .left_bbs_single{ display:block; overflow:hidden; margin-left:100px;padding:15px 0;} #cat_bbs_list ul li #left_bbs_single{ margin-left:0; padding-left:20px; background:#FAFAFA; padding-right:10px; padding-bottom:120px; position:relative; } #cat_bbs_list ul li .left_bbs_single .bbs_a_title{ font-size:16px; color:#666; font-weight:bold; text-decoration:none;} #cat_bbs_list ul li .left_bbs_single .bbs_a_title:hover{ text-decoration:underline;} #cat_bbs_list ul li .left_bbs_single div,#cat_bbs_list ul li .author_bbs_avatar div{ width:100%; overflow:hidden; margin:5px 0;} #cat_bbs_list ul li .left_bbs_single div b{ display:block; padding:3px 5px; background:#A5A5A5; color:#FFF; font-size:12px; margin-right:10px; float:left;border-radius:5px; font-weight:normal;} #cat_bbs_list ul li #author_bbs_avatar div b{ font-size:12px; font-weight:normal; display:inline-block; margin-bottom:5px;} #cat_bbs_list ul li #author_bbs_avatar div b.jinghua{ padding:3px 5px; background:#7ECDD3; color:#FFF; font-size:12px;border-radius:5px;} #cat_bbs_list ul li #author_bbs_avatar div b.bbs_over{ padding:3px 5px; background:#70AB1F; color:#FFF; font-size:12px;border-radius:5px;} #cat_bbs_list ul li #author_bbs_avatar div b.admin_answer{ padding:3px 5px; background:#F60; color:#FFF; font-size:12px;border-radius:5px;} #cat_bbs_list ul li span div b.zhiding{ background:#FF7171;} #cat_bbs_list ul li span div b.jinghua{ background:#7ECDD3} #cat_bbs_list ul li span div b.bbs_over{ background:#70AB1F} #cat_bbs_list ul li span p{ margin-top:10px;text-indent:0 !important;word-break:break-all; /*支持IE,chrome,FF不支持*/  word-wrap:break-word;/*支持IE,chrome,FF*/} #cat_bbs_list ul li span a#zd_shop_bbs{ color:#F00;} .nav_bbs{ width:100%; height:auto; padding:10px 0; overflow:hidden;} .nav_bbs a{ display:block; padding:3px 8px; border:solid 1px #CCCCCC; margin-left:5px; float:left; color:#666; text-decoration:none;} .nav_bbs a:hover,.nav_bbs a.current{ background:#666; color:#FFF;} .post_bbs_page_from{ width:96%;padding:10px 1.5%; overflow:hidden; } .post_bbs_page_from #tougao_content_ifr{border:solid 1px #CCCCCC;} #post_bbs_page_from_title{width:96%;padding:10px 2%; overflow:hidden;background:#F3F3F3; margin-bottom:20px;} .post_bbs_page_from .cat{ width:100%; height:auto; padding:5px 0; margin-bottom:15px;} .post_bbs_page_from .cat label { font-size:14px; color:#666;} .post_bbs_page_from input#tougao_title,.post_bbs_page_from input#CAPTCHA{ padding:8px; border:solid 1px #CCCCCC; width:60%;} .error{ display:block; padding:5px; background:#FFD9D9; border:#F00; color:#F00; font-size:14px; text-indent:0 !important;} .post_bbs_page_from .submit{ float: left; display:block; padding:5px 60px; border: none; cursor:pointer; background:#3998C6; color:#FFF; font-size:16px;border-radius:5px; margin-right:20px;} .post_bbs_page_from .reset{ float: left; display:block; padding:5px 60px; border: none; cursor:pointer; background:#ccc; color:#FFF; font-size:16px;border-radius:5px;} .yzmmmm{ display:block; width:100%;} .tijiao{ padding:10px 0 20px 50px; overflow:hidden;} .wp-editor-tabs{ display:none !important;} .single_bbs_avatar{ padding-right:10px; } #cat_bbs_list ul li#single_bbs_li{ padding:0 0 0 2% !important; width:98%;} #bbs_enter p,#bbs_enter a, #bbs_enter b{ font-size:14px;} #cat_bbs_list ul li span .datetime{ position:absolute; display:block; right:10px; bottom:15px; width:200px;} #cat_bbs_list ul li span .datetime a{ margin-left:10px;} .comment_ector{ width:100%; overflow:hidden; position:relative; padding-top:50px;} .comment_ector .tutle{position:absolute; left:10px; top:0; width:100%; height:60px;} .comment_ector .avatar_comment{ width:60px; height:60px;display:block; padding:3px; border:#999 1px solid; background:#FFF; overflow:hidden; font-size:0;border-radius:100%; float:left; margin-right:10px;} .comment_ector .avatar_comment img{width:60px; height:60px;border-radius:100%; } .comment_ector span{ width: auto; display: block; float:right; height:32px; padding:15px 15px 0 0} #comment_bbs{ width:98%; padding-top:30px !important; border:solid 1px #CCCCCC;} .comment_ector b{ font-size:14px; color:#999; line-height:51px;} #commentform #submit{ margin:0 !important; } .per b,.per a{ line-height:60px;} .per_title{ display:block; overflow:hidden; border-bottom:solid 1px #CCCCCC; padding:0;} .per_title a{ display:block; padding:5px 15px; background:#CCC; float:left; color:#fff; margin-right:1px; cursor:pointer; text-decoration: none;} .per img{ float:left; margin-right:20px; width:60px; height:60px; border-radius:60px; border:solid 4px #FFFFFF;} .wptdb_right{position: absolute;right: 5px;z-index: 99999999999;} /*#btnlogin{ font-size: 15px;padding: 4px;margin-right:10px;text-decoration: none;float: left; text-align: center; border: 1px solid #f80; border-radius: 4px; box-shadow: 0 1px 1px rgba(255,255,255,1), inset 0 1px 1px rgba(255,255,255,.6); color: #fff; text-shadow: 0 1px 1px rgba(0,0,0,.3);background: #f80; background: -webkit-gradient(linear, left top, left bottom, from(#ffbb33),to(#ff8800));}*/ #btnlogin{ width: 78px; height: 43px; background:url("../images/index/login_a.png"); cursor: pointer; margin-top: -6px;} #btnlogin:hover{ background:url("../images/index/login_as.png");} /*#btnregister{ font-size: 15px;padding: 4px;margin-right:10px;text-decoration: none;float: left; text-align: center; border: 1px solid #0095d8; border-radius: 4px; box-shadow: 0 1px 1px rgba(255,255,255,1), inset 0 1px 1px rgba(255,255,255,.6); color: #fff; text-shadow: 0 1px 1px rgba(0,0,0,.3);background: #0095d8; }*/ #btnregister{ width: 173px; height: 43px; background:url("../images/index/register_a.png"); cursor: pointer; margin-top: -6px;} #btnregister:hover{ background:url("../images/index/register_as.png");} /*#btnlogout{ font-size: 15px;padding: 4px;margin-right:10px;text-decoration: none;float: left; text-align: center; border: 1px solid #7d1110; border-radius: 4px; box-shadow: 0 1px 1px rgba(255,255,255,1), inset 0 1px 1px rgba(255,255,255,.6); color: #fff; text-shadow: 0 1px 1px rgba(0,0,0,.3);background: #eb302f; }*/ #btnlogout{ width: 78px; height: 43px; background:url("../images/index/logout_a.png"); cursor: pointer; margin-top: -6px;} #btnlogout:hover{ background:url("../images/index/logout_as.png");} ================================================ FILE: src/main/webapp/style/eu/index/thickbox.css ================================================ #TB_overlay { background: #000; opacity: 0.7; filter: alpha(opacity=70); position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 100050; /* Above DFW. */ } #TB_window { position: fixed; background-color: #fff; z-index: 100050; /* Above DFW. */ visibility: hidden; text-align: left; top: 50%; left: 50%; -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); } #TB_window img#TB_Image { display: block; margin: 15px 0 0 15px; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; border-top: 1px solid #666; border-left: 1px solid #666; } #TB_caption{ height: 25px; padding: 7px 30px 10px 25px; float: left; } #TB_closeWindow { height: 25px; padding: 11px 25px 10px 0; float: right; } #TB_closeWindowButton { position: absolute; left: auto; right: 0; width: 29px; height: 29px; border: 0; padding: 0; background: none; cursor: pointer; outline: none; -webkit-transition: color .1s ease-in-out, background .1s ease-in-out; transition: color .1s ease-in-out, background .1s ease-in-out; } #TB_ajaxWindowTitle { float: left; font-weight: 600; line-height: 29px; overflow: hidden; padding: 0 29px 0 10px; text-overflow: ellipsis; white-space: nowrap; width: calc( 100% - 39px ); } #TB_title { background: #fcfcfc; border-bottom: 1px solid #ddd; height: 29px; } #TB_ajaxContent { clear: both; padding: 2px 15px 15px 15px; overflow: auto; text-align: left; line-height: 1.4em; } #TB_ajaxContent.TB_modal { padding: 15px; } #TB_ajaxContent p { padding: 5px 0px 5px 0px; } #TB_load { position: fixed; display: none; z-index: 103; top: 50%; left: 50%; background-color: #E8E8E8; border: 1px solid #555; margin: -45px 0 0 -125px; padding: 40px 15px 15px; } #TB_HideSelect { z-index: 99; position: fixed; top: 0; left: 0; background-color: #fff; border: none; filter: alpha(opacity=0); opacity: 0; height: 100%; width: 100%; } #TB_iframeContent { clear: both; border: none; } .tb-close-icon { display: block; color: #666; text-align: center; line-height: 29px; width: 29px; height: 29px; position: absolute; top: 0; right: 0; } .tb-close-icon:before { content: "\f158"; font: normal 20px/29px dashicons; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #TB_closeWindowButton:hover .tb-close-icon, #TB_closeWindowButton:focus .tb-close-icon { color: #00a0d2; } ================================================ FILE: src/main/webapp/style/eu/theme/css/style-default.css ================================================ @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,800,700,600&subset=latin,latin-ext); /*! * QuickAdmin v1.3.1 * * Copyright MosaicPro * http://www.mosaicpro.biz * * Designed and built exclusively for sale @Envato Marketplaces. */ body { font-family: 'Open Sans', sans-serif; background: #f0f0f0; font-size: 13px; color: #7c7c7c; position: relative; } *, a:focus { outline: none !important; } button:focus { outline: none !important; } button::-moz-focus-inner { border: 0; } a:hover { color: #333333; } a { color: #4a8bc2; outline: 0 !important; } h1, h2, h3, h4, h5, h6 { font-family: 'Open Sans', sans-serif; margin: 0 0 5px; font-weight: 400; text-shadow: 0 1px 0 #ffffff; color: #4d4d4d; } h1.glyphicons, h2.glyphicons, h3.glyphicons, h4.glyphicons, h5.glyphicons, h6.glyphicons { color: #7c7c7c; } h1 span, h2 span, h3 span, h4 span, h5 span, h6 span { color: #afafaf; font-weight: 400; padding: 0 5px; font-style: italic; } h1 span, h2 span, h3 span { font-size: 50%; text-transform: none; padding: 0; position: relative; top: -3px; font-weight: 400; } h1 { line-height: 40px; } h2, h3 { line-height: 30px; } h2 { font-size: 26px; } .heading-buttons h1, .heading-buttons h2, .heading-buttons h3, .heading-buttons h4, .heading-buttons h5, .heading-buttons h6 { display: inline-block; margin: 0 15px; } .heading-buttons h1.glyphicons, .heading-buttons h2.glyphicons, .heading-buttons h3.glyphicons, .heading-buttons h4.glyphicons, .heading-buttons h5.glyphicons, .heading-buttons h6.glyphicons { display: inline-block; } .heading-buttons .buttons { margin-top: 3px; margin-right: 15px; text-align: right; } .heading-buttons .btn { margin-right: 15px; } .heading-buttons .btn:last-child { margin-right: 0; } p { margin: 0 0 10px; line-height: normal; } .lead { margin: 0 0 10px; } .glyphicons { color: #7c7c7c; } ul.icons { text-align: left; padding: 0; } ul.icons li { display: block; padding: 0 0 0 25px; line-height: 22px; color: #7c7c7c; } ul.icons li i:before { color: #7c7c7c; font-size: 17px; left: 0; top: 4px; } input, button, select, textarea { font-family: 'Open Sans', sans-serif; } pre.prettyprint { word-break: normal; word-wrap: normal; white-space: pre; background-color: #f8f8f8; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(50%, #f8f8f8), color-stop(50%, #eeeeee)); background-image: -webkit-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: -moz-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: -o-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: linear-gradient(#f8f8f8 50%, #eeeeee 50%); -moz-background-size: 38px 38px; background-size: 38px 38px; border: 1px solid #ebebeb; display: block; line-height: 19px; margin-bottom: 15px; overflow: visible; overflow-y: hidden; padding: 0 0 0 4px; } pre.prettyprint .glyphicons { padding: 0 0 0 20px; } pre.prettyprint .glyphicons i:before { font-size: 17px; top: 1px; } #content pre.prettyprint, #content pre.prettyprint span { color: #7c7c7c; } blockquote { margin: 0; padding: 0 0 0 5px; } blockquote, blockquote.pull-right { border: none; } blockquote p { font-weight: 400; font-size: 13px; margin: 0 0 10px; } blockquote small { color: #4a8bc2; } .separator { padding: 15px 0; display: block; } .separator.bottom { padding: 0 0 15px; } .separator.top { padding: 15px 0 0; } hr { border-top-color: #dbdbdb; border-bottom: none; margin: 15px 0; } hr.separator { padding: 0; } hr.separator.top { margin: 15px 0 0; } hr.separator.bottom { margin: 0 0 15px; } @media print { html, body { height: auto !important; min-height: none !important; } @page { size: auto; margin: 10mm 10mm 10mm 10mm; } #content { margin: 0 !important; padding: 0 !important; } .breadcrumb, #tlyPageGuideWrapper, .filter-bar { display: none !important; } .table td, .table th { vertical-align: middle; } .table th { padding: 3px; text-align: center; } .table img { float: left; } } .map_canvas img { max-width: none !important; } .streetview { width: 100%; height: 300px; } .ui-dialog-vevent .dtstart { display: none; } .ui-dialog-vevent .website { margin: 0 0 1em; } #fontawesome [class^="icon-"], #fontawesome [class*=" icon-"] { font-size: 24px; line-height: 24px; vertical-align: middle; margin: 0 5px 0 0; } #fontawesome a { line-height: 40px; } .innerLR { padding: 0 15px; position: relative; } .innerTB { padding: 15px 0; position: relative; } .innerAll { padding: 15px; position: relative; } .innerL { padding-left: 15px; position: relative; } .innerR { padding-right: 15px; position: relative; } .innerT { padding-top: 15px; position: relative; } .innerB { padding-bottom: 15px; position: relative; } .center { text-align: center !important; } .margin-bottom-none { margin-bottom: 0 !important; } .margin-none { margin: 0 !important; } .padding-none { padding: 0 !important; } .border-none { border: none !important; } .box-shadow-none { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .padding-none-TB { padding-bottom: 0 !important; padding-top: 0 !important; } .relativeWrap { position: relative; } .text-primary { color: #4a8bc2; } .text-uppercase { text-transform: uppercase; } .text-faded { color: #d7d7d7 !important; } .text-large { font-size: 35px; line-height: 40px; } .text-xlarge { font-size: 50px; line-height: 50px; } .text-xxlarge { font-size: 70px; line-height: 70px; } .text-underline { text-decoration: underline; } .text-right { text-align: right !important; } .containerBg { background: #f0f0f0; } .whiteBg { background: #fff; } .row-merge { position: relative; } .row-merge > [class*="span"] ~ [class*="span"] { margin-left: 0; } .row-merge > [class*="span"] ~ [class*="span"]:after { position: absolute; top: 0; bottom: 0; width: 1px; background: #dbdbdb; content: ""; } .row-merge > [class*="span"] ~ [class*="span3"] { width: 25.26315789473684%; } .row-merge > [class*="span"] ~ [class*="span4"] { width: 33.68421052631579%; } .row-merge > [class*="span"] ~ [class*="span5"] { width: 42.10526315789473%; } .row-merge > [class*="span"] ~ [class*="span6"] { width: 50.74626865671642%; } .row-merge > [class*="span"] ~ [class*="span8"] { width: 67.66169154228855%; } .row-merge > [class*="span"] ~ [class*="span9"] { width: 75.78947368421052%; } .row-merge.border-top, .row-merge ~ .row-merge { border-top: 1px solid #dbdbdb; } .row-merge.border-bottom { border-bottom: 1px solid #dbdbdb; } #wrapper { overflow: hidden; overflow-y: auto; float: left; width: 100%; } body > .container-fluid { padding: 0; background: #f0f0f0; } body > .container-fluid.fixed { margin: 30px auto 30px; border-left: 1px solid #d8d8d8; border-right: 1px solid #d8d8d8; width: 94%; } body > .container-fluid.documentation { background: #fff; } body > .container-fluid.fixed { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } body > .container-fluid.fixed #wrapper { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } body > .container-fluid.fixed #content { -webkit-border-radius: 0 5px 0 0; -moz-border-radius: 0 5px 0 0; border-radius: 0 5px 0 0; } body > .container-fluid.fixed #footer { -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } body > .container-fluid.fixed .navbar.main, body > .container-fluid.fixed .navbar.main .wrapper { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } #content { position: relative; overflow: hidden; margin: 0; min-width: 320px; min-height: 500px; padding: 0 0 15px; background: #f0f0f0; } #content > .menubar { border-left: none; border-right: none; } #content > p { padding: 0 15px 5px; } #content > h1, #content > h2, #content > h3, #content > h4, #content > h5, #content > h6 { margin: 18px 15px 15px; } #content > .filter-bar { border-right: none; border-left: none; } #content .heading-buttons { margin-top: 15px; } #content .heading-arrow { text-transform: uppercase; border-bottom: 1px solid #dbdbdb; margin: 0 0 15px; padding: 0 15px; font-size: 11pt; height: 35px; line-height: 30px; position: relative; } #content .heading-arrow:after { content: ""; display: inline-block; width: 0; height: 0; border-bottom: 8px solid #dbdbdb; border-right: 8px solid transparent; border-left: 8px solid transparent; position: absolute; bottom: 0; left: 15px; } #content .heading-arrow.glyphicons { padding: 0 10px 0 40px; } #content .heading-arrow.glyphicons i:before { font-size: 17px; left: 15px; } #content .heading-arrow.margin-bottom-none { margin-bottom: 0; } #content > .widget { border-left: 0; border-right: 0; } #content > .widget .widget-head, #content > .widget .widget-body { border-left: 0; border-right: 0; } #content > .widget:last-child { margin: 0; } #content > .table { border-left: none; border-right: none; } #content > .table tr td:first-child { border-left: none; } #footer { font-weight: 600; position: relative; overflow: hidden; z-index: 10000; border-bottom: 1px solid #dbdbdb; border-top: 1px solid #dbdbdb; } #footer a:not(.btn) { color: #7c7c7c; } #footer .copy { background: #e5e5e5; text-align: center; padding: 5px 10px; font-size: 12px; height: 20px; } #footer .copy a { color: #7c7c7c; text-decoration: underline; } html.sidebar #content { margin: 0 0 0 65px; } html.sidebar .menu-right #content { margin: 0 65px 0 0; } @media (min-width: 768px) { html.sticky-sidebar.sidebar:not(.fixed) body { overflow: hidden; } html.sticky-sidebar.sidebar:not(.fixed), html.sticky-sidebar.sidebar:not(.fixed) body, html.sticky-sidebar.sidebar:not(.fixed) body > .container-fluid, html.sticky-sidebar.sidebar:not(.fixed) #wrapper { min-height: 100%; height: 100%; } html.sticky-sidebar.sidebar:not(.fixed) #wrapper { margin-bottom: -32px; } html.sticky-sidebar.sidebar:not(.fixed) #menu { position: fixed; bottom: 0; } html.sticky-sidebar.sidebar:not(.fixed) #content { padding-bottom: 47px; } } @media (min-width: 768px) { html.sticky-top:not(.fixed) #content { padding-top: 50px; } html.sticky-top:not(.fixed) .navbar.main { position: fixed; top: 0; left: 0; right: 0; z-index: 10000; } html.sticky-top:not(.fixed).sidebar .navbar.main { left: 65px; } html.sticky-top:not(.fixed).sidebar .menu-right .navbar.main { left: 0; right: 65px; } html.sticky-top:not(.fixed) .menu-hidden .navbar.main { left: 0 !important; right: 0 !important; } html.sticky-top:not(.fixed).front #content { padding-top: 100px; margin: 0 !important; } } html.fixed, html.fixed body { min-height: auto; height: auto; overflow: visible; } body > .container-fluid.fixed { min-height: auto; height: auto; } body > .container-fluid.fixed #wrapper { position: relative; overflow: hidden; min-height: auto; height: auto; margin: 0; } body > .container-fluid.fixed #menu { position: absolute; height: 100%; min-height: 100%; bottom: auto; } .ui-resizable-helper.menu { border: 1px dotted gray; border-left: none; background: rgba(0, 0, 0, 0.3); } .ui-resizable-handle { width: 3px; border-style: solid; border-width: 0; border-color: rgba(0, 0, 0, 0.4); } .dropdown-menu { z-index: 100000; } #menu { width: 65px; float: left; position: absolute; left: 0; top: 0; overflow: hidden; height: 100%; min-height: 100%; background: #1f2123; font-size: 11px; } #menu .appbrand { font-weight: 700; display: block; text-decoration: none; line-height: 10px; padding: 10px; text-align: center; color: #ffffff; border-bottom: 1px solid #161718; } #menu .profile { display: block; padding: 10px 0; border-bottom: 1px solid #161718; border-top: 1px solid #2a2c2e; } #menu .profile a { border: 1px solid #161718; display: inline-block; width: 36px; height: 36px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } #menu .profile a img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } #menu .profile a:hover { border-color: #000000; } #menu .slim-scroll > ul, #menu > ul { list-style: none; float: left; margin: 0; padding: 0; display: block; width: 100%; border-top: 1px solid #2a2c2e; } #menu .slim-scroll > ul > li, #menu > ul > li { display: block; border-bottom: 1px solid #161718; box-shadow: 0 1px 0 0 #2a2c2e; position: relative; overflow: hidden; padding: 0; margin: 0; } #menu .slim-scroll > ul > li a, #menu > ul > li a { display: block; width: auto; padding: 10px; margin: 0; line-height: 10px; text-decoration: none; font-weight: 600; color: #4c4d4f; text-align: center; } #menu .slim-scroll > ul > li a.glyphicons, #menu > ul > li a.glyphicons { padding: 10px 5px; } #menu .slim-scroll > ul > li a.glyphicons i, #menu > ul > li a.glyphicons i { display: block; padding: 0 0 5px; } #menu .slim-scroll > ul > li a.glyphicons i:before, #menu > ul > li a.glyphicons i:before { display: block; font-size: 17px; color: #4c4d4f; top: auto; left: auto; position: relative; text-align: center; } #menu .slim-scroll > ul > li.glyphicons > a, #menu > ul > li.glyphicons > a { padding: 10px 5px; } #menu .slim-scroll > ul > li.glyphicons > a i, #menu > ul > li.glyphicons > a i { display: block; padding: 0 0 5px; } #menu .slim-scroll > ul > li.glyphicons > a i:before, #menu > ul > li.glyphicons > a i:before { display: block; font-size: 17px; color: #4c4d4f; top: auto; left: auto; position: relative; text-align: center; } #menu .slim-scroll > ul > li.active, #menu > ul > li.active { box-shadow: 0 1px 0 0 #2a2c2e; border-top: 1px solid #2a2c2e; position: relative; overflow: visible; } #menu .slim-scroll > ul > li.active > a, #menu > ul > li.active > a { background: #161718; color: #737474; } #menu .slim-scroll > ul > li.active.glyphicons a i:before, #menu > ul > li.active.glyphicons a i:before { color: #737474; } #menu .slim-scroll > ul > li.active:first-child, #menu > ul > li.active:first-child { border-top: none; } #menu .slim-scroll > ul > li:hover > a, #menu > ul > li:hover > a { color: #737474; } #menu .slim-scroll > ul > li:hover.glyphicons a i:before, #menu > ul > li:hover.glyphicons a i:before { color: #737474; } #menu.ui-state-disabled { opacity: 1; filter: alpha(opacity=100); } .menu-left .ui-resizable-e { background: rgba(255, 255, 255, 0.2); right: 0; border-left-width: 1px; border-right-width: 1px; } .menu-left .ui-resizable-e:hover { background: rgba(255, 255, 255, 0.4); } body .menu-right .ui-resizable-w { background: rgba(255, 255, 255, 0.2); left: 0; border-left-width: 1px; border-right-width: 1px; } body .menu-right .ui-resizable-w:hover { background: rgba(255, 255, 255, 0.4); } body .menu-right #menu { left: auto; right: 0; border-right: none; border-left: 1px solid #d8d8d8; } body .menu-right.fixed #content { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } body .menu-right.fixed .navbar.main, body .menu-right.fixed .navbar.main .wrapper { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } .menu-hidden #menu { display: none; } .menu-hidden #content { margin: 0 !important; } .menu-hidden .navbar.main .btn-navbar { left: 0; border-left: none; } .menu-hidden .navbar.main .topnav.tn1 { left: 37px; } .menu-hidden.login .navbar.main .appbrand, .menu-hidden.documentation .navbar.main .appbrand { display: inline-block; border: none; } .menu-hidden.login .navbar.main .appbrand span, .menu-hidden.documentation .navbar.main .appbrand span { border: none; } .navbar.main { height: 49px; background-color: #4a8bc2; border-bottom: 1px solid #346d9d; margin: 0; } .navbar.main .btn-navbar { height: 49px; line-height: 49px; padding: 0 10px; margin: 0; float: left; display: block; border: none; background: #4a8bc2; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .btn-navbar .icon-bar { background: #ffffff; box-shadow: 0 1px 0 #346d9d; } .navbar.main .btn-navbar:hover { background: #4286bf; } .navbar.main .btn-navbar.ui-state-disabled { opacity: 1; filter: alpha(opacity=100); } .navbar.main .topnav { margin: 0; padding: 0; list-style: none; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; } .navbar.main .topnav.pull-left + .topnav.pull-left { border-left: none; } .navbar.main .topnav.pull-left + .topnav.pull-left > li:first-child { border-left: none; } .navbar.main .topnav > li { position: relative; float: left; height: 49px; line-height: 49px; display: block; padding: 0 0 0 10px; } .navbar.main .topnav > li a { cursor: pointer; } .navbar.main .topnav > li > a { display: block; color: #ffffff; text-decoration: none; padding: 1px 11px 0 9px; height: 49px; line-height: 50px; /* &:hover { background: darken(@navbarBg, 2%); } */ } .navbar.main .topnav > li > a > img { margin: 0 0 3px; } .navbar.main .topnav > li > a.glyphicons { padding: 0 11px 0 9px; } .navbar.main .topnav > li > a.glyphicons i { padding: 0 10px 0 0; display: block; float: left; width: 17px; line-height: 49px; height: 49px; } .navbar.main .topnav > li > a.glyphicons i:before { color: #ffffff; font-size: 17px; position: relative; width: 17px; text-align: center; line-height: 51px; height: 49px; left: auto; right: auto; } .navbar.main .topnav > li > a.glyphicons.single-icon i { padding: 0; } .navbar.main .topnav > li > a.glyphicons.logout i { float: right; padding: 0; } .navbar.main .topnav > li > a.glyphicons.logout span { padding: 0 8px 0 0; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px 0 8px 8px; height: 33px; line-height: 33px; } .navbar.main .topnav > li.active:last-child, .navbar.main .topnav > li:hover:last-child, .navbar.main .topnav > li.open:last-child { padding: 8px 9px 8px 8px; } .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a { background: #346d9d; padding: 5px 10px; height: 22px; line-height: 22px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.active > a .caret, .navbar.main .topnav > li:hover > a .caret, .navbar.main .topnav > li.open > a .caret { top: 2px; } .navbar.main .topnav > li.active > a.glyphicons, .navbar.main .topnav > li:hover > a.glyphicons, .navbar.main .topnav > li.open > a.glyphicons { padding: 5px 10px; height: 22px; line-height: 22px; } .navbar.main .topnav > li.active > a.glyphicons i, .navbar.main .topnav > li:hover > a.glyphicons i, .navbar.main .topnav > li.open > a.glyphicons i { height: 22px; line-height: 22px; } .navbar.main .topnav > li.active > a.glyphicons i:before, .navbar.main .topnav > li:hover > a.glyphicons i:before, .navbar.main .topnav > li.open > a.glyphicons i:before { line-height: 22px; height: 22px; } .navbar.main .topnav > li.glyphs { padding: 8px; height: 33px; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; box-shadow: -1px 0 0 0 #619aca, 1px 0 0 0 #346d9d; } .navbar.main .topnav > li.glyphs ul { margin: 0; padding: 0; list-style: none; background: #346d9d; height: 32px; line-height: 32px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li { float: left; display: block; height: 32px; line-height: 32px; padding: 0 1px 0 0; } .navbar.main .topnav > li.glyphs ul li .glyphicons { height: 22px; line-height: 22px; padding: 5px 10px; display: block; text-decoration: none; } .navbar.main .topnav > li.glyphs ul li .glyphicons i { height: 22px; line-height: 22px; display: block; } .navbar.main .topnav > li.glyphs ul li .glyphicons i:before { line-height: 22px; height: 22px; position: relative; left: auto; top: auto; display: block; text-align: center; font-size: 17px; color: #538fc1; } .navbar.main .topnav > li.glyphs ul li.active, .navbar.main .topnav > li.glyphs ul li:hover { padding: 0; background: #579ad2; border-right: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li.active .glyphicons i:before, .navbar.main .topnav > li.glyphs ul li:hover .glyphicons i:before { color: #ffffff; } .navbar.main .topnav > li.glyphs ul li.active:first-child, .navbar.main .topnav > li.glyphs ul li:hover:first-child { -webkit-border-radius: 5px 0 0 5px; -moz-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .navbar.main .topnav > li.glyphs ul li.active:last-child, .navbar.main .topnav > li.glyphs ul li:hover:last-child { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; border-right: none; border-left: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li.active:last-child .glyphicons, .navbar.main .topnav > li.glyphs ul li:hover:last-child .glyphicons { padding: 5px 11px 5px 9px; } .navbar.main .topnav > li.search { padding: 8px; height: 33px; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; box-shadow: -1px 0 0 0 #619aca, 1px 0 0 0 #346d9d; } .navbar.main .topnav > li.search form { margin: 0; padding: 0; background: #afcae2; height: 32px; line-height: 32px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.search form input { background: none; border: none; color: #628db3; margin: 0; padding: 0; height: 32px; line-height: 32px; width: 100px; padding: 0 0 0 10px; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .navbar.main .topnav > li.search form input::-webkit-input-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input:-moz-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input::-moz-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input:-ms-input-placeholder { color: #628db3; } .navbar.main .topnav > li.search form button { background: none; border: none; margin: 0; padding: 0; height: 32px; } .navbar.main .topnav > li.search form button i:before { display: block; position: relative; left: auto; right: auto; height: 32px; line-height: 32px; padding: 0 5px; font-size: 17px; color: #346d9d; } .navbar.main .topnav > li.search form input, .navbar.main .topnav > li.search form button { vertical-align: top; } .navbar.main .topnav > li.search, .navbar.main .topnav > li.glyphs { margin-left: 10px; } .navbar.main .topnav > li.search + .glyphs { margin-left: 0; } .navbar.main .topnav > li.glyphs + .search, .navbar.main .topnav > li.glyphs + .tooltip + .search { margin-left: 0; } .navbar.main .topnav > li:last-child { border-right: 1px solid #346d9d; padding: 0 9px 0 10px; } .navbar.main .topnav > li:last-child.glyphs, .navbar.main .topnav > li:last-child.search { padding: 8px 9px; box-shadow: -1px 0 0 0 #619aca; } .navbar.main .topnav > li:first-child { border-left: 1px solid #619aca; } .navbar.main .topnav > li:last-child.open .dropdown-menu { right: 0; } .navbar.main .topnav > li.open .dropdown-menu { background: #363432; border: none; box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; right: 0; width: 180px; } .navbar.main .topnav > li.open .dropdown-menu.pull-left { left: 0; } .navbar.main .topnav > li.open .dropdown-menu li { border-bottom: 1px solid #4a4947; } .navbar.main .topnav > li.open .dropdown-menu li:last-child { border-bottom: none; } .navbar.main .topnav > li.open .dropdown-menu li:first-child > a, .navbar.main .topnav > li.open .dropdown-menu li:first-child > a:hover, .navbar.main .topnav > li.open .dropdown-menu li:first-child > span { border-top: none; } .navbar.main .topnav > li.open .dropdown-menu li > a, .navbar.main .topnav > li.open .dropdown-menu li > a:hover, .navbar.main .topnav > li.open .dropdown-menu li > span { height: 29px; line-height: 29px; padding: 0 10px; display: block; background: #363432; color: #c8c8c8; } .navbar.main .topnav > li.open .dropdown-menu li > a.glyphicons i:before, .navbar.main .topnav > li.open .dropdown-menu li > a:hover.glyphicons i:before, .navbar.main .topnav > li.open .dropdown-menu li > span.glyphicons i:before { left: auto; right: 10px; top: 5px; font-size: 17px; color: #c4c4c4; } .navbar.main .topnav > li.open .dropdown-menu li > a:hover { background: #1c1a19; } .navbar.main .topnav > li.open .dropdown-menu li.active { background: #0e0e0d; } .navbar.main .topnav > li.open .dropdown-menu li.active a { background: #0e0e0d; } .navbar.main .topnav > li.open .dropdown-menu li .btn { margin: 3px 0; } .navbar.main .topnav > li.open .dropdown-menu li.highlight > a, .navbar.main .topnav > li.open .dropdown-menu li.highlight > a:hover, .navbar.main .topnav > li.open .dropdown-menu li.highlight > span { background: rgba(0, 0, 0, 0.1); } .navbar.main .topnav > li.open .dropdown-menu li.profile a:hover { color: #fff; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open .dropdown-menu li.profile > span { height: auto; line-height: normal; padding: 5px 10px 10px; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .heading a { text-transform: none; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #272729; margin: 0 10px 0 0; position: relative; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .img:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #595959; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .clearfix { display: block; } .navbar.main .topnav > li.open.account > .dropdown-menu { width: 220px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu, .navbar.main .topnav > li.open.dd-1 .typeahead, .navbar.main .topnav > li.open .dd-1 .typeahead { box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.2); } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open.dd-1 .typeahead:before, .navbar.main .topnav > li.open .dd-1 .typeahead:before { content: ""; width: 0; height: 0; border: 11px solid transparent; position: absolute; display: block; left: 7px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open.dd-1 .typeahead:after, .navbar.main .topnav > li.open .dd-1 .typeahead:after { content: ""; width: 0; height: 0; border: 10px solid transparent; top: -10px; border-top-width: 0; border-bottom-color: #ffffff; position: absolute; display: block; left: 8px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:before, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:before, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:before, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:before, .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:after, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:after { left: auto; right: 7px; margin: 0; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:after, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:after { right: 8px; } .navbar.main .topnav > li.open.dd-1 .typeahead, .navbar.main .topnav > li.open .dd-1 .typeahead { margin-top: 13px !important; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu.pull-right, .navbar.main .topnav > li.open .dd-1 .dropdown-menu.pull-right { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu, .navbar.main .topnav > li.open .dd-1 .dropdown-menu { background: #fff; border: 1px solid #c8c8c8; margin: 5px 0 0; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li { border-color: #f3f3f3; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li a:not(.btn), .navbar.main .topnav > li.open .dd-1 .dropdown-menu li a:not(.btn), .navbar.main .topnav > li.open.dd-1 .dropdown-menu li span, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li span { background: #fff; color: #939494; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li a:not(.btn) i:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li a:not(.btn) i:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li span i:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li span i:before { color: #cccccc; font-size: 15px !important; top: 7px !important; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu > li:not(.profile):hover > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu > li:not(.profile):hover > a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu > li.active > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu > li.active > a { /* background: @primaryColor; border: 1px solid darken(@primaryColor, 15%); border-top: none; border-bottom: none; color: #fff; box-shadow: 0 5px 5px -5px darken(@primaryColor, 20%) inset, 0 -5px 5px -5px darken(@primaryColor, 20%) inset; i:before { color: #fff; } */ font-weight: 600; color: #000; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile { background: #fff; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile a:hover, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile a:hover { color: #7c7c7c; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span { height: auto; line-height: normal; padding: 5px 10px 10px; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .heading a { text-transform: none; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #fdfdfd; margin: 0 10px 0 0; position: relative; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .img:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #ccc; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .clearfix { display: block; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu li a:not(.btn) { padding: 10px 10px 10px 50px; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu li a:not(.btn) i:before { right: auto; left: 10px; top: 10px !important; font-size: 30px !important; color: #f2f2f2; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover { border-color: #f3f3f3; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover > a { background: rgba(74, 139, 194, 0.08); color: #939494; text-shadow: 0 1px 0 #fff; border: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover > a i:before { color: #4a8bc2; left: 10px; top: 10px; } .navbar.main .topnav > li.open.dd-flags .dropdown-menu img { margin: -3px 4px 0 0; } .navbar.main .topnav .dropdown > a .caret { border-top-color: #ffffff; top: 16px; position: relative; } .navbar.main .topnav .dropdown-menu { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav:last-of-type { border-right: none; } .navbar.main .topnav:last-of-type li:last-child { border: none; } .submenu-show { display: block; margin-top: -35px !important; position: absolute; } .submenu-show.pull-left { left: auto !important; right: 100% !important; } .submenu-show.pull-right { right: auto !important; left: 100% !important; } .submenu-hide { display: none !important; position: relative; top: auto; float: left; } .filter-bar { background: #e5e5e5; margin: 0 auto 15px; border: 1px solid #dbdbdb; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; line-height: 30px; height: 40px; padding: 0 10px; } .filter-bar.border-top-none { border-top: none; } .filter-bar div { padding: 5px 0; display: block; line-height: 30px; } .filter-bar div div { padding: 0; margin: 0; } .filter-bar div div:not(.helper) { margin: 0 15px 0 0; } .filter-bar div div input { margin: 3px 0 0; } .filter-bar div div.input-append { margin: 0; } .filter-bar div div.input-append .add-on { padding: 1px 3px; margin: 3px 0 0 -1px; background: #fff; color: #d8d9da; border-color: #d8d9da; } .filter-bar div div.input-append .add-on i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } .filter-bar div div.input-append button.add-on { width: 24px; height: 24px; } .filter-bar div div:last-child { margin: 0; } .filter-bar div:not(.helper) { float: left; } .filter-bar div.glyphicons { padding: 0 0 0 35px; } .filter-bar div.glyphicons i:before { top: 12px; left: 9px; font-size: 17px; color: rgba(255, 255, 255, 0.8); } .filter-bar div.clearfix { padding: 0; clear: both; float: none; display: block; height: 0; margin: 0; } .filter-bar div.lbl { padding: 0 10px 0 35px; background: #4a8bc2; height: 40px; line-height: 40px; margin-right: 10px; color: #fff; } .filter-bar form { margin: 0; } .filter-bar form input, .filter-bar form select { margin: 0 5px 3px 0; padding: 1px 5px; color: #a7a7a7; } .filter-bar form select { padding: 1px; height: 23px; } .filter-bar form label { float: left; margin: 0 5px; display: block; line-height: 30px; } .filter-bar.border-none { border: none; } .filter-bar.dark { background: #64625f; color: #fff; } .filter-bar.dark div div.input-append .add-on { background: #42403e; color: #fff; border-color: #42403e; } .filter-bar.dark div div.input-append .add-on i:before { color: #767473; text-shadow: none; } .filter-bar.dark form input:focus { border-color: #42403e; } .filter-bar.dark form input, .filter-bar.dark form select { border-color: #42403e; } .menubar { height: 30px; position: relative; overflow: hidden; border: 1px solid #dbdbdb; background: #fafafa; margin: 0; font-size: 9pt; } .menubar ul { margin: 0; padding: 0 5px; list-style: none; height: 30px; } .menubar ul li { float: left; display: block; height: 30px; line-height: 30px; padding: 0 5px; } .menubar ul li.divider { border-left: 1px solid #ebebeb; width: 0px; padding: 0; margin: 0 8px; } .menubar ul li a { color: #7c7c7c; font-weight: 700; font-size: 9pt; } .menubar.links { border: none; background: none; height: 25px; padding: 0 0 5px; } .menubar.links ul { padding: 0; height: 25px; } .menubar.links ul li { height: 25px; line-height: 25px; } .menubar.links ul li:first-child { padding-left: 0; } .menubar.links.primary ul li a { color: #4a8bc2; } .widget { background: #ffffff; margin: 0 auto 15px; position: relative; border: 1px solid #dbdbdb; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget .tab-content { padding: 0; } .widget .widget-head { background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); border-bottom: 1px solid #dbdbdb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; text-shadow: 0 1px 0 0 1px 0 #ffffff; height: 35px; line-height: 35px; position: relative; padding: 0 15px 0 0; overflow: hidden; } .widget .widget-head.progress { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin: 0; padding: 0; } .widget .widget-head > .glyphicons, .widget .widget-head ul .glyphicons { height: 30px; width: 30px; padding: 0; } .widget .widget-head > .glyphicons i:before, .widget .widget-head ul .glyphicons i:before { width: 30px; height: 30px; line-height: 23px; text-align: center; font-size: 16px; color: rgba(255, 255, 255, 0.5); } .widget .widget-head .heading { margin: 0; color: #7c7c7c; font-size: 14px; height: 35px; line-height: 35px; padding: 0 15px; float: left; } .widget .widget-head .heading.glyphicons { width: auto; display: block; padding: 0 0 0 35px; } .widget .widget-head .heading.glyphicons i:before { padding: 0; margin: 0; left: 0; top: 0; height: 35px; line-height: 35px; text-align: center; width: 35px; color: #7c7c7c; font-size: 16px; font-weight: normal; text-shadow: none; } .widget .widget-head a { text-shadow: none; } .widget .widget-head .dropdown-menu li > a:hover, .widget .widget-head .dropdown-menu li > a:focus, .widget .widget-head .dropdown-submenu:hover > a { background-color: #4a8bc2; background-image: -moz-linear-gradient(top, #4a8bc2, #d24343); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#4a8bc2), to(#d24343)); background-image: -webkit-linear-gradient(top, #4a8bc2, #d24343); background-image: -o-linear-gradient(top, #4a8bc2, #d24343); background-image: linear-gradient(to bottom, #4a8bc2, #d24343); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffda4c4c', endColorstr='#ffd24343', GradientType=0); } .widget .details { font-size: 8pt; color: #7c7c7c; } .widget .widget-body { padding: 15px; } .widget .widget-body form { margin: 0; } .widget .widget-body > pre:last-child, .widget .widget-body > p:last-child { margin: 0; } .widget .widget-body.list { color: #7c7c7c; padding: 0; } .widget .widget-body.list .count { font-size: 15pt; font-weight: 400; } .widget .widget-body.list ul { margin: 0; list-style: none; } .widget .widget-body.list ul li { padding: 0 10px; height: 39px; border-bottom: 1px solid #dbdbdb; position: relative; line-height: 39px; text-align: left; text-shadow: 0 1px 0 #ffffff; clear: both; } .widget .widget-body.list ul li .badge { position: absolute; right: 8px; top: 10px; } .widget .widget-body.list ul li:first-child { border-top: none; } .widget .widget-body.list ul li:last-child { border-bottom: none; } .widget .widget-body.list ul li .count { float: right; color: #000000; } .widget .widget-body.list ul li .sparkline { position: relative; top: 5px; margin-left: 5px; } .widget .widget-body.list ul li a { color: #000000; font-weight: bold; } .widget .widget-body.list.products li { height: 60px; line-height: 60px; } .widget .widget-body.list.products .img { float: left; display: inline-block; width: 48px; height: 44px; line-height: 44px; color: #fff; text-align: center; background: #272729; margin: 8px 8px 0 0; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; text-shadow: none; cursor: pointer; font-size: 10pt; font-weight: 600; } .widget .widget-body.list.products .title { line-height: normal; display: inline-block; padding: 13px 0 0; text-transform: uppercase; } .widget .widget-body.list.products .title strong { font-family: "Open Sans", sans-serif; text-transform: none; } .widget .widget-body.list.fluid ul li { height: auto; line-height: normal; padding: 10px; } .widget .widget-body.list.list-2 ul li { border-bottom: 1px solid #d8d9da; border-top: none; background: #f8f8f8; } .widget .widget-body.list.list-2 ul li.active { border-color: #dddddd; background: #fff; } .widget .widget-body.list.list-2 ul li.active i:before { font-weight: normal; background: #4a8bc2; color: #fff; text-shadow: none; } .widget .widget-body.list.list-2 ul li.active a { color: #4a8bc2; } .widget .widget-body.list.list-2 ul li:last-child { border-bottom: none; } .widget .widget-body.list.list-2 ul li a { display: block; color: #222; padding: 0 0 0 30px; } .widget .widget-body.list.list-2 ul li a i:before { color: #555; width: 20px; height: 17px; font-size: 14px; border: 1px solid #ccc; background: #dddddd; top: 9px; left: 0; text-align: center; vertical-align: middle; padding-top: 3px; text-shadow: 0 1px 0 #fff; } .widget .widget-body.list.list-2 ul li.hasSubmenu { height: auto; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul { padding: 0 0 10px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li { height: auto; line-height: normal; background: none; border: none; line-height: 20px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li a { color: #333; padding: 0 0 0 20px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li.active a { font-weight: bold; } .widget .widget-footer { background: #fafafa; height: 25px; line-height: 25px; border-top: 1px solid #ebebeb; } .widget .widget-footer .glyphicons { width: 25px; height: 25px; line-height: 25px; padding: 0; float: right; } .widget .widget-footer .glyphicons i:before { font-size: 16px; color: #c3c3c3; text-align: center; width: 20px; height: 25px; line-height: 25px; text-shadow: 0 1px 0 #ffffff; } .widget .widget-footer .glyphicons:hover i:before { color: rgba(0, 0, 0, 0.5); } .widget.margin-bottom-none { margin-bottom: 0; } .widget.widget-gray { background: #f5f5f5; } .widget.widget-gray .widget-head { background: #e9e9e9; border-color: #d1d2d3; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); } .widget.widget-gray .widget-head .heading { color: #555555; text-shadow: 0 1px 0 #fff; } .widget.widget-gray .widget-head .heading.glyphicons i:before { background: none; color: #555; border-color: rgba(0, 0, 0, 0.1); } .widget.widget-2:before, .widget.widget-2:after { display: none; } .widget.widget-2 .widget-head { background: #e2e2e4; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); height: 36px; line-height: 36px; border-color: #d1d2d3; } .widget.widget-2 .widget-head .heading { line-height: 36px; color: #555555; text-shadow: 0 1px 0 #fff; font-size: 12pt; } .widget.widget-2 .widget-head .heading i:before { color: #555555; background: none; border: none; left: 3px; top: 2px; } .widget.widget-2 .widget-body { border: 1px solid #d1d2d3; border-top: 0; background: #f5f5f5; } .widget.widget-2.primary .widget-head { background: #4a8bc2; border-color: #4a8bc2; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); } .widget.widget-2.primary .widget-head .heading { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .widget.widget-2.primary .widget-head .heading i:before { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .widget.widget-3:before, .widget.widget-3:after { display: none; } .widget.widget-3 .widget-head { height: 36px; line-height: 36px; } .widget.widget-3 .widget-head .heading { display: block; text-align: center; float: none; line-height: 36px; height: 36px; text-transform: uppercase; font-size: 12pt; } .widget.widget-3 .widget-head .heading i:before { background: none; border: none; left: 3px; top: 5px; font-size: 20px; color: #45484d; } .widget.widget-3 .widget-head .heading .glyphicons { vertical-align: middle; width: 35px; height: 36px; padding: 0; } .widget.widget-3 .widget-body { border-bottom: 1px solid #dbdbdb; } .widget.widget-3 .widget-body.large { font-size: 26pt; font-weight: bold; text-align: center; padding: 25px 0; vertical-align: middle; line-height: normal; } .widget.widget-3 .widget-body.large.cancellations span { line-height: 20px; text-align: left; font-size: 17pt; display: inline-block; text-shadow: none; } .widget.widget-3 .widget-body.large.cancellations span span { display: block; } .widget.widget-3 .widget-body.large.cancellations span span:first-child { color: #4a8bc2; text-transform: uppercase; font-size: 13pt; } .widget.widget-3 .widget-body.large.dashboard { padding: 15px 0; } .widget.widget-3 .widget-footer { background: #fafafa; border-top: none; } .widget.widget-3 .widget-footer a { float: none; color: #dddddd; width: auto; padding: 0 10px 0 30px; border-right: 1px solid #dbdbdb; text-decoration: none; } .widget.widget-3 .widget-footer a i:before { color: #dddddd; left: 5px; } .widget.widget-3 .widget-footer a:hover { color: #4a8bc2; } .widget.widget-3 .widget-footer a:hover i:before { color: #4a8bc2; } .widget.widget-3 .widget-footer.align-center { text-align: center; } .widget.widget-3 .widget-footer.align-center a:first-child { border-left: 1px solid #dbdbdb; } .widget.widget-3 .widget-footer.align-right { text-align: right; } .widget.widget-3 .widget-footer.align-right a:first-child { border-left: 1px solid #dbdbdb; } .widget.widget-3 .widget-footer.align-right a:last-child { border-right: none; } .widget.widget-4 { border: none; background: none; } .widget.widget-4 .widget-head { background: none; padding: 10px; border: none; } .widget.widget-4 .widget-head .heading { color: #544f49; text-shadow: none; padding: 0; margin: 0; } .widget.widget-4 .widget-body { padding: 0 10px 10px; border: none; } .widget.widget-4 .widget-body.list ul li { padding: 0; } .widget.widget-heading-simple { border: none; background: none; } .widget.widget-heading-simple > .widget-head { border: none; background: none; padding: 0 0 5px; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-head .heading { padding: 0; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-head .heading.glyphicons { padding: 0 0 0 25px; } .widget.widget-heading-simple > .widget-head .heading.glyphicons i:before { text-align: left; width: 25px; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-body { border: 1px solid #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget.widget-body-simple { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .widget.widget-body-simple > .widget-body { background: none; border: none; padding: 0; } .widget.widget-body-white > .widget-body { background: #ffffff; } .widget.widget-body-gray { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget.widget-body-gray > .widget-body { background: #e5e5e5; } .widget.widget-body-primary { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget.widget-body-primary > .widget-body { background: #4a8bc2; } .widget.widget-body-primary > .widget-body * { color: #fff; text-shadow: none; } .widget.widget-body-multiple { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .widget.widget-body-multiple > .widget-body { box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; margin-bottom: 7.5px; } .widget.widget-body-multiple > .widget-body:last-of-type { margin-bottom: 0; } .widget.widget-body-multiple.widget-body-gray > .widget-body { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget-offers .price { font-size: 14px; } .widget-offers .price strong { color: #000; } .widget-offers .thumb { padding: 0; } .widget-offers h5 { border-bottom: 1px solid #cecece; font-weight: 600; text-shadow: 0 1px 0 #ffffff; box-shadow: 0 1px 0 0 #eeeeee; padding: 0 0 5px; } .widget-activity > .widget-body { padding: 0 15px; } .widget-activity ul.list { list-style: none; margin: 0 -15px; padding: 0; } .widget-activity ul.list li { height: 39px; line-height: 39px; position: relative; overflow: hidden; border-bottom: 1px solid #ebebeb; padding: 0 15px; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; } .widget-activity ul.list li:hover, .widget-activity ul.list li.highlight { background: #f2f2f2; box-shadow: 0 1px 0 0 #ffffff inset; -moz-box-shadow: 0 1px 0 0 #ffffff inset; -webkit-box-shadow: 0 1px 0 0 #ffffff inset; text-shadow: 0 1px 0 #ffffff; cursor: pointer; } .widget-activity ul.list li:hover:after, .widget-activity ul.list li.highlight:after { content: "\e212"; display: block; position: absolute; right: 15px; top: 0; height: 39px; line-height: 39px; font-family: "Glyphicons"; font-size: 24px; color: #d5d5d5; } .widget-activity ul.list li:hover .activity-icon i:before, .widget-activity ul.list li.highlight .activity-icon i:before { color: #505050; } .widget-activity ul.list li > span { display: block; height: 39px; line-height: 39px; float: left; position: relative; overflow: hidden; } .widget-activity ul.list li > span.ellipsis { white-space: nowrap; text-overflow: ellipsis; max-width: 75%; } .widget-activity ul.list li > span.date { width: 40px; text-align: center; } .widget-activity ul.list li .activity-icon { width: 30px; height: 39px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; } .widget-activity ul.list li .activity-icon i { height: 39px; display: block; position: relative; } .widget-activity ul.list li .activity-icon i:before { position: relative; top: 0; left: 0; color: #cbcbcb; font-size: 18px; line-height: 39px; } .widget-activity ul.list li.double { height: 45px; line-height: 45px; } .widget-activity ul.list li.double > span { height: 45px; line-height: 45px; } .widget-activity ul.list li.double > span.ellipsis { line-height: 15px; padding: 7px 0 0; font-weight: 600; font-size: 11px; } .widget-activity ul.list li.double > span .meta { display: block; line-height: 15px; font-weight: 400; color: #b7b7b7; } .widget-activity ul.list li.double > span .meta i:before { top: 1px; color: #b7b7b7; } .widget-activity ul.list li.double > span .meta span { font-style: italic; } .widget-activity ul.list li.double .activity-icon { margin-left: 0; height: 45px; } .widget-activity ul.list li.double .activity-icon i { height: 45px; } .widget-activity ul.list li.double .activity-icon i:before { line-height: 45px; } .widget-activity ul.list li.double:hover:after, .widget-activity ul.list li.double.highlight:after { height: 45px; line-height: 45px; } .widget-activity ul.list li:last-child { border: none; } .widget-activity .view-all { position: absolute; top: 18px; right: 15px; } .widget-messages ul { margin: 0; padding: 0; list-style: none; } .widget-messages ul li { border: 1px solid #e5e5e5; padding: 5px; margin: 0 0 10px; position: relative; } .widget-messages ul li .meta span { color: #a3a3a3; font-size: 12px; } .widget-messages ul li .glyphicons.single.bin { position: relative; text-decoration: none; padding: 0; width: 15px; height: 20px; top: 5px; } .widget-messages ul li .glyphicons.single.bin i { display: block; width: 15px; height: 20px; text-align: center; } .widget-messages ul li .glyphicons.single.bin i:before { color: #cccccc; position: relative; line-height: 20px; left: auto; top: auto; } .widget-messages ul li:last-child { margin: 0; } .widget-timeline .widget-body { padding: 15px; position: relative; } .widget-timeline .widget-body:before { display: block; width: 1px; background: #dbdbdb; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } .widget-timeline:not(.widget) { position: relative; } .widget-timeline:not(.widget):before { display: block; width: 1px; background: #dbdbdb; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } .widget-timeline .view-all { margin-left: 35px; } .widget-timeline ul.list-timeline { list-style: none; margin: 0 0 15px; padding: 0; } .widget-timeline ul.list-timeline li { display: block; height: 30px; line-height: 30px; position: relative; overflow: hidden; background: #ffffff; border: 1px solid #ebebeb; margin: 0 0 10px; padding: 0 10px; } .widget-timeline ul.list-timeline li:last-child { margin: 0; } .widget-timeline ul.list-timeline li span { display: block; height: 30px; line-height: 30px; float: left; position: relative; overflow: hidden; } .widget-timeline ul.list-timeline li span.ellipsis { white-space: nowrap; text-overflow: ellipsis; max-width: 75%; } .widget-timeline ul.list-timeline li span.date { width: 40px; text-align: center; } .widget-timeline ul.list-timeline li .activity-icon { width: 30px; height: 30px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; } .widget-timeline ul.list-timeline li .activity-icon i { height: 30px; display: block; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; position: relative; background: #64625f; } .widget-timeline ul.list-timeline li .activity-icon i:before { position: relative; top: 0; left: 0; color: #fff; font-size: 17px; line-height: 30px; } .widget-chat { padding-bottom: 60px !important; } .widget-chat .media { position: relative; min-height: 80px; } .widget-chat .media .media-object { position: relative; } .widget-chat .media .thumb { padding: 0; } .widget-chat .media small { color: #cccccc; } .widget-chat .media small:before, .widget-chat .media small:after { content: ""; } .widget-chat .media small.author { position: absolute; left: 0; width: 50px; top: 60px; text-align: center; display: block; } .widget-chat .media small.date { display: block; border-bottom: 1px solid #dbdbdb; margin: 0 0 5px; padding: 0 0 3px; text-align: right; width: 100%; } .widget-chat .media.right small.author { left: auto; right: 0; } .widget-chat .media.right small.date { text-align: left; } .widget-chat .media .media-body { -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; padding: 0; } .widget-chat .media .media-body blockquote { padding: 0; width: 100%; } .widget-chat .media .media-body blockquote p:last-child { margin: 0; } .widget-chat .media:last-of-type { padding-bottom: 10px; } .widget-chat .chat-controls { position: absolute; height: 30px; padding: 15px 0; left: 0; right: 0; bottom: 0; border: 1px solid #dbdbdb; border-top: none; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; background: #fff; } .widget-chat .widget-body { padding-bottom: 0; } .widget-chat.widget-heading-simple > .widget-body { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .widget-stats { background: #ffffff; padding: 15px 0; margin: 0; height: 80px; position: relative; text-align: center; display: block; border: 1px solid #dbdbdb; text-shadow: 0 1px 0 #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget-stats .count { position: absolute; top: 0; left: 0; font-size: 13px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .widget-stats .label { font-weight: 600; padding: 4px; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2) inset; } .widget-stats span { display: inline-block; } .widget-stats .txt { padding: 0; color: #cecece; } .widget-stats .glyphicons { padding: 0; display: block; } .widget-stats .glyphicons i { display: block; } .widget-stats .glyphicons i:before { color: #cecece; font-size: 30px; top: 0; left: 0; position: relative; } .widget-stats, .widget-stats:hover, .widget-stats:focus { text-decoration: none; } .widget-stats:hover { background: #fdfdfd; } .widget-stats.small { padding: 5px 0; } .widget-stats.small .glyphicons { padding: 12px 0 0; } .widget-stats.small .glyphicons i:before { font-size: 25px; } .widget-stats.widget-stats-1 { padding: 8px 0; height: 94px; } .widget-stats.widget-stats-1 .glyphicons { display: block; height: 35px; line-height: 35px; padding-bottom: 5px; } .widget-stats.widget-stats-1 .glyphicons .txt { display: inline-block; padding: 0 5px; line-height: 35px; } .widget-stats.widget-stats-1 .glyphicons i { display: inline-block; } .widget-stats.widget-stats-1 .glyphicons i:before { top: 5px; font-size: 25px; } .widget-stats.widget-stats-1 .count { position: relative; top: auto; right: auto; font-size: 60px; display: inline-block; font-weight: 700; padding: 0; line-height: 40px; } .widget-stats.widget-stats-2 .txt { font-size: 14px; } .widget-stats.widget-stats-2 .count { position: relative; top: auto; right: auto; font-size: 60px; font-weight: 700; padding: 0 0 3px; display: block; line-height: 55px; } .widget-stats.widget-stats-gray.widget-stats-1 .txt, .widget-stats.widget-stats-gray.widget-stats-2 .txt { color: #000; } .widget-stats.widget-stats-easy-pie .easy-pie { display: block; width: 50px; margin: -5px auto 0; } .widget-stats.widget-stats-easy-pie.txt-single .easy-pie { margin: 0 auto; } .widget-stats.widget-stats-easy-pie.txt-single .txt { padding: 7px 0 0; } .widget-stats.widget-stats-3 .sparkline { display: inline-block; } .widget-stats.widget-stats-3 .txt { text-align: left; vertical-align: middle; padding: 13px 0 0 10px; } .widget-stats.widget-stats-3 .count { padding: 0 0 5px; display: block; } .widget-stats.widget-stats-gray { background: #e5e5e5; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .box-generic { border: 1px solid #dbdbdb; padding: 15px; position: relative; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; margin: 0 0 15px; } .ribbon-wrapper { width: 85px; height: 88px; overflow: hidden; position: absolute; top: -3px; right: -3px; } .ribbon-wrapper .ribbon { display: block; font-family: Arial, sans-serif; font-size: 15px; font-weight: 600; color: #fff; text-align: center; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); position: relative; padding: 7px 0; left: -5px; top: 15px; width: 120px; line-height: 20px; background-color: #797979; -webkit-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); } .ribbon-wrapper .ribbon:before, .ribbon-wrapper .ribbon:after { content: ""; border-top: 2px solid #797979; border-left: 2px solid transparent; border-right: 2px solid transparent; position: absolute; bottom: -2px; } .ribbon-wrapper .ribbon:before { left: 0; bottom: -1px; } .ribbon-wrapper .ribbon:after { right: 0; } .ribbon-wrapper .ribbon.primary { background-color: #4a8bc2; } .ribbon-wrapper .ribbon.success { background-color: #609450; } .ribbon-wrapper .ribbon.warning { background-color: #ab7a4b; } .ribbon-wrapper .ribbon.danger { background-color: #bd362f; } .ribbon-wrapper .ribbon.default { background-color: #e5e5e5; color: #595959; } .ribbon-wrapper .ribbon.default:before, .ribbon-wrapper .ribbon.default:after { border-top: 2px solid #ccc; } .ribbon-wrapper.small { width: 65px; height: 68px; } .ribbon-wrapper.small .ribbon { width: 90px; padding: 0; font-size: 13px; } .ribbon-wrapper.small .ribbon:before { bottom: -2px; } .breadcrumb { height: 38px; line-height: 39px; padding: 0 15px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin: 0; background: none; border-bottom: 1px solid #dbdbdb; box-shadow: 0 1px 0 0 #fff; -moz-box-shadow: 0 1px 0 0 #fff; -webkit-box-shadow: 0 1px 0 0 #fff; color: #ababab; font-size: 12px; position: relative; overflow: hidden; } .breadcrumb li { text-shadow: 0 1px 0 #ffffff; line-height: 38px; height: 38px; } .breadcrumb li a { color: #ababab; font-weight: 600; } .breadcrumb li a.glyphicons { color: #ababab; padding: 0 0 0 25px; } .breadcrumb li a.glyphicons i:before { color: #ababab; font-size: 14px; top: 12px; left: 3px; } .breadcrumb li.divider { margin: 0 5px 0 7px; width: 0; border-left: 1px solid #dbdbdb; border-right: 1px solid #fff; vertical-align: top; } .well { z-index: 1; position: relative; padding: 15px; margin: 0 0 15px; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #fafafa; border-color: #dbdbdb; } .well.small { padding: 10px; } .well .popover { z-index: 2; font-size: 13px; } .well.dark { background: rgba(0, 0, 0, 0.2); } .well.white { background: #fff; } [data-toggle="collapse-widget"] .collapse-toggle { position: relative; height: 35px; width: 30px; display: block; cursor: pointer; float: right; margin-right: -10px; } [data-toggle="collapse-widget"] .collapse-toggle:before { font-family: "Glyphicons"; font-size: 17px; display: block; width: 100%; height: 35px; line-height: 34px; text-align: center; color: #cccccc; content: "\e192"; } [data-toggle="collapse-widget"].widget-heading-simple .collapse-toggle { margin-right: 0; height: 25px; } [data-toggle="collapse-widget"].widget-heading-simple .collapse-toggle:before { height: 25px; line-height: 25px; } [data-toggle="collapse-widget"] a ~ .collapse-toggle { margin-right: 0; } [data-toggle="collapse-widget"][data-collapse-closed="false"] .collapse-toggle:before { content: "\e192"; } [data-toggle="collapse-widget"][data-collapse-closed="true"] .collapse-toggle:before { content: "\e191"; } [data-toggle="collapse-widget"][data-collapse-closed="true"] .widget-head { border-bottom: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } [data-toggle="collapse-widget"] .collapse:not(.list) { -webkit-transition: padding 0.1s ease; -moz-transition: padding 0.1s ease; -o-transition: padding 0.1s ease; transition: padding 0.1s ease; padding: 0px; } [data-toggle="collapse-widget"] .collapse:not(.list).in { padding: 15px; } .glyphicons.standard { width: 24px; height: 24px; padding: 0; } .glyphicons.standard i { display: block; height: 24px; } .glyphicons.standard i:before { color: #64625f; position: relative; top: auto; left: auto; } .glyphicons.standard:not(.disabled):hover i:before { color: #797979; } .glyphicons.standard.btn { padding: 4px; } .glyphicons.standard.btn.btn-small { padding: 2px 5px; width: auto; height: auto; } .glyphicons.standard.btn.btn-small i:before { top: auto; line-height: 22px; } .glyphicons.primary i:before { color: #4a8bc2; } .glyphicons.single { color: #4a8bc2; padding: 0 0 0 20px; } .glyphicons.single i:before { font-size: 13px; top: 4px; color: #4a8bc2; } .glyphicons.single + .single { margin-left: 8px; } .glyphicons.single.regular { color: #7c7c7c; } .glyphicons.single.regular i:before { color: #7c7c7c; } .glyphicons.text-error { color: #4a8bc2; } .glyphicons.text-error i:before { color: #4a8bc2; } .glyphicons.text-info { color: #5d92b3; } .glyphicons.text-info i:before { color: #5d92b3; } .glyphicons.text-success { color: #719d46; } .glyphicons.text-success i:before { color: #719d46; } .glyphicons.btn-action { width: 25px; height: 25px; padding: 0; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border-width: 1px; border-style: solid; vertical-align: middle; } .glyphicons.btn-action i:before { font-size: 14px; top: 5px; left: 5px; text-shadow: 0 1px 0 #fff; color: #fff !important; } .glyphicons.btn-action.btn-default i:before { color: #7c7c7c !important; } .glyphicons.btn-action.single { box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; border: none; background: none; margin-right: 10px; } .glyphicons.btn-icon { text-align: left; padding: 5px 7px 5px 40px; } .glyphicons.btn-icon i { float: left; } .glyphicons.btn-icon i:before { font-size: 15px; top: 0; left: 0; width: 33px; height: 23px; -webkit-border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; border-radius: 3px 0px 0px 3px; vertical-align: middle; padding: 7px 0 0; text-align: center; } .glyphicons.btn-icon.right { text-align: left; padding: 5px 0 5px 7px; } .glyphicons.btn-icon.right i:before { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; right: 0; left: auto; text-align: center; } .glyphicons.btn-large { padding: 10px 10px 10px 40px; font-weight: 600; } .glyphicons.btn-large i:before { top: 12px; left: 12px; font-size: 17px; } .glyphicons.btn-large.btn-icon i:before { top: 0; left: 0; height: 28px; padding: 12px 0 0; } .glyphicons.btn-small { padding: 2px 10px 2px 35px; } .glyphicons.btn-small i:before { padding: 5px 0 0; width: 28px; height: 19px; font-size: 14px; } .glyphicons.btn-mini { padding: 1px 6px 1px 33px; } .glyphicons.btn-mini i:before { padding: 5px 0 0; width: 26px; height: 17px; font-size: 13px; } .glyphicons.orange i:before { color: #EDB459; } .glyphicons.btn-default i:before { color: #9e9e9e; text-shadow: none; } h4.glyphicons { padding: 0 0 0 35px; display: block; } h4.glyphicons i:before { font-size: 22px; font-weight: normal; color: #575655; } h3.glyphicons, h2.glyphicons { padding: 0 0 0 45px; display: block; } h3.glyphicons i:before, h2.glyphicons i:before { font-size: 27px; font-weight: normal; left: 2px; top: 3px; color: #575655; } h3.glyphicons.cogwheels i:before, h2.glyphicons.cogwheels i:before { left: 5px; } .finances_summary .well { font-size: 16px; text-align: center; } .finances_summary .well strong { display: block; font-size: 22pt; color: #45494c; line-height: normal; } .finances_summary .glyphicons.standard i:before { color: #cccccc; } div.glyphicons { padding: 0 0 0 35px; } div.glyphicons i:before { color: #cccccc; } div.glyphicons.glyphicon-large { padding: 0 0 0 75px; } div.glyphicons.glyphicon-large i:before { font-size: 50px; left: 0; } div.glyphicons.glyphicon-large.group-column { padding: 0 0 0 85px; } div.glyphicons.glyphicon-large.group-column i:before { font-size: 45px; left: 12px; } div.glyphicons.glyphicon-top { padding: 0; text-align: center; } div.glyphicons.glyphicon-top i { display: block; position: relative; } div.glyphicons.glyphicon-top i:before { position: relative; left: auto; top: auto; } div.glyphicons.glyphicon-top.glyphicon-xlarge i { padding: 0 0 10px; } div.glyphicons.glyphicon-top.glyphicon-xlarge i:before { font-size: 70px; } div.glyphicons.glyphicon-primary i:before { color: #4a8bc2; } .widget-body-primary div.glyphicons i:before { color: #fff; } .social-large { height: 97px; } .social-large a { display: block; height: 77px; float: left; padding: 10px 19px; color: #d5d5d5; background: #ffffff; font-weight: bold; text-align: center; border-right: 1px solid #e5e5e5; text-decoration: none; } .social-large a i { display: block; position: relative; padding: 0 0 8px; } .social-large a i:before { display: block; text-align: center; top: auto; left: auto; position: relative; font-size: 50px; color: #d5d5d5; } .social-large a.active, .social-large a:hover { color: #fff; background: #4a8bc2; } .social-large a.active i:before, .social-large a:hover i:before { color: #fff; } .social-large a:last-child { border: none; } .social-large.social-large-2 a { display: inline-block; font-weight: 400; float: none; border: none; background: none; color: #444444; } .social-large.social-large-2 a i:before { color: #444444; } .social-large.social-large-2 a.active, .social-large.social-large-2 a:hover { color: #4a8bc2; } .social-large.social-large-2 a.active i:before, .social-large.social-large-2 a:hover i:before { color: #4a8bc2; } .widget-pinterest .widget-body { padding: 0; } .widget-pinterest .widget-body .description { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; line-height: 16px; padding: 15px; } .widget-pinterest .widget-body .thumb { padding: 0; border: none; } .widget-pinterest .widget-body .thumb img { width: 100%; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .jstwitter { position: relative; } .jstwitter .item { overflow: hidden; } .jstwitter .tweet-wrapper { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; line-height: 16px; padding: 15px; } .jstwitter .widget-body { padding: 0; } .jstwitter .item a { text-decoration: none; } .jstwitter .item img { width: 100%; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .jstwitter .item .thumb { padding: 0; border: none; } .jstwitter .item a:hover { text-decoration: underline; } .jstwitter .item .text { display: block; } .jstwitter .item .time, .jstwitter .item .user { font-style: italic; color: #999; } .jstwitter .item.active { display: block; } .rating { unicode-bidi: bidi-override; direction: rtl; } .rating.text-large { margin: 7px 0; } .rating span.star { font-family: FontAwesome; font-weight: normal; font-style: normal; display: inline-block; } .rating span.star:before { content: "\f006"; padding-right: 5px; } .rating:not(.read-only) span.star:hover { cursor: pointer; } .rating:not(.read-only) span.star:hover:before, .rating:not(.read-only) span.star:hover ~ span.star:before { content: "\f005"; color: #4a8bc2; } .rating span.star.active:before, .rating span.star.active ~ span.star:before { content: "\f005"; color: #4a8bc2; } .hero-unit { background: none; border: none; -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } .widget.widget-tabs { border-color: #dbdbdb; } .widget.widget-tabs .tab-content { padding: 0; } .widget.widget-tabs > .widget-head { background: #ffffff; border-color: #dbdbdb; overflow: visible; } .widget.widget-tabs > .widget-head ul { position: relative; overflow: visible; list-style: none; height: 35px; margin: 0; display: inline-block; } .widget.widget-tabs > .widget-head ul li { height: 35px; line-height: 35px; float: left; display: block; border-right: 1px solid #dbdbdb; } .widget.widget-tabs > .widget-head ul li a { width: auto; height: 35px; display: block; padding: 0 15px; position: relative; overflow: hidden; color: #7c7c7c; text-decoration: none; } .widget.widget-tabs > .widget-head ul li a i:before { left: 5px; top: 5px; color: #9d9d9d; text-shadow: 0 1px 0 #ffffff; } .widget.widget-tabs > .widget-head ul li a.glyphicons { padding: 0 15px 0 35px; } .widget.widget-tabs > .widget-head ul li.active { height: 36px; background: #fff; color: #505050; } .widget.widget-tabs > .widget-head ul li.active a { color: #505050; } .widget.widget-tabs > .widget-head ul li.active a i:before { color: #505050; } .widget.widget-tabs > .widget-head ul li.active:first-child { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } .widget.widget-tabs > .widget-body.large { padding: 25px; } .widget.widget-tabs-double > .widget-head { height: 40px; } .widget.widget-tabs-double > .widget-head ul { height: 40px; } .widget.widget-tabs-double > .widget-head ul li, .widget.widget-tabs-double > .widget-head ul li.active { height: 40px; line-height: 20px; } .widget.widget-tabs-double > .widget-head ul li a, .widget.widget-tabs-double > .widget-head ul li.active a { height: 35px; padding: 5px 0 0; } .widget.widget-tabs-double > .widget-head ul li a span, .widget.widget-tabs-double > .widget-head ul li.active a span { display: block; line-height: 15px; } .widget.widget-tabs-double > .widget-head ul li a.glyphicons, .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons { padding: 5px 15px 0 38px; } .widget.widget-tabs-double > .widget-head ul li a.glyphicons i:before, .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons i:before { left: 4px; top: 9px; font-size: 20px; } .widget.widget-tabs-double-2 { border: none; } .widget.widget-tabs-double-2 > .widget-head { border: 1px solid #dbdbdb; border-bottom: none; height: 70px; } .widget.widget-tabs-double-2 > .widget-head.border-bottom { border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-double-2 > .widget-head ul { height: 70px; } .widget.widget-tabs-double-2 > .widget-head ul li { height: 70px; line-height: 20px; } .widget.widget-tabs-double-2 > .widget-head ul li a { -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; height: 70px; padding: 5px 0 0; text-decoration: none; text-align: center; } .widget.widget-tabs-double-2 > .widget-head ul li a span { display: block; line-height: 30px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons { padding: 0 15px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i { display: block; height: 24px; padding: 13px 0 0; line-height: 24px; text-align: center; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i:before { left: auto; top: auto; font-size: 24px; position: relative; -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; } .widget.widget-tabs-double-2 > .widget-head ul li.active { height: 70px; background: #ffffff; } .widget.widget-tabs-double-2 > .widget-head ul li.active a { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li.active a i:before { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li:hover { background: #ffffff; } .widget.widget-tabs-double-2 > .widget-head ul li:hover a { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li:hover a i:before { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-body { padding: 0; } .widget.widget-tabs-double-2 .widget-body-regular { padding: 10px; border: 1px solid #dbdbdb; } .widget.widget-tabs-double-2 .widget-body-regular p:last-child { margin: 0; } .widget.widget-tabs-vertical .widget-head { border: none; height: auto; padding: 0; } .widget.widget-tabs-vertical .widget-head ul { display: block; height: auto; } .widget.widget-tabs-vertical .widget-head ul li { float: none; display: block; border-right: none; border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-vertical .widget-head ul li:last-child { border: none; } .widget.widget-tabs-vertical .widget-body { padding: 0; } .widget.widget-tabs-vertical .widget-body .tab-content { padding: 12px 15px; } .widget.widget-wizard-pills .widget-head { height: 60px; padding: 10px 0; } .widget.widget-wizard-pills .widget-head ul { height: 60px; } .widget.widget-wizard-pills .widget-head ul li { height: 60px; line-height: 60px; color: #7c7c7c; padding: 0 0 0 10px; border: none; position: relative; } .widget.widget-wizard-pills .widget-head ul li.status { height: 45px; padding: 15px 15px 0; font-weight: 600; } .widget.widget-wizard-pills .widget-head ul li.status span.r { display: block; line-height: 15px; } .widget.widget-wizard-pills .widget-head ul li a { height: 58px; line-height: 60px; padding: 0; width: 58px; text-align: center; background: #dbdbdb; border: 1px solid #dbdbdb; color: #c8c8c8; font-weight: 600; font-size: 16pt; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; position: relative; z-index: 2; } .widget.widget-wizard-pills .widget-head ul li.active { height: 60px; background: none; } .widget.widget-wizard-pills .widget-head ul li.active a { width: 60px; height: 60px; background: #f4f4f4; border: none; } .widget.widget-wizard-pills .widget-head ul li.primary a { width: 60px; height: 60px; background: #4a8bc2; border: none; color: #fff; } .widget.widget-wizard-pills .widget-head ul li:not(:first-child):before { position: absolute; background: #dbdbdb; height: 1px; left: 0; right: 0; top: 29px; display: block; content: ""; z-index: 1; } .widget.widget-wizard-pills .widget-head ul li.no-padding { padding: 0; } .widget.widget-tabs-2 { border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-2.border-bottom-none { border-bottom: none; } .widget.widget-tabs-2 > .widget-head { background: #fff; border: none; border-bottom: 1px solid #dbdbdb; padding: 0 10px; } .widget.widget-tabs-2 > .widget-head ul { border-color: #dbdbdb; } .widget.widget-tabs-2 > .widget-head ul li { border: none; } .widget.widget-tabs-2 > .widget-head ul li.active { background-color: #f7f7f7; background-image: -moz-linear-gradient(top, #f7f7f7, #ffffff); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f7f7), to(#ffffff)); background-image: -webkit-linear-gradient(top, #f7f7f7, #ffffff); background-image: -o-linear-gradient(top, #f7f7f7, #ffffff); background-image: linear-gradient(to bottom, #f7f7f7, #ffffff); background-repeat: repeat-x; } .widget.widget-tabs-2 > .widget-head ul li a { border: 1px solid #dddddd; border-bottom: none; border-right: none; color: #222; text-transform: uppercase; font-weight: 600; } .widget.widget-tabs-2 > .widget-head ul li:first-child a { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .widget.widget-tabs-2 > .widget-body { background: #fff; border: none; padding: 15px; } .widget.tabs-right .widget-head ul { float: right; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons { width: 38px; padding: 0; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons i { width: 38px; display: block; line-height: 35px; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons i:before { width: 38px; text-align: center; left: auto; top: auto; position: relative; display: block; line-height: 35px; color: #cbcbcb; } .widget.widget-tabs-icons-only-2 > .widget-head ul li.active a.glyphicons i:before { color: #505050; } .widget.widget-tabs-icons-only .widget-body { padding: 0; } .widget.widget-tabs-icons-only .widget-body p:last-child { margin: 0; } .widget.widget-tabs-icons-only .widget-head { padding: 0 0 10px; } .widget.widget-tabs-icons-only .widget-head ul { display: block; overflow: hidden; position: relative; list-style: none; margin: 0; height: 30px; line-height: 30px; padding: 0; } .widget.widget-tabs-icons-only .widget-head ul li { color: #dadada; float: left; display: block; padding: 0 10px 0 0; font-size: 8pt; line-height: 30px; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons { width: 30px; height: 30px; padding: 0 3px; text-align: center; cursor: pointer; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons i { background: #e5e5e5; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; display: block; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; height: 30px; position: relative; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons i:before { position: relative; top: 0; left: 0; color: #64625f; font-size: 17px; line-height: 30px; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons:hover i { background: #dedede; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons.active i { background: #64625f; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons.active i:before { color: #fff; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons:last-child { padding: 0; } .tabsbar { height: 60px; border: 1px solid #dbdbdb; position: relative; overflow: hidden; margin: 0 0 15px; } .tabsbar ul { list-style: none; margin: 0; padding: 0; height: 60px; } .tabsbar ul li { float: left; display: block; height: 54px; border-right: 1px solid #dbdbdb; background: #fdfdfd; padding: 3px; } .tabsbar ul li a { display: block; height: 54px; line-height: 54px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); padding: 0 15px; color: #7c7c7c; text-decoration: none; -webkit-transition: background 1s ease; -moz-transition: background 1s ease; -o-transition: background 1s ease; transition: background 1s ease; } .tabsbar ul li a i { display: inline-block; float: left; width: 39px; height: 54px; } .tabsbar ul li a i:before { color: #7c7c7c; position: relative; top: auto; left: auto; line-height: 54px; text-align: center; } .tabsbar ul li.active a { background-color: #6ca1ce; background-image: -moz-linear-gradient(top, #83b0d5, #4a8bc2); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#83b0d5), to(#4a8bc2)); background-image: -webkit-linear-gradient(top, #83b0d5, #4a8bc2); background-image: -o-linear-gradient(top, #83b0d5, #4a8bc2); background-image: linear-gradient(to bottom, #83b0d5, #4a8bc2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff83b0d5', endColorstr='#ff4a8bc2', GradientType=0); color: #fff; } .tabsbar ul li.active a i:before { color: #fff; } .tabsbar.tabsbar-2 { height: 39px; } .tabsbar.tabsbar-2 ul { height: 39px; } .tabsbar.tabsbar-2 ul li { height: 39px; padding: 0; background: none; border: none; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; } .tabsbar.tabsbar-2 ul li a { height: 39px; line-height: 39px; background: none; -webkit-transition: color 0.5s ease; -moz-transition: color 0.5s ease; -o-transition: color 0.5s ease; transition: color 0.5s ease; } .tabsbar.tabsbar-2 ul li a i { height: 39px; width: 33px; } .tabsbar.tabsbar-2 ul li a i:before { line-height: 39px; font-size: 20px; -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; } .tabsbar.tabsbar-2 ul li.active { background: #fff; } .tabsbar.tabsbar-2 ul li.active a { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li.active a i:before { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li:not(.active):hover a { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li:not(.active):hover a i:before { color: #4a8bc2; } .tabsbar.tabsbar-2.active-fill ul li.active a { background: #4a8bc2; color: #fff; } .tabsbar.tabsbar-2.active-fill ul li.active a i:before { color: #fff; } .nav-tabs > li > a:hover, .nav-pills > li > a, .nav-pills > li > a:hover { background: #4a8bc2; border-bottom-color: #4a8bc2; color: #fff; } .nav-tabs { border-bottom-color: #4a8bc2; } .nav-tabs > li > a { padding: 6px 8px; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { background: #4a8bc2; border-top-color: #4a8bc2; border-left-color: #4a8bc2; border-right-color: #4a8bc2; color: #fff; font-weight: bold; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } .nav-pills a { cursor: pointer; } .nav-pills > .active > a, .nav-pills > .active > a:hover { background: #4a8bc2; color: #fff; } .nav-pills .glyphicons { padding-left: 25px; } .nav-pills .glyphicons i:before { position: relative; font-size: 14px; left: -10px; top: 2px; color: #F5EADB; font-weight: normal; text-shadow: none; } .tab-content { overflow: visible; padding: 0; } .btn { font-weight: 600; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; } .btn-block { width: 100%; } .btn + .btn:not(.btn-block) { margin: 0 0 0 5px; } .input-append .btn + .btn, .input-prepend .btn + .btn { margin-left: -1px; } .btn-group .btn + .btn:not(.btn-block) { margin-left: -1px; } .btn-group.dropup .btn:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .btn-default { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75); color: rgba(0, 0, 0, 0.6); text-shadow: 0 1px 0 #fff; font-weight: 600; background-color: #efefef; background-image: -moz-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#e7e7e7)); background-image: -webkit-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: -o-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: linear-gradient(to bottom, #f4f4f4, #e7e7e7); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4f4f4', endColorstr='#ffe7e7e7', GradientType=0); border: 1px solid #cecece; } .btn-group.open .btn-default.dropdown-toggle, .btn-default.disabled, .btn-default[disabled], .btn-default:hover, .btn-default:focus { background: #e8e8e8; } .btn-default:active, .btn-default.active { background: #e8e8e8; color: #fff; text-shadow: none; } .btn-default .caret { border-top-color: rgba(0, 0, 0, 0.5); } .btn-warning { background-color: #b6895e; background-image: -moz-linear-gradient(top, #be946b, #ab7a4b); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#be946b), to(#ab7a4b)); background-image: -webkit-linear-gradient(top, #be946b, #ab7a4b); background-image: -o-linear-gradient(top, #be946b, #ab7a4b); background-image: linear-gradient(to bottom, #be946b, #ab7a4b); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbe946b', endColorstr='#ffab7a4b', GradientType=0); border: 1px solid #88613b; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-warning.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-warning.dropdown-toggle, .btn-warning.disabled, .btn-warning[disabled], .btn-warning:hover, .btn-warning:focus { background: #ab7a4b; color: #fff; } .btn-warning:active, .btn-warning.active { background: #ab7a4b; color: #fff; } .btn-warning .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-info { background: #93B9D8; border: 1px solid #93B9D8; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-info.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-info.dropdown-toggle, .btn-info.disabled, .btn-info[disabled], .btn-info:hover, .btn-info:focus { background: #93B9D8; color: #fff; } .btn-info:active, .btn-info.active { background: #93B9D8; color: #fff; } .btn-info .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-danger { background-color: #ca4741; background-image: -moz-linear-gradient(top, #d3534c, #bd362f); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#d3534c), to(#bd362f)); background-image: -webkit-linear-gradient(top, #d3534c, #bd362f); background-image: -o-linear-gradient(top, #d3534c, #bd362f); background-image: linear-gradient(to bottom, #d3534c, #bd362f); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd3534c', endColorstr='#ffbd362f', GradientType=0); border: 1px solid #942a25; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-danger.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-danger.dropdown-toggle, .btn-danger.disabled, .btn-danger[disabled], .btn-danger:hover, .btn-danger:focus { background: #bd362f; color: #fff; } .btn-danger:active, .btn-danger.active { background: #bd362f; color: #fff; } .btn-danger .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-primary { background-color: #619aca; background-image: -moz-linear-gradient(top, #70a3cf, #4a8bc2); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#70a3cf), to(#4a8bc2)); background-image: -webkit-linear-gradient(top, #70a3cf, #4a8bc2); background-image: -o-linear-gradient(top, #70a3cf, #4a8bc2); background-image: linear-gradient(to bottom, #70a3cf, #4a8bc2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff70a3cf', endColorstr='#ff4a8bc2', GradientType=0); border: 1px solid #3771a2; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-primary.glyphicons i:before { color: rgba(255, 255, 255, 0.4); text-shadow: none; } .btn-group.open .btn-primary.dropdown-toggle, .btn-primary.disabled, .btn-primary[disabled], .btn-primary:hover, .btn-primary:focus { background: #4a8bc2; color: #fff; } .btn-primary:active, .btn-primary.active { background: #4a8bc2; color: #fff; } .btn-primary .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } .btn-inverse { background-color: #53575d; background-image: -moz-linear-gradient(top, #5d6168, #45484d); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5d6168), to(#45484d)); background-image: -webkit-linear-gradient(top, #5d6168, #45484d); background-image: -o-linear-gradient(top, #5d6168, #45484d); background-image: linear-gradient(to bottom, #5d6168, #45484d); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5d6168', endColorstr='#ff45484d', GradientType=0); border: 1px solid #2d2f32; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-inverse.glyphicons i:before { color: #919293; text-shadow: none; } .btn-group.open .btn-inverse.dropdown-toggle, .btn-inverse.disabled, .btn-inverse[disabled], .btn-inverse:hover, .btn-inverse:focus { background: #45484d; color: #fff; } .btn-inverse:active, .btn-inverse.active { background: #45484d; color: #fff; } .btn-inverse .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-success { background-color: #6fa45f; background-image: -moz-linear-gradient(top, #79ae69, #609450); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#79ae69), to(#609450)); background-image: -webkit-linear-gradient(top, #79ae69, #609450); background-image: -o-linear-gradient(top, #79ae69, #609450); background-image: linear-gradient(to bottom, #79ae69, #609450); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff79ae69', endColorstr='#ff609450', GradientType=0); border: 1px solid #4b733e; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-success.glyphicons i:before { color: #a2bc9b; text-shadow: none; } .btn-group.open .btn-success.dropdown-toggle, .btn-success.disabled, .btn-success[disabled], .btn-success:hover, .btn-success:focus { background: #609450; color: #fff; } .btn-success:active, .btn-success.active { background: #609450; color: #fff; } .btn-success .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-group .btn-primary:not(.dropdown-toggle), .btn-group .btn-primary:not('[data-toggle*=""]') { margin-right: 2px; } .btn-group-vertical.block { display: block; } .btn-group.btn-block { padding: 0; position: relative; } .btn-group.btn-block .leadcontainer { left: 0; position: absolute; right: 29px; } .btn-group.btn-block .leadcontainer > .btn:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; text-align: left; } .btn-group.btn-block .dropdown-lead { box-sizing: border-box; width: 100%; } .btn-group.btn-block .dropdown-toggle { width: 30px; float: right; box-sizing: border-box; text-align: center; padding-left: 0; padding-right: 0; } .btn-icon-stacked { text-align: left; padding: 5px 5px 5px 45px; } .btn-icon-stacked i { display: block; width: 24px; height: 24px; position: absolute; left: 10px; top: 10px; } .btn-icon-stacked i:before { left: auto; top: auto; position: relative; text-align: center; } .btn-icon-stacked span { display: block; font-size: 13px; line-height: normal; } .btn-facebook { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); background-color: #728dc0; background-image: -moz-linear-gradient(top, #8098c6, #5d7cb6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#8098c6), to(#5d7cb6)); background-image: -webkit-linear-gradient(top, #8098c6, #5d7cb6); background-image: -o-linear-gradient(top, #8098c6, #5d7cb6); background-image: linear-gradient(to bottom, #8098c6, #5d7cb6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8098c6', endColorstr='#ff5d7cb6', GradientType=0); border: 1px solid #5d7cb6; } .btn-facebook i:before { color: #fff; } .btn-facebook:hover { background: #8098c6; color: #fff; } .btn-google { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); background-color: #b24343; background-image: -moz-linear-gradient(top, #bf4a4a, #9e3838); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#bf4a4a), to(#9e3838)); background-image: -webkit-linear-gradient(top, #bf4a4a, #9e3838); background-image: -o-linear-gradient(top, #bf4a4a, #9e3838); background-image: linear-gradient(to bottom, #bf4a4a, #9e3838); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbf4a4a', endColorstr='#ff9e3838', GradientType=0); border: 1px solid #9e3838; } .btn-google i:before { color: #fff; } .btn-google:hover { background: #bf4a4a; color: #fff; } .btn-toggle-code { position: absolute; bottom: 0; right: 0; z-index: 1000; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .btn-toggle-code.outside { bottom: -24px; } #demo_buttons .btn-block { max-width: 200px; margin: 0 auto; } #demo_buttons thead th { width: 25%; } .form-inline.small input, .form-inline.small select { margin: 0 5px 0 0; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; padding: 1px 5px; border-color: #d8d9da; color: #a7a7a7; } .form-inline.small select { padding: 1px 0; height: 23px; } .form-inline.small select:last-child { margin-right: 0; } .form-inline.small label { float: left; margin: 0 5px 0 0; display: block; } .form-inline.small .input-append.block { display: block; } .form-inline.small .input-append input { margin: 0; width: 85%; } .form-inline.small .input-append .add-on { padding: 1px 3px; margin: 0 0 0 -1px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; background: #fff; color: #d8d9da; border-color: #d8d9da; } .form-inline.small .input-append .add-on i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: #c1c1c1; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { font-size: 13px; } .uniformjs .radio .disabled input[type="radio"], .uniformjs .checkbox .disabled input[type="checkbox"] { margin-left: 0; } .uniformjs .radio, .uniformjs .checkbox { padding-left: 0; } .uniformjs .radio { height: auto; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 3px; } .uniformjs label.radio { margin-bottom: 0; } .uniformjs label.radio.inline { margin: 0; } .checkbox.inline { padding-bottom: 1px; } .uniformjs .radio span { margin: 2px 0 0; } .uniformjs .checkbox span { margin: -2px 0 0; } label, input, button, select, textarea { font-size: 13px; } .input-full input { width: 83%; height: 17px; } legend { line-height: normal; height: auto; font-size: 18px; margin: 0 0 6px; text-align: left; padding: 0; border: 0; color: #797979; } .btn-group > .btn, .btn-group > .dropdown-menu { font-size: 13px; } .strong { font-weight: bold; } input[type=text], input[type=password], select, textarea { border-color: #D8D9DA; color: #A7A7A7; } .control-label.center { text-align: center; } .form-actions { background: none; border: none; margin: 0; } .form-horizontal .form-actions { margin-top: 0; padding: 0; } .form-horizontal .controls { margin-left: 145px; } .form-horizontal .control-label { width: 125px; } .form-horizontal .control-group:last-child { margin: 0; } .input-prepend .add-on, .input-append .add-on { background: #fff; } .input-prepend .add-on i:before, .input-append .add-on i:before { color: #D0D1D1; } .input-prepend .add-on icon, .input-append .add-on icon { margin-top: 0; } .input-prepend .add-on.glyphicons, .input-append .add-on.glyphicons { background: #fff; } .input-prepend .add-on.glyphicons i:before, .input-append .add-on.glyphicons i:before { font-size: 14px; left: 7px; top: 7px; color: #D0D1D1; } .input-append .add-on.glyphicons i:before { left: 6px; } .ms-container .ms-selectable li.ms-hover, .ms-container .ms-selection li.ms-hover { background: #4a8bc2; } .ms-container .custom-header { height: 30px; line-height: 30px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); padding: 0 15px; font-weight: 600; border: 1px solid #dbdbdb; } .ms-container .custom-header:not(.custom-footer) { border-bottom: none; } .ms-container .custom-header.custom-footer { border-top: none; } .select2-container img.flag, .select2-drop img.flag { height: 10px; width: 15px; padding-right: 10px; } .select2-container .select2-choice { border-color: #dbdbdb; background: #fff; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .select2-container-multi .select2-choices { border-color: #dbdbdb; background: #fff; } .select2-container .select2-choice div { border-color: #d8d8d8; background: #fff; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .select2-drop { border-color: #d8d8d8; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .select2-container-multi .select2-choices .select2-search-choice { margin: 5px 0 3px 5px; border-color: #d8d8d8; } .datetimepicker table tr td span.active:hover, .datetimepicker table tr td span.active:hover:hover, .datetimepicker table tr td span.active.disabled:hover, .datetimepicker table tr td span.active.disabled:hover:hover, .datetimepicker table tr td span.active:active, .datetimepicker table tr td span.active:hover:active, .datetimepicker table tr td span.active.disabled:active, .datetimepicker table tr td span.active.disabled:hover:active, .datetimepicker table tr td span.active.active, .datetimepicker table tr td span.active:hover.active, .datetimepicker table tr td span.active.disabled.active, .datetimepicker table tr td span.active.disabled:hover.active, .datetimepicker table tr td span.active.disabled, .datetimepicker table tr td span.active:hover.disabled, .datetimepicker table tr td span.active.disabled.disabled, .datetimepicker table tr td span.active.disabled:hover.disabled, .datetimepicker table tr td span.active[disabled], .datetimepicker table tr td span.active:hover[disabled], .datetimepicker table tr td span.active.disabled[disabled], .datetimepicker table tr td span.active.disabled:hover[disabled], .datetimepicker table tr td.active:hover, .datetimepicker table tr td.active:hover:hover, .datetimepicker table tr td.active.disabled:hover, .datetimepicker table tr td.active.disabled:hover:hover, .datetimepicker table tr td.active:active, .datetimepicker table tr td.active:hover:active, .datetimepicker table tr td.active.disabled:active, .datetimepicker table tr td.active.disabled:hover:active, .datetimepicker table tr td.active.active, .datetimepicker table tr td.active:hover.active, .datetimepicker table tr td.active.disabled.active, .datetimepicker table tr td.active.disabled:hover.active, .datetimepicker table tr td.active.disabled, .datetimepicker table tr td.active:hover.disabled, .datetimepicker table tr td.active.disabled.disabled, .datetimepicker table tr td.active.disabled:hover.disabled, .datetimepicker table tr td.active[disabled], .datetimepicker table tr td.active:hover[disabled], .datetimepicker table tr td.active.disabled[disabled], .datetimepicker table tr td.active.disabled:hover[disabled] { background: #4a8bc2; } .bootstrap-timepicker-widget table td { font-size: 13px; } .bootstrap-timepicker > [class*="icon-"] { vertical-align: text-top; margin: 0 0 0 -22.5px; pointer-events: none; position: relative; cursor: pointer; } .table { margin: 0 0 15px; position: relative; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table.table-white { background: #fff; } .table th, .table td { border-top-color: #ebebeb; } .table td.center, .table th.center { text-align: center; } .table td.right, .table th.right { text-align: right; } .table-condensed { font-size: 10pt; } .table-condensed th, .table-condensed td { padding: 4px 10px; } .table-borderless th, .table-borderless td { border: none; } .table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { background-color: #fafafa; } .table-bordered { border-color: #dbdbdb; /* Reset rounded corners thead:first-child tr:first-child>th:first-child, tbody:first-child tr:first-child>td:first-child, tbody:first-child tr:first-child>th:first-child, thead:first-child tr:first-child>th:last-child, tbody:first-child tr:first-child>td:last-child, tbody:first-child tr:first-child>th:last-child, thead:last-child tr:last-child>th:first-child, tbody:last-child tr:last-child>td:first-child, tbody:last-child tr:last-child>th:first-child, tfoot:last-child tr:last-child>td:first-child, tfoot:last-child tr:last-child>th:first-child { .rounded(); } */ box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .table-bordered th, .table-bordered td { border-color: #dbdbdb; } .table-fill td { background: #F8F8F8; } .table .progress:last-child, .table .alert:last-child { margin: 0; } .table .shortRight { width: 25%; text-align: right; direction: rtl; text-indent: 10px; } .table-large-spacing td { padding: 20px 15px; } .table .thead td { padding: 8px; font-weight: bold; } .table-vertical-center td, .table-vertical-center th { vertical-align: middle; } .table-thead-simple thead th { background: none; border-left: none; border-right: none; border-top: none; border-bottom: 1px solid #ebebeb; color: #7c7c7c; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; text-shadow: none; text-transform: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .table-thead-simple.table-thead-border-none { border-top: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table-thead-simple.table-thead-border-none thead th { border-bottom: none; } .table-thead-simple.table-thead-border-none thead:first-child tr:first-child > th:last-child, .table-thead-simple.table-thead-border-none tbody:first-child tr:first-child > td:last-child, .table-thead-simple.table-thead-border-none tbody:first-child tr:first-child > th:last-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table-primary { border-color: #dbdbdb; border-top: none; } .table-primary thead th { border-color: #4a8bc2; background-color: #4a8bc2; color: #fff; font-size: 14px; } .table-primary tbody td { color: #7c7c7c; background: #fafafa; border-width: 0px; } .table-primary tbody td.important { color: #4a8bc2; font-weight: 600; } .table-primary tbody td.actions { padding-right: 1px; } .table-primary.table-bordered tbody td { border-color: #dbdbdb; border-width: 1px; /* box-shadow: 0 0 0 1px #fff inset; -webkit-box-shadow: 0 0 0 1px #fff inset; -moz-box-shadow: 0 0 0 1px #fff inset; */ } .table-primary tbody tr:nth-child(odd) td, .table-primary tbody tr:nth-child(odd) th { background: #ffffff; } .table-primary tbody tr.selectable td { cursor: pointer; } .table-primary tbody tr.selected td, .table-primary tbody tr.selectable:hover td { background: #cecece; box-shadow: 0 0 0 1px #a8a8a8 inset; -webkit-box-shadow: 0 0 0 1px #a8a8a8 inset; -moz-box-shadow: 0 0 0 1px #a8a8a8 inset; } .table-pricing th, .table-pricing td { padding: 10px; } .table-pricing .plan { font-weight: 600; font-size: 14px; display: block; } .table-pricing .price { font-weight: 600; font-size: 24px; display: block; } .table-pricing .heading { font-weight: 600; font-size: 24px; vertical-align: middle; } .table-pricing .glyphicons.standard { vertical-align: middle; } .table-pricing .glyphicons.standard.circle_ok i:before { color: #9fc75f; } .table-pricing-2 th { padding: 12px 0; background: #64625f; font-size: 14px; color: #fff; border-color: #5a5855; } .table-pricing-2 .pricing td { padding: 12px 10px 10px; background: #e5e5e5; border-color: #cecece; } div.dataTables_filter label { float: none; } .row-fluid [class*="span"]:last-of-type .dataTables_filter { text-align: right; } #DataTables_Table_0_length select { width: 80px; } #DataTables_Table_0_info { padding: 0; } .dataTables_paginate { text-align: right; } .dataTables_length { padding-top: 5px; } .ColVis { margin: 0; } .google-visualization-table-div-page { margin: 10px 0 0 0 !important; } .google-visualization-table-div-page .a-d-e-h-g { padding: 0; border: none; margin: 0; } .google-visualization-table-div-page .a-d-e-f-g, .google-visualization-table-div-page .a-d-e-h-g { border-style: none; } .google-visualization-table-div-page .a-d-e-o-q .a-d-e-h-g { border: none; } .google-visualization-table-div-page .a-d-e { background: none; margin-left: 5px; } .google-visualization-table-div-page .a-d-e.a-d-e-o-p { margin-left: 0; } .google-visualization-table-table { width: 100%; border-collapse: separate; border-spacing: 0; border: 1px solid #e5e5e5; border-left: 0; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; font-size: 10pt; background: none !important; } .google-visualization-table-table td, .google-visualization-table-table .tableHeaderRow td { padding: 4px 10px; border: none; border-left: 1px solid #e5e5e5; border-top: 1px solid #e5e5e5; line-height: 20px; } .google-visualization-table-table .tableHeaderRow td { font-weight: bold; vertical-align: bottom; } .google-visualization-table-table tbody tr:nth-child(odd) td, .google-visualization-table-table tbody tr:nth-child(odd) td { background-color: rgba(255, 255, 255, 0.5); } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child > td:first-child, .google-visualization-table-table tbody:first-child tr:first-child > td:first-child { -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child > td:last-child, .google-visualization-table-table tbody:first-child tr:first-child > td:last-child { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-topright: 4px; } .google-visualization-table-table tbody:last-child tr:last-child > td:first-child { -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; } .google-visualization-table-table tbody:last-child tr:last-child > td:last-child { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child td, .google-visualization-table-table tbody:first-child tr:first-child td { border-top: 0; } @media only screen and (max-width: 979px) { .table-responsive.swipe-horizontal { border-collapse: collapse; border-spacing: 0; display: block; position: relative; width: 100%; border-left: 1px solid #DDD; } .table-responsive.swipe-horizontal th, .table-responsive.swipe-horizontal td { display: block; margin: 0; vertical-align: top; } .table-responsive.swipe-horizontal th { text-align: right; border-bottom: 0; border-left: 0; } .table-responsive.swipe-horizontal td { min-height: 1.25em; text-align: left; border-left: 0; border-right: 0; border-bottom: 0; border-top: 0; font-size: 13px; } .table-responsive.swipe-horizontal thead { display: block; float: left; } .table-responsive.swipe-horizontal thead tr { display: block; } .table-responsive.swipe-horizontal tbody { display: block; width: auto; position: relative; overflow-x: auto; white-space: nowrap; word-spacing: 0; letter-spacing: 0; font-size: 0; } .table-responsive.swipe-horizontal tbody tr { display: inline-block; vertical-align: top; border-left: 1px solid #e5e5e5; } .table-responsive.block { /* Force table to not be like tables anymore */ /* Hide table headers (but not display: none;, for accessibility) */ /* Label the data */ } .table-responsive.block table, .table-responsive.block thead, .table-responsive.block tbody, .table-responsive.block th, .table-responsive.block td, .table-responsive.block tr { display: block; } .table-responsive.block thead tr { position: absolute; top: -9999px; left: -9999px; } .table-responsive.block tr { border: 1px solid #e5e5e5; } .table-responsive.block td { /* Behave like a "row" */ border: none; border-bottom: 1px solid #e5e5e5; position: relative; padding-left: 50%; white-space: normal; text-align: left; } .table-responsive.block td:before { /* Now like a table header */ position: absolute; /* Top/left values mimic padding */ vertical-align: middle; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; text-align: right; font-weight: bold; } .table-responsive.block td:before { content: attr(data-title); } } .table-invoice td { border: none; padding: 0; } .table-projects .stats span { display: block; text-transform: uppercase; padding: 2px 0; } .table-projects .stats span.count { font-size: 18pt; font-weight: normal; color: #4a8bc2; } .label.large { height: 29px; padding: 0 10px; line-height: 29px; background: #e5e5e5; color: #64625f; text-shadow: 0 1px 0 #fff; } .label.label-primary { background: #4a8bc2; } .label.label-warning { background: #ab7a4b; } .label.label-important { background: #bd362f; } .label.label-success { background: #609450; } .label.label-block { display: block; } .tooltip-inner { background: #272a2c; color: #bab9b9; } .tooltip.bottom .tooltip-arrow { border-bottom-color: #272a2c; } .tooltip.top .tooltip-arrow { border-top-color: #272a2c; } .tooltip.left .tooltip-arrow { border-left-color: #272a2c; } .tooltip.right .tooltip-arrow { border-right-color: #272a2c; } .tooltip.left { margin-left: -13px; } #flotTip { white-space: nowrap; border: 1px solid #4a8bc2; padding: 3px 8px; background: #4a8bc2; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); position: absolute; z-index: 100; color: #fff; } .popover { border-color: #dbdbdb; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; } .popover .popover-title { font-weight: 600; padding: 0 10px; height: 29px; line-height: 29px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); border-bottom: 1px solid #dbdbdb; position: relative; overflow: hidden; } #demo_popovers .popover { position: relative; display: block; width: 100%; margin: 0; } .modal-backdrop { z-index: 10000; background: #000000; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.9; filter: alpha(opacity=90); } .modal { z-index: 10001; border-color: #dbdbdb; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; background: #ffffff; } .modal .modal-header { padding: 0 10px; height: 29px; line-height: 29px; border-color: #dbdbdb; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .modal .modal-header h3 { font-size: 14px; } .modal .modal-header .close { position: absolute; top: 5px; right: 10px; padding: 0; margin: 0; opacity: 1; filter: alpha(opacity=100); color: #7c7c7c; text-shadow: 0 1px 0 #ffffff; } .modal .modal-body { padding: 10px; } .modal .modal-body p:last-child { margin: 0; } .modal .modal-footer { -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); border-color: #ebebeb; padding: 10px; background: #fafafa url("../images/pattern1.png") repeat; } .alert { margin: 0 0 15px; color: #fff; border-color: #ab7a4b; background: #ab7a4b; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); } .alert h4 { margin: 0 0 5px; color: #fff; } .alert.alert-error { background: #bd362f; color: #fff; border-color: #bd362f; } .alert.alert-error .close { color: #fff; } .alert.alert-error h4 { color: #fff; } .alert.alert-primary { background: #4a8bc2; color: #fff; border-color: #4a8bc2; } .alert.alert-primary .close { color: #fff; } .alert.alert-primary h4 { color: #fff; } .alert.alert-info { background: #dff3f8; color: #7399b9; border-color: #93b9d8; } .alert.alert-info .close { color: #7399b9; } .alert.alert-success { border-color: #609450; background: #609450; color: #fff; } .alert.alert-success .close, .alert.alert-success h4 { color: #fff; } .alert .close { opacity: 1; filter: alpha(opacity=100); color: #fff; } .progress { background: #ffffff; margin: 0 0 10px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .progress .bar { background: #e8e8e8; } .progress .bar.right { text-align: right; text-indent: 10px; direction: rtl; } .progress.white { background: #fff; } .progress.progress-info .bar { background: #93b9d8; } .progress.progress-success .bar { background: #609450; } .progress.progress-warning .bar { background: #ab7a4b; } .progress.progress-primary .bar { background: #4a8bc2; } .progress.progress-danger .bar { background: #bd362f; } .progress.progress-inverse .bar { background: #45484d; } .progress.progress-small { height: 15px; } .progress.progress-small .bar { font-size: 8px; line-height: 15px; } .progress.progress-small .bar.right { text-indent: 2px; } .progress.progress-mini { height: 5px; } .accordion { margin: 0 0 10px; position: relative; } .accordion .accordion-group { border-color: #dbdbdb; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .accordion .accordion-inner { font-size: 13px; background: #ffffff; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; border-color: #dbdbdb; } .accordion .accordion-heading .accordion-toggle { background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); color: #7c7c7c; text-decoration: none; font-weight: 600; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; height: 29px; padding: 0 10px; line-height: 29px; } .accordion.accordion-2 { border: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-heading .accordion-toggle { border-bottom: 1px solid #dbdbdb; background: #ffffff; height: 38px; line-height: 38px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons { padding: 0 10px; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons i { width: 30px; line-height: 38px; height: 38px; display: block; float: left; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons i:before { font-size: 20px; color: #cccccc; top: auto; left: auto; width: 30px; line-height: 38px; height: 38px; position: relative; text-align: center; } .accordion.accordion-2 .accordion-body.in { border-bottom: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-group { border: none; margin: 0; } .accordion.accordion-2 .accordion-group:last-child .accordion-body.in { border-top: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-inner { border: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .pager li > a, .pager li > span { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .pagination ul { background: #ffffff; } .pagination ul > li > a:hover { box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; } .pagination ul > li > a:hover, .pagination ul > li.primary > a { border-color: #70a3cf; background: #4a8bc2; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .pagination ul > .active > a, .pagination ul > .active > span { border-color: #4a8bc2; background: #4a8bc2; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; } .pagination ul > li > a, .pagination ul > li > span { border-color: #dbdbdb; background: #ffffff; } .pagination ul > .primary.disabled > a, .pagination ul > .disabled > a, .pagination ul > .disabled > span { border-color: #dbdbdb; background: #ffffff; color: #dddddd; font-weight: 600; text-shadow: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .pagination ul > .disabled > a:hover { border-color: #dbdbdb; background: #ffffff; color: #dddddd; text-shadow: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .gritter-item-wrapper .gritter-item p { margin: 0 0 10px; } .gritter-item-wrapper .gritter-item p:last-child { margin: 0; } .gritter-item-wrapper.gritter-primary .gritter-top { display: none; } .gritter-item-wrapper.gritter-primary .gritter-bottom { display: none; } .gritter-item-wrapper.gritter-primary .gritter-item { background: rgba(74, 139, 194, 0.9); padding: 10px 10px 15px; -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; color: #fff; } .gritter-item-wrapper.gritter-primary .gritter-item a { color: #fff; text-decoration: underline; } .notyfy_wrapper { border: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .notyfy_wrapper.notyfy_alert { background: #ffffff; } .notyfy_wrapper.notyfy_error { background: #bd362f; color: #fff; } .notyfy_wrapper.notyfy_success { background: #51a351; color: #fff; } .notyfy_wrapper.notyfy_warning { background: #74614f; color: #fff; } .notyfy_wrapper.notyfy_information { background: #57B7E2; color: #fff; } .notyfy_wrapper.notyfy_confirm { background: #ffffff; } .notyfy_wrapper.notyfy_primary { background: #4a8bc2; border: none; } .notyfy_wrapper.notyfy_primary, .notyfy_wrapper.notyfy_primary * { color: #fff; } .notyfy_wrapper.notyfy_default { background: #fafafa; } .notyfy_wrapper.notyfy_dark { background: #4a4846; } .notyfy_wrapper.notyfy_dark, .notyfy_wrapper.notyfy_dark * { color: #fff; } #notyfy_container_top { top: 0; left: 0; width: 100%; } #notyfy_container_top .notyfy_wrapper { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #content-notification .notyfy_wrapper { border: none; box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #content-notification .notyfy_wrapper p { margin: 0; } #content-notification .notyfy_wrapper .notyfy_message { padding: 15px 10px; } #content-notification .notyfy_wrapper.notyfy_default { background: #fafafa url("../images/pattern1.png") repeat; } #content-notification .notyfy_wrapper.notyfy_dark { background: #4a4846 url("../images/pattern1.png") repeat; } #content-notification .notyfy_wrapper.notyfy_primary { background: #4a8bc2 url("../images/pattern1.png") repeat; box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; -moz-box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; -webkit-box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; } .sliders-vertical span { height: 120px; float: left; margin: 15px; } .ui-slider-wrap { display: block; padding: 5px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; } .ui-slider-wrap .ui-slider { background: rgba(0, 0, 0, 0.1); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; } .ui-slider-wrap .ui-slider-horizontal { height: 10px; } .ui-slider-wrap .ui-slider-horizontal .ui-slider-handle { top: -5px; } .ui-slider-wrap .ui-slider-vertical .ui-slider-handle { left: -4px; } .ui-slider-wrap .ui-slider-handle { -webkit-border-radius: 50% 50% 50% 50%; -moz-border-radius: 50% 50% 50% 50%; border-radius: 50% 50% 50% 50%; background: #fff; border-width: 3px; border-style: solid; border-color: rgba(0, 0, 0, 0.3); width: 13px; height: 13px; box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); } .ui-slider-wrap .ui-slider-range { -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; background: rgba(0, 0, 0, 0.2); } .ui-slider-wrap .slider-primary .ui-slider-handle { border-color: #4a8bc2; } .ui-slider-wrap .slider-primary .ui-slider-range { background: #4a8bc2; } .ui-slider-wrap .slider-warning .ui-slider-handle { border-color: #FBB450; } .ui-slider-wrap .slider-warning .ui-slider-range { background: #FBB450; } .ui-slider-wrap .slider-success .ui-slider-handle { border-color: #609450; } .ui-slider-wrap .slider-success .ui-slider-range { background: #609450; } .ui-slider-wrap .slider-inverse .ui-slider-handle { border-color: #3F4246; } .ui-slider-wrap .slider-inverse .ui-slider-range { background: #3F4246; } .ui-slider-wrap .slider-info .ui-slider-handle { border-color: #93B9D8; } .ui-slider-wrap .slider-info .ui-slider-range { background: #93B9D8; } .sliders-vertical { position: relative; margin: 0 auto; display: inline-block; } .sliders-vertical .ui-slider-wrap { margin: 0 5px; } .sliders-vertical .ui-slider { margin: 0; } .vertical-range-slider .ui-slider-wrap { display: inline-block; margin: 0 auto; } .sliderContainer { height: 35px; margin-top: 50px; width: 100%; } .sliderContainer select, .sliderContainer textarea, .sliderContainer input[type="text"], .sliderContainer input[type="password"], .sliderContainer input[type="datetime"], .sliderContainer input[type="datetime-local"], .sliderContainer input[type="date"], .sliderContainer input[type="month"], .sliderContainer input[type="time"], .sliderContainer input[type="week"], .sliderContainer input[type="number"], .sliderContainer input[type="email"], .sliderContainer input[type="url"], .sliderContainer input[type="search"], .sliderContainer input[type="tel"], .sliderContainer input[type="color"], .sliderContainer .uneditable-input { margin: 0; padding: 2px 4px; } .sliderContainer .ui-rangeSlider-withArrows .ui-rangeSlider-container { margin: 0 20px; } .sliderContainer .ui-rangeSlider-bar { background: #4a8bc2; height: 30px; margin: 0; } .sliderContainer .ui-rangeSlider-withArrows .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-noArrow .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-arrow, .sliderContainer .ui-rangeSlider-bar { box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .sliderContainer .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-arrow, .sliderContainer .ui-rangeSlider-label { background: #e5e5e5; color: #7c7c7c; font-size: 13px; } .sliderContainer .ui-rangeSlider-container { border-color: #dbdbdb; } .sliderContainer .ui-editRangeSlider .ui-rangeSlider-label { padding: 5px; } .sliderContainer .ui-rangeSlider-label-inner { border-top-color: #e5e5e5; } .sliderContainer .ui-rangeSlider-arrow { border-color: #dbdbdb; } .sliderContainer .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #4a8bc2; margin-right: -4px; } .sliderContainer .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #4a8bc2; margin-left: -4px; } .sliderContainer .ui-rangeSlider-arrow { width: 20px; } .sliderContainer .ui-rangeSlider .ui-ruler-scale { overflow: hidden; } .sliderContainer .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-inner { border-color: #dbdbdb; } .sliderContainer .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-label { color: #7c7c7c; } .sliderContainer .rangeslider-danger .ui-rangeSlider-bar { background: #bd362f; } .sliderContainer .rangeslider-danger .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #bd362f; } .sliderContainer .rangeslider-danger .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #bd362f; } .sliderContainer .rangeslider-success .ui-rangeSlider-bar { background: #609450; } .sliderContainer .rangeslider-success .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #609450; } .sliderContainer .rangeslider-success .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #609450; } .sliderContainer .rangeslider-warning .ui-rangeSlider-bar { background: #ab7a4b; } .sliderContainer .rangeslider-warning .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #ab7a4b; } .sliderContainer .rangeslider-warning .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #ab7a4b; } .widget-body-gray .sliderContainer .ui-rangeSlider-label-inner { border-top-color: #cecece; } .widget-body-gray .sliderContainer .ui-rangeSlider-container, .widget-body-gray .sliderContainer .ui-rangeSlider-arrow, .widget-body-gray .sliderContainer .ui-rangeSlider-label { background: #cecece; color: #4d4d4d; font-weight: 600; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #4d4d4d; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #4d4d4d; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-bar { background: #4d4d4d; } .ui-widget-header { border-color: #4a8bc2; background: #4a8bc2; color: #fff; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background: #fafafa; border-color: #dddddd; color: #797979; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { background: #4a8bc2; color: #fff; } .ui-widget-content { border: none; } .ui-datepicker { padding: 10px; background: #fff; font-size: 12px; } .ui-datepicker .ui-widget-header { background: none; color: #4d4d4d; border: none; } .ui-datepicker .ui-datepicker-calendar { border-collapse: collapse; } .ui-datepicker .ui-datepicker-calendar thead { background: #cecece; } .ui-datepicker .ui-datepicker-calendar thead th { padding: .5em .3em; } .ui-datepicker .ui-datepicker-calendar tbody td { padding: 0; } .ui-datepicker .ui-datepicker-calendar tbody td span { text-align: center; } .ui-datepicker .ui-datepicker-calendar tbody td a { text-align: center; } .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-active { background: #4a8bc2; color: #fff; } .widget-body-gray .ui-datepicker { background: none; padding: 0; font-size: 12px; } .widget-body-gray .ui-datepicker .ui-widget-header { background: none; color: #4d4d4d; border: none; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar { border-collapse: collapse; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar thead { background: #cecece; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar thead th { padding: .5em .3em; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td { padding: 0; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td span { text-align: center; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a { text-align: center; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-active { background: #4a8bc2; color: #fff; } .ui-datepicker-inline { width: 100%; padding: 0; } .datepicker-inline { margin: 0 0 5px; } .wizard .wizard-head { background: #fff; border: 1px solid #e5e5e5; border-bottom: none; } .bwizard-steps .label { position: relative; top: -1px; margin: 0 5px 0 0; padding: 1px 5px 2px; } .bwizard-steps .active .label { background-color: #333; } .bwizard-steps { display: block; margin: 0; padding: 0; height: 40px; list-style: none; } .bwizard-steps li { display: block; float: left; position: relative; margin-right: 5px; line-height: 40px; height: 40px; background: #fafafa; } .bwizard-steps li a { display: block; height: 40px; line-height: 40px; padding: 0 20px 0 40px; } .bwizard-steps li.active { color: #fff; background: #4a8bc2; } .bwizard-steps li.active:after { border-left-color: #4a8bc2; } .bwizard-steps li.active a { color: #fff; cursor: default; } .bwizard-steps li:after { position: absolute; right: -20px; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fafafa; border-top: 20px inset transparent; content: ""; z-index: 2; } .bwizard-steps li:before { position: absolute; left: 0; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fff; border-top: 20px inset transparent; content: ""; } .bwizard-steps li:last-child { margin-right: 0; } .bwizard-steps li:first-child:before { border: none; } .bwizard-steps li:first-child a { padding-left: 20px; } .bwizard-steps a:hover { text-decoration: none; } .bwizard-steps.clickable li:not (.active ) { cursor: pointer; } .bwizard-steps.clickable li:hover:not (.active ) { background: #ccc; } .bwizard-steps.clickable li:hover:not (.active ):after { border-left-color: #ccc; } .bwizard-steps.clickable li:hover:not (.active ) a { color: #08c; } @media (max-width: 480px) { /* badges only on small screens */ .bwizard-steps li:after, .bwizard-steps li:before { border: none; } .bwizard-steps li, .bwizard-steps li.active, .bwizard-steps li:first-child, .bwizard-steps li:last-child { margin-right: 0; padding: 0; background-color: transparent; } } .layout-timeline { border-top-color: #d2d1d0 !important; border-top-width: 2px !important; } .layout-timeline > [class*="span"] ~ [class*="span"]:after { width: 2px; background: #d2d1d0; } .layout-timeline .media { margin: 0 0 15px; } .layout-timeline .media .media-body { padding: 10px 0 0; line-height: 17px; } .layout-timeline .media .media-body .author { font-size: 14px; } .layout-timeline .glyphicons.pencil { position: absolute; top: 15px; right: 15px; margin: 0; padding: 0; width: 20px; height: 20px; } .layout-timeline .glyphicons.pencil i:before { top: 0; right: 0; font-size: 17px; color: #cccccc; } .layout-timeline ul.timeline { list-style: none; margin: 0; padding: 15px 15px 15px 30px; } .layout-timeline ul.timeline > li { position: relative; padding: 0 0 15px; } .layout-timeline ul.timeline > li .date { width: 50px; padding: 5px 0; text-align: center; text-transform: uppercase; font-weight: 600; position: absolute; left: -70px; top: 0; z-index: 2; } .layout-timeline ul.timeline > li .date strong { display: block; line-height: 10px; padding: 3px 0 0; } .layout-timeline ul.timeline > li .type { position: absolute; text-transform: uppercase; color: #7c7c7c; font-weight: 600; padding: 0 35px 0 0; top: 15px; width: 100px; text-align: right; left: -195px; line-height: 24px; z-index: 2; } .layout-timeline ul.timeline > li .type i:before { left: auto; right: 0; color: #c6c6c5; } .layout-timeline ul.timeline > li .type .time { position: absolute; top: 24px; right: 0; color: #c6c6c5; } .layout-timeline ul.timeline > li .type:after { display: block; content: ""; position: absolute; right: -60px; top: 12px; width: 45px; height: 2px; background: #d2d1d0; } .layout-timeline ul.timeline > li .type:before { display: block; content: ""; position: absolute; right: -20px; top: 9px; width: 8px; height: 8px; background: #d2d1d0; } .layout-timeline ul.timeline > li .separator .type { top: 60px; } .layout-timeline ul.timeline > li .alert-gray { background: #f8f8f8; color: #7c7c7c; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; border: none; margin: 0; } .layout-timeline ul.timeline > li p.glyphicons { padding: 5px 0 5px 25px; } .layout-timeline ul.timeline > li p.glyphicons i:before { color: #dfdfdf; font-size: 17px; top: 5px; left: 0; } .layout-timeline ul.timeline > li .widget-body-gray .glyphicons i:before { color: #7c7c7c; } .layout-timeline ul.timeline > li .widget-body-gray a { color: #000; text-decoration: underline; } .layout-timeline ul.timeline > li .widget-body-gray strong { font-weight: 400; color: #000; } .layout-timeline ul.timeline > li.active .type { color: #4a8bc2; } .layout-timeline ul.timeline > li.active .type i:before { color: #4a8bc2; } .layout-timeline ul.timeline > li.active .type:before, .layout-timeline ul.timeline > li.active .type:after { background: #4a8bc2; } .layout-timeline ul.timeline > li.active:before { display: block; position: absolute; content: ""; top: 0; bottom: 0; left: -45px; width: 2px; z-index: 2; background: #4a8bc2; } .nav-timeline > li { margin: 0 0 5px; } .nav-timeline > li > a { background: #b3b3b3; border: none; margin: 0 !important; font-weight: 600; } .nav-timeline > li > a.glyphicons { padding: 8px 12px; } .nav-timeline > li > a.glyphicons i:before { position: absolute; left: auto; right: 8px; top: 8px; color: #fff; } .nav-timeline > li.active > a { background: #4a8bc2; } body.login { background: #f0f0f0; } body.login #login { padding: 40px 0 0; } body.login #login a:not(.btn) { color: #7c7c7c; text-decoration: underline; } body.login #login h1 { font-size: 20pt; text-align: center; display: block; padding: 0 0 20px; text-shadow: 0 1px 0 #ffffff; } body.login #login h1 i:before { position: relative; left: auto; top: auto; color: #7c7c7c; } body.login #login .wrapper { max-width: 354px; min-width: 300px; margin: 0 auto; position: relative; } body.login #login .wrapper.signup { max-width: 600px; } body.login #login .widget .widget-head .btn { margin: -4px 0 0 5px; } body.login #login .widget .widget-head div { font-size: 12px; } body.login #login .widget .widget-body { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; background: #fafafa; } body.login #login .widget .widget-footer { height: 40px; line-height: 40px; margin: 15px 0 0; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #dbdbdb; } body.login #login .widget .widget-footer p { font-size: 12px; color: #7c7c7c; font-weight: 600; margin: 0; width: auto; float: none; padding: 0 10px 0 35px; display: block; height: 40px; line-height: 40px; } body.login #login .widget .widget-footer p i:before { top: 7px; left: 7px; } body.login #login label { font-size: 13px; color: #7c7c7c; font-weight: 600; } body.login #login .checkbox { margin-top: 5px; } body.login #login .password { float: right; font-size: 12px; font-weight: 400; } body.login #login input[type="text"], body.login #login input[type="password"] { font-size: 13px; height: auto; margin-bottom: 10px; padding: 5px 9px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; background: #fff; } body.login #login ::-webkit-input-placeholder { /* WebKit browsers */ color: #ccc; } body.login #login :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #ccc; } body.login #login ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #ccc; } body.login #login :-ms-input-placeholder { /* Internet Explorer 10+ */ color: #ccc; } body.login #login form { margin: 0; } body.login #login p { margin: 5px 0; } body.login #login p:first-child { margin: 0 0 10px; } body.login #login p:last-child { margin: 10px 0 0; } body.login #login .form-signin { position: relative; max-width: 600px; margin: 0 auto 20px; background-color: #fff; border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } body.login #login .form-signin .inner { padding: 20px; } .gallery ul { margin: 0; padding: 0; list-style: none; } .gallery ul li .thumb { position: relative; display: block; padding: 5px; margin-bottom: 10px; z-index: 1; overflow: hidden; } .gallery ul li.span2:nth-child(6n+7) { margin-left: 0; } .gallery ul li.span3:nth-child(4n+5) { margin-left: 0; } .gallery ul li.span4:nth-child(3n+4) { margin-left: 0; } .gallery.gallery-masonry li[class*="span"] { margin-left: 0; } .gallery.gallery-2 li .thumb { padding: 0; border-color: #4c4c4c; } .thumb { display: block; padding: 3px; border: 1px solid #dbdbdb; } .thumb, .thumb img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .thumbnails { margin: 0; } .thumbnails > li { margin-bottom: 15px; } .thumbnails > li .thumbnail { border-color: #dbdbdb; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .thumbnails > li .thumbnail .caption { color: #7c7c7c; } .thumbnails > li a.thumbnail:hover, .thumbnails > li a.thumbnail:focus { border-color: #4a8bc2; -webkit-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); -moz-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); text-decoration: none; } .thumbnail { border-color: #dbdbdb; } a.thumbnail .caption { display: block; } a.thumbnail:hover, a.thumbnail:focus { border-color: #4a8bc2; -webkit-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); -moz-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); text-decoration: none; } .carousel { margin-bottom: 15px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .carousel .carousel-control { font-size: 45px; opacity: 1; filter: alpha(opacity=100); background: #e5e5e5; color: #000; border-color: #000; text-shadow: 0 1px 0 #ffffff; } .carousel .carousel-control.right { text-align: center; } .carousel .carousel-inner { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; border: 1px solid #dbdbdb; } .carousel .item { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .carousel .item img { min-width: 100%; } .carousel .carousel-caption { background: rgba(229, 229, 229, 0.95); text-shadow: 0 1px 0 #ffffff; } .carousel .carousel-caption p { color: #7c7c7c; } .carousel .carousel-caption h4 { font-size: 12pt; color: #000; font-weight: 600; } .carousel .carousel-caption a { text-decoration: underline; color: #000; } .carousel.carousel-1 { height: 223px; margin-bottom: 33px; background: #e5e5e5; } .carousel.carousel-1 .item { height: 223px; overflow: hidden; } .carousel.carousel-1 .item img { min-height: 100%; -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .carousel.carousel-1 .carousel-indicators { top: auto; bottom: -23px; right: 0; } .carousel.carousel-1 .carousel-indicators li { background: #96bcdc; } .carousel.carousel-1 .carousel-indicators li.active { background: #4a8bc2; } .carousel.carousel-1 .carousel-caption { height: 193px; background: #e5e5e5; top: 0; } /* Apply these styles only when #preview-pane has been placed within the Jcrop widget */ .jcrop-holder #preview-pane { display: block; position: absolute; z-index: 2000; top: 10px; right: 10px; padding: 6px; background-color: white; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); } /* The Javascript code will set the aspect ratio of the crop area based on the size of the thumbnail preview, specified here */ #preview-pane .preview-container { width: 125px; height: 85px; overflow: hidden; } .jcrop-holder { margin: 0 auto; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .jcrop-holder img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .fc-state-highlight { background: rgba(0, 0, 0, 0.2); } #external-events ul { list-style: none; margin: 0 0 20px; } #external-events li { margin: 0 0 5px; padding: 2px 5px; background: #4a8bc2; color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); font-size: .85em; cursor: pointer; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } #external-events li.glyphicons { padding: 2px 5px 2px 30px; display: block; } #external-events li.glyphicons i:before { font-size: 14px; color: #fff; top: 0; left: 0; background: rgba(0, 0, 0, 0.3); height: 24px; width: 24px; line-height: 24px; text-align: center; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; border-right: 1px solid rgba(255, 255, 255, 0.4); } .fc-header-title h2 { font-size: 16pt; line-height: 25px; } .fc-event-skin { border-color: #4a8bc2; background-color: #4a8bc2; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } .fc-event-time, .fc-event-title { padding: 0 5px; } #calendar .btn-group .btn-primary { margin-right: 2px; } #guided-tour { position: fixed; z-index: 10000; top: 100px; right: -100%; width: 40px; height: 20px; padding: 10px; background: #4a8bc2; font-size: 14pt; color: #fff; text-align: center; box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); -moz-box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); -webkit-box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); cursor: pointer; -webkit-transition: width 0.5s ease; -moz-transition: width 0.5s ease; -o-transition: width 0.5s ease; transition: width 0.5s ease; overflow: hidden; white-space: nowrap; } #guided-tour .hide { float: left; height: 0; display: inline-block !important; opacity: 0; -webkit-transition: opacity 0.6s ease; -moz-transition: opacity 0.6s ease; -o-transition: opacity 0.6s ease; transition: opacity 0.6s ease; } #guided-tour #close-tour { display: none; position: absolute; top: 0; right: 0; bottom: 0; padding: 10px; color: rgba(0, 0, 0, 0.8); text-shadow: 0 1px 0 #fff; background: rgba(255, 255, 255, 0.6); } #guided-tour #close-tour:hover { background: rgba(255, 255, 255, 0.9); } #guided-tour:hover { width: 100px; padding: 10px 40px 10px 10px; } #guided-tour:hover .hide { padding: 0 5px 0 0; opacity: 1; height: auto; } #guided-tour:hover #close-tour { display: block; } #tlyPageGuideWrapper #tlyPageGuideMessages { margin: 0; width: 100%; height: auto; padding: 20px; z-index: 9000; } #tlyPageGuideWrapper #tlyPageGuideMessages div { margin: 0 90px 0 120px; } #tlyPageGuideWrapper #tlyPageGuideMessages h4 { color: #fff; } #tlyPageGuideWrapper #tlyPageGuideMessages p:last-child { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li { background: rgba(0, 0, 0, 0.4); } #tlyPageGuideWrapper #tlyPageGuide li:hover { background: rgba(0, 0, 0, 0.9); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:after { border-top-color: rgba(0, 0, 0, 0.3); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:after { border-bottom-color: rgba(0, 0, 0, 0.3); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:hover, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:hover, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:hover { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:hover:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:hover:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:hover:after { border-top-color: rgba(0, 0, 0, 0.9); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:hover { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:hover:after { border-bottom-color: rgba(0, 0, 0, 0.9); } .tlypageguide_shadow:after { background: rgba(74, 139, 194, 0.2); box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); -moz-box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); -webkit-box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active { background: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_top:after { border-top-color: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_bottom:after { border-bottom-color: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_back, #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_fwd { top: 29px; } #tlyPageGuideWrapper #tlyPageGuideMessages span { top: 20px; background: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_close { background: #4a8bc2; } #docs_icons { text-align: center; padding: 0 20px; } #docs_icons .glyphicons { display: inline-block; *display: inline; *zoom: 1; width: 125px; font-size: 12px; line-height: 48px; overflow: hidden; color: #7c7c7c; } #docs_icons .glyphicons i:before { line-height: 55px !important; color: #4a8bc2; } .documentation ul ul { margin-bottom: 10px; } .documentation .span3 .menu.affix { position: fixed; top: 20px; width: 220px; } .documentation .show-grid { margin-top: 10px; margin-bottom: 20px; } .documentation .show-grid [class*="span"] { background-color: #535a5e; text-align: center; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; min-height: 40px; line-height: 40px; color: #fff; } .documentation .show-grid .show-grid { margin-top: 0; margin-bottom: 0; } .documentation .show-grid .show-grid [class*="span"] { background-color: #848d93; } #landing_1 .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; } #landing_1 .mosaic-line.mosaic-line-2 { line-height: 100px; height: 100px; } #landing_1 .mosaic-line.mosaic-line-2 h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; } #landing_1 .mosaic-line.mosaic-line-2 h2 span { color: #ccc; } #landing_1 .banner { background: #000; height: 321px; } #landing_1 .banner .banner-wrapper { height: 321px; position: relative; overflow: hidden; } #landing_1 .banner .banner-wrapper.banner-1 { margin: 0; background: #000; } #landing_1 .banner .banner-wrapper.banner-1 h3 { height: 46px; line-height: 46px; top: 65px; right: 27px; position: absolute; background: #fff; color: #4a8bc2; font-size: 22pt; font-weight: bold; padding: 0 15px; } #landing_1 .banner .banner-wrapper.banner-1 p { position: absolute; top: 126px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 370px; text-align: right; padding: 10px 15px; } #landing_1 .banner .banner-wrapper.banner-1 p a { text-decoration: underline; color: #4a8bc2; } #landing_1 .banner .banner-wrapper.banner-1 .btn { position: absolute; top: 232px; right: 27px; } #landing_2 .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; } #landing_2 .mosaic-line.mosaic-line-2 { line-height: 100px; height: 100px; } #landing_2 .mosaic-line.mosaic-line-2 h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; } #landing_2 .mosaic-line.mosaic-line-2 h2 span { color: #ccc; } #landing_2 .banner { background: #1f2123; height: 356px; } #landing_2 .banner .banner-wrapper { height: 356px; position: relative; overflow: hidden; } #landing_2 .banner .banner-wrapper.banner-1 { margin: 0; } #landing_2 .banner .banner-wrapper.banner-1 h3 { height: 46px; line-height: 46px; top: 55px; right: 27px; position: absolute; color: #fff; font-size: 27pt; font-weight: bold; text-shadow: none; padding: 0; } #landing_2 .banner .banner-wrapper.banner-1 p { position: absolute; top: 115px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 380px; text-align: right; padding: 10px 15px; } #landing_2 .banner .banner-wrapper.banner-1 p a { text-decoration: underline; color: #4a8bc2; } #landing_2 .banner .banner-wrapper.banner-1 .btn { position: absolute; bottom: 40px; } #landing_2 .banner .banner-wrapper.banner-1 .btn.btn-primary { right: 230px; } #landing_2 .banner .banner-wrapper.banner-1 .btn.btn-danger { right: 27px; bottom: 37px; } .container-960 { width: 960px; margin: 0 auto; } .separator-line { width: 100%; height: 1px; background: #e5e5e5; margin-bottom: 10px; } #choose-preview { padding: 50px 0; } #choose-preview h2 { margin-left: 0; } #choose-preview h2 span.text-primary { font-size: 26pt; font-weight: bold; top: auto; } #choose-preview .control-group { margin: 0 0 5px; } #choose-preview select { color: #000; } #choose-preview .heading-buttons { margin-bottom: 10px; } #choose-preview .box { padding: 10px; } #choose-preview .box .options { display: none; } #choose-preview .box .actions a { display: none; } #choose-preview .box .actions a.btn-active { display: inline-block; } #choose-preview .box h3 { text-transform: uppercase; margin: 0 0 12px; } #choose-preview .box.active { background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #dbdbdb; padding: 15px; } #choose-preview .box.active .options { display: block; } #choose-preview .box.active h3 { color: #000; text-shadow: 0 1px 0 #fff; } #choose-preview.style-dark .well { background: #ffffff; } #choose-preview.style-dark .box.active { background: #fafafa; border-color: #ebebeb; } #choose-preview.style-dark .box.active h3 { text-shadow: none; color: #fff; } #choose-preview.style-dark .box.active hr { border-top-color: #ebebeb; } html.front .menu-hidden .navbar.main { height: 99px; } html.front .navbar.main { height: auto; left: 0 !important; } html.front .navbar.main .secondary { height: 49px; line-height: 49px; position: relative; overflow: hidden; background-color: #275b87; border-bottom: 1px solid #346d9d; } html.front .navbar.main .secondary .appbrand { font-weight: 700; font-size: 25pt; color: #fff; text-decoration: none; padding: 0 8px; } html.front .navbar.main ul.topnav:first-of-type { border-left: none; margin-left: -8px; } html.front .navbar.main ul.topnav:first-of-type > li:first-of-type { border-left: none; } html.front .navbar.main li.search { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } html.front .navbar.main li.glyphs + .glyphs { padding-left: 0; } html.front .navbar.main li.glyphs { border: none; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; margin-left: 0; } html.front .navbar.main li.glyphs ul li .glyphicons { color: #538fc1; } html.front .navbar.main li.glyphs ul li .glyphicons i { display: inline-block; width: 32px; vertical-align: top; } html.front .navbar.main li.glyphs ul li.active .glyphicons, html.front .navbar.main li.glyphs ul li:hover .glyphicons { color: #fff; } html.front .navbar.main li.glyphs ul li.single, html.front .navbar.main li.glyphs ul li.single:last-child { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } html.front #content { margin: 0; } html.front #footer { background: #1f2123; color: #919192; } html.front #footer a:not(.btn) { color: #4a8bc2; } html.front #footer .copy { background: #000; color: #2a2a2a; text-align: left; } html.front #footer .copy a { color: #2a2a2a; text-decoration: none; } html.front #footer .copy .appbrand { position: absolute; right: 10px; text-transform: uppercase; font-size: 15px; font-weight: 700; } html.front #footer .box-generic { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; background: #191a1c; border: none; } html.front #footer h4 { text-transform: uppercase; font-size: 15px; font-weight: 700; text-shadow: none; color: #fff; margin: 0 0 8px; } html.front #footer ul { list-style: none; margin: 0 0 15px; padding: 0; } html.front #footer ul li { display: block; background: #191a1c; margin: 0 0 1px; line-height: 30px; height: 30px; } html.front #footer ul li a { line-height: 30px; height: 30px; display: block; padding: 0 10px; } html.front #footer ul li:first-of-type { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } html.front #footer ul li:last-of-type { margin: 0; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } html.front #footer ul.icons li { padding: 0 10px 0 35px; } html.front #footer ul.icons li i:before { top: 7px; left: 10px; } html.front #contact_gmap { height: 400px; } html.rtl { /* Buttons */ /* Typography */ /* Widgets */ /* Tabs */ /* Form elements */ /* Tables */ /* Menus */ /* UI elements */ /* Layout */ /* Timeline */ /* Login */ /* Front */ } html.rtl .btn-group.btn-block .leadcontainer { left: 29px; right: 0; } html.rtl .btn-group.btn-block .leadcontainer > .btn:first-child { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } html.rtl .btn-group.btn-block .dropdown-toggle { float: left; } html.rtl .btn-toggle-code { left: 0; right: auto; } html.rtl h3.glyphicons, html.rtl h2.glyphicons { padding: 0 45px 0 0; } html.rtl h3.glyphicons i:before, html.rtl h2.glyphicons i:before { left: auto; right: 2px; } html.rtl .widget .widget-head .heading { float: right; } html.rtl .widget .widget-head .heading.glyphicons { padding: 0 35px 0 0; } html.rtl .widget .widget-head .heading.glyphicons i:before { left: auto; right: 0; } html.rtl .widget .widget-head { padding: 0 0 0 15px; } html.rtl .widget .details.pull-right { float: left; } html.rtl .breadcrumb li.pull-right { float: left; } html.rtl [data-toggle="collapse-widget"] .collapse-toggle { float: left; } html.rtl .widget-activity ul.list li > span { float: right; } html.rtl .widget-activity ul.list li.double .activity-icon { margin-left: 10px; margin-right: 0; } html.rtl .widget-activity ul.list li:hover:after, html.rtl .widget-activity ul.list li.highlight:after { right: auto; left: 15px; } html.rtl .widget .widget-body.list ul li .count { float: left; } html.rtl .widget .widget-body.list ul li { text-align: right; } html.rtl .widget .widget-body.list ul li .badge { left: 8px; right: auto; } html.rtl .media > .pull-left { float: right; margin-left: 10px; margin-right: 0; } html.rtl .media > .pull-right { float: left; margin-right: 10px; margin-left: 0; } html.rtl .widget-chat .media small.author { left: auto; right: 0; } html.rtl .widget-chat .media.right small.author { left: 0; right: auto; } html.rtl .breadcrumb li a.glyphicons { padding: 0 25px 0 0; } html.rtl .breadcrumb li a.glyphicons i:before { left: auto; right: 3px; } html.rtl .widget.widget-tabs > .widget-head ul li { border-right: none; border-left: 1px solid #dbdbdb; } html.rtl .widget.widget-tabs > .widget-head ul li.active:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } html.rtl .widget.widget-tabs > .widget-head ul li.active:last-child { -webkit-border-radius: 0 5px 0 0; -moz-border-radius: 0 5px 0 0; border-radius: 0 5px 0 0; } html.rtl .widget.widget-tabs > .widget-head ul li a.glyphicons { padding: 0 35px 0 15px; } html.rtl .widget.widget-tabs > .widget-head ul li a i:before { left: auto; right: 5px; } html.rtl .widget.widget-tabs-double > .widget-head ul li a.glyphicons, html.rtl .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons { padding: 5px 38px 0 15px; } html.rtl .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons { padding: 0 15px; } html.rtl .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i:before { right: auto; } html.rtl .widget.widget-tabs-vertical .widget-head { padding: 0; } html.rtl .widget.widget-tabs-vertical .widget-head ul li { border-left: none; } html.rtl .widget.widget-wizard-pills .widget-head { padding: 10px 10px 10px 0; } html.rtl .widget.widget-wizard-pills .widget-head ul li { border: none; } html.rtl .widget.widget-tabs-icons-only .widget-head ul.pull-right { float: left; } html.rtl .tabsbar.tabsbar-2 ul li a { padding: 0 10px 0 0; } html.rtl .tabsbar ul li a i { float: right; } html.rtl .bootstrap-select.btn-group, html.rtl .bootstrap-select.btn-group[class*="span"] { margin-right: 0; } html.rtl .select2-container-multi .select2-search-choice-close { left: auto; right: 3px; } html.rtl .select2-container-multi .select2-choices .select2-search-choice { padding: 3px 18px 3px 5px; } html.rtl .select2-container img.flag, html.rtl .select2-drop img.flag { padding: 0 0 0 10px; } html.rtl .radio, html.rtl .checkbox { padding: 0; } html.rtl div.checker { margin: 0 0 0 5px; } html.rtl div.dataTables_paginate { float: left; } html.rtl div.dataTables_filter label { float: left; } html.rtl .table td.right, html.rtl .table th.right { text-align: left; } html.rtl .navbar.main .topnav > li.search form input { padding: 0 10px 0 0; } html.rtl .navbar.main .topnav > li.open .dropdown-menu li > a.glyphicons, html.rtl .navbar.main .topnav > li.open .dropdown-menu li > a:hover.glyphicons, html.rtl .navbar.main .topnav > li.open .dropdown-menu li > span.glyphicons { padding: 0 35px 0 10px; } html.rtl .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, html.rtl .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:before, html.rtl .navbar.main .topnav > li.open.dd-1 .typeahead:before, html.rtl .navbar.main .topnav > li.open .dd-1 .typeahead:before { left: auto; right: 7px; } html.rtl .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after, html.rtl .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:after, html.rtl .navbar.main .topnav > li.open.dd-1 .typeahead:after, html.rtl .navbar.main .topnav > li.open .dd-1 .typeahead:after { left: auto; right: 8px; } html.rtl .navbar.main .topnav { border-left-color: #619aca; border-right-color: #346d9d; } html.rtl .navbar.main .topnav > li { float: right; } html.rtl .navbar.main .topnav > li:first-child { border-left: none; } html.rtl .navbar.main .topnav > li.search, html.rtl .navbar.main .topnav > li.glyphs { margin: 0; } html.rtl .navbar.main .topnav > li.glyphs { border-left-color: #619aca; border-right-color: #346d9d; box-shadow: -1px 0 0 0 #346d9d, 1px 0 0 0 #619aca; } html.rtl .navbar.main .topnav.pull-left { float: right; } html.rtl .navbar.main .topnav.pull-left:first-of-type { padding-right: 8px; } html.rtl .navbar.main .topnav.pull-right { float: left; } html.rtl .navbar.main .topnav.pull-right > li:last-child { border-left: 1px solid #346d9d; } html.rtl .navbar.main .topnav.open .dropdown-menu { right: auto; left: 0; } html.rtl .navbar.main .topnav .submenu-show.pull-right { left: auto !important; right: 100% !important; } html.rtl .navbar.main .topnav > li.open.dd-1 .dropdown-menu li .pull-right { float: left; } html.rtl .ribbon-wrapper { right: auto; left: -3px; } html.rtl .ribbon-wrapper .ribbon { -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); left: auto; right: -5px; } html.rtl .ribbon-wrapper .ribbon:after { right: auto; left: 0; } html.rtl .ribbon-wrapper .ribbon:before { left: auto; right: 0; } html.rtl .row-merge > [class*="span"] ~ [class*="span"] { margin-right: 0; } html.rtl .innerLR { padding: 0 15px; position: relative; } html.rtl .innerL { padding-right: 15px; padding-left: 0; position: relative; } html.rtl .innerR { padding-left: 15px; padding-right: 0; position: relative; } html.rtl .layout-timeline ul.timeline { padding: 15px 30px 15px 15px; } html.rtl .layout-timeline ul.timeline > li .date { right: -70px; left: auto; } html.rtl .layout-timeline ul.timeline > li .type { right: -195px; left: auto; text-align: left; padding: 0 0 0 35px; } html.rtl .layout-timeline ul.timeline > li .type i:before { left: 0; right: auto; } html.rtl .layout-timeline ul.timeline > li .type .time { right: auto; left: 0; } html.rtl .layout-timeline ul.timeline > li .type:before { left: -20px; right: auto; } html.rtl .layout-timeline ul.timeline > li .type:after { left: -60px; right: auto; } html.rtl .layout-timeline ul.timeline > li .glyphicons.pencil { right: auto; left: 15px; } html.rtl .layout-timeline ul.timeline > li p.glyphicons { padding: 5px 25px 5px 0; } html.rtl .layout-timeline ul.timeline > li p.glyphicons i:before { left: auto; right: 0; } html.rtl .layout-timeline .nav-timeline > li > a.glyphicons i:before { right: auto; left: 8px; } html.rtl body.login #login .password { float: left; } html.rtl.front .navbar.main .secondary .appbrand.pull-left { float: right; } html.rtl.front .navbar.main .topnav.pull-right > li:last-child { border-left: none; } html.rtl.front .navbar.main .secondary ul.topnav:first-of-type { margin-left: 0; padding-left: 8px; } /* Responsive */ @media (max-width: 767px) { html.rtl .layout-timeline ul.timeline { padding: 0; } html.rtl .layout-timeline ul.timeline > li .date { right: auto; } html.rtl .layout-timeline ul.timeline > li .type { right: auto; margin: 0 0 10px 60px; } html.rtl .layout-timeline ul.timeline > li .type .time { left: -40px; right: auto; } html.rtl .navbar.main .topnav > li { float: none; border-right: none; } html.rtl .navbar.main .topnav > li.search { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } html.rtl .navbar.main .topnav > li.search form button { right: auto; left: 0; } html.rtl .navbar.main .topnav, html.rtl .navbar.main .topnav.pull-left, html.rtl .navbar.main .topnav.pull-right { float: none; } html.rtl .navbar.main .topnav.pull-left:first-of-type { padding-right: 0; } html.rtl .navbar.main .topnav.open .dropdown-menu { right: auto; left: auto; } html.rtl .navbar.main .topnav .submenu-show.pull-right { left: auto !important; right: auto !important; } } .lt-ie9 .widget .widget-body.list ul li { border-bottom: 1px solid #efefef; } .lt-ie9 .navbar.main .btn-navbar { float: left; } .lt-ie9 .navbar.main .topnav { position: absolute; top: 0; right: 0; height: 42px; } .lt-ie9 .navbar.main .topnav .dropdown > a .caret { margin-top: 0; top: 8px; left: 5px; } .lt-ie9 .heading-buttons h1.glyphicons, .lt-ie9 .heading-buttons h2.glyphicons, .lt-ie9 .heading-buttons h3.glyphicons, .lt-ie9 .heading-buttons h4.glyphicons, .lt-ie9 .heading-buttons h5.glyphicons, .lt-ie9 .heading-buttons h6.glyphicons { float: left; } .lt-ie9 #guided-tour .hide { display: none !important; } .lt-ie9 .filter-bar div div.input-append .add-on { width: 24px; padding-right: 0; padding-left: 0; } .lt-ie9 .filter-bar div div.input-append .add-on i { width: 24px; height: 24px; display: block; vertical-align: middle; line-height: 24px; } .lt-ie9 .filter-bar div div.input-append .add-on i:before { width: 24px; height: 24px; line-height: 24px; top: auto; } .lt-ie9 .navbar.main .topnav .dropdown > a .caret { vertical-align: middle; margin-top: 0; top: 0; } .lt-ie9 #footer { background: #222; } .lt-ie9 #footer .copy { background: #111; } .lt-ie9 .ribbon-wrapper { display: none; } /* Desktop wide */ @media (min-width: 1200px) { .navbar.main .topnav > li.search form input { width: 155px; } } /* Desktop regular */ @media (min-width: 980px) and (max-width: 1199px) { body > .container-fluid.fixed { width: 98%; margin: 10px auto 10px; } .hidden-desktop-1 { display: none !important; } } /* Tablet */ @media (max-width: 979px) and (min-width: 768px) { .navbar.main .topnav > li.search { margin-left: 10px !important; } } @media (max-width: 979px) { body > .container-fluid.fixed { width: auto; border: none; margin: 0; } } @media (max-width: 767px) { body { padding: 0; } .nav-tabs > li > a { font-size: 10pt; } .nav-tabs > li > a, .nav-pills > li > a { padding-left: 5px; padding-right: 5px; } .documentation .span3 .menu.affix { position: relative; top: 0; width: auto; } .phone-margin.bottom { margin: 0 0 10px; } .well { padding: 5px; } .widget .widget-body { padding: 5px; } .widget.margin-bottom-none { margin-bottom: 10px; } .widget.widget-tabs .widget-head { height: auto; padding: 0; } .widget.widget-tabs .widget-head ul { display: block; border-right: none; height: auto; } .widget.widget-tabs .widget-head ul li { float: none; display: block; width: 100%; } .widget.widget-tabs-icons-only .widget-head { height: auto; } .widget-activity ul.list li > span.ellipsis { max-width: 60%; } .widget-activity ul.list li.double > span.ellipsis { max-width: 75%; } .widget-gallery .nav { display: none; } .widget-gallery.widget-gallery-slide .gallery { width: auto; } .widget-chat .media .pull-left, .widget-chat .media .pull-right { margin: 0; } .widget-chat .chat-controls { height: 60px; } .widget-chat { padding-bottom: 90px !important; } .widget-chat .media small.author { position: relative; top: auto; left: auto; right: auto; width: auto; } .widget-chat .media small.date { border: none; } .tabsbar, .tabsbar.tabsbar-2 { height: auto; } .tabsbar ul, .tabsbar.tabsbar-2 ul { height: auto; } .layout-timeline ul.timeline { padding: 0; } .layout-timeline ul.timeline > li .date { position: relative; left: auto; display: block; top: auto; } .layout-timeline ul.timeline > li .type { position: relative; left: auto; top: auto; width: auto; margin: 0 60px 10px 0; } .layout-timeline ul.timeline > li .type:before, .layout-timeline ul.timeline > li .type:after { display: none; } .layout-timeline ul.timeline > li .type .time { top: 0; right: -40px; } .layout-timeline ul.timeline > li.active .separator .type { margin-bottom: 0; } .layout-timeline ul.timeline > li .separator .type { top: auto; } .widget-activity ul.list { margin: 0; } .widget.widget-tabs.widget-tabs-icons-only-2 .widget-head { height: 35px; } .widget.widget-tabs.widget-tabs-icons-only-2 .widget-head ul li { float: left; width: auto; } .media { text-align: center; } .media .pull-left, .media .pull-right { border: none; padding-bottom: 0; margin: 0; } .media img.pull-left, .media img.pull-right { display: inline-block; } .media blockquote { padding: 0; text-align: center; } .media blockquote.pull-right p, .media blockquote.pull-right small { text-align: center; } .menu-right #menu { left: 0; right: auto; } .menu-right.menu-hidden #content { margin: 0; } .row-merge > [class*="span"] ~ [class*="span"] { width: auto; } .row-merge > [class*="span"] ~ [class*="span"]:after { display: none; } .row-merge.border-top, .row-merge ~ .row-merge { border-top: 1px solid #e5e5e5; } body.login #login { padding: 50px 5px; } #gritter-notice-wrapper { display: none !important; } .topnav .dropdown.submenu { height: auto; } .topnav .dropdown.submenu .submenu-show { position: relative; margin: 0 !important; top: auto !important; left: auto !important; right: auto !important; } .navbar.main { height: auto; } .navbar.main .topnav { border-left: none; border-right: none; float: none; } .navbar.main .topnav > li { float: none; border-top: 1px solid #346d9d; border-bottom: 1px solid #619aca; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px; } .navbar.main .topnav > li.search form { position: relative; } .navbar.main .topnav > li.search form input { width: 90%; } .navbar.main .topnav > li.search form button { position: absolute; right: 0; top: 0; } .navbar.main .topnav > li:first-child { border-top: none; } .navbar.main .topnav > li .dropdown.submenu .dropdown-menu { position: relative; float: none; display: block !important; padding: 0; border: none; border-top: 1px solid #f3f3f3; } .navbar.main .topnav:first-of-type > li:first-child { margin-left: 38px; } .menu-hidden .navbar.main { height: 50px; overflow: hidden; } .container-960 { width: auto; } #landing_1 [class*="span"] { padding: 0 5px; } #landing_1 .banner-1 { height: auto; } #landing_1 .banner-1 .item { height: auto; } #landing_1 .banner-1 .item img { min-height: 0; height: auto; } #landing_1 .banner-1 .carousel-caption { height: auto; } #landing_1 .banner { height: auto; } #landing_1 .banner .banner-wrapper { height: auto; } #landing_1 .banner .banner-wrapper.banner-1 h3, #landing_1 .banner .banner-wrapper.banner-1 p, #landing_1 .banner .banner-wrapper.banner-1 .btn { position: relative; top: auto; right: auto; } #landing_1 .banner .banner-wrapper.banner-1 .btn { display: block; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #landing_1 .banner .banner-wrapper.banner-1 p { margin: 0 0 5px; text-align: center; } #landing_1 .banner .banner-wrapper.banner-1 h3 { font-size: 12pt; line-height: 46px; text-align: center; } .social-large { height: auto; } .social-large a { float: none; display: block; border: none; border-bottom: 1px solid #e5e5e5; } .social-large a:last-child { border: none; } #content .heading-mosaic { height: auto !important; padding-top: 10px; padding-bottom: 10px; line-height: normal !important; } } @media (max-width: 480px) { h1, h2, h3 { line-height: 30px; font-size: 18pt; } h3.glyphicons i:before, h2.glyphicons i:before { font-size: 24px; top: 3px; left: 5px; } .heading-buttons .buttons { margin-top: 10px; float: none; padding: 0 10px; text-align: center; } .heading-buttons .buttons .btn { margin: 0; float: none; } .separator { padding: 5px 0; margin: 0; } .table-condensed th, .table-condensed td { padding: 4px 5px; } p.glyphicons { padding: 5px 0 10px 55px; } p.glyphicons i:before { color: #D67170; font-size: 35pt; top: 0; } p.glyphicons.right { padding: 0 55px 0 0; } } @media (max-width: 320px) { .nav-tabs > li, .nav-tabs > li > a, .nav-tabs > li > a:hover { display: block; float: none; margin: 0 0 -1px; border-color: #4a8bc2; } .nav-tabs > li:hover { border-color: #4a8bc2; } .nav-tabs > li, .nav-tabs > li > a { border-color: #E0D5C6; background: #F5EADB; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } } #themer { position: fixed; top: 40%; left: 50%; z-index: 1000; width: 260px; margin: -50px 0 0 -130px; text-align: left; } #themer.in { overflow: visible; } #themer .close2 { position: absolute; background: #DDD; color: #222; font-weight: 600; height: 20px; top: 14px; right: 10px; line-height: 20px; text-align: center; font-size: 10pt; padding: 0 10px; cursor: pointer; } #themer .wrapper { position: relative; background: #292c2e; border: 1px solid #2f3235; padding: 15px; color: #fafafa; } #themer .wrapper hr.separator { margin: 10px 0; border-top-color: #5e646b; border-bottom-color: #2f3235; } #themer .wrapper h4 { border-bottom: 1px solid #5e6060; padding: 0 0 10px; margin: 0 0 10px; color: #fff; } #themer .wrapper h4 span { color: #5e6060; font-weight: normal; font-size: 10pt; text-shadow: none; } #themer .wrapper .btn { margin: 0; } #themer .wrapper #themer-getcode-less { margin: 0 0 0 5px; } #themer .wrapper ul { margin: 0; list-style: none; } #themer .wrapper ul li { height: 25px; line-height: 25px; position: relative; } #themer .wrapper ul li .minicolors { line-height: normal; border: none; top: 2px; right: 0; position: absolute; } #themer .wrapper ul li .minicolors input { border: none; height: 20px; width: 69px; background: #414649; color: #fff; font-size: 9pt; padding: 0 5px; margin: 0 0 1px; } #themer .wrapper ul li .minicolors-swatch { cursor: pointer; width: 18px; height: 18px; } #themer .wrapper ul li .minicolors-panel { z-index: 10000; top: 24px; } #themer .wrapper ul li .minicolors-position-left .minicolors-panel { left: -152px; } #themer .wrapper ul li select { position: absolute; top: 3px; right: 0; width: 100px; height: 20px; line-height: normal; padding: 0; margin: 0; font-size: 9pt; background: #414649; border: 1px solid #2F3235; color: #fff; } #themer .wrapper ul li .link { text-decoration: underline; cursor: pointer; } #themer .wrapper ul li label { margin: 0; line-height: 25px; font-size: 9pt; } #themer .wrapper ul li label input { margin: 0 0 1px; } #themer .wrapper ul li.advanced { display: none; } #themer.themer-advanced .wrapper ul li.advanced { display: block; } ================================================ FILE: src/main/webapp/style/eu/theme/css/style-flat.css ================================================ @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,800,700,600&subset=latin,latin-ext); /*! * * QuickAdmin v1.3.1 * Copyright MosaicPro * http://www.mosaicpro.biz * * Designed and built exclusively for sale @Envato Marketplaces. */ body { font-family: 'Open Sans', sans-serif; background: #f0f0f0; font-size: 13px; color: #7c7c7c; position: relative; } *, a:focus { outline: none !important; } button:focus { outline: none !important; } button::-moz-focus-inner { border: 0; } a:hover { color: #333333; } a { color: #4a8bc2; outline: 0 !important; } h1, h2, h3, h4, h5, h6 { font-family: 'Open Sans', sans-serif; margin: 0 0 5px; font-weight: 400; text-shadow: 0 1px 0 #ffffff; color: #4d4d4d; } h1.glyphicons, h2.glyphicons, h3.glyphicons, h4.glyphicons, h5.glyphicons, h6.glyphicons { color: #7c7c7c; } h1 span, h2 span, h3 span, h4 span, h5 span, h6 span { color: #afafaf; font-weight: 400; padding: 0 5px; font-style: italic; } h1 span, h2 span, h3 span { font-size: 50%; text-transform: none; padding: 0; position: relative; top: -3px; font-weight: 400; } h1 { line-height: 40px; } h2, h3 { line-height: 30px; } h2 { font-size: 26px; } .heading-buttons h1, .heading-buttons h2, .heading-buttons h3, .heading-buttons h4, .heading-buttons h5, .heading-buttons h6 { display: inline-block; margin: 0 15px; } .heading-buttons h1.glyphicons, .heading-buttons h2.glyphicons, .heading-buttons h3.glyphicons, .heading-buttons h4.glyphicons, .heading-buttons h5.glyphicons, .heading-buttons h6.glyphicons { display: inline-block; } .heading-buttons .buttons { margin-top: 3px; margin-right: 15px; text-align: right; } .heading-buttons .btn { margin-right: 15px; } .heading-buttons .btn:last-child { margin-right: 0; } p { margin: 0 0 10px; line-height: normal; } .lead { margin: 0 0 10px; } .glyphicons { color: #7c7c7c; } ul.icons { text-align: left; padding: 0; } ul.icons li { display: block; padding: 0 0 0 25px; line-height: 22px; color: #7c7c7c; } ul.icons li i:before { color: #7c7c7c; font-size: 17px; left: 0; top: 4px; } input, button, select, textarea { font-family: 'Open Sans', sans-serif; } pre.prettyprint { word-break: normal; word-wrap: normal; white-space: pre; background-color: #f8f8f8; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(50%, #f8f8f8), color-stop(50%, #eeeeee)); background-image: -webkit-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: -moz-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: -o-linear-gradient(#f8f8f8 50%, #eeeeee 50%); background-image: linear-gradient(#f8f8f8 50%, #eeeeee 50%); -moz-background-size: 38px 38px; background-size: 38px 38px; border: 1px solid #ebebeb; display: block; line-height: 19px; margin-bottom: 15px; overflow: visible; overflow-y: hidden; padding: 0 0 0 4px; } pre.prettyprint .glyphicons { padding: 0 0 0 20px; } pre.prettyprint .glyphicons i:before { font-size: 17px; top: 1px; } #content pre.prettyprint, #content pre.prettyprint span { color: #7c7c7c; } blockquote { margin: 0; padding: 0 0 0 5px; } blockquote, blockquote.pull-right { border: none; } blockquote p { font-weight: 400; font-size: 13px; margin: 0 0 10px; } blockquote small { color: #4a8bc2; } .separator { padding: 15px 0; display: block; } .separator.bottom { padding: 0 0 15px; } .separator.top { padding: 15px 0 0; } hr { border-top-color: #dbdbdb; border-bottom: none; margin: 15px 0; } hr.separator { padding: 0; } hr.separator.top { margin: 15px 0 0; } hr.separator.bottom { margin: 0 0 15px; } @media print { html, body { height: auto !important; min-height: none !important; } @page { size: auto; margin: 10mm 10mm 10mm 10mm; } #content { margin: 0 !important; padding: 0 !important; } .breadcrumb, #tlyPageGuideWrapper, .filter-bar { display: none !important; } .table td, .table th { vertical-align: middle; } .table th { padding: 3px; text-align: center; } .table img { float: left; } } .map_canvas img { max-width: none !important; } .streetview { width: 100%; height: 300px; } .ui-dialog-vevent .dtstart { display: none; } .ui-dialog-vevent .website { margin: 0 0 1em; } #fontawesome [class^="icon-"], #fontawesome [class*=" icon-"] { font-size: 24px; line-height: 24px; vertical-align: middle; margin: 0 5px 0 0; } #fontawesome a { line-height: 40px; } .innerLR { padding: 0 15px; position: relative; } .innerTB { padding: 15px 0; position: relative; } .innerAll { padding: 15px; position: relative; } .innerL { padding-left: 15px; position: relative; } .innerR { padding-right: 15px; position: relative; } .innerT { padding-top: 15px; position: relative; } .innerB { padding-bottom: 15px; position: relative; } .center { text-align: center !important; } .margin-bottom-none { margin-bottom: 0 !important; } .margin-none { margin: 0 !important; } .padding-none { padding: 0 !important; } .border-none { border: none !important; } .box-shadow-none { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .padding-none-TB { padding-bottom: 0 !important; padding-top: 0 !important; } .relativeWrap { position: relative; } .text-primary { color: #4a8bc2; } .text-uppercase { text-transform: uppercase; } .text-faded { color: #d7d7d7 !important; } .text-large { font-size: 35px; line-height: 40px; } .text-xlarge { font-size: 50px; line-height: 50px; } .text-xxlarge { font-size: 70px; line-height: 70px; } .text-underline { text-decoration: underline; } .text-right { text-align: right !important; } .containerBg { background: #f0f0f0; } .whiteBg { background: #fff; } .row-merge { position: relative; } .row-merge > [class*="span"] ~ [class*="span"] { margin-left: 0; } .row-merge > [class*="span"] ~ [class*="span"]:after { position: absolute; top: 0; bottom: 0; width: 1px; background: #dbdbdb; content: ""; } .row-merge > [class*="span"] ~ [class*="span3"] { width: 25.26315789473684%; } .row-merge > [class*="span"] ~ [class*="span4"] { width: 33.68421052631579%; } .row-merge > [class*="span"] ~ [class*="span5"] { width: 42.10526315789473%; } .row-merge > [class*="span"] ~ [class*="span6"] { width: 50.74626865671642%; } .row-merge > [class*="span"] ~ [class*="span8"] { width: 67.66169154228855%; } .row-merge > [class*="span"] ~ [class*="span9"] { width: 75.78947368421052%; } .row-merge.border-top, .row-merge ~ .row-merge { border-top: 1px solid #dbdbdb; } .row-merge.border-bottom { border-bottom: 1px solid #dbdbdb; } #wrapper { overflow: hidden; overflow-y: auto; float: left; width: 100%; } body > .container-fluid { padding: 0; background: #f0f0f0; } body > .container-fluid.fixed { margin: 30px auto 30px; border-left: 1px solid #d8d8d8; border-right: 1px solid #d8d8d8; width: 94%; } body > .container-fluid.documentation { background: #fff; } body > .container-fluid.fixed { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } body > .container-fluid.fixed #wrapper { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } body > .container-fluid.fixed #content { -webkit-border-radius: 0 5px 0 0; -moz-border-radius: 0 5px 0 0; border-radius: 0 5px 0 0; } body > .container-fluid.fixed #footer { -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } body > .container-fluid.fixed .navbar.main, body > .container-fluid.fixed .navbar.main .wrapper { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } #content { position: relative; overflow: hidden; margin: 0; min-width: 320px; min-height: 500px; padding: 0 0 15px; background: #f0f0f0; } #content > .menubar { border-left: none; border-right: none; } #content > p { padding: 0 15px 5px; } #content > h1, #content > h2, #content > h3, #content > h4, #content > h5, #content > h6 { margin: 18px 15px 15px; } #content > .filter-bar { border-right: none; border-left: none; } #content .heading-buttons { margin-top: 15px; } #content .heading-arrow { text-transform: uppercase; border-bottom: 1px solid #dbdbdb; margin: 0 0 15px; padding: 0 15px; font-size: 11pt; height: 35px; line-height: 30px; position: relative; } #content .heading-arrow:after { content: ""; display: inline-block; width: 0; height: 0; border-bottom: 8px solid #dbdbdb; border-right: 8px solid transparent; border-left: 8px solid transparent; position: absolute; bottom: 0; left: 15px; } #content .heading-arrow.glyphicons { padding: 0 10px 0 40px; } #content .heading-arrow.glyphicons i:before { font-size: 17px; left: 15px; } #content .heading-arrow.margin-bottom-none { margin-bottom: 0; } #content > .widget { border-left: 0; border-right: 0; } #content > .widget .widget-head, #content > .widget .widget-body { border-left: 0; border-right: 0; } #content > .widget:last-child { margin: 0; } #content > .table { border-left: none; border-right: none; } #content > .table tr td:first-child { border-left: none; } #footer { font-weight: 600; position: relative; overflow: hidden; z-index: 10000; border-bottom: 1px solid #dbdbdb; border-top: 1px solid #dbdbdb; } #footer a:not(.btn) { color: #7c7c7c; } #footer .copy { background: #e5e5e5; text-align: center; padding: 5px 10px; font-size: 12px; height: 20px; } #footer .copy a { color: #7c7c7c; text-decoration: underline; } html.sidebar #content { margin: 0 0 0 65px; } html.sidebar .menu-right #content { margin: 0 65px 0 0; } @media (min-width: 768px) { html.sticky-sidebar.sidebar:not(.fixed) body { overflow: hidden; } html.sticky-sidebar.sidebar:not(.fixed), html.sticky-sidebar.sidebar:not(.fixed) body, html.sticky-sidebar.sidebar:not(.fixed) body > .container-fluid, html.sticky-sidebar.sidebar:not(.fixed) #wrapper { min-height: 100%; height: 100%; } html.sticky-sidebar.sidebar:not(.fixed) #wrapper { margin-bottom: -32px; } html.sticky-sidebar.sidebar:not(.fixed) #menu { position: fixed; bottom: 0; } html.sticky-sidebar.sidebar:not(.fixed) #content { padding-bottom: 47px; } } @media (min-width: 768px) { html.sticky-top:not(.fixed) #content { padding-top: 50px; } html.sticky-top:not(.fixed) .navbar.main { position: fixed; top: 0; left: 0; right: 0; z-index: 10000; } html.sticky-top:not(.fixed).sidebar .navbar.main { left: 65px; } html.sticky-top:not(.fixed).sidebar .menu-right .navbar.main { left: 0; right: 65px; } html.sticky-top:not(.fixed) .menu-hidden .navbar.main { left: 0 !important; right: 0 !important; } html.sticky-top:not(.fixed).front #content { padding-top: 100px; margin: 0 !important; } } html.fixed, html.fixed body { min-height: auto; height: auto; overflow: visible; } body > .container-fluid.fixed { min-height: auto; height: auto; } body > .container-fluid.fixed #wrapper { position: relative; overflow: hidden; min-height: auto; height: auto; margin: 0; } body > .container-fluid.fixed #menu { position: absolute; height: 100%; min-height: 100%; bottom: auto; } .ui-resizable-helper.menu { border: 1px dotted gray; border-left: none; background: rgba(0, 0, 0, 0.3); } .ui-resizable-handle { width: 3px; border-style: solid; border-width: 0; border-color: rgba(0, 0, 0, 0.4); } .dropdown-menu { z-index: 100000; } #menu { width: 65px; float: left; position: absolute; left: 0; top: 0; overflow: hidden; height: 100%; min-height: 100%; background: #1f2123; font-size: 11px; } #menu .appbrand { font-weight: 700; display: block; text-decoration: none; line-height: 10px; padding: 10px; text-align: center; color: #ffffff; border-bottom: 1px solid #161718; } #menu .profile { display: block; padding: 10px 0; border-bottom: 1px solid #161718; border-top: 1px solid #2a2c2e; } #menu .profile a { border: 1px solid #161718; display: inline-block; width: 36px; height: 36px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } #menu .profile a img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } #menu .profile a:hover { border-color: #000000; } #menu .slim-scroll > ul, #menu > ul { list-style: none; float: left; margin: 0; padding: 0; display: block; width: 100%; border-top: 1px solid #2a2c2e; } #menu .slim-scroll > ul > li, #menu > ul > li { display: block; border-bottom: 1px solid #161718; box-shadow: 0 1px 0 0 #2a2c2e; position: relative; overflow: hidden; padding: 0; margin: 0; } #menu .slim-scroll > ul > li a, #menu > ul > li a { display: block; width: auto; padding: 10px; margin: 0; line-height: 10px; text-decoration: none; font-weight: 600; color: #4c4d4f; text-align: center; } #menu .slim-scroll > ul > li a.glyphicons, #menu > ul > li a.glyphicons { padding: 10px 5px; } #menu .slim-scroll > ul > li a.glyphicons i, #menu > ul > li a.glyphicons i { display: block; padding: 0 0 5px; } #menu .slim-scroll > ul > li a.glyphicons i:before, #menu > ul > li a.glyphicons i:before { display: block; font-size: 17px; color: #4c4d4f; top: auto; left: auto; position: relative; text-align: center; } #menu .slim-scroll > ul > li.glyphicons > a, #menu > ul > li.glyphicons > a { padding: 10px 5px; } #menu .slim-scroll > ul > li.glyphicons > a i, #menu > ul > li.glyphicons > a i { display: block; padding: 0 0 5px; } #menu .slim-scroll > ul > li.glyphicons > a i:before, #menu > ul > li.glyphicons > a i:before { display: block; font-size: 17px; color: #4c4d4f; top: auto; left: auto; position: relative; text-align: center; } #menu .slim-scroll > ul > li.active, #menu > ul > li.active { box-shadow: 0 1px 0 0 #2a2c2e; border-top: 1px solid #2a2c2e; position: relative; overflow: visible; } #menu .slim-scroll > ul > li.active > a, #menu > ul > li.active > a { background: #161718; color: #737474; } #menu .slim-scroll > ul > li.active.glyphicons a i:before, #menu > ul > li.active.glyphicons a i:before { color: #737474; } #menu .slim-scroll > ul > li.active:first-child, #menu > ul > li.active:first-child { border-top: none; } #menu .slim-scroll > ul > li:hover > a, #menu > ul > li:hover > a { color: #737474; } #menu .slim-scroll > ul > li:hover.glyphicons a i:before, #menu > ul > li:hover.glyphicons a i:before { color: #737474; } #menu.ui-state-disabled { opacity: 1; filter: alpha(opacity=100); } .menu-left .ui-resizable-e { background: rgba(255, 255, 255, 0.2); right: 0; border-left-width: 1px; border-right-width: 1px; } .menu-left .ui-resizable-e:hover { background: rgba(255, 255, 255, 0.4); } body .menu-right .ui-resizable-w { background: rgba(255, 255, 255, 0.2); left: 0; border-left-width: 1px; border-right-width: 1px; } body .menu-right .ui-resizable-w:hover { background: rgba(255, 255, 255, 0.4); } body .menu-right #menu { left: auto; right: 0; border-right: none; border-left: 1px solid #d8d8d8; } body .menu-right.fixed #content { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } body .menu-right.fixed .navbar.main, body .menu-right.fixed .navbar.main .wrapper { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } .menu-hidden #menu { display: none; } .menu-hidden #content { margin: 0 !important; } .menu-hidden .navbar.main .btn-navbar { left: 0; border-left: none; } .menu-hidden .navbar.main .topnav.tn1 { left: 37px; } .menu-hidden.login .navbar.main .appbrand, .menu-hidden.documentation .navbar.main .appbrand { display: inline-block; border: none; } .menu-hidden.login .navbar.main .appbrand span, .menu-hidden.documentation .navbar.main .appbrand span { border: none; } .navbar.main { height: 49px; background-color: #4a8bc2; border-bottom: 1px solid #346d9d; margin: 0; } .navbar.main .btn-navbar { height: 49px; line-height: 49px; padding: 0 10px; margin: 0; float: left; display: block; border: none; background: #4a8bc2; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .btn-navbar .icon-bar { background: #ffffff; box-shadow: 0 1px 0 #346d9d; } .navbar.main .btn-navbar:hover { background: #4286bf; } .navbar.main .btn-navbar.ui-state-disabled { opacity: 1; filter: alpha(opacity=100); } .navbar.main .topnav { margin: 0; padding: 0; list-style: none; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; } .navbar.main .topnav.pull-left + .topnav.pull-left { border-left: none; } .navbar.main .topnav.pull-left + .topnav.pull-left > li:first-child { border-left: none; } .navbar.main .topnav > li { position: relative; float: left; height: 49px; line-height: 49px; display: block; padding: 0 0 0 10px; } .navbar.main .topnav > li a { cursor: pointer; } .navbar.main .topnav > li > a { display: block; color: #ffffff; text-decoration: none; padding: 1px 11px 0 9px; height: 49px; line-height: 50px; /* &:hover { background: darken(@navbarBg, 2%); } */ } .navbar.main .topnav > li > a > img { margin: 0 0 3px; } .navbar.main .topnav > li > a.glyphicons { padding: 0 11px 0 9px; } .navbar.main .topnav > li > a.glyphicons i { padding: 0 10px 0 0; display: block; float: left; width: 17px; line-height: 49px; height: 49px; } .navbar.main .topnav > li > a.glyphicons i:before { color: #ffffff; font-size: 17px; position: relative; width: 17px; text-align: center; line-height: 51px; height: 49px; left: auto; right: auto; } .navbar.main .topnav > li > a.glyphicons.single-icon i { padding: 0; } .navbar.main .topnav > li > a.glyphicons.logout i { float: right; padding: 0; } .navbar.main .topnav > li > a.glyphicons.logout span { padding: 0 8px 0 0; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px 0 8px 8px; height: 33px; line-height: 33px; } .navbar.main .topnav > li.active:last-child, .navbar.main .topnav > li:hover:last-child, .navbar.main .topnav > li.open:last-child { padding: 8px 9px 8px 8px; } .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a { background: #346d9d; padding: 5px 10px; height: 22px; line-height: 22px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.active > a .caret, .navbar.main .topnav > li:hover > a .caret, .navbar.main .topnav > li.open > a .caret { top: 2px; } .navbar.main .topnav > li.active > a.glyphicons, .navbar.main .topnav > li:hover > a.glyphicons, .navbar.main .topnav > li.open > a.glyphicons { padding: 5px 10px; height: 22px; line-height: 22px; } .navbar.main .topnav > li.active > a.glyphicons i, .navbar.main .topnav > li:hover > a.glyphicons i, .navbar.main .topnav > li.open > a.glyphicons i { height: 22px; line-height: 22px; } .navbar.main .topnav > li.active > a.glyphicons i:before, .navbar.main .topnav > li:hover > a.glyphicons i:before, .navbar.main .topnav > li.open > a.glyphicons i:before { line-height: 22px; height: 22px; } .navbar.main .topnav > li.glyphs { padding: 8px; height: 33px; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; box-shadow: -1px 0 0 0 #619aca, 1px 0 0 0 #346d9d; } .navbar.main .topnav > li.glyphs ul { margin: 0; padding: 0; list-style: none; background: #346d9d; height: 32px; line-height: 32px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li { float: left; display: block; height: 32px; line-height: 32px; padding: 0 1px 0 0; } .navbar.main .topnav > li.glyphs ul li .glyphicons { height: 22px; line-height: 22px; padding: 5px 10px; display: block; text-decoration: none; } .navbar.main .topnav > li.glyphs ul li .glyphicons i { height: 22px; line-height: 22px; display: block; } .navbar.main .topnav > li.glyphs ul li .glyphicons i:before { line-height: 22px; height: 22px; position: relative; left: auto; top: auto; display: block; text-align: center; font-size: 17px; color: #538fc1; } .navbar.main .topnav > li.glyphs ul li.active, .navbar.main .topnav > li.glyphs ul li:hover { padding: 0; background: #579ad2; border-right: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li.active .glyphicons i:before, .navbar.main .topnav > li.glyphs ul li:hover .glyphicons i:before { color: #ffffff; } .navbar.main .topnav > li.glyphs ul li.active:first-child, .navbar.main .topnav > li.glyphs ul li:hover:first-child { -webkit-border-radius: 5px 0 0 5px; -moz-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .navbar.main .topnav > li.glyphs ul li.active:last-child, .navbar.main .topnav > li.glyphs ul li:hover:last-child { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; border-right: none; border-left: 1px solid #296190; } .navbar.main .topnav > li.glyphs ul li.active:last-child .glyphicons, .navbar.main .topnav > li.glyphs ul li:hover:last-child .glyphicons { padding: 5px 11px 5px 9px; } .navbar.main .topnav > li.search { padding: 8px; height: 33px; border-left: 1px solid #346d9d; border-right: 1px solid #619aca; box-shadow: -1px 0 0 0 #619aca, 1px 0 0 0 #346d9d; } .navbar.main .topnav > li.search form { margin: 0; padding: 0; background: #afcae2; height: 32px; line-height: 32px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #296190; } .navbar.main .topnav > li.search form input { background: none; border: none; color: #628db3; margin: 0; padding: 0; height: 32px; line-height: 32px; width: 100px; padding: 0 0 0 10px; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .navbar.main .topnav > li.search form input::-webkit-input-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input:-moz-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input::-moz-placeholder { color: #628db3; } .navbar.main .topnav > li.search form input:-ms-input-placeholder { color: #628db3; } .navbar.main .topnav > li.search form button { background: none; border: none; margin: 0; padding: 0; height: 32px; } .navbar.main .topnav > li.search form button i:before { display: block; position: relative; left: auto; right: auto; height: 32px; line-height: 32px; padding: 0 5px; font-size: 17px; color: #346d9d; } .navbar.main .topnav > li.search form input, .navbar.main .topnav > li.search form button { vertical-align: top; } .navbar.main .topnav > li.search, .navbar.main .topnav > li.glyphs { margin-left: 10px; } .navbar.main .topnav > li.search + .glyphs { margin-left: 0; } .navbar.main .topnav > li.glyphs + .search, .navbar.main .topnav > li.glyphs + .tooltip + .search { margin-left: 0; } .navbar.main .topnav > li:last-child { border-right: 1px solid #346d9d; padding: 0 9px 0 10px; } .navbar.main .topnav > li:last-child.glyphs, .navbar.main .topnav > li:last-child.search { padding: 8px 9px; box-shadow: -1px 0 0 0 #619aca; } .navbar.main .topnav > li:first-child { border-left: 1px solid #619aca; } .navbar.main .topnav > li:last-child.open .dropdown-menu { right: 0; } .navbar.main .topnav > li.open .dropdown-menu { background: #363432; border: none; box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; right: 0; width: 180px; } .navbar.main .topnav > li.open .dropdown-menu.pull-left { left: 0; } .navbar.main .topnav > li.open .dropdown-menu li { border-bottom: 1px solid #4a4947; } .navbar.main .topnav > li.open .dropdown-menu li:last-child { border-bottom: none; } .navbar.main .topnav > li.open .dropdown-menu li:first-child > a, .navbar.main .topnav > li.open .dropdown-menu li:first-child > a:hover, .navbar.main .topnav > li.open .dropdown-menu li:first-child > span { border-top: none; } .navbar.main .topnav > li.open .dropdown-menu li > a, .navbar.main .topnav > li.open .dropdown-menu li > a:hover, .navbar.main .topnav > li.open .dropdown-menu li > span { height: 29px; line-height: 29px; padding: 0 10px; display: block; background: #363432; color: #c8c8c8; } .navbar.main .topnav > li.open .dropdown-menu li > a.glyphicons i:before, .navbar.main .topnav > li.open .dropdown-menu li > a:hover.glyphicons i:before, .navbar.main .topnav > li.open .dropdown-menu li > span.glyphicons i:before { left: auto; right: 10px; top: 5px; font-size: 17px; color: #c4c4c4; } .navbar.main .topnav > li.open .dropdown-menu li > a:hover { background: #1c1a19; } .navbar.main .topnav > li.open .dropdown-menu li.active { background: #0e0e0d; } .navbar.main .topnav > li.open .dropdown-menu li.active a { background: #0e0e0d; } .navbar.main .topnav > li.open .dropdown-menu li .btn { margin: 3px 0; } .navbar.main .topnav > li.open .dropdown-menu li.highlight > a, .navbar.main .topnav > li.open .dropdown-menu li.highlight > a:hover, .navbar.main .topnav > li.open .dropdown-menu li.highlight > span { background: rgba(0, 0, 0, 0.1); } .navbar.main .topnav > li.open .dropdown-menu li.profile a:hover { color: #fff; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open .dropdown-menu li.profile > span { height: auto; line-height: normal; padding: 5px 10px 10px; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .heading a { text-transform: none; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #272729; margin: 0 10px 0 0; position: relative; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .img:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #595959; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } .navbar.main .topnav > li.open .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open .dropdown-menu li.profile > span .clearfix { display: block; } .navbar.main .topnav > li.open.account > .dropdown-menu { width: 220px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu, .navbar.main .topnav > li.open.dd-1 .typeahead, .navbar.main .topnav > li.open .dd-1 .typeahead { box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.2); } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open.dd-1 .typeahead:before, .navbar.main .topnav > li.open .dd-1 .typeahead:before { content: ""; width: 0; height: 0; border: 11px solid transparent; position: absolute; display: block; left: 7px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open.dd-1 .typeahead:after, .navbar.main .topnav > li.open .dd-1 .typeahead:after { content: ""; width: 0; height: 0; border: 10px solid transparent; top: -10px; border-top-width: 0; border-bottom-color: #ffffff; position: absolute; display: block; left: 8px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:before, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:before, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:before, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:before, .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:after, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:after { left: auto; right: 7px; margin: 0; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu.pull-right:after, .navbar.main .topnav > li.open.dd-1 .typeahead.pull-right:after, .navbar.main .topnav > li.open .dd-1 .typeahead.pull-right:after { right: 8px; } .navbar.main .topnav > li.open.dd-1 .typeahead, .navbar.main .topnav > li.open .dd-1 .typeahead { margin-top: 13px !important; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu.pull-right, .navbar.main .topnav > li.open .dd-1 .dropdown-menu.pull-right { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu, .navbar.main .topnav > li.open .dd-1 .dropdown-menu { background: #fff; border: 1px solid #c8c8c8; margin: 5px 0 0; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li { border-color: #f3f3f3; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li a:not(.btn), .navbar.main .topnav > li.open .dd-1 .dropdown-menu li a:not(.btn), .navbar.main .topnav > li.open.dd-1 .dropdown-menu li span, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li span { background: #fff; color: #939494; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li a:not(.btn) i:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li a:not(.btn) i:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li span i:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li span i:before { color: #cccccc; font-size: 15px !important; top: 7px !important; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu > li:not(.profile):hover > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu > li:not(.profile):hover > a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu > li.active > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu > li.active > a { /* background: @primaryColor; border: 1px solid darken(@primaryColor, 15%); border-top: none; border-bottom: none; color: #fff; box-shadow: 0 5px 5px -5px darken(@primaryColor, 20%) inset, 0 -5px 5px -5px darken(@primaryColor, 20%) inset; i:before { color: #fff; } */ font-weight: 600; color: #000; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile { background: #fff; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile a:hover, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile a:hover { color: #7c7c7c; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span { height: auto; line-height: normal; padding: 5px 10px 10px; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .heading, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .heading, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .heading, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .heading a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .heading a, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .heading a, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .heading a { text-transform: none; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .img, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .img, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .img, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #fdfdfd; margin: 0 10px 0 0; position: relative; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .img:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .img:before, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .img:before, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .img:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #ccc; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a .clearfix, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > a:hover .clearfix, .navbar.main .topnav > li.open.dd-1 .dropdown-menu li.profile > span .clearfix, .navbar.main .topnav > li.open .dd-1 .dropdown-menu li.profile > span .clearfix { display: block; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu li a:not(.btn) { padding: 10px 10px 10px 50px; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu li a:not(.btn) i:before { right: auto; left: 10px; top: 10px !important; font-size: 30px !important; color: #f2f2f2; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover { border-color: #f3f3f3; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover > a { background: rgba(74, 139, 194, 0.08); color: #939494; text-shadow: 0 1px 0 #fff; border: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } .navbar.main .topnav > li.open.dd-2 .dropdown-menu > li:not(.profile):hover > a i:before { color: #4a8bc2; left: 10px; top: 10px; } .navbar.main .topnav > li.open.dd-flags .dropdown-menu img { margin: -3px 4px 0 0; } .navbar.main .topnav .dropdown > a .caret { border-top-color: #ffffff; top: 16px; position: relative; } .navbar.main .topnav .dropdown-menu { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .navbar.main .topnav:last-of-type { border-right: none; } .navbar.main .topnav:last-of-type li:last-child { border: none; } .submenu-show { display: block; margin-top: -35px !important; position: absolute; } .submenu-show.pull-left { left: auto !important; right: 100% !important; } .submenu-show.pull-right { right: auto !important; left: 100% !important; } .submenu-hide { display: none !important; position: relative; top: auto; float: left; } .filter-bar { background: #e5e5e5; margin: 0 auto 15px; border: 1px solid #dbdbdb; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; line-height: 30px; height: 40px; padding: 0 10px; } .filter-bar.border-top-none { border-top: none; } .filter-bar div { padding: 5px 0; display: block; line-height: 30px; } .filter-bar div div { padding: 0; margin: 0; } .filter-bar div div:not(.helper) { margin: 0 15px 0 0; } .filter-bar div div input { margin: 3px 0 0; } .filter-bar div div.input-append { margin: 0; } .filter-bar div div.input-append .add-on { padding: 1px 3px; margin: 3px 0 0 -1px; background: #fff; color: #d8d9da; border-color: #d8d9da; } .filter-bar div div.input-append .add-on i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } .filter-bar div div.input-append button.add-on { width: 24px; height: 24px; } .filter-bar div div:last-child { margin: 0; } .filter-bar div:not(.helper) { float: left; } .filter-bar div.glyphicons { padding: 0 0 0 35px; } .filter-bar div.glyphicons i:before { top: 12px; left: 9px; font-size: 17px; color: rgba(255, 255, 255, 0.8); } .filter-bar div.clearfix { padding: 0; clear: both; float: none; display: block; height: 0; margin: 0; } .filter-bar div.lbl { padding: 0 10px 0 35px; background: #4a8bc2; height: 40px; line-height: 40px; margin-right: 10px; color: #fff; } .filter-bar form { margin: 0; } .filter-bar form input, .filter-bar form select { margin: 0 5px 3px 0; padding: 1px 5px; color: #a7a7a7; } .filter-bar form select { padding: 1px; height: 23px; } .filter-bar form label { float: left; margin: 0 5px; display: block; line-height: 30px; } .filter-bar.border-none { border: none; } .filter-bar.dark { background: #64625f; color: #fff; } .filter-bar.dark div div.input-append .add-on { background: #42403e; color: #fff; border-color: #42403e; } .filter-bar.dark div div.input-append .add-on i:before { color: #767473; text-shadow: none; } .filter-bar.dark form input:focus { border-color: #42403e; } .filter-bar.dark form input, .filter-bar.dark form select { border-color: #42403e; } .menubar { height: 30px; position: relative; overflow: hidden; border: 1px solid #dbdbdb; background: #fafafa; margin: 0; font-size: 9pt; } .menubar ul { margin: 0; padding: 0 5px; list-style: none; height: 30px; } .menubar ul li { float: left; display: block; height: 30px; line-height: 30px; padding: 0 5px; } .menubar ul li.divider { border-left: 1px solid #ebebeb; width: 0px; padding: 0; margin: 0 8px; } .menubar ul li a { color: #7c7c7c; font-weight: 700; font-size: 9pt; } .menubar.links { border: none; background: none; height: 25px; padding: 0 0 5px; } .menubar.links ul { padding: 0; height: 25px; } .menubar.links ul li { height: 25px; line-height: 25px; } .menubar.links ul li:first-child { padding-left: 0; } .menubar.links.primary ul li a { color: #4a8bc2; } .widget { background: #ffffff; margin: 0 auto 15px; position: relative; border: 1px solid #dbdbdb; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget .tab-content { padding: 0; } .widget .widget-head { background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); border-bottom: 1px solid #dbdbdb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; text-shadow: 0 1px 0 0 1px 0 #ffffff; height: 35px; line-height: 35px; position: relative; padding: 0 15px 0 0; overflow: hidden; } .widget .widget-head.progress { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin: 0; padding: 0; } .widget .widget-head > .glyphicons, .widget .widget-head ul .glyphicons { height: 30px; width: 30px; padding: 0; } .widget .widget-head > .glyphicons i:before, .widget .widget-head ul .glyphicons i:before { width: 30px; height: 30px; line-height: 23px; text-align: center; font-size: 16px; color: rgba(255, 255, 255, 0.5); } .widget .widget-head .heading { margin: 0; color: #7c7c7c; font-size: 14px; height: 35px; line-height: 35px; padding: 0 15px; float: left; } .widget .widget-head .heading.glyphicons { width: auto; display: block; padding: 0 0 0 35px; } .widget .widget-head .heading.glyphicons i:before { padding: 0; margin: 0; left: 0; top: 0; height: 35px; line-height: 35px; text-align: center; width: 35px; color: #7c7c7c; font-size: 16px; font-weight: normal; text-shadow: none; } .widget .widget-head a { text-shadow: none; } .widget .widget-head .dropdown-menu li > a:hover, .widget .widget-head .dropdown-menu li > a:focus, .widget .widget-head .dropdown-submenu:hover > a { background-color: #4a8bc2; background-image: -moz-linear-gradient(top, #4a8bc2, #d24343); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#4a8bc2), to(#d24343)); background-image: -webkit-linear-gradient(top, #4a8bc2, #d24343); background-image: -o-linear-gradient(top, #4a8bc2, #d24343); background-image: linear-gradient(to bottom, #4a8bc2, #d24343); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffda4c4c', endColorstr='#ffd24343', GradientType=0); } .widget .details { font-size: 8pt; color: #7c7c7c; } .widget .widget-body { padding: 15px; } .widget .widget-body form { margin: 0; } .widget .widget-body > pre:last-child, .widget .widget-body > p:last-child { margin: 0; } .widget .widget-body.list { color: #7c7c7c; padding: 0; } .widget .widget-body.list .count { font-size: 15pt; font-weight: 400; } .widget .widget-body.list ul { margin: 0; list-style: none; } .widget .widget-body.list ul li { padding: 0 10px; height: 39px; border-bottom: 1px solid #dbdbdb; position: relative; line-height: 39px; text-align: left; text-shadow: 0 1px 0 #ffffff; clear: both; } .widget .widget-body.list ul li .badge { position: absolute; right: 8px; top: 10px; } .widget .widget-body.list ul li:first-child { border-top: none; } .widget .widget-body.list ul li:last-child { border-bottom: none; } .widget .widget-body.list ul li .count { float: right; color: #000000; } .widget .widget-body.list ul li .sparkline { position: relative; top: 5px; margin-left: 5px; } .widget .widget-body.list ul li a { color: #000000; font-weight: bold; } .widget .widget-body.list.products li { height: 60px; line-height: 60px; } .widget .widget-body.list.products .img { float: left; display: inline-block; width: 48px; height: 44px; line-height: 44px; color: #fff; text-align: center; background: #272729; margin: 8px 8px 0 0; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; text-shadow: none; cursor: pointer; font-size: 10pt; font-weight: 600; } .widget .widget-body.list.products .title { line-height: normal; display: inline-block; padding: 13px 0 0; text-transform: uppercase; } .widget .widget-body.list.products .title strong { font-family: "Open Sans", sans-serif; text-transform: none; } .widget .widget-body.list.fluid ul li { height: auto; line-height: normal; padding: 10px; } .widget .widget-body.list.list-2 ul li { border-bottom: 1px solid #d8d9da; border-top: none; background: #f8f8f8; } .widget .widget-body.list.list-2 ul li.active { border-color: #dddddd; background: #fff; } .widget .widget-body.list.list-2 ul li.active i:before { font-weight: normal; background: #4a8bc2; color: #fff; text-shadow: none; } .widget .widget-body.list.list-2 ul li.active a { color: #4a8bc2; } .widget .widget-body.list.list-2 ul li:last-child { border-bottom: none; } .widget .widget-body.list.list-2 ul li a { display: block; color: #222; padding: 0 0 0 30px; } .widget .widget-body.list.list-2 ul li a i:before { color: #555; width: 20px; height: 17px; font-size: 14px; border: 1px solid #ccc; background: #dddddd; top: 9px; left: 0; text-align: center; vertical-align: middle; padding-top: 3px; text-shadow: 0 1px 0 #fff; } .widget .widget-body.list.list-2 ul li.hasSubmenu { height: auto; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul { padding: 0 0 10px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li { height: auto; line-height: normal; background: none; border: none; line-height: 20px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li a { color: #333; padding: 0 0 0 20px; } .widget .widget-body.list.list-2 ul li.hasSubmenu ul li.active a { font-weight: bold; } .widget .widget-footer { background: #fafafa; height: 25px; line-height: 25px; border-top: 1px solid #ebebeb; } .widget .widget-footer .glyphicons { width: 25px; height: 25px; line-height: 25px; padding: 0; float: right; } .widget .widget-footer .glyphicons i:before { font-size: 16px; color: #c3c3c3; text-align: center; width: 20px; height: 25px; line-height: 25px; text-shadow: 0 1px 0 #ffffff; } .widget .widget-footer .glyphicons:hover i:before { color: rgba(0, 0, 0, 0.5); } .widget.margin-bottom-none { margin-bottom: 0; } .widget.widget-gray { background: #f5f5f5; } .widget.widget-gray .widget-head { background: #e9e9e9; border-color: #d1d2d3; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); } .widget.widget-gray .widget-head .heading { color: #555555; text-shadow: 0 1px 0 #fff; } .widget.widget-gray .widget-head .heading.glyphicons i:before { background: none; color: #555; border-color: rgba(0, 0, 0, 0.1); } .widget.widget-2:before, .widget.widget-2:after { display: none; } .widget.widget-2 .widget-head { background: #e2e2e4; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0); height: 36px; line-height: 36px; border-color: #d1d2d3; } .widget.widget-2 .widget-head .heading { line-height: 36px; color: #555555; text-shadow: 0 1px 0 #fff; font-size: 12pt; } .widget.widget-2 .widget-head .heading i:before { color: #555555; background: none; border: none; left: 3px; top: 2px; } .widget.widget-2 .widget-body { border: 1px solid #d1d2d3; border-top: 0; background: #f5f5f5; } .widget.widget-2.primary .widget-head { background: #4a8bc2; border-color: #4a8bc2; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.6), inset -1px -1px 1px rgba(0, 0, 0, 0.1); } .widget.widget-2.primary .widget-head .heading { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .widget.widget-2.primary .widget-head .heading i:before { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .widget.widget-3:before, .widget.widget-3:after { display: none; } .widget.widget-3 .widget-head { height: 36px; line-height: 36px; } .widget.widget-3 .widget-head .heading { display: block; text-align: center; float: none; line-height: 36px; height: 36px; text-transform: uppercase; font-size: 12pt; } .widget.widget-3 .widget-head .heading i:before { background: none; border: none; left: 3px; top: 5px; font-size: 20px; color: #45484d; } .widget.widget-3 .widget-head .heading .glyphicons { vertical-align: middle; width: 35px; height: 36px; padding: 0; } .widget.widget-3 .widget-body { border-bottom: 1px solid #dbdbdb; } .widget.widget-3 .widget-body.large { font-size: 26pt; font-weight: bold; text-align: center; padding: 25px 0; vertical-align: middle; line-height: normal; } .widget.widget-3 .widget-body.large.cancellations span { line-height: 20px; text-align: left; font-size: 17pt; display: inline-block; text-shadow: none; } .widget.widget-3 .widget-body.large.cancellations span span { display: block; } .widget.widget-3 .widget-body.large.cancellations span span:first-child { color: #4a8bc2; text-transform: uppercase; font-size: 13pt; } .widget.widget-3 .widget-body.large.dashboard { padding: 15px 0; } .widget.widget-3 .widget-footer { background: #fafafa; border-top: none; } .widget.widget-3 .widget-footer a { float: none; color: #dddddd; width: auto; padding: 0 10px 0 30px; border-right: 1px solid #dbdbdb; text-decoration: none; } .widget.widget-3 .widget-footer a i:before { color: #dddddd; left: 5px; } .widget.widget-3 .widget-footer a:hover { color: #4a8bc2; } .widget.widget-3 .widget-footer a:hover i:before { color: #4a8bc2; } .widget.widget-3 .widget-footer.align-center { text-align: center; } .widget.widget-3 .widget-footer.align-center a:first-child { border-left: 1px solid #dbdbdb; } .widget.widget-3 .widget-footer.align-right { text-align: right; } .widget.widget-3 .widget-footer.align-right a:first-child { border-left: 1px solid #dbdbdb; } .widget.widget-3 .widget-footer.align-right a:last-child { border-right: none; } .widget.widget-4 { border: none; background: none; } .widget.widget-4 .widget-head { background: none; padding: 10px; border: none; } .widget.widget-4 .widget-head .heading { color: #544f49; text-shadow: none; padding: 0; margin: 0; } .widget.widget-4 .widget-body { padding: 0 10px 10px; border: none; } .widget.widget-4 .widget-body.list ul li { padding: 0; } .widget.widget-heading-simple { border: none; background: none; } .widget.widget-heading-simple > .widget-head { border: none; background: none; padding: 0 0 5px; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-head .heading { padding: 0; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-head .heading.glyphicons { padding: 0 0 0 25px; } .widget.widget-heading-simple > .widget-head .heading.glyphicons i:before { text-align: left; width: 25px; height: 25px; line-height: 25px; } .widget.widget-heading-simple > .widget-body { border: 1px solid #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget.widget-body-simple { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .widget.widget-body-simple > .widget-body { background: none; border: none; padding: 0; } .widget.widget-body-white > .widget-body { background: #ffffff; } .widget.widget-body-gray { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget.widget-body-gray > .widget-body { background: #e5e5e5; } .widget.widget-body-primary { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget.widget-body-primary > .widget-body { background: #4a8bc2; } .widget.widget-body-primary > .widget-body * { color: #fff; text-shadow: none; } .widget.widget-body-multiple { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .widget.widget-body-multiple > .widget-body { box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; margin-bottom: 7.5px; } .widget.widget-body-multiple > .widget-body:last-of-type { margin-bottom: 0; } .widget.widget-body-multiple.widget-body-gray > .widget-body { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .widget-offers .price { font-size: 14px; } .widget-offers .price strong { color: #000; } .widget-offers .thumb { padding: 0; } .widget-offers h5 { border-bottom: 1px solid #cecece; font-weight: 600; text-shadow: 0 1px 0 #ffffff; box-shadow: 0 1px 0 0 #eeeeee; padding: 0 0 5px; } .widget-activity > .widget-body { padding: 0 15px; } .widget-activity ul.list { list-style: none; margin: 0 -15px; padding: 0; } .widget-activity ul.list li { height: 39px; line-height: 39px; position: relative; overflow: hidden; border-bottom: 1px solid #ebebeb; padding: 0 15px; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; } .widget-activity ul.list li:hover, .widget-activity ul.list li.highlight { background: #f2f2f2; box-shadow: 0 1px 0 0 #ffffff inset; -moz-box-shadow: 0 1px 0 0 #ffffff inset; -webkit-box-shadow: 0 1px 0 0 #ffffff inset; text-shadow: 0 1px 0 #ffffff; cursor: pointer; } .widget-activity ul.list li:hover:after, .widget-activity ul.list li.highlight:after { content: "\e212"; display: block; position: absolute; right: 15px; top: 0; height: 39px; line-height: 39px; font-family: "Glyphicons"; font-size: 24px; color: #d5d5d5; } .widget-activity ul.list li:hover .activity-icon i:before, .widget-activity ul.list li.highlight .activity-icon i:before { color: #505050; } .widget-activity ul.list li > span { display: block; height: 39px; line-height: 39px; float: left; position: relative; overflow: hidden; } .widget-activity ul.list li > span.ellipsis { white-space: nowrap; text-overflow: ellipsis; max-width: 75%; } .widget-activity ul.list li > span.date { width: 40px; text-align: center; } .widget-activity ul.list li .activity-icon { width: 30px; height: 39px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; } .widget-activity ul.list li .activity-icon i { height: 39px; display: block; position: relative; } .widget-activity ul.list li .activity-icon i:before { position: relative; top: 0; left: 0; color: #cbcbcb; font-size: 18px; line-height: 39px; } .widget-activity ul.list li.double { height: 45px; line-height: 45px; } .widget-activity ul.list li.double > span { height: 45px; line-height: 45px; } .widget-activity ul.list li.double > span.ellipsis { line-height: 15px; padding: 7px 0 0; font-weight: 600; font-size: 11px; } .widget-activity ul.list li.double > span .meta { display: block; line-height: 15px; font-weight: 400; color: #b7b7b7; } .widget-activity ul.list li.double > span .meta i:before { top: 1px; color: #b7b7b7; } .widget-activity ul.list li.double > span .meta span { font-style: italic; } .widget-activity ul.list li.double .activity-icon { margin-left: 0; height: 45px; } .widget-activity ul.list li.double .activity-icon i { height: 45px; } .widget-activity ul.list li.double .activity-icon i:before { line-height: 45px; } .widget-activity ul.list li.double:hover:after, .widget-activity ul.list li.double.highlight:after { height: 45px; line-height: 45px; } .widget-activity ul.list li:last-child { border: none; } .widget-activity .view-all { position: absolute; top: 18px; right: 15px; } .widget-messages ul { margin: 0; padding: 0; list-style: none; } .widget-messages ul li { border: 1px solid #e5e5e5; padding: 5px; margin: 0 0 10px; position: relative; } .widget-messages ul li .meta span { color: #a3a3a3; font-size: 12px; } .widget-messages ul li .glyphicons.single.bin { position: relative; text-decoration: none; padding: 0; width: 15px; height: 20px; top: 5px; } .widget-messages ul li .glyphicons.single.bin i { display: block; width: 15px; height: 20px; text-align: center; } .widget-messages ul li .glyphicons.single.bin i:before { color: #cccccc; position: relative; line-height: 20px; left: auto; top: auto; } .widget-messages ul li:last-child { margin: 0; } .widget-timeline .widget-body { padding: 15px; position: relative; } .widget-timeline .widget-body:before { display: block; width: 1px; background: #dbdbdb; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } .widget-timeline:not(.widget) { position: relative; } .widget-timeline:not(.widget):before { display: block; width: 1px; background: #dbdbdb; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } .widget-timeline .view-all { margin-left: 35px; } .widget-timeline ul.list-timeline { list-style: none; margin: 0 0 15px; padding: 0; } .widget-timeline ul.list-timeline li { display: block; height: 30px; line-height: 30px; position: relative; overflow: hidden; background: #ffffff; border: 1px solid #ebebeb; margin: 0 0 10px; padding: 0 10px; } .widget-timeline ul.list-timeline li:last-child { margin: 0; } .widget-timeline ul.list-timeline li span { display: block; height: 30px; line-height: 30px; float: left; position: relative; overflow: hidden; } .widget-timeline ul.list-timeline li span.ellipsis { white-space: nowrap; text-overflow: ellipsis; max-width: 75%; } .widget-timeline ul.list-timeline li span.date { width: 40px; text-align: center; } .widget-timeline ul.list-timeline li .activity-icon { width: 30px; height: 30px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; } .widget-timeline ul.list-timeline li .activity-icon i { height: 30px; display: block; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; position: relative; background: #64625f; } .widget-timeline ul.list-timeline li .activity-icon i:before { position: relative; top: 0; left: 0; color: #fff; font-size: 17px; line-height: 30px; } .widget-chat { padding-bottom: 60px !important; } .widget-chat .media { position: relative; min-height: 80px; } .widget-chat .media .media-object { position: relative; } .widget-chat .media .thumb { padding: 0; } .widget-chat .media small { color: #cccccc; } .widget-chat .media small:before, .widget-chat .media small:after { content: ""; } .widget-chat .media small.author { position: absolute; left: 0; width: 50px; top: 60px; text-align: center; display: block; } .widget-chat .media small.date { display: block; border-bottom: 1px solid #dbdbdb; margin: 0 0 5px; padding: 0 0 3px; text-align: right; width: 100%; } .widget-chat .media.right small.author { left: auto; right: 0; } .widget-chat .media.right small.date { text-align: left; } .widget-chat .media .media-body { -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; padding: 0; } .widget-chat .media .media-body blockquote { padding: 0; width: 100%; } .widget-chat .media .media-body blockquote p:last-child { margin: 0; } .widget-chat .media:last-of-type { padding-bottom: 10px; } .widget-chat .chat-controls { position: absolute; height: 30px; padding: 15px 0; left: 0; right: 0; bottom: 0; border: 1px solid #dbdbdb; border-top: none; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; background: #fff; } .widget-chat .widget-body { padding-bottom: 0; } .widget-chat.widget-heading-simple > .widget-body { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .widget-stats { background: #ffffff; padding: 15px 0; margin: 0; height: 80px; position: relative; text-align: center; display: block; border: 1px solid #dbdbdb; text-shadow: 0 1px 0 #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .widget-stats .count { position: absolute; top: 0; left: 0; font-size: 13px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .widget-stats .label { font-weight: 600; padding: 4px; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2) inset; } .widget-stats span { display: inline-block; } .widget-stats .txt { padding: 0; color: #cecece; } .widget-stats .glyphicons { padding: 0; display: block; } .widget-stats .glyphicons i { display: block; } .widget-stats .glyphicons i:before { color: #cecece; font-size: 30px; top: 0; left: 0; position: relative; } .widget-stats, .widget-stats:hover, .widget-stats:focus { text-decoration: none; } .widget-stats:hover { background: #fdfdfd; } .widget-stats.small { padding: 5px 0; } .widget-stats.small .glyphicons { padding: 12px 0 0; } .widget-stats.small .glyphicons i:before { font-size: 25px; } .widget-stats.widget-stats-1 { padding: 8px 0; height: 94px; } .widget-stats.widget-stats-1 .glyphicons { display: block; height: 35px; line-height: 35px; padding-bottom: 5px; } .widget-stats.widget-stats-1 .glyphicons .txt { display: inline-block; padding: 0 5px; line-height: 35px; } .widget-stats.widget-stats-1 .glyphicons i { display: inline-block; } .widget-stats.widget-stats-1 .glyphicons i:before { top: 5px; font-size: 25px; } .widget-stats.widget-stats-1 .count { position: relative; top: auto; right: auto; font-size: 60px; display: inline-block; font-weight: 700; padding: 0; line-height: 40px; } .widget-stats.widget-stats-2 .txt { font-size: 14px; } .widget-stats.widget-stats-2 .count { position: relative; top: auto; right: auto; font-size: 60px; font-weight: 700; padding: 0 0 3px; display: block; line-height: 55px; } .widget-stats.widget-stats-gray.widget-stats-1 .txt, .widget-stats.widget-stats-gray.widget-stats-2 .txt { color: #000; } .widget-stats.widget-stats-easy-pie .easy-pie { display: block; width: 50px; margin: -5px auto 0; } .widget-stats.widget-stats-easy-pie.txt-single .easy-pie { margin: 0 auto; } .widget-stats.widget-stats-easy-pie.txt-single .txt { padding: 7px 0 0; } .widget-stats.widget-stats-3 .sparkline { display: inline-block; } .widget-stats.widget-stats-3 .txt { text-align: left; vertical-align: middle; padding: 13px 0 0 10px; } .widget-stats.widget-stats-3 .count { padding: 0 0 5px; display: block; } .widget-stats.widget-stats-gray { background: #e5e5e5; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; } .box-generic { border: 1px solid #dbdbdb; padding: 15px; position: relative; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; margin: 0 0 15px; } .ribbon-wrapper { width: 85px; height: 88px; overflow: hidden; position: absolute; top: -3px; right: -3px; } .ribbon-wrapper .ribbon { display: block; font-family: Arial, sans-serif; font-size: 15px; font-weight: 600; color: #fff; text-align: center; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); position: relative; padding: 7px 0; left: -5px; top: 15px; width: 120px; line-height: 20px; background-color: #797979; -webkit-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); } .ribbon-wrapper .ribbon:before, .ribbon-wrapper .ribbon:after { content: ""; border-top: 2px solid #797979; border-left: 2px solid transparent; border-right: 2px solid transparent; position: absolute; bottom: -2px; } .ribbon-wrapper .ribbon:before { left: 0; bottom: -1px; } .ribbon-wrapper .ribbon:after { right: 0; } .ribbon-wrapper .ribbon.primary { background-color: #4a8bc2; } .ribbon-wrapper .ribbon.success { background-color: #609450; } .ribbon-wrapper .ribbon.warning { background-color: #ab7a4b; } .ribbon-wrapper .ribbon.danger { background-color: #bd362f; } .ribbon-wrapper .ribbon.default { background-color: #e5e5e5; color: #595959; } .ribbon-wrapper .ribbon.default:before, .ribbon-wrapper .ribbon.default:after { border-top: 2px solid #ccc; } .ribbon-wrapper.small { width: 65px; height: 68px; } .ribbon-wrapper.small .ribbon { width: 90px; padding: 0; font-size: 13px; } .ribbon-wrapper.small .ribbon:before { bottom: -2px; } .breadcrumb { height: 38px; line-height: 39px; padding: 0 15px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin: 0; background: none; border-bottom: 1px solid #dbdbdb; box-shadow: 0 1px 0 0 #fff; -moz-box-shadow: 0 1px 0 0 #fff; -webkit-box-shadow: 0 1px 0 0 #fff; color: #ababab; font-size: 12px; position: relative; overflow: hidden; } .breadcrumb li { text-shadow: 0 1px 0 #ffffff; line-height: 38px; height: 38px; } .breadcrumb li a { color: #ababab; font-weight: 600; } .breadcrumb li a.glyphicons { color: #ababab; padding: 0 0 0 25px; } .breadcrumb li a.glyphicons i:before { color: #ababab; font-size: 14px; top: 12px; left: 3px; } .breadcrumb li.divider { margin: 0 5px 0 7px; width: 0; border-left: 1px solid #dbdbdb; border-right: 1px solid #fff; vertical-align: top; } .well { z-index: 1; position: relative; padding: 15px; margin: 0 0 15px; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; background: #fafafa; border-color: #dbdbdb; } .well.small { padding: 10px; } .well .popover { z-index: 2; font-size: 13px; } .well.dark { background: rgba(0, 0, 0, 0.2); } .well.white { background: #fff; } [data-toggle="collapse-widget"] .collapse-toggle { position: relative; height: 35px; width: 30px; display: block; cursor: pointer; float: right; margin-right: -10px; } [data-toggle="collapse-widget"] .collapse-toggle:before { font-family: "Glyphicons"; font-size: 17px; display: block; width: 100%; height: 35px; line-height: 34px; text-align: center; color: #cccccc; content: "\e192"; } [data-toggle="collapse-widget"].widget-heading-simple .collapse-toggle { margin-right: 0; height: 25px; } [data-toggle="collapse-widget"].widget-heading-simple .collapse-toggle:before { height: 25px; line-height: 25px; } [data-toggle="collapse-widget"] a ~ .collapse-toggle { margin-right: 0; } [data-toggle="collapse-widget"][data-collapse-closed="false"] .collapse-toggle:before { content: "\e192"; } [data-toggle="collapse-widget"][data-collapse-closed="true"] .collapse-toggle:before { content: "\e191"; } [data-toggle="collapse-widget"][data-collapse-closed="true"] .widget-head { border-bottom: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } [data-toggle="collapse-widget"] .collapse:not(.list) { -webkit-transition: padding 0.1s ease; -moz-transition: padding 0.1s ease; -o-transition: padding 0.1s ease; transition: padding 0.1s ease; padding: 0px; } [data-toggle="collapse-widget"] .collapse:not(.list).in { padding: 15px; } .glyphicons.standard { width: 24px; height: 24px; padding: 0; } .glyphicons.standard i { display: block; height: 24px; } .glyphicons.standard i:before { color: #64625f; position: relative; top: auto; left: auto; } .glyphicons.standard:not(.disabled):hover i:before { color: #797979; } .glyphicons.standard.btn { padding: 4px; } .glyphicons.standard.btn.btn-small { padding: 2px 5px; width: auto; height: auto; } .glyphicons.standard.btn.btn-small i:before { top: auto; line-height: 22px; } .glyphicons.primary i:before { color: #4a8bc2; } .glyphicons.single { color: #4a8bc2; padding: 0 0 0 20px; } .glyphicons.single i:before { font-size: 13px; top: 4px; color: #4a8bc2; } .glyphicons.single + .single { margin-left: 8px; } .glyphicons.single.regular { color: #7c7c7c; } .glyphicons.single.regular i:before { color: #7c7c7c; } .glyphicons.text-error { color: #4a8bc2; } .glyphicons.text-error i:before { color: #4a8bc2; } .glyphicons.text-info { color: #5d92b3; } .glyphicons.text-info i:before { color: #5d92b3; } .glyphicons.text-success { color: #719d46; } .glyphicons.text-success i:before { color: #719d46; } .glyphicons.btn-action { width: 25px; height: 25px; padding: 0; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border-width: 1px; border-style: solid; vertical-align: middle; } .glyphicons.btn-action i:before { font-size: 14px; top: 5px; left: 5px; text-shadow: 0 1px 0 #fff; color: #fff !important; } .glyphicons.btn-action.btn-default i:before { color: #7c7c7c !important; } .glyphicons.btn-action.single { box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; border: none; background: none; margin-right: 10px; } .glyphicons.btn-icon { text-align: left; padding: 5px 7px 5px 40px; } .glyphicons.btn-icon i { float: left; } .glyphicons.btn-icon i:before { font-size: 15px; top: 0; left: 0; width: 33px; height: 23px; -webkit-border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; border-radius: 3px 0px 0px 3px; vertical-align: middle; padding: 7px 0 0; text-align: center; } .glyphicons.btn-icon.right { text-align: left; padding: 5px 0 5px 7px; } .glyphicons.btn-icon.right i:before { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; right: 0; left: auto; text-align: center; } .glyphicons.btn-large { padding: 10px 10px 10px 40px; font-weight: 600; } .glyphicons.btn-large i:before { top: 12px; left: 12px; font-size: 17px; } .glyphicons.btn-large.btn-icon i:before { top: 0; left: 0; height: 28px; padding: 12px 0 0; } .glyphicons.btn-small { padding: 2px 10px 2px 35px; } .glyphicons.btn-small i:before { padding: 5px 0 0; width: 28px; height: 19px; font-size: 14px; } .glyphicons.btn-mini { padding: 1px 6px 1px 33px; } .glyphicons.btn-mini i:before { padding: 5px 0 0; width: 26px; height: 17px; font-size: 13px; } .glyphicons.orange i:before { color: #EDB459; } .glyphicons.btn-default i:before { color: #9e9e9e; text-shadow: none; } h4.glyphicons { padding: 0 0 0 35px; display: block; } h4.glyphicons i:before { font-size: 22px; font-weight: normal; color: #575655; } h3.glyphicons, h2.glyphicons { padding: 0 0 0 45px; display: block; } h3.glyphicons i:before, h2.glyphicons i:before { font-size: 27px; font-weight: normal; left: 2px; top: 3px; color: #575655; } h3.glyphicons.cogwheels i:before, h2.glyphicons.cogwheels i:before { left: 5px; } .finances_summary .well { font-size: 16px; text-align: center; } .finances_summary .well strong { display: block; font-size: 22pt; color: #45494c; line-height: normal; } .finances_summary .glyphicons.standard i:before { color: #cccccc; } div.glyphicons { padding: 0 0 0 35px; } div.glyphicons i:before { color: #cccccc; } div.glyphicons.glyphicon-large { padding: 0 0 0 75px; } div.glyphicons.glyphicon-large i:before { font-size: 50px; left: 0; } div.glyphicons.glyphicon-large.group-column { padding: 0 0 0 85px; } div.glyphicons.glyphicon-large.group-column i:before { font-size: 45px; left: 12px; } div.glyphicons.glyphicon-top { padding: 0; text-align: center; } div.glyphicons.glyphicon-top i { display: block; position: relative; } div.glyphicons.glyphicon-top i:before { position: relative; left: auto; top: auto; } div.glyphicons.glyphicon-top.glyphicon-xlarge i { padding: 0 0 10px; } div.glyphicons.glyphicon-top.glyphicon-xlarge i:before { font-size: 70px; } div.glyphicons.glyphicon-primary i:before { color: #4a8bc2; } .widget-body-primary div.glyphicons i:before { color: #fff; } .social-large { height: 97px; } .social-large a { display: block; height: 77px; float: left; padding: 10px 19px; color: #d5d5d5; background: #ffffff; font-weight: bold; text-align: center; border-right: 1px solid #e5e5e5; text-decoration: none; } .social-large a i { display: block; position: relative; padding: 0 0 8px; } .social-large a i:before { display: block; text-align: center; top: auto; left: auto; position: relative; font-size: 50px; color: #d5d5d5; } .social-large a.active, .social-large a:hover { color: #fff; background: #4a8bc2; } .social-large a.active i:before, .social-large a:hover i:before { color: #fff; } .social-large a:last-child { border: none; } .social-large.social-large-2 a { display: inline-block; font-weight: 400; float: none; border: none; background: none; color: #444444; } .social-large.social-large-2 a i:before { color: #444444; } .social-large.social-large-2 a.active, .social-large.social-large-2 a:hover { color: #4a8bc2; } .social-large.social-large-2 a.active i:before, .social-large.social-large-2 a:hover i:before { color: #4a8bc2; } .widget-pinterest .widget-body { padding: 0; } .widget-pinterest .widget-body .description { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; line-height: 16px; padding: 15px; } .widget-pinterest .widget-body .thumb { padding: 0; border: none; } .widget-pinterest .widget-body .thumb img { width: 100%; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .jstwitter { position: relative; } .jstwitter .item { overflow: hidden; } .jstwitter .tweet-wrapper { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; line-height: 16px; padding: 15px; } .jstwitter .widget-body { padding: 0; } .jstwitter .item a { text-decoration: none; } .jstwitter .item img { width: 100%; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .jstwitter .item .thumb { padding: 0; border: none; } .jstwitter .item a:hover { text-decoration: underline; } .jstwitter .item .text { display: block; } .jstwitter .item .time, .jstwitter .item .user { font-style: italic; color: #999; } .jstwitter .item.active { display: block; } .rating { unicode-bidi: bidi-override; direction: rtl; } .rating.text-large { margin: 7px 0; } .rating span.star { font-family: FontAwesome; font-weight: normal; font-style: normal; display: inline-block; } .rating span.star:before { content: "\f006"; padding-right: 5px; } .rating:not(.read-only) span.star:hover { cursor: pointer; } .rating:not(.read-only) span.star:hover:before, .rating:not(.read-only) span.star:hover ~ span.star:before { content: "\f005"; color: #4a8bc2; } .rating span.star.active:before, .rating span.star.active ~ span.star:before { content: "\f005"; color: #4a8bc2; } .hero-unit { background: none; border: none; -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } .widget.widget-tabs { border-color: #dbdbdb; } .widget.widget-tabs .tab-content { padding: 0; } .widget.widget-tabs > .widget-head { background: #ffffff; border-color: #dbdbdb; overflow: visible; } .widget.widget-tabs > .widget-head ul { position: relative; overflow: visible; list-style: none; height: 35px; margin: 0; display: inline-block; } .widget.widget-tabs > .widget-head ul li { height: 35px; line-height: 35px; float: left; display: block; border-right: 1px solid #dbdbdb; } .widget.widget-tabs > .widget-head ul li a { width: auto; height: 35px; display: block; padding: 0 15px; position: relative; overflow: hidden; color: #7c7c7c; text-decoration: none; } .widget.widget-tabs > .widget-head ul li a i:before { left: 5px; top: 5px; color: #9d9d9d; text-shadow: 0 1px 0 #ffffff; } .widget.widget-tabs > .widget-head ul li a.glyphicons { padding: 0 15px 0 35px; } .widget.widget-tabs > .widget-head ul li.active { height: 36px; background: #fff; color: #505050; } .widget.widget-tabs > .widget-head ul li.active a { color: #505050; } .widget.widget-tabs > .widget-head ul li.active a i:before { color: #505050; } .widget.widget-tabs > .widget-head ul li.active:first-child { -webkit-border-radius: 5px 0 0 0; -moz-border-radius: 5px 0 0 0; border-radius: 5px 0 0 0; } .widget.widget-tabs > .widget-body.large { padding: 25px; } .widget.widget-tabs-double > .widget-head { height: 40px; } .widget.widget-tabs-double > .widget-head ul { height: 40px; } .widget.widget-tabs-double > .widget-head ul li, .widget.widget-tabs-double > .widget-head ul li.active { height: 40px; line-height: 20px; } .widget.widget-tabs-double > .widget-head ul li a, .widget.widget-tabs-double > .widget-head ul li.active a { height: 35px; padding: 5px 0 0; } .widget.widget-tabs-double > .widget-head ul li a span, .widget.widget-tabs-double > .widget-head ul li.active a span { display: block; line-height: 15px; } .widget.widget-tabs-double > .widget-head ul li a.glyphicons, .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons { padding: 5px 15px 0 38px; } .widget.widget-tabs-double > .widget-head ul li a.glyphicons i:before, .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons i:before { left: 4px; top: 9px; font-size: 20px; } .widget.widget-tabs-double-2 { border: none; } .widget.widget-tabs-double-2 > .widget-head { border: 1px solid #dbdbdb; border-bottom: none; height: 70px; } .widget.widget-tabs-double-2 > .widget-head.border-bottom { border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-double-2 > .widget-head ul { height: 70px; } .widget.widget-tabs-double-2 > .widget-head ul li { height: 70px; line-height: 20px; } .widget.widget-tabs-double-2 > .widget-head ul li a { -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; height: 70px; padding: 5px 0 0; text-decoration: none; text-align: center; } .widget.widget-tabs-double-2 > .widget-head ul li a span { display: block; line-height: 30px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons { padding: 0 15px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i { display: block; height: 24px; padding: 13px 0 0; line-height: 24px; text-align: center; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i:before { left: auto; top: auto; font-size: 24px; position: relative; -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; } .widget.widget-tabs-double-2 > .widget-head ul li.active { height: 70px; background: #ffffff; } .widget.widget-tabs-double-2 > .widget-head ul li.active a { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li.active a i:before { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li:hover { background: #ffffff; } .widget.widget-tabs-double-2 > .widget-head ul li:hover a { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head ul li:hover a i:before { color: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-body { padding: 0; } .widget.widget-tabs-double-2 .widget-body-regular { padding: 10px; border: 1px solid #dbdbdb; } .widget.widget-tabs-double-2 .widget-body-regular p:last-child { margin: 0; } .widget.widget-tabs-vertical .widget-head { border: none; height: auto; padding: 0; } .widget.widget-tabs-vertical .widget-head ul { display: block; height: auto; } .widget.widget-tabs-vertical .widget-head ul li { float: none; display: block; border-right: none; border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-vertical .widget-head ul li:last-child { border: none; } .widget.widget-tabs-vertical .widget-body { padding: 0; } .widget.widget-tabs-vertical .widget-body .tab-content { padding: 12px 15px; } .widget.widget-wizard-pills .widget-head { height: 60px; padding: 10px 0; } .widget.widget-wizard-pills .widget-head ul { height: 60px; } .widget.widget-wizard-pills .widget-head ul li { height: 60px; line-height: 60px; color: #7c7c7c; padding: 0 0 0 10px; border: none; position: relative; } .widget.widget-wizard-pills .widget-head ul li.status { height: 45px; padding: 15px 15px 0; font-weight: 600; } .widget.widget-wizard-pills .widget-head ul li.status span.r { display: block; line-height: 15px; } .widget.widget-wizard-pills .widget-head ul li a { height: 58px; line-height: 60px; padding: 0; width: 58px; text-align: center; background: #dbdbdb; border: 1px solid #dbdbdb; color: #c8c8c8; font-weight: 600; font-size: 16pt; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; position: relative; z-index: 2; } .widget.widget-wizard-pills .widget-head ul li.active { height: 60px; background: none; } .widget.widget-wizard-pills .widget-head ul li.active a { width: 60px; height: 60px; background: #f4f4f4; border: none; } .widget.widget-wizard-pills .widget-head ul li.primary a { width: 60px; height: 60px; background: #4a8bc2; border: none; color: #fff; } .widget.widget-wizard-pills .widget-head ul li:not(:first-child):before { position: absolute; background: #dbdbdb; height: 1px; left: 0; right: 0; top: 29px; display: block; content: ""; z-index: 1; } .widget.widget-wizard-pills .widget-head ul li.no-padding { padding: 0; } .widget.widget-tabs-2 { border-bottom: 1px solid #dbdbdb; } .widget.widget-tabs-2.border-bottom-none { border-bottom: none; } .widget.widget-tabs-2 > .widget-head { background: #fff; border: none; border-bottom: 1px solid #dbdbdb; padding: 0 10px; } .widget.widget-tabs-2 > .widget-head ul { border-color: #dbdbdb; } .widget.widget-tabs-2 > .widget-head ul li { border: none; } .widget.widget-tabs-2 > .widget-head ul li.active { background-color: #f7f7f7; background-image: -moz-linear-gradient(top, #f7f7f7, #ffffff); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f7f7), to(#ffffff)); background-image: -webkit-linear-gradient(top, #f7f7f7, #ffffff); background-image: -o-linear-gradient(top, #f7f7f7, #ffffff); background-image: linear-gradient(to bottom, #f7f7f7, #ffffff); background-repeat: repeat-x; } .widget.widget-tabs-2 > .widget-head ul li a { border: 1px solid #dddddd; border-bottom: none; border-right: none; color: #222; text-transform: uppercase; font-weight: 600; } .widget.widget-tabs-2 > .widget-head ul li:first-child a { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .widget.widget-tabs-2 > .widget-body { background: #fff; border: none; padding: 15px; } .widget.tabs-right .widget-head ul { float: right; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons { width: 38px; padding: 0; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons i { width: 38px; display: block; line-height: 35px; } .widget.widget-tabs-icons-only-2 > .widget-head ul li a.glyphicons i:before { width: 38px; text-align: center; left: auto; top: auto; position: relative; display: block; line-height: 35px; color: #cbcbcb; } .widget.widget-tabs-icons-only-2 > .widget-head ul li.active a.glyphicons i:before { color: #505050; } .widget.widget-tabs-icons-only .widget-body { padding: 0; } .widget.widget-tabs-icons-only .widget-body p:last-child { margin: 0; } .widget.widget-tabs-icons-only .widget-head { padding: 0 0 10px; } .widget.widget-tabs-icons-only .widget-head ul { display: block; overflow: hidden; position: relative; list-style: none; margin: 0; height: 30px; line-height: 30px; padding: 0; } .widget.widget-tabs-icons-only .widget-head ul li { color: #dadada; float: left; display: block; padding: 0 10px 0 0; font-size: 8pt; line-height: 30px; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons { width: 30px; height: 30px; padding: 0 3px; text-align: center; cursor: pointer; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons i { background: #e5e5e5; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; display: block; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; height: 30px; position: relative; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons i:before { position: relative; top: 0; left: 0; color: #64625f; font-size: 17px; line-height: 30px; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons:hover i { background: #dedede; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons.active i { background: #64625f; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons.active i:before { color: #fff; } .widget.widget-tabs-icons-only .widget-head ul li.glyphicons:last-child { padding: 0; } .tabsbar { height: 60px; border: 1px solid #dbdbdb; position: relative; overflow: hidden; margin: 0 0 15px; } .tabsbar ul { list-style: none; margin: 0; padding: 0; height: 60px; } .tabsbar ul li { float: left; display: block; height: 54px; border-right: 1px solid #dbdbdb; background: #fdfdfd; padding: 3px; } .tabsbar ul li a { display: block; height: 54px; line-height: 54px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); padding: 0 15px; color: #7c7c7c; text-decoration: none; -webkit-transition: background 1s ease; -moz-transition: background 1s ease; -o-transition: background 1s ease; transition: background 1s ease; } .tabsbar ul li a i { display: inline-block; float: left; width: 39px; height: 54px; } .tabsbar ul li a i:before { color: #7c7c7c; position: relative; top: auto; left: auto; line-height: 54px; text-align: center; } .tabsbar ul li.active a { background-color: #6ca1ce; background-image: -moz-linear-gradient(top, #83b0d5, #4a8bc2); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#83b0d5), to(#4a8bc2)); background-image: -webkit-linear-gradient(top, #83b0d5, #4a8bc2); background-image: -o-linear-gradient(top, #83b0d5, #4a8bc2); background-image: linear-gradient(to bottom, #83b0d5, #4a8bc2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff83b0d5', endColorstr='#ff4a8bc2', GradientType=0); color: #fff; } .tabsbar ul li.active a i:before { color: #fff; } .tabsbar.tabsbar-2 { height: 39px; } .tabsbar.tabsbar-2 ul { height: 39px; } .tabsbar.tabsbar-2 ul li { height: 39px; padding: 0; background: none; border: none; -webkit-transition: background 0.5s ease; -moz-transition: background 0.5s ease; -o-transition: background 0.5s ease; transition: background 0.5s ease; } .tabsbar.tabsbar-2 ul li a { height: 39px; line-height: 39px; background: none; -webkit-transition: color 0.5s ease; -moz-transition: color 0.5s ease; -o-transition: color 0.5s ease; transition: color 0.5s ease; } .tabsbar.tabsbar-2 ul li a i { height: 39px; width: 33px; } .tabsbar.tabsbar-2 ul li a i:before { line-height: 39px; font-size: 20px; -webkit-transition: color 1s ease; -moz-transition: color 1s ease; -o-transition: color 1s ease; transition: color 1s ease; } .tabsbar.tabsbar-2 ul li.active { background: #fff; } .tabsbar.tabsbar-2 ul li.active a { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li.active a i:before { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li:not(.active):hover a { color: #4a8bc2; } .tabsbar.tabsbar-2 ul li:not(.active):hover a i:before { color: #4a8bc2; } .tabsbar.tabsbar-2.active-fill ul li.active a { background: #4a8bc2; color: #fff; } .tabsbar.tabsbar-2.active-fill ul li.active a i:before { color: #fff; } .nav-tabs > li > a:hover, .nav-pills > li > a, .nav-pills > li > a:hover { background: #4a8bc2; border-bottom-color: #4a8bc2; color: #fff; } .nav-tabs { border-bottom-color: #4a8bc2; } .nav-tabs > li > a { padding: 6px 8px; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { background: #4a8bc2; border-top-color: #4a8bc2; border-left-color: #4a8bc2; border-right-color: #4a8bc2; color: #fff; font-weight: bold; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } .nav-pills a { cursor: pointer; } .nav-pills > .active > a, .nav-pills > .active > a:hover { background: #4a8bc2; color: #fff; } .nav-pills .glyphicons { padding-left: 25px; } .nav-pills .glyphicons i:before { position: relative; font-size: 14px; left: -10px; top: 2px; color: #F5EADB; font-weight: normal; text-shadow: none; } .tab-content { overflow: visible; padding: 0; } .btn { font-weight: 600; -webkit-border-radius: 2px 2px 2px 2px; -moz-border-radius: 2px 2px 2px 2px; border-radius: 2px 2px 2px 2px; } .btn-block { width: 100%; } .btn + .btn:not(.btn-block) { margin: 0 0 0 5px; } .input-append .btn + .btn, .input-prepend .btn + .btn { margin-left: -1px; } .btn-group .btn + .btn:not(.btn-block) { margin-left: -1px; } .btn-group.dropup .btn:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .btn-default { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75); color: rgba(0, 0, 0, 0.6); text-shadow: 0 1px 0 #fff; font-weight: 600; background-color: #efefef; background-image: -moz-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#e7e7e7)); background-image: -webkit-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: -o-linear-gradient(top, #f4f4f4, #e7e7e7); background-image: linear-gradient(to bottom, #f4f4f4, #e7e7e7); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4f4f4', endColorstr='#ffe7e7e7', GradientType=0); border: 1px solid #cecece; } .btn-group.open .btn-default.dropdown-toggle, .btn-default.disabled, .btn-default[disabled], .btn-default:hover, .btn-default:focus { background: #e8e8e8; } .btn-default:active, .btn-default.active { background: #e8e8e8; color: #fff; text-shadow: none; } .btn-default .caret { border-top-color: rgba(0, 0, 0, 0.5); } .btn-warning { background-color: #b6895e; background-image: -moz-linear-gradient(top, #be946b, #ab7a4b); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#be946b), to(#ab7a4b)); background-image: -webkit-linear-gradient(top, #be946b, #ab7a4b); background-image: -o-linear-gradient(top, #be946b, #ab7a4b); background-image: linear-gradient(to bottom, #be946b, #ab7a4b); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbe946b', endColorstr='#ffab7a4b', GradientType=0); border: 1px solid #88613b; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-warning.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-warning.dropdown-toggle, .btn-warning.disabled, .btn-warning[disabled], .btn-warning:hover, .btn-warning:focus { background: #ab7a4b; color: #fff; } .btn-warning:active, .btn-warning.active { background: #ab7a4b; color: #fff; } .btn-warning .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-info { background: #93B9D8; border: 1px solid #93B9D8; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-info.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-info.dropdown-toggle, .btn-info.disabled, .btn-info[disabled], .btn-info:hover, .btn-info:focus { background: #93B9D8; color: #fff; } .btn-info:active, .btn-info.active { background: #93B9D8; color: #fff; } .btn-info .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-danger { background-color: #ca4741; background-image: -moz-linear-gradient(top, #d3534c, #bd362f); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#d3534c), to(#bd362f)); background-image: -webkit-linear-gradient(top, #d3534c, #bd362f); background-image: -o-linear-gradient(top, #d3534c, #bd362f); background-image: linear-gradient(to bottom, #d3534c, #bd362f); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd3534c', endColorstr='#ffbd362f', GradientType=0); border: 1px solid #942a25; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-danger.glyphicons i:before { color: rgba(255, 255, 255, 0.5); text-shadow: none; } .btn-group.open .btn-danger.dropdown-toggle, .btn-danger.disabled, .btn-danger[disabled], .btn-danger:hover, .btn-danger:focus { background: #bd362f; color: #fff; } .btn-danger:active, .btn-danger.active { background: #bd362f; color: #fff; } .btn-danger .caret { border-top-color: rgba(255, 255, 255, 0.7); border-bottom-color: rgba(255, 255, 255, 0.7); } .btn-primary { background-color: #619aca; background-image: -moz-linear-gradient(top, #70a3cf, #4a8bc2); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#70a3cf), to(#4a8bc2)); background-image: -webkit-linear-gradient(top, #70a3cf, #4a8bc2); background-image: -o-linear-gradient(top, #70a3cf, #4a8bc2); background-image: linear-gradient(to bottom, #70a3cf, #4a8bc2); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff70a3cf', endColorstr='#ff4a8bc2', GradientType=0); border: 1px solid #3771a2; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-primary.glyphicons i:before { color: rgba(255, 255, 255, 0.4); text-shadow: none; } .btn-group.open .btn-primary.dropdown-toggle, .btn-primary.disabled, .btn-primary[disabled], .btn-primary:hover, .btn-primary:focus { background: #4a8bc2; color: #fff; } .btn-primary:active, .btn-primary.active { background: #4a8bc2; color: #fff; } .btn-primary .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } .btn-inverse { background-color: #53575d; background-image: -moz-linear-gradient(top, #5d6168, #45484d); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5d6168), to(#45484d)); background-image: -webkit-linear-gradient(top, #5d6168, #45484d); background-image: -o-linear-gradient(top, #5d6168, #45484d); background-image: linear-gradient(to bottom, #5d6168, #45484d); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5d6168', endColorstr='#ff45484d', GradientType=0); border: 1px solid #2d2f32; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-inverse.glyphicons i:before { color: #919293; text-shadow: none; } .btn-group.open .btn-inverse.dropdown-toggle, .btn-inverse.disabled, .btn-inverse[disabled], .btn-inverse:hover, .btn-inverse:focus { background: #45484d; color: #fff; } .btn-inverse:active, .btn-inverse.active { background: #45484d; color: #fff; } .btn-inverse .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-success { background-color: #6fa45f; background-image: -moz-linear-gradient(top, #79ae69, #609450); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#79ae69), to(#609450)); background-image: -webkit-linear-gradient(top, #79ae69, #609450); background-image: -o-linear-gradient(top, #79ae69, #609450); background-image: linear-gradient(to bottom, #79ae69, #609450); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff79ae69', endColorstr='#ff609450', GradientType=0); border: 1px solid #4b733e; color: #ffffff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .btn-success.glyphicons i:before { color: #a2bc9b; text-shadow: none; } .btn-group.open .btn-success.dropdown-toggle, .btn-success.disabled, .btn-success[disabled], .btn-success:hover, .btn-success:focus { background: #609450; color: #fff; } .btn-success:active, .btn-success.active { background: #609450; color: #fff; } .btn-success .caret { border-top-color: #fff; border-bottom-color: #fff; } .btn-group .btn-primary:not(.dropdown-toggle), .btn-group .btn-primary:not('[data-toggle*=""]') { margin-right: 2px; } .btn-group-vertical.block { display: block; } .btn-group.btn-block { padding: 0; position: relative; } .btn-group.btn-block .leadcontainer { left: 0; position: absolute; right: 29px; } .btn-group.btn-block .leadcontainer > .btn:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; text-align: left; } .btn-group.btn-block .dropdown-lead { box-sizing: border-box; width: 100%; } .btn-group.btn-block .dropdown-toggle { width: 30px; float: right; box-sizing: border-box; text-align: center; padding-left: 0; padding-right: 0; } .btn-icon-stacked { text-align: left; padding: 5px 5px 5px 45px; } .btn-icon-stacked i { display: block; width: 24px; height: 24px; position: absolute; left: 10px; top: 10px; } .btn-icon-stacked i:before { left: auto; top: auto; position: relative; text-align: center; } .btn-icon-stacked span { display: block; font-size: 13px; line-height: normal; } .btn-facebook { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); background-color: #728dc0; background-image: -moz-linear-gradient(top, #8098c6, #5d7cb6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#8098c6), to(#5d7cb6)); background-image: -webkit-linear-gradient(top, #8098c6, #5d7cb6); background-image: -o-linear-gradient(top, #8098c6, #5d7cb6); background-image: linear-gradient(to bottom, #8098c6, #5d7cb6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8098c6', endColorstr='#ff5d7cb6', GradientType=0); border: 1px solid #5d7cb6; } .btn-facebook i:before { color: #fff; } .btn-facebook:hover { background: #8098c6; color: #fff; } .btn-google { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); background-color: #b24343; background-image: -moz-linear-gradient(top, #bf4a4a, #9e3838); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#bf4a4a), to(#9e3838)); background-image: -webkit-linear-gradient(top, #bf4a4a, #9e3838); background-image: -o-linear-gradient(top, #bf4a4a, #9e3838); background-image: linear-gradient(to bottom, #bf4a4a, #9e3838); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbf4a4a', endColorstr='#ff9e3838', GradientType=0); border: 1px solid #9e3838; } .btn-google i:before { color: #fff; } .btn-google:hover { background: #bf4a4a; color: #fff; } .btn-toggle-code { position: absolute; bottom: 0; right: 0; z-index: 1000; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .btn-toggle-code.outside { bottom: -24px; } #demo_buttons .btn-block { max-width: 200px; margin: 0 auto; } #demo_buttons thead th { width: 25%; } .form-inline.small input, .form-inline.small select { margin: 0 5px 0 0; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; padding: 1px 5px; border-color: #d8d9da; color: #a7a7a7; } .form-inline.small select { padding: 1px 0; height: 23px; } .form-inline.small select:last-child { margin-right: 0; } .form-inline.small label { float: left; margin: 0 5px 0 0; display: block; } .form-inline.small .input-append.block { display: block; } .form-inline.small .input-append input { margin: 0; width: 85%; } .form-inline.small .input-append .add-on { padding: 1px 3px; margin: 0 0 0 -1px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; background: #fff; color: #d8d9da; border-color: #d8d9da; } .form-inline.small .input-append .add-on i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: #c1c1c1; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { font-size: 13px; } .uniformjs .radio .disabled input[type="radio"], .uniformjs .checkbox .disabled input[type="checkbox"] { margin-left: 0; } .uniformjs .radio, .uniformjs .checkbox { padding-left: 0; } .uniformjs .radio { height: auto; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 3px; } .uniformjs label.radio { margin-bottom: 0; } .uniformjs label.radio.inline { margin: 0; } .checkbox.inline { padding-bottom: 1px; } .uniformjs .radio span { margin: 2px 0 0; } .uniformjs .checkbox span { margin: -2px 0 0; } label, input, button, select, textarea { font-size: 13px; } .input-full input { width: 83%; height: 17px; } legend { line-height: normal; height: auto; font-size: 18px; margin: 0 0 6px; text-align: left; padding: 0; border: 0; color: #797979; } .btn-group > .btn, .btn-group > .dropdown-menu { font-size: 13px; } .strong { font-weight: bold; } input[type=text], input[type=password], select, textarea { border-color: #D8D9DA; color: #A7A7A7; } .control-label.center { text-align: center; } .form-actions { background: none; border: none; margin: 0; } .form-horizontal .form-actions { margin-top: 0; padding: 0; } .form-horizontal .controls { margin-left: 145px; } .form-horizontal .control-label { width: 125px; } .form-horizontal .control-group:last-child { margin: 0; } .input-prepend .add-on, .input-append .add-on { background: #fff; } .input-prepend .add-on i:before, .input-append .add-on i:before { color: #D0D1D1; } .input-prepend .add-on icon, .input-append .add-on icon { margin-top: 0; } .input-prepend .add-on.glyphicons, .input-append .add-on.glyphicons { background: #fff; } .input-prepend .add-on.glyphicons i:before, .input-append .add-on.glyphicons i:before { font-size: 14px; left: 7px; top: 7px; color: #D0D1D1; } .input-append .add-on.glyphicons i:before { left: 6px; } .ms-container .ms-selectable li.ms-hover, .ms-container .ms-selection li.ms-hover { background: #4a8bc2; } .ms-container .custom-header { height: 30px; line-height: 30px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); padding: 0 15px; font-weight: 600; border: 1px solid #dbdbdb; } .ms-container .custom-header:not(.custom-footer) { border-bottom: none; } .ms-container .custom-header.custom-footer { border-top: none; } .select2-container img.flag, .select2-drop img.flag { height: 10px; width: 15px; padding-right: 10px; } .select2-container .select2-choice { border-color: #dbdbdb; background: #fff; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .select2-container-multi .select2-choices { border-color: #dbdbdb; background: #fff; } .select2-container .select2-choice div { border-color: #d8d8d8; background: #fff; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .select2-drop { border-color: #d8d8d8; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .select2-container-multi .select2-choices .select2-search-choice { margin: 5px 0 3px 5px; border-color: #d8d8d8; } .datetimepicker table tr td span.active:hover, .datetimepicker table tr td span.active:hover:hover, .datetimepicker table tr td span.active.disabled:hover, .datetimepicker table tr td span.active.disabled:hover:hover, .datetimepicker table tr td span.active:active, .datetimepicker table tr td span.active:hover:active, .datetimepicker table tr td span.active.disabled:active, .datetimepicker table tr td span.active.disabled:hover:active, .datetimepicker table tr td span.active.active, .datetimepicker table tr td span.active:hover.active, .datetimepicker table tr td span.active.disabled.active, .datetimepicker table tr td span.active.disabled:hover.active, .datetimepicker table tr td span.active.disabled, .datetimepicker table tr td span.active:hover.disabled, .datetimepicker table tr td span.active.disabled.disabled, .datetimepicker table tr td span.active.disabled:hover.disabled, .datetimepicker table tr td span.active[disabled], .datetimepicker table tr td span.active:hover[disabled], .datetimepicker table tr td span.active.disabled[disabled], .datetimepicker table tr td span.active.disabled:hover[disabled], .datetimepicker table tr td.active:hover, .datetimepicker table tr td.active:hover:hover, .datetimepicker table tr td.active.disabled:hover, .datetimepicker table tr td.active.disabled:hover:hover, .datetimepicker table tr td.active:active, .datetimepicker table tr td.active:hover:active, .datetimepicker table tr td.active.disabled:active, .datetimepicker table tr td.active.disabled:hover:active, .datetimepicker table tr td.active.active, .datetimepicker table tr td.active:hover.active, .datetimepicker table tr td.active.disabled.active, .datetimepicker table tr td.active.disabled:hover.active, .datetimepicker table tr td.active.disabled, .datetimepicker table tr td.active:hover.disabled, .datetimepicker table tr td.active.disabled.disabled, .datetimepicker table tr td.active.disabled:hover.disabled, .datetimepicker table tr td.active[disabled], .datetimepicker table tr td.active:hover[disabled], .datetimepicker table tr td.active.disabled[disabled], .datetimepicker table tr td.active.disabled:hover[disabled] { background: #4a8bc2; } .bootstrap-timepicker-widget table td { font-size: 13px; } .bootstrap-timepicker > [class*="icon-"] { vertical-align: text-top; margin: 0 0 0 -22.5px; pointer-events: none; position: relative; cursor: pointer; } .table { margin: 0 0 15px; position: relative; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table.table-white { background: #fff; } .table th, .table td { border-top-color: #ebebeb; } .table td.center, .table th.center { text-align: center; } .table td.right, .table th.right { text-align: right; } .table-condensed { font-size: 10pt; } .table-condensed th, .table-condensed td { padding: 4px 10px; } .table-borderless th, .table-borderless td { border: none; } .table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { background-color: #fafafa; } .table-bordered { border-color: #dbdbdb; /* Reset rounded corners thead:first-child tr:first-child>th:first-child, tbody:first-child tr:first-child>td:first-child, tbody:first-child tr:first-child>th:first-child, thead:first-child tr:first-child>th:last-child, tbody:first-child tr:first-child>td:last-child, tbody:first-child tr:first-child>th:last-child, thead:last-child tr:last-child>th:first-child, tbody:last-child tr:last-child>td:first-child, tbody:last-child tr:last-child>th:first-child, tfoot:last-child tr:last-child>td:first-child, tfoot:last-child tr:last-child>th:first-child { .rounded(); } */ box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .table-bordered th, .table-bordered td { border-color: #dbdbdb; } .table-fill td { background: #F8F8F8; } .table .progress:last-child, .table .alert:last-child { margin: 0; } .table .shortRight { width: 25%; text-align: right; direction: rtl; text-indent: 10px; } .table-large-spacing td { padding: 20px 15px; } .table .thead td { padding: 8px; font-weight: bold; } .table-vertical-center td, .table-vertical-center th { vertical-align: middle; } .table-thead-simple thead th { background: none; border-left: none; border-right: none; border-top: none; border-bottom: 1px solid #ebebeb; color: #7c7c7c; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; text-shadow: none; text-transform: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .table-thead-simple.table-thead-border-none { border-top: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table-thead-simple.table-thead-border-none thead th { border-bottom: none; } .table-thead-simple.table-thead-border-none thead:first-child tr:first-child > th:last-child, .table-thead-simple.table-thead-border-none tbody:first-child tr:first-child > td:last-child, .table-thead-simple.table-thead-border-none tbody:first-child tr:first-child > th:last-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .table-primary { border-color: #dbdbdb; border-top: none; } .table-primary thead th { border-color: #4a8bc2; background-color: #4a8bc2; color: #fff; font-size: 14px; } .table-primary tbody td { color: #7c7c7c; background: #fafafa; border-width: 0px; } .table-primary tbody td.important { color: #4a8bc2; font-weight: 600; } .table-primary tbody td.actions { padding-right: 1px; } .table-primary.table-bordered tbody td { border-color: #dbdbdb; border-width: 1px; /* box-shadow: 0 0 0 1px #fff inset; -webkit-box-shadow: 0 0 0 1px #fff inset; -moz-box-shadow: 0 0 0 1px #fff inset; */ } .table-primary tbody tr:nth-child(odd) td, .table-primary tbody tr:nth-child(odd) th { background: #ffffff; } .table-primary tbody tr.selectable td { cursor: pointer; } .table-primary tbody tr.selected td, .table-primary tbody tr.selectable:hover td { background: #cecece; box-shadow: 0 0 0 1px #a8a8a8 inset; -webkit-box-shadow: 0 0 0 1px #a8a8a8 inset; -moz-box-shadow: 0 0 0 1px #a8a8a8 inset; } .table-pricing th, .table-pricing td { padding: 10px; } .table-pricing .plan { font-weight: 600; font-size: 14px; display: block; } .table-pricing .price { font-weight: 600; font-size: 24px; display: block; } .table-pricing .heading { font-weight: 600; font-size: 24px; vertical-align: middle; } .table-pricing .glyphicons.standard { vertical-align: middle; } .table-pricing .glyphicons.standard.circle_ok i:before { color: #9fc75f; } .table-pricing-2 th { padding: 12px 0; background: #64625f; font-size: 14px; color: #fff; border-color: #5a5855; } .table-pricing-2 .pricing td { padding: 12px 10px 10px; background: #e5e5e5; border-color: #cecece; } div.dataTables_filter label { float: none; } .row-fluid [class*="span"]:last-of-type .dataTables_filter { text-align: right; } #DataTables_Table_0_length select { width: 80px; } #DataTables_Table_0_info { padding: 0; } .dataTables_paginate { text-align: right; } .dataTables_length { padding-top: 5px; } .ColVis { margin: 0; } .google-visualization-table-div-page { margin: 10px 0 0 0 !important; } .google-visualization-table-div-page .a-d-e-h-g { padding: 0; border: none; margin: 0; } .google-visualization-table-div-page .a-d-e-f-g, .google-visualization-table-div-page .a-d-e-h-g { border-style: none; } .google-visualization-table-div-page .a-d-e-o-q .a-d-e-h-g { border: none; } .google-visualization-table-div-page .a-d-e { background: none; margin-left: 5px; } .google-visualization-table-div-page .a-d-e.a-d-e-o-p { margin-left: 0; } .google-visualization-table-table { width: 100%; border-collapse: separate; border-spacing: 0; border: 1px solid #e5e5e5; border-left: 0; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; font-size: 10pt; background: none !important; } .google-visualization-table-table td, .google-visualization-table-table .tableHeaderRow td { padding: 4px 10px; border: none; border-left: 1px solid #e5e5e5; border-top: 1px solid #e5e5e5; line-height: 20px; } .google-visualization-table-table .tableHeaderRow td { font-weight: bold; vertical-align: bottom; } .google-visualization-table-table tbody tr:nth-child(odd) td, .google-visualization-table-table tbody tr:nth-child(odd) td { background-color: rgba(255, 255, 255, 0.5); } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child > td:first-child, .google-visualization-table-table tbody:first-child tr:first-child > td:first-child { -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child > td:last-child, .google-visualization-table-table tbody:first-child tr:first-child > td:last-child { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-topright: 4px; } .google-visualization-table-table tbody:last-child tr:last-child > td:first-child { -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; } .google-visualization-table-table tbody:last-child tr:last-child > td:last-child { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; } .google-visualization-table-table .tableHeaderRow:first-child tr:first-child td, .google-visualization-table-table tbody:first-child tr:first-child td { border-top: 0; } @media only screen and (max-width: 979px) { .table-responsive.swipe-horizontal { border-collapse: collapse; border-spacing: 0; display: block; position: relative; width: 100%; border-left: 1px solid #DDD; } .table-responsive.swipe-horizontal th, .table-responsive.swipe-horizontal td { display: block; margin: 0; vertical-align: top; } .table-responsive.swipe-horizontal th { text-align: right; border-bottom: 0; border-left: 0; } .table-responsive.swipe-horizontal td { min-height: 1.25em; text-align: left; border-left: 0; border-right: 0; border-bottom: 0; border-top: 0; font-size: 13px; } .table-responsive.swipe-horizontal thead { display: block; float: left; } .table-responsive.swipe-horizontal thead tr { display: block; } .table-responsive.swipe-horizontal tbody { display: block; width: auto; position: relative; overflow-x: auto; white-space: nowrap; word-spacing: 0; letter-spacing: 0; font-size: 0; } .table-responsive.swipe-horizontal tbody tr { display: inline-block; vertical-align: top; border-left: 1px solid #e5e5e5; } .table-responsive.block { /* Force table to not be like tables anymore */ /* Hide table headers (but not display: none;, for accessibility) */ /* Label the data */ } .table-responsive.block table, .table-responsive.block thead, .table-responsive.block tbody, .table-responsive.block th, .table-responsive.block td, .table-responsive.block tr { display: block; } .table-responsive.block thead tr { position: absolute; top: -9999px; left: -9999px; } .table-responsive.block tr { border: 1px solid #e5e5e5; } .table-responsive.block td { /* Behave like a "row" */ border: none; border-bottom: 1px solid #e5e5e5; position: relative; padding-left: 50%; white-space: normal; text-align: left; } .table-responsive.block td:before { /* Now like a table header */ position: absolute; /* Top/left values mimic padding */ vertical-align: middle; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; text-align: right; font-weight: bold; } .table-responsive.block td:before { content: attr(data-title); } } .table-invoice td { border: none; padding: 0; } .table-projects .stats span { display: block; text-transform: uppercase; padding: 2px 0; } .table-projects .stats span.count { font-size: 18pt; font-weight: normal; color: #4a8bc2; } .label.large { height: 29px; padding: 0 10px; line-height: 29px; background: #e5e5e5; color: #64625f; text-shadow: 0 1px 0 #fff; } .label.label-primary { background: #4a8bc2; } .label.label-warning { background: #ab7a4b; } .label.label-important { background: #bd362f; } .label.label-success { background: #609450; } .label.label-block { display: block; } .tooltip-inner { background: #272a2c; color: #bab9b9; } .tooltip.bottom .tooltip-arrow { border-bottom-color: #272a2c; } .tooltip.top .tooltip-arrow { border-top-color: #272a2c; } .tooltip.left .tooltip-arrow { border-left-color: #272a2c; } .tooltip.right .tooltip-arrow { border-right-color: #272a2c; } .tooltip.left { margin-left: -13px; } #flotTip { white-space: nowrap; border: 1px solid #4a8bc2; padding: 3px 8px; background: #4a8bc2; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); position: absolute; z-index: 100; color: #fff; } .popover { border-color: #dbdbdb; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; } .popover .popover-title { font-weight: 600; padding: 0 10px; height: 29px; line-height: 29px; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); border-bottom: 1px solid #dbdbdb; position: relative; overflow: hidden; } #demo_popovers .popover { position: relative; display: block; width: 100%; margin: 0; } .modal-backdrop { z-index: 10000; background: #000000; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.9; filter: alpha(opacity=90); } .modal { z-index: 10001; border-color: #dbdbdb; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; background: #ffffff; } .modal .modal-header { padding: 0 10px; height: 29px; line-height: 29px; border-color: #dbdbdb; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .modal .modal-header h3 { font-size: 14px; } .modal .modal-header .close { position: absolute; top: 5px; right: 10px; padding: 0; margin: 0; opacity: 1; filter: alpha(opacity=100); color: #7c7c7c; text-shadow: 0 1px 0 #ffffff; } .modal .modal-body { padding: 10px; } .modal .modal-body p:last-child { margin: 0; } .modal .modal-footer { -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); border-color: #ebebeb; padding: 10px; background: #fafafa url("../images/pattern1.png") repeat; } .alert { margin: 0 0 15px; color: #fff; border-color: #ab7a4b; background: #ab7a4b; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); } .alert h4 { margin: 0 0 5px; color: #fff; } .alert.alert-error { background: #bd362f; color: #fff; border-color: #bd362f; } .alert.alert-error .close { color: #fff; } .alert.alert-error h4 { color: #fff; } .alert.alert-primary { background: #4a8bc2; color: #fff; border-color: #4a8bc2; } .alert.alert-primary .close { color: #fff; } .alert.alert-primary h4 { color: #fff; } .alert.alert-info { background: #dff3f8; color: #7399b9; border-color: #93b9d8; } .alert.alert-info .close { color: #7399b9; } .alert.alert-success { border-color: #609450; background: #609450; color: #fff; } .alert.alert-success .close, .alert.alert-success h4 { color: #fff; } .alert .close { opacity: 1; filter: alpha(opacity=100); color: #fff; } .progress { background: #ffffff; margin: 0 0 10px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .progress .bar { background: #e8e8e8; } .progress .bar.right { text-align: right; text-indent: 10px; direction: rtl; } .progress.white { background: #fff; } .progress.progress-info .bar { background: #93b9d8; } .progress.progress-success .bar { background: #609450; } .progress.progress-warning .bar { background: #ab7a4b; } .progress.progress-primary .bar { background: #4a8bc2; } .progress.progress-danger .bar { background: #bd362f; } .progress.progress-inverse .bar { background: #45484d; } .progress.progress-small { height: 15px; } .progress.progress-small .bar { font-size: 8px; line-height: 15px; } .progress.progress-small .bar.right { text-indent: 2px; } .progress.progress-mini { height: 5px; } .accordion { margin: 0 0 10px; position: relative; } .accordion .accordion-group { border-color: #dbdbdb; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .accordion .accordion-inner { font-size: 13px; background: #ffffff; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; border-color: #dbdbdb; } .accordion .accordion-heading .accordion-toggle { background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#f4f4f4)); background-image: -webkit-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: -o-linear-gradient(top, #fdfdfd, #f4f4f4); background-image: linear-gradient(to bottom, #fdfdfd, #f4f4f4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#fff4f4f4', GradientType=0); color: #7c7c7c; text-decoration: none; font-weight: 600; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; height: 29px; padding: 0 10px; line-height: 29px; } .accordion.accordion-2 { border: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-heading .accordion-toggle { border-bottom: 1px solid #dbdbdb; background: #ffffff; height: 38px; line-height: 38px; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons { padding: 0 10px; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons i { width: 30px; line-height: 38px; height: 38px; display: block; float: left; } .accordion.accordion-2 .accordion-heading .accordion-toggle.glyphicons i:before { font-size: 20px; color: #cccccc; top: auto; left: auto; width: 30px; line-height: 38px; height: 38px; position: relative; text-align: center; } .accordion.accordion-2 .accordion-body.in { border-bottom: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-group { border: none; margin: 0; } .accordion.accordion-2 .accordion-group:last-child .accordion-body.in { border-top: 1px solid #dbdbdb; } .accordion.accordion-2 .accordion-inner { border: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .pager li > a, .pager li > span { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .pagination ul { background: #ffffff; } .pagination ul > li > a:hover { box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; } .pagination ul > li > a:hover, .pagination ul > li.primary > a { border-color: #70a3cf; background: #4a8bc2; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .pagination ul > .active > a, .pagination ul > .active > span { border-color: #4a8bc2; background: #4a8bc2; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0, 0, 0, 0.2) inset; } .pagination ul > li > a, .pagination ul > li > span { border-color: #dbdbdb; background: #ffffff; } .pagination ul > .primary.disabled > a, .pagination ul > .disabled > a, .pagination ul > .disabled > span { border-color: #dbdbdb; background: #ffffff; color: #dddddd; font-weight: 600; text-shadow: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .pagination ul > .disabled > a:hover { border-color: #dbdbdb; background: #ffffff; color: #dddddd; text-shadow: none; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .gritter-item-wrapper .gritter-item p { margin: 0 0 10px; } .gritter-item-wrapper .gritter-item p:last-child { margin: 0; } .gritter-item-wrapper.gritter-primary .gritter-top { display: none; } .gritter-item-wrapper.gritter-primary .gritter-bottom { display: none; } .gritter-item-wrapper.gritter-primary .gritter-item { background: rgba(74, 139, 194, 0.9); padding: 10px 10px 15px; -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; color: #fff; } .gritter-item-wrapper.gritter-primary .gritter-item a { color: #fff; text-decoration: underline; } .notyfy_wrapper { border: none; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .notyfy_wrapper.notyfy_alert { background: #ffffff; } .notyfy_wrapper.notyfy_error { background: #bd362f; color: #fff; } .notyfy_wrapper.notyfy_success { background: #51a351; color: #fff; } .notyfy_wrapper.notyfy_warning { background: #74614f; color: #fff; } .notyfy_wrapper.notyfy_information { background: #57B7E2; color: #fff; } .notyfy_wrapper.notyfy_confirm { background: #ffffff; } .notyfy_wrapper.notyfy_primary { background: #4a8bc2; border: none; } .notyfy_wrapper.notyfy_primary, .notyfy_wrapper.notyfy_primary * { color: #fff; } .notyfy_wrapper.notyfy_default { background: #fafafa; } .notyfy_wrapper.notyfy_dark { background: #4a4846; } .notyfy_wrapper.notyfy_dark, .notyfy_wrapper.notyfy_dark * { color: #fff; } #notyfy_container_top { top: 0; left: 0; width: 100%; } #notyfy_container_top .notyfy_wrapper { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #content-notification .notyfy_wrapper { border: none; box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #content-notification .notyfy_wrapper p { margin: 0; } #content-notification .notyfy_wrapper .notyfy_message { padding: 15px 10px; } #content-notification .notyfy_wrapper.notyfy_default { background: #fafafa url("../images/pattern1.png") repeat; } #content-notification .notyfy_wrapper.notyfy_dark { background: #4a4846 url("../images/pattern1.png") repeat; } #content-notification .notyfy_wrapper.notyfy_primary { background: #4a8bc2 url("../images/pattern1.png") repeat; box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; -moz-box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; -webkit-box-shadow: inset 0 8px 8px -8px #0a141d, inset 0 -8px 8px -8px #2a567c; } .sliders-vertical span { height: 120px; float: left; margin: 15px; } .ui-slider-wrap { display: block; padding: 5px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; } .ui-slider-wrap .ui-slider { background: rgba(0, 0, 0, 0.1); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; } .ui-slider-wrap .ui-slider-horizontal { height: 10px; } .ui-slider-wrap .ui-slider-horizontal .ui-slider-handle { top: -5px; } .ui-slider-wrap .ui-slider-vertical .ui-slider-handle { left: -4px; } .ui-slider-wrap .ui-slider-handle { -webkit-border-radius: 50% 50% 50% 50%; -moz-border-radius: 50% 50% 50% 50%; border-radius: 50% 50% 50% 50%; background: #fff; border-width: 3px; border-style: solid; border-color: rgba(0, 0, 0, 0.3); width: 13px; height: 13px; box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); } .ui-slider-wrap .ui-slider-range { -webkit-border-radius: 10px 10px 10px 10px; -moz-border-radius: 10px 10px 10px 10px; border-radius: 10px 10px 10px 10px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; background: rgba(0, 0, 0, 0.2); } .ui-slider-wrap .slider-primary .ui-slider-handle { border-color: #4a8bc2; } .ui-slider-wrap .slider-primary .ui-slider-range { background: #4a8bc2; } .ui-slider-wrap .slider-warning .ui-slider-handle { border-color: #FBB450; } .ui-slider-wrap .slider-warning .ui-slider-range { background: #FBB450; } .ui-slider-wrap .slider-success .ui-slider-handle { border-color: #609450; } .ui-slider-wrap .slider-success .ui-slider-range { background: #609450; } .ui-slider-wrap .slider-inverse .ui-slider-handle { border-color: #3F4246; } .ui-slider-wrap .slider-inverse .ui-slider-range { background: #3F4246; } .ui-slider-wrap .slider-info .ui-slider-handle { border-color: #93B9D8; } .ui-slider-wrap .slider-info .ui-slider-range { background: #93B9D8; } .sliders-vertical { position: relative; margin: 0 auto; display: inline-block; } .sliders-vertical .ui-slider-wrap { margin: 0 5px; } .sliders-vertical .ui-slider { margin: 0; } .vertical-range-slider .ui-slider-wrap { display: inline-block; margin: 0 auto; } .sliderContainer { height: 35px; margin-top: 50px; width: 100%; } .sliderContainer select, .sliderContainer textarea, .sliderContainer input[type="text"], .sliderContainer input[type="password"], .sliderContainer input[type="datetime"], .sliderContainer input[type="datetime-local"], .sliderContainer input[type="date"], .sliderContainer input[type="month"], .sliderContainer input[type="time"], .sliderContainer input[type="week"], .sliderContainer input[type="number"], .sliderContainer input[type="email"], .sliderContainer input[type="url"], .sliderContainer input[type="search"], .sliderContainer input[type="tel"], .sliderContainer input[type="color"], .sliderContainer .uneditable-input { margin: 0; padding: 2px 4px; } .sliderContainer .ui-rangeSlider-withArrows .ui-rangeSlider-container { margin: 0 20px; } .sliderContainer .ui-rangeSlider-bar { background: #4a8bc2; height: 30px; margin: 0; } .sliderContainer .ui-rangeSlider-withArrows .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-noArrow .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-arrow, .sliderContainer .ui-rangeSlider-bar { box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); } .sliderContainer .ui-rangeSlider-container, .sliderContainer .ui-rangeSlider-arrow, .sliderContainer .ui-rangeSlider-label { background: #e5e5e5; color: #7c7c7c; font-size: 13px; } .sliderContainer .ui-rangeSlider-container { border-color: #dbdbdb; } .sliderContainer .ui-editRangeSlider .ui-rangeSlider-label { padding: 5px; } .sliderContainer .ui-rangeSlider-label-inner { border-top-color: #e5e5e5; } .sliderContainer .ui-rangeSlider-arrow { border-color: #dbdbdb; } .sliderContainer .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #4a8bc2; margin-right: -4px; } .sliderContainer .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #4a8bc2; margin-left: -4px; } .sliderContainer .ui-rangeSlider-arrow { width: 20px; } .sliderContainer .ui-rangeSlider .ui-ruler-scale { overflow: hidden; } .sliderContainer .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-inner { border-color: #dbdbdb; } .sliderContainer .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-label { color: #7c7c7c; } .sliderContainer .rangeslider-danger .ui-rangeSlider-bar { background: #bd362f; } .sliderContainer .rangeslider-danger .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #bd362f; } .sliderContainer .rangeslider-danger .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #bd362f; } .sliderContainer .rangeslider-success .ui-rangeSlider-bar { background: #609450; } .sliderContainer .rangeslider-success .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #609450; } .sliderContainer .rangeslider-success .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #609450; } .sliderContainer .rangeslider-warning .ui-rangeSlider-bar { background: #ab7a4b; } .sliderContainer .rangeslider-warning .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #ab7a4b; } .sliderContainer .rangeslider-warning .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #ab7a4b; } .widget-body-gray .sliderContainer .ui-rangeSlider-label-inner { border-top-color: #cecece; } .widget-body-gray .sliderContainer .ui-rangeSlider-container, .widget-body-gray .sliderContainer .ui-rangeSlider-arrow, .widget-body-gray .sliderContainer .ui-rangeSlider-label { background: #cecece; color: #4d4d4d; font-weight: 600; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #4d4d4d; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #4d4d4d; } .widget-body-gray .sliderContainer .ui-rangeSlider:not(.rangeslider-success) .ui-rangeSlider-bar { background: #4d4d4d; } .ui-widget-header { border-color: #4a8bc2; background: #4a8bc2; color: #fff; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background: #fafafa; border-color: #dddddd; color: #797979; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { background: #4a8bc2; color: #fff; } .ui-widget-content { border: none; } .ui-datepicker { padding: 10px; background: #fff; font-size: 12px; } .ui-datepicker .ui-widget-header { background: none; color: #4d4d4d; border: none; } .ui-datepicker .ui-datepicker-calendar { border-collapse: collapse; } .ui-datepicker .ui-datepicker-calendar thead { background: #cecece; } .ui-datepicker .ui-datepicker-calendar thead th { padding: .5em .3em; } .ui-datepicker .ui-datepicker-calendar tbody td { padding: 0; } .ui-datepicker .ui-datepicker-calendar tbody td span { text-align: center; } .ui-datepicker .ui-datepicker-calendar tbody td a { text-align: center; } .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-active { background: #4a8bc2; color: #fff; } .widget-body-gray .ui-datepicker { background: none; padding: 0; font-size: 12px; } .widget-body-gray .ui-datepicker .ui-widget-header { background: none; color: #4d4d4d; border: none; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar { border-collapse: collapse; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar thead { background: #cecece; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar thead th { padding: .5em .3em; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td { padding: 0; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td span { text-align: center; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a { text-align: center; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } .widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-active { background: #4a8bc2; color: #fff; } .ui-datepicker-inline { width: 100%; padding: 0; } .datepicker-inline { margin: 0 0 5px; } .wizard .wizard-head { background: #fff; border: 1px solid #e5e5e5; border-bottom: none; } .bwizard-steps .label { position: relative; top: -1px; margin: 0 5px 0 0; padding: 1px 5px 2px; } .bwizard-steps .active .label { background-color: #333; } .bwizard-steps { display: block; margin: 0; padding: 0; height: 40px; list-style: none; } .bwizard-steps li { display: block; float: left; position: relative; margin-right: 5px; line-height: 40px; height: 40px; background: #fafafa; } .bwizard-steps li a { display: block; height: 40px; line-height: 40px; padding: 0 20px 0 40px; } .bwizard-steps li.active { color: #fff; background: #4a8bc2; } .bwizard-steps li.active:after { border-left-color: #4a8bc2; } .bwizard-steps li.active a { color: #fff; cursor: default; } .bwizard-steps li:after { position: absolute; right: -20px; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fafafa; border-top: 20px inset transparent; content: ""; z-index: 2; } .bwizard-steps li:before { position: absolute; left: 0; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fff; border-top: 20px inset transparent; content: ""; } .bwizard-steps li:last-child { margin-right: 0; } .bwizard-steps li:first-child:before { border: none; } .bwizard-steps li:first-child a { padding-left: 20px; } .bwizard-steps a:hover { text-decoration: none; } .bwizard-steps.clickable li:not (.active ) { cursor: pointer; } .bwizard-steps.clickable li:hover:not (.active ) { background: #ccc; } .bwizard-steps.clickable li:hover:not (.active ):after { border-left-color: #ccc; } .bwizard-steps.clickable li:hover:not (.active ) a { color: #08c; } @media (max-width: 480px) { /* badges only on small screens */ .bwizard-steps li:after, .bwizard-steps li:before { border: none; } .bwizard-steps li, .bwizard-steps li.active, .bwizard-steps li:first-child, .bwizard-steps li:last-child { margin-right: 0; padding: 0; background-color: transparent; } } .layout-timeline { border-top-color: #d2d1d0 !important; border-top-width: 2px !important; } .layout-timeline > [class*="span"] ~ [class*="span"]:after { width: 2px; background: #d2d1d0; } .layout-timeline .media { margin: 0 0 15px; } .layout-timeline .media .media-body { padding: 10px 0 0; line-height: 17px; } .layout-timeline .media .media-body .author { font-size: 14px; } .layout-timeline .glyphicons.pencil { position: absolute; top: 15px; right: 15px; margin: 0; padding: 0; width: 20px; height: 20px; } .layout-timeline .glyphicons.pencil i:before { top: 0; right: 0; font-size: 17px; color: #cccccc; } .layout-timeline ul.timeline { list-style: none; margin: 0; padding: 15px 15px 15px 30px; } .layout-timeline ul.timeline > li { position: relative; padding: 0 0 15px; } .layout-timeline ul.timeline > li .date { width: 50px; padding: 5px 0; text-align: center; text-transform: uppercase; font-weight: 600; position: absolute; left: -70px; top: 0; z-index: 2; } .layout-timeline ul.timeline > li .date strong { display: block; line-height: 10px; padding: 3px 0 0; } .layout-timeline ul.timeline > li .type { position: absolute; text-transform: uppercase; color: #7c7c7c; font-weight: 600; padding: 0 35px 0 0; top: 15px; width: 100px; text-align: right; left: -195px; line-height: 24px; z-index: 2; } .layout-timeline ul.timeline > li .type i:before { left: auto; right: 0; color: #c6c6c5; } .layout-timeline ul.timeline > li .type .time { position: absolute; top: 24px; right: 0; color: #c6c6c5; } .layout-timeline ul.timeline > li .type:after { display: block; content: ""; position: absolute; right: -60px; top: 12px; width: 45px; height: 2px; background: #d2d1d0; } .layout-timeline ul.timeline > li .type:before { display: block; content: ""; position: absolute; right: -20px; top: 9px; width: 8px; height: 8px; background: #d2d1d0; } .layout-timeline ul.timeline > li .separator .type { top: 60px; } .layout-timeline ul.timeline > li .alert-gray { background: #f8f8f8; color: #7c7c7c; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; border: none; margin: 0; } .layout-timeline ul.timeline > li p.glyphicons { padding: 5px 0 5px 25px; } .layout-timeline ul.timeline > li p.glyphicons i:before { color: #dfdfdf; font-size: 17px; top: 5px; left: 0; } .layout-timeline ul.timeline > li .widget-body-gray .glyphicons i:before { color: #7c7c7c; } .layout-timeline ul.timeline > li .widget-body-gray a { color: #000; text-decoration: underline; } .layout-timeline ul.timeline > li .widget-body-gray strong { font-weight: 400; color: #000; } .layout-timeline ul.timeline > li.active .type { color: #4a8bc2; } .layout-timeline ul.timeline > li.active .type i:before { color: #4a8bc2; } .layout-timeline ul.timeline > li.active .type:before, .layout-timeline ul.timeline > li.active .type:after { background: #4a8bc2; } .layout-timeline ul.timeline > li.active:before { display: block; position: absolute; content: ""; top: 0; bottom: 0; left: -45px; width: 2px; z-index: 2; background: #4a8bc2; } .nav-timeline > li { margin: 0 0 5px; } .nav-timeline > li > a { background: #b3b3b3; border: none; margin: 0 !important; font-weight: 600; } .nav-timeline > li > a.glyphicons { padding: 8px 12px; } .nav-timeline > li > a.glyphicons i:before { position: absolute; left: auto; right: 8px; top: 8px; color: #fff; } .nav-timeline > li.active > a { background: #4a8bc2; } body.login { background: #f0f0f0; } body.login #login { padding: 40px 0 0; } body.login #login a:not(.btn) { color: #7c7c7c; text-decoration: underline; } body.login #login h1 { font-size: 20pt; text-align: center; display: block; padding: 0 0 20px; text-shadow: 0 1px 0 #ffffff; } body.login #login h1 i:before { position: relative; left: auto; top: auto; color: #7c7c7c; } body.login #login .wrapper { max-width: 354px; min-width: 300px; margin: 0 auto; position: relative; } body.login #login .wrapper.signup { max-width: 600px; } body.login #login .widget .widget-head .btn { margin: -4px 0 0 5px; } body.login #login .widget .widget-head div { font-size: 12px; } body.login #login .widget .widget-body { box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; background: #fafafa; } body.login #login .widget .widget-footer { height: 40px; line-height: 40px; margin: 15px 0 0; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #dbdbdb; } body.login #login .widget .widget-footer p { font-size: 12px; color: #7c7c7c; font-weight: 600; margin: 0; width: auto; float: none; padding: 0 10px 0 35px; display: block; height: 40px; line-height: 40px; } body.login #login .widget .widget-footer p i:before { top: 7px; left: 7px; } body.login #login label { font-size: 13px; color: #7c7c7c; font-weight: 600; } body.login #login .checkbox { margin-top: 5px; } body.login #login .password { float: right; font-size: 12px; font-weight: 400; } body.login #login input[type="text"], body.login #login input[type="password"] { font-size: 13px; height: auto; margin-bottom: 10px; padding: 5px 9px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0), inset -1px -1px 1px rgba(0, 0, 0, 0); -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; background: #fff; } body.login #login ::-webkit-input-placeholder { /* WebKit browsers */ color: #ccc; } body.login #login :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #ccc; } body.login #login ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #ccc; } body.login #login :-ms-input-placeholder { /* Internet Explorer 10+ */ color: #ccc; } body.login #login form { margin: 0; } body.login #login p { margin: 5px 0; } body.login #login p:first-child { margin: 0 0 10px; } body.login #login p:last-child { margin: 10px 0 0; } body.login #login .form-signin { position: relative; max-width: 600px; margin: 0 auto 20px; background-color: #fff; border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } body.login #login .form-signin .inner { padding: 20px; } .gallery ul { margin: 0; padding: 0; list-style: none; } .gallery ul li .thumb { position: relative; display: block; padding: 5px; margin-bottom: 10px; z-index: 1; overflow: hidden; } .gallery ul li.span2:nth-child(6n+7) { margin-left: 0; } .gallery ul li.span3:nth-child(4n+5) { margin-left: 0; } .gallery ul li.span4:nth-child(3n+4) { margin-left: 0; } .gallery.gallery-masonry li[class*="span"] { margin-left: 0; } .gallery.gallery-2 li .thumb { padding: 0; border-color: #4c4c4c; } .thumb { display: block; padding: 3px; border: 1px solid #dbdbdb; } .thumb, .thumb img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .thumbnails { margin: 0; } .thumbnails > li { margin-bottom: 15px; } .thumbnails > li .thumbnail { border-color: #dbdbdb; background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .thumbnails > li .thumbnail .caption { color: #7c7c7c; } .thumbnails > li a.thumbnail:hover, .thumbnails > li a.thumbnail:focus { border-color: #4a8bc2; -webkit-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); -moz-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); text-decoration: none; } .thumbnail { border-color: #dbdbdb; } a.thumbnail .caption { display: block; } a.thumbnail:hover, a.thumbnail:focus { border-color: #4a8bc2; -webkit-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); -moz-box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); box-shadow: 0 1px 4px rgba(74, 139, 194, 0.25); text-decoration: none; } .carousel { margin-bottom: 15px; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .carousel .carousel-control { font-size: 45px; opacity: 1; filter: alpha(opacity=100); background: #e5e5e5; color: #000; border-color: #000; text-shadow: 0 1px 0 #ffffff; } .carousel .carousel-control.right { text-align: center; } .carousel .carousel-inner { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; box-shadow: 0 3px 0 0 #f6f6f6; -moz-box-shadow: 0 3px 0 0 #f6f6f6; -webkit-box-shadow: 0 3px 0 0 #f6f6f6; border: 1px solid #dbdbdb; } .carousel .item { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .carousel .item img { min-width: 100%; } .carousel .carousel-caption { background: rgba(229, 229, 229, 0.95); text-shadow: 0 1px 0 #ffffff; } .carousel .carousel-caption p { color: #7c7c7c; } .carousel .carousel-caption h4 { font-size: 12pt; color: #000; font-weight: 600; } .carousel .carousel-caption a { text-decoration: underline; color: #000; } .carousel.carousel-1 { height: 223px; margin-bottom: 33px; background: #e5e5e5; } .carousel.carousel-1 .item { height: 223px; overflow: hidden; } .carousel.carousel-1 .item img { min-height: 100%; -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .carousel.carousel-1 .carousel-indicators { top: auto; bottom: -23px; right: 0; } .carousel.carousel-1 .carousel-indicators li { background: #96bcdc; } .carousel.carousel-1 .carousel-indicators li.active { background: #4a8bc2; } .carousel.carousel-1 .carousel-caption { height: 193px; background: #e5e5e5; top: 0; } /* Apply these styles only when #preview-pane has been placed within the Jcrop widget */ .jcrop-holder #preview-pane { display: block; position: absolute; z-index: 2000; top: 10px; right: 10px; padding: 6px; background-color: white; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); } /* The Javascript code will set the aspect ratio of the crop area based on the size of the thumbnail preview, specified here */ #preview-pane .preview-container { width: 125px; height: 85px; overflow: hidden; } .jcrop-holder { margin: 0 auto; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .jcrop-holder img { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } .fc-state-highlight { background: rgba(0, 0, 0, 0.2); } #external-events ul { list-style: none; margin: 0 0 20px; } #external-events li { margin: 0 0 5px; padding: 2px 5px; background: #4a8bc2; color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); font-size: .85em; cursor: pointer; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } #external-events li.glyphicons { padding: 2px 5px 2px 30px; display: block; } #external-events li.glyphicons i:before { font-size: 14px; color: #fff; top: 0; left: 0; background: rgba(0, 0, 0, 0.3); height: 24px; width: 24px; line-height: 24px; text-align: center; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; border-right: 1px solid rgba(255, 255, 255, 0.4); } .fc-header-title h2 { font-size: 16pt; line-height: 25px; } .fc-event-skin { border-color: #4a8bc2; background-color: #4a8bc2; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px 1px rgba(0, 0, 0, 0.2); } .fc-event-time, .fc-event-title { padding: 0 5px; } #calendar .btn-group .btn-primary { margin-right: 2px; } #guided-tour { position: fixed; z-index: 10000; top: 100px; right: -100%; width: 40px; height: 20px; padding: 10px; background: #4a8bc2; font-size: 14pt; color: #fff; text-align: center; box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); -moz-box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); -webkit-box-shadow: -1px 3px 5px rgba(0, 0, 0, 0.2); text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); cursor: pointer; -webkit-transition: width 0.5s ease; -moz-transition: width 0.5s ease; -o-transition: width 0.5s ease; transition: width 0.5s ease; overflow: hidden; white-space: nowrap; } #guided-tour .hide { float: left; height: 0; display: inline-block !important; opacity: 0; -webkit-transition: opacity 0.6s ease; -moz-transition: opacity 0.6s ease; -o-transition: opacity 0.6s ease; transition: opacity 0.6s ease; } #guided-tour #close-tour { display: none; position: absolute; top: 0; right: 0; bottom: 0; padding: 10px; color: rgba(0, 0, 0, 0.8); text-shadow: 0 1px 0 #fff; background: rgba(255, 255, 255, 0.6); } #guided-tour #close-tour:hover { background: rgba(255, 255, 255, 0.9); } #guided-tour:hover { width: 100px; padding: 10px 40px 10px 10px; } #guided-tour:hover .hide { padding: 0 5px 0 0; opacity: 1; height: auto; } #guided-tour:hover #close-tour { display: block; } #tlyPageGuideWrapper #tlyPageGuideMessages { margin: 0; width: 100%; height: auto; padding: 20px; z-index: 9000; } #tlyPageGuideWrapper #tlyPageGuideMessages div { margin: 0 90px 0 120px; } #tlyPageGuideWrapper #tlyPageGuideMessages h4 { color: #fff; } #tlyPageGuideWrapper #tlyPageGuideMessages p:last-child { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li { background: rgba(0, 0, 0, 0.4); } #tlyPageGuideWrapper #tlyPageGuide li:hover { background: rgba(0, 0, 0, 0.9); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:after { border-top-color: rgba(0, 0, 0, 0.3); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:after { border-bottom-color: rgba(0, 0, 0, 0.3); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:hover, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:hover, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:hover { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_right:hover:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_left:hover:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_top:hover:after { border-top-color: rgba(0, 0, 0, 0.9); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:hover { margin: 0; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide_bottom:hover:after { border-bottom-color: rgba(0, 0, 0, 0.9); } .tlypageguide_shadow:after { background: rgba(74, 139, 194, 0.2); box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); -moz-box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); -webkit-box-shadow: 0 0 1px 1px rgba(74, 139, 194, 0.7); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active { background: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_top:after { border-top-color: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_bottom:after { border-bottom-color: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_back, #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_fwd { top: 29px; } #tlyPageGuideWrapper #tlyPageGuideMessages span { top: 20px; background: #4a8bc2; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_close { background: #4a8bc2; } #docs_icons { text-align: center; padding: 0 20px; } #docs_icons .glyphicons { display: inline-block; *display: inline; *zoom: 1; width: 125px; font-size: 12px; line-height: 48px; overflow: hidden; color: #7c7c7c; } #docs_icons .glyphicons i:before { line-height: 55px !important; color: #4a8bc2; } .documentation ul ul { margin-bottom: 10px; } .documentation .span3 .menu.affix { position: fixed; top: 20px; width: 220px; } .documentation .show-grid { margin-top: 10px; margin-bottom: 20px; } .documentation .show-grid [class*="span"] { background-color: #535a5e; text-align: center; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; min-height: 40px; line-height: 40px; color: #fff; } .documentation .show-grid .show-grid { margin-top: 0; margin-bottom: 0; } .documentation .show-grid .show-grid [class*="span"] { background-color: #848d93; } #landing_1 .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; } #landing_1 .mosaic-line.mosaic-line-2 { line-height: 100px; height: 100px; } #landing_1 .mosaic-line.mosaic-line-2 h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; } #landing_1 .mosaic-line.mosaic-line-2 h2 span { color: #ccc; } #landing_1 .banner { background: #000; height: 321px; } #landing_1 .banner .banner-wrapper { height: 321px; position: relative; overflow: hidden; } #landing_1 .banner .banner-wrapper.banner-1 { margin: 0; background: #000; } #landing_1 .banner .banner-wrapper.banner-1 h3 { height: 46px; line-height: 46px; top: 65px; right: 27px; position: absolute; background: #fff; color: #4a8bc2; font-size: 22pt; font-weight: bold; padding: 0 15px; } #landing_1 .banner .banner-wrapper.banner-1 p { position: absolute; top: 126px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 370px; text-align: right; padding: 10px 15px; } #landing_1 .banner .banner-wrapper.banner-1 p a { text-decoration: underline; color: #4a8bc2; } #landing_1 .banner .banner-wrapper.banner-1 .btn { position: absolute; top: 232px; right: 27px; } #landing_2 .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; } #landing_2 .mosaic-line.mosaic-line-2 { line-height: 100px; height: 100px; } #landing_2 .mosaic-line.mosaic-line-2 h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; } #landing_2 .mosaic-line.mosaic-line-2 h2 span { color: #ccc; } #landing_2 .banner { background: #1f2123; height: 356px; } #landing_2 .banner .banner-wrapper { height: 356px; position: relative; overflow: hidden; } #landing_2 .banner .banner-wrapper.banner-1 { margin: 0; } #landing_2 .banner .banner-wrapper.banner-1 h3 { height: 46px; line-height: 46px; top: 55px; right: 27px; position: absolute; color: #fff; font-size: 27pt; font-weight: bold; text-shadow: none; padding: 0; } #landing_2 .banner .banner-wrapper.banner-1 p { position: absolute; top: 115px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 380px; text-align: right; padding: 10px 15px; } #landing_2 .banner .banner-wrapper.banner-1 p a { text-decoration: underline; color: #4a8bc2; } #landing_2 .banner .banner-wrapper.banner-1 .btn { position: absolute; bottom: 40px; } #landing_2 .banner .banner-wrapper.banner-1 .btn.btn-primary { right: 230px; } #landing_2 .banner .banner-wrapper.banner-1 .btn.btn-danger { right: 27px; bottom: 37px; } .container-960 { width: 960px; margin: 0 auto; } .separator-line { width: 100%; height: 1px; background: #e5e5e5; margin-bottom: 10px; } #choose-preview { padding: 50px 0; } #choose-preview h2 { margin-left: 0; } #choose-preview h2 span.text-primary { font-size: 26pt; font-weight: bold; top: auto; } #choose-preview .control-group { margin: 0 0 5px; } #choose-preview select { color: #000; } #choose-preview .heading-buttons { margin-bottom: 10px; } #choose-preview .box { padding: 10px; } #choose-preview .box .options { display: none; } #choose-preview .box .actions a { display: none; } #choose-preview .box .actions a.btn-active { display: inline-block; } #choose-preview .box h3 { text-transform: uppercase; margin: 0 0 12px; } #choose-preview .box.active { background: #ffffff; box-shadow: 0 3px 0 0 #dbdbdb; -moz-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-box-shadow: 0 3px 0 0 #dbdbdb; -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; border: 1px solid #dbdbdb; padding: 15px; } #choose-preview .box.active .options { display: block; } #choose-preview .box.active h3 { color: #000; text-shadow: 0 1px 0 #fff; } #choose-preview.style-dark .well { background: #ffffff; } #choose-preview.style-dark .box.active { background: #fafafa; border-color: #ebebeb; } #choose-preview.style-dark .box.active h3 { text-shadow: none; color: #fff; } #choose-preview.style-dark .box.active hr { border-top-color: #ebebeb; } html.front .menu-hidden .navbar.main { height: 99px; } html.front .navbar.main { height: auto; left: 0 !important; } html.front .navbar.main .secondary { height: 49px; line-height: 49px; position: relative; overflow: hidden; background-color: #275b87; border-bottom: 1px solid #346d9d; } html.front .navbar.main .secondary .appbrand { font-weight: 700; font-size: 25pt; color: #fff; text-decoration: none; padding: 0 8px; } html.front .navbar.main ul.topnav:first-of-type { border-left: none; margin-left: -8px; } html.front .navbar.main ul.topnav:first-of-type > li:first-of-type { border-left: none; } html.front .navbar.main li.search { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } html.front .navbar.main li.glyphs + .glyphs { padding-left: 0; } html.front .navbar.main li.glyphs { border: none; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; margin-left: 0; } html.front .navbar.main li.glyphs ul li .glyphicons { color: #538fc1; } html.front .navbar.main li.glyphs ul li .glyphicons i { display: inline-block; width: 32px; vertical-align: top; } html.front .navbar.main li.glyphs ul li.active .glyphicons, html.front .navbar.main li.glyphs ul li:hover .glyphicons { color: #fff; } html.front .navbar.main li.glyphs ul li.single, html.front .navbar.main li.glyphs ul li.single:last-child { -webkit-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } html.front #content { margin: 0; } html.front #footer { background: #1f2123; color: #919192; } html.front #footer a:not(.btn) { color: #4a8bc2; } html.front #footer .copy { background: #000; color: #2a2a2a; text-align: left; } html.front #footer .copy a { color: #2a2a2a; text-decoration: none; } html.front #footer .copy .appbrand { position: absolute; right: 10px; text-transform: uppercase; font-size: 15px; font-weight: 700; } html.front #footer .box-generic { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; background: #191a1c; border: none; } html.front #footer h4 { text-transform: uppercase; font-size: 15px; font-weight: 700; text-shadow: none; color: #fff; margin: 0 0 8px; } html.front #footer ul { list-style: none; margin: 0 0 15px; padding: 0; } html.front #footer ul li { display: block; background: #191a1c; margin: 0 0 1px; line-height: 30px; height: 30px; } html.front #footer ul li a { line-height: 30px; height: 30px; display: block; padding: 0 10px; } html.front #footer ul li:first-of-type { -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } html.front #footer ul li:last-of-type { margin: 0; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } html.front #footer ul.icons li { padding: 0 10px 0 35px; } html.front #footer ul.icons li i:before { top: 7px; left: 10px; } html.front #contact_gmap { height: 400px; } html.rtl { /* Buttons */ /* Typography */ /* Widgets */ /* Tabs */ /* Form elements */ /* Tables */ /* Menus */ /* UI elements */ /* Layout */ /* Timeline */ /* Login */ /* Front */ } html.rtl .btn-group.btn-block .leadcontainer { left: 29px; right: 0; } html.rtl .btn-group.btn-block .leadcontainer > .btn:first-child { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } html.rtl .btn-group.btn-block .dropdown-toggle { float: left; } html.rtl .btn-toggle-code { left: 0; right: auto; } html.rtl h3.glyphicons, html.rtl h2.glyphicons { padding: 0 45px 0 0; } html.rtl h3.glyphicons i:before, html.rtl h2.glyphicons i:before { left: auto; right: 2px; } html.rtl .widget .widget-head .heading { float: right; } html.rtl .widget .widget-head .heading.glyphicons { padding: 0 35px 0 0; } html.rtl .widget .widget-head .heading.glyphicons i:before { left: auto; right: 0; } html.rtl .widget .widget-head { padding: 0 0 0 15px; } html.rtl .widget .details.pull-right { float: left; } html.rtl .breadcrumb li.pull-right { float: left; } html.rtl [data-toggle="collapse-widget"] .collapse-toggle { float: left; } html.rtl .widget-activity ul.list li > span { float: right; } html.rtl .widget-activity ul.list li.double .activity-icon { margin-left: 10px; margin-right: 0; } html.rtl .widget-activity ul.list li:hover:after, html.rtl .widget-activity ul.list li.highlight:after { right: auto; left: 15px; } html.rtl .widget .widget-body.list ul li .count { float: left; } html.rtl .widget .widget-body.list ul li { text-align: right; } html.rtl .widget .widget-body.list ul li .badge { left: 8px; right: auto; } html.rtl .media > .pull-left { float: right; margin-left: 10px; margin-right: 0; } html.rtl .media > .pull-right { float: left; margin-right: 10px; margin-left: 0; } html.rtl .widget-chat .media small.author { left: auto; right: 0; } html.rtl .widget-chat .media.right small.author { left: 0; right: auto; } html.rtl .breadcrumb li a.glyphicons { padding: 0 25px 0 0; } html.rtl .breadcrumb li a.glyphicons i:before { left: auto; right: 3px; } html.rtl .widget.widget-tabs > .widget-head ul li { border-right: none; border-left: 1px solid #dbdbdb; } html.rtl .widget.widget-tabs > .widget-head ul li.active:first-child { -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } html.rtl .widget.widget-tabs > .widget-head ul li.active:last-child { -webkit-border-radius: 0 5px 0 0; -moz-border-radius: 0 5px 0 0; border-radius: 0 5px 0 0; } html.rtl .widget.widget-tabs > .widget-head ul li a.glyphicons { padding: 0 35px 0 15px; } html.rtl .widget.widget-tabs > .widget-head ul li a i:before { left: auto; right: 5px; } html.rtl .widget.widget-tabs-double > .widget-head ul li a.glyphicons, html.rtl .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons { padding: 5px 38px 0 15px; } html.rtl .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons { padding: 0 15px; } html.rtl .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i:before { right: auto; } html.rtl .widget.widget-tabs-vertical .widget-head { padding: 0; } html.rtl .widget.widget-tabs-vertical .widget-head ul li { border-left: none; } html.rtl .widget.widget-wizard-pills .widget-head { padding: 10px 10px 10px 0; } html.rtl .widget.widget-wizard-pills .widget-head ul li { border: none; } html.rtl .widget.widget-tabs-icons-only .widget-head ul.pull-right { float: left; } html.rtl .tabsbar.tabsbar-2 ul li a { padding: 0 10px 0 0; } html.rtl .tabsbar ul li a i { float: right; } html.rtl .bootstrap-select.btn-group, html.rtl .bootstrap-select.btn-group[class*="span"] { margin-right: 0; } html.rtl .select2-container-multi .select2-search-choice-close { left: auto; right: 3px; } html.rtl .select2-container-multi .select2-choices .select2-search-choice { padding: 3px 18px 3px 5px; } html.rtl .select2-container img.flag, html.rtl .select2-drop img.flag { padding: 0 0 0 10px; } html.rtl .radio, html.rtl .checkbox { padding: 0; } html.rtl div.checker { margin: 0 0 0 5px; } html.rtl div.dataTables_paginate { float: left; } html.rtl div.dataTables_filter label { float: left; } html.rtl .table td.right, html.rtl .table th.right { text-align: left; } html.rtl .navbar.main .topnav > li.search form input { padding: 0 10px 0 0; } html.rtl .navbar.main .topnav > li.open .dropdown-menu li > a.glyphicons, html.rtl .navbar.main .topnav > li.open .dropdown-menu li > a:hover.glyphicons, html.rtl .navbar.main .topnav > li.open .dropdown-menu li > span.glyphicons { padding: 0 35px 0 10px; } html.rtl .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, html.rtl .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:before, html.rtl .navbar.main .topnav > li.open.dd-1 .typeahead:before, html.rtl .navbar.main .topnav > li.open .dd-1 .typeahead:before { left: auto; right: 7px; } html.rtl .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after, html.rtl .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:after, html.rtl .navbar.main .topnav > li.open.dd-1 .typeahead:after, html.rtl .navbar.main .topnav > li.open .dd-1 .typeahead:after { left: auto; right: 8px; } html.rtl .navbar.main .topnav { border-left-color: #619aca; border-right-color: #346d9d; } html.rtl .navbar.main .topnav > li { float: right; } html.rtl .navbar.main .topnav > li:first-child { border-left: none; } html.rtl .navbar.main .topnav > li.search, html.rtl .navbar.main .topnav > li.glyphs { margin: 0; } html.rtl .navbar.main .topnav > li.glyphs { border-left-color: #619aca; border-right-color: #346d9d; box-shadow: -1px 0 0 0 #346d9d, 1px 0 0 0 #619aca; } html.rtl .navbar.main .topnav.pull-left { float: right; } html.rtl .navbar.main .topnav.pull-left:first-of-type { padding-right: 8px; } html.rtl .navbar.main .topnav.pull-right { float: left; } html.rtl .navbar.main .topnav.pull-right > li:last-child { border-left: 1px solid #346d9d; } html.rtl .navbar.main .topnav.open .dropdown-menu { right: auto; left: 0; } html.rtl .navbar.main .topnav .submenu-show.pull-right { left: auto !important; right: 100% !important; } html.rtl .navbar.main .topnav > li.open.dd-1 .dropdown-menu li .pull-right { float: left; } html.rtl .ribbon-wrapper { right: auto; left: -3px; } html.rtl .ribbon-wrapper .ribbon { -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); left: auto; right: -5px; } html.rtl .ribbon-wrapper .ribbon:after { right: auto; left: 0; } html.rtl .ribbon-wrapper .ribbon:before { left: auto; right: 0; } html.rtl .row-merge > [class*="span"] ~ [class*="span"] { margin-right: 0; } html.rtl .innerLR { padding: 0 15px; position: relative; } html.rtl .innerL { padding-right: 15px; padding-left: 0; position: relative; } html.rtl .innerR { padding-left: 15px; padding-right: 0; position: relative; } html.rtl .layout-timeline ul.timeline { padding: 15px 30px 15px 15px; } html.rtl .layout-timeline ul.timeline > li .date { right: -70px; left: auto; } html.rtl .layout-timeline ul.timeline > li .type { right: -195px; left: auto; text-align: left; padding: 0 0 0 35px; } html.rtl .layout-timeline ul.timeline > li .type i:before { left: 0; right: auto; } html.rtl .layout-timeline ul.timeline > li .type .time { right: auto; left: 0; } html.rtl .layout-timeline ul.timeline > li .type:before { left: -20px; right: auto; } html.rtl .layout-timeline ul.timeline > li .type:after { left: -60px; right: auto; } html.rtl .layout-timeline ul.timeline > li .glyphicons.pencil { right: auto; left: 15px; } html.rtl .layout-timeline ul.timeline > li p.glyphicons { padding: 5px 25px 5px 0; } html.rtl .layout-timeline ul.timeline > li p.glyphicons i:before { left: auto; right: 0; } html.rtl .layout-timeline .nav-timeline > li > a.glyphicons i:before { right: auto; left: 8px; } html.rtl body.login #login .password { float: left; } html.rtl.front .navbar.main .secondary .appbrand.pull-left { float: right; } html.rtl.front .navbar.main .topnav.pull-right > li:last-child { border-left: none; } html.rtl.front .navbar.main .secondary ul.topnav:first-of-type { margin-left: 0; padding-left: 8px; } /* Responsive */ @media (max-width: 767px) { html.rtl .layout-timeline ul.timeline { padding: 0; } html.rtl .layout-timeline ul.timeline > li .date { right: auto; } html.rtl .layout-timeline ul.timeline > li .type { right: auto; margin: 0 0 10px 60px; } html.rtl .layout-timeline ul.timeline > li .type .time { left: -40px; right: auto; } html.rtl .navbar.main .topnav > li { float: none; border-right: none; } html.rtl .navbar.main .topnav > li.search { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } html.rtl .navbar.main .topnav > li.search form button { right: auto; left: 0; } html.rtl .navbar.main .topnav, html.rtl .navbar.main .topnav.pull-left, html.rtl .navbar.main .topnav.pull-right { float: none; } html.rtl .navbar.main .topnav.pull-left:first-of-type { padding-right: 0; } html.rtl .navbar.main .topnav.open .dropdown-menu { right: auto; left: auto; } html.rtl .navbar.main .topnav .submenu-show.pull-right { left: auto !important; right: auto !important; } } .lt-ie9 .widget .widget-body.list ul li { border-bottom: 1px solid #efefef; } .lt-ie9 .navbar.main .btn-navbar { float: left; } .lt-ie9 .navbar.main .topnav { position: absolute; top: 0; right: 0; height: 42px; } .lt-ie9 .navbar.main .topnav .dropdown > a .caret { margin-top: 0; top: 8px; left: 5px; } .lt-ie9 .heading-buttons h1.glyphicons, .lt-ie9 .heading-buttons h2.glyphicons, .lt-ie9 .heading-buttons h3.glyphicons, .lt-ie9 .heading-buttons h4.glyphicons, .lt-ie9 .heading-buttons h5.glyphicons, .lt-ie9 .heading-buttons h6.glyphicons { float: left; } .lt-ie9 #guided-tour .hide { display: none !important; } .lt-ie9 .filter-bar div div.input-append .add-on { width: 24px; padding-right: 0; padding-left: 0; } .lt-ie9 .filter-bar div div.input-append .add-on i { width: 24px; height: 24px; display: block; vertical-align: middle; line-height: 24px; } .lt-ie9 .filter-bar div div.input-append .add-on i:before { width: 24px; height: 24px; line-height: 24px; top: auto; } .lt-ie9 .navbar.main .topnav .dropdown > a .caret { vertical-align: middle; margin-top: 0; top: 0; } .lt-ie9 #footer { background: #222; } .lt-ie9 #footer .copy { background: #111; } .lt-ie9 .ribbon-wrapper { display: none; } /* Desktop wide */ @media (min-width: 1200px) { .navbar.main .topnav > li.search form input { width: 155px; } } /* Desktop regular */ @media (min-width: 980px) and (max-width: 1199px) { body > .container-fluid.fixed { width: 98%; margin: 10px auto 10px; } .hidden-desktop-1 { display: none !important; } } /* Tablet */ @media (max-width: 979px) and (min-width: 768px) { .navbar.main .topnav > li.search { margin-left: 10px !important; } } @media (max-width: 979px) { body > .container-fluid.fixed { width: auto; border: none; margin: 0; } } @media (max-width: 767px) { body { padding: 0; } .nav-tabs > li > a { font-size: 10pt; } .nav-tabs > li > a, .nav-pills > li > a { padding-left: 5px; padding-right: 5px; } .documentation .span3 .menu.affix { position: relative; top: 0; width: auto; } .phone-margin.bottom { margin: 0 0 10px; } .well { padding: 5px; } .widget .widget-body { padding: 5px; } .widget.margin-bottom-none { margin-bottom: 10px; } .widget.widget-tabs .widget-head { height: auto; padding: 0; } .widget.widget-tabs .widget-head ul { display: block; border-right: none; height: auto; } .widget.widget-tabs .widget-head ul li { float: none; display: block; width: 100%; } .widget.widget-tabs-icons-only .widget-head { height: auto; } .widget-activity ul.list li > span.ellipsis { max-width: 60%; } .widget-activity ul.list li.double > span.ellipsis { max-width: 75%; } .widget-gallery .nav { display: none; } .widget-gallery.widget-gallery-slide .gallery { width: auto; } .widget-chat .media .pull-left, .widget-chat .media .pull-right { margin: 0; } .widget-chat .chat-controls { height: 60px; } .widget-chat { padding-bottom: 90px !important; } .widget-chat .media small.author { position: relative; top: auto; left: auto; right: auto; width: auto; } .widget-chat .media small.date { border: none; } .tabsbar, .tabsbar.tabsbar-2 { height: auto; } .tabsbar ul, .tabsbar.tabsbar-2 ul { height: auto; } .layout-timeline ul.timeline { padding: 0; } .layout-timeline ul.timeline > li .date { position: relative; left: auto; display: block; top: auto; } .layout-timeline ul.timeline > li .type { position: relative; left: auto; top: auto; width: auto; margin: 0 60px 10px 0; } .layout-timeline ul.timeline > li .type:before, .layout-timeline ul.timeline > li .type:after { display: none; } .layout-timeline ul.timeline > li .type .time { top: 0; right: -40px; } .layout-timeline ul.timeline > li.active .separator .type { margin-bottom: 0; } .layout-timeline ul.timeline > li .separator .type { top: auto; } .widget-activity ul.list { margin: 0; } .widget.widget-tabs.widget-tabs-icons-only-2 .widget-head { height: 35px; } .widget.widget-tabs.widget-tabs-icons-only-2 .widget-head ul li { float: left; width: auto; } .media { text-align: center; } .media .pull-left, .media .pull-right { border: none; padding-bottom: 0; margin: 0; } .media img.pull-left, .media img.pull-right { display: inline-block; } .media blockquote { padding: 0; text-align: center; } .media blockquote.pull-right p, .media blockquote.pull-right small { text-align: center; } .menu-right #menu { left: 0; right: auto; } .menu-right.menu-hidden #content { margin: 0; } .row-merge > [class*="span"] ~ [class*="span"] { width: auto; } .row-merge > [class*="span"] ~ [class*="span"]:after { display: none; } .row-merge.border-top, .row-merge ~ .row-merge { border-top: 1px solid #e5e5e5; } body.login #login { padding: 50px 5px; } #gritter-notice-wrapper { display: none !important; } .topnav .dropdown.submenu { height: auto; } .topnav .dropdown.submenu .submenu-show { position: relative; margin: 0 !important; top: auto !important; left: auto !important; right: auto !important; } .navbar.main { height: auto; } .navbar.main .topnav { border-left: none; border-right: none; float: none; } .navbar.main .topnav > li { float: none; border-top: 1px solid #346d9d; border-bottom: 1px solid #619aca; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px; } .navbar.main .topnav > li.search form { position: relative; } .navbar.main .topnav > li.search form input { width: 90%; } .navbar.main .topnav > li.search form button { position: absolute; right: 0; top: 0; } .navbar.main .topnav > li:first-child { border-top: none; } .navbar.main .topnav > li .dropdown.submenu .dropdown-menu { position: relative; float: none; display: block !important; padding: 0; border: none; border-top: 1px solid #f3f3f3; } .navbar.main .topnav:first-of-type > li:first-child { margin-left: 38px; } .menu-hidden .navbar.main { height: 50px; overflow: hidden; } .container-960 { width: auto; } #landing_1 [class*="span"] { padding: 0 5px; } #landing_1 .banner-1 { height: auto; } #landing_1 .banner-1 .item { height: auto; } #landing_1 .banner-1 .item img { min-height: 0; height: auto; } #landing_1 .banner-1 .carousel-caption { height: auto; } #landing_1 .banner { height: auto; } #landing_1 .banner .banner-wrapper { height: auto; } #landing_1 .banner .banner-wrapper.banner-1 h3, #landing_1 .banner .banner-wrapper.banner-1 p, #landing_1 .banner .banner-wrapper.banner-1 .btn { position: relative; top: auto; right: auto; } #landing_1 .banner .banner-wrapper.banner-1 .btn { display: block; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } #landing_1 .banner .banner-wrapper.banner-1 p { margin: 0 0 5px; text-align: center; } #landing_1 .banner .banner-wrapper.banner-1 h3 { font-size: 12pt; line-height: 46px; text-align: center; } .social-large { height: auto; } .social-large a { float: none; display: block; border: none; border-bottom: 1px solid #e5e5e5; } .social-large a:last-child { border: none; } #content .heading-mosaic { height: auto !important; padding-top: 10px; padding-bottom: 10px; line-height: normal !important; } } @media (max-width: 480px) { h1, h2, h3 { line-height: 30px; font-size: 18pt; } h3.glyphicons i:before, h2.glyphicons i:before { font-size: 24px; top: 3px; left: 5px; } .heading-buttons .buttons { margin-top: 10px; float: none; padding: 0 10px; text-align: center; } .heading-buttons .buttons .btn { margin: 0; float: none; } .separator { padding: 5px 0; margin: 0; } .table-condensed th, .table-condensed td { padding: 4px 5px; } p.glyphicons { padding: 5px 0 10px 55px; } p.glyphicons i:before { color: #D67170; font-size: 35pt; top: 0; } p.glyphicons.right { padding: 0 55px 0 0; } } @media (max-width: 320px) { .nav-tabs > li, .nav-tabs > li > a, .nav-tabs > li > a:hover { display: block; float: none; margin: 0 0 -1px; border-color: #4a8bc2; } .nav-tabs > li:hover { border-color: #4a8bc2; } .nav-tabs > li, .nav-tabs > li > a { border-color: #E0D5C6; background: #F5EADB; -webkit-border-radius: 0 0 0 0; -moz-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } } #themer { position: fixed; top: 40%; left: 50%; z-index: 1000; width: 260px; margin: -50px 0 0 -130px; text-align: left; } #themer.in { overflow: visible; } #themer .close2 { position: absolute; background: #DDD; color: #222; font-weight: 600; height: 20px; top: 14px; right: 10px; line-height: 20px; text-align: center; font-size: 10pt; padding: 0 10px; cursor: pointer; } #themer .wrapper { position: relative; background: #292c2e; border: 1px solid #2f3235; padding: 15px; color: #fafafa; } #themer .wrapper hr.separator { margin: 10px 0; border-top-color: #5e646b; border-bottom-color: #2f3235; } #themer .wrapper h4 { border-bottom: 1px solid #5e6060; padding: 0 0 10px; margin: 0 0 10px; color: #fff; } #themer .wrapper h4 span { color: #5e6060; font-weight: normal; font-size: 10pt; text-shadow: none; } #themer .wrapper .btn { margin: 0; } #themer .wrapper #themer-getcode-less { margin: 0 0 0 5px; } #themer .wrapper ul { margin: 0; list-style: none; } #themer .wrapper ul li { height: 25px; line-height: 25px; position: relative; } #themer .wrapper ul li .minicolors { line-height: normal; border: none; top: 2px; right: 0; position: absolute; } #themer .wrapper ul li .minicolors input { border: none; height: 20px; width: 69px; background: #414649; color: #fff; font-size: 9pt; padding: 0 5px; margin: 0 0 1px; } #themer .wrapper ul li .minicolors-swatch { cursor: pointer; width: 18px; height: 18px; } #themer .wrapper ul li .minicolors-panel { z-index: 10000; top: 24px; } #themer .wrapper ul li .minicolors-position-left .minicolors-panel { left: -152px; } #themer .wrapper ul li select { position: absolute; top: 3px; right: 0; width: 100px; height: 20px; line-height: normal; padding: 0; margin: 0; font-size: 9pt; background: #414649; border: 1px solid #2F3235; color: #fff; } #themer .wrapper ul li .link { text-decoration: underline; cursor: pointer; } #themer .wrapper ul li label { margin: 0; line-height: 25px; font-size: 9pt; } #themer .wrapper ul li label input { margin: 0 0 1px; } #themer .wrapper ul li.advanced { display: none; } #themer.themer-advanced .wrapper ul li.advanced { display: block; } /* Reset box-shadow & borders */ .btn, .widget, .widget-body, .widget-stats, .carousel-inner, .layout-timeline ul.timeline > li .date, .box-generic, .well, .accordion, .accordion .accordion-group { border: none !important; box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } /* Reset box-shadow only */ select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input, .dropdown-menu, .table-bordered, .progress .bar, .popover { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } /* Reset borders only */ .chat-controls, .thumb, .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a, .navbar.main .topnav > li.glyphs ul, .navbar.main .topnav > li.glyphs ul li, .navbar.main .topnav > li.search form, .navbar.main .topnav > li.open.dd-1 .dropdown-menu, .menubar, .widget.widget-tabs-double-2 > .widget-head, .widget.widget-tabs-double-2 .widget-body-regular { border: none !important; } /* Reset padding only */ .thumb { padding: 0 !important; } /* Reset rounded corners */ #content, .navbar.main, #wrapper, .btn, .widget, .widget-head, .widget-body, .carousel, .carousel-inner, .carousel .item, .carousel .item img, .nav li a, .thumb, .thumb img, .widget-stats, .label, .badge, .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a, .navbar.main .topnav > li.glyphs ul, .navbar.main .topnav > li.glyphs ul li, .navbar.main .topnav > li.search form, .layout-timeline ul.timeline > li .date, select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input, .alert, .tooltip-inner, .popover, .pagination ul, .pagination a, .pager a, .table-bordered, .table-bordered td, .table-bordered th, .box-generic, .progress, .progress .bar, .add-on, .well, .accordion .accordion-heading .accordion-toggle, .accordion .accordion-inner, pre, .widget-chat .chat-controls { -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } /* Fix top menu */ .navbar.main .topnav > li > a { padding: 0 10px; } .navbar.main .topnav > li > a.glyphicons { padding: 0 9px; } .navbar.main .topnav > li.glyphs ul li { padding: 0; } .navbar.main .topnav > li.glyphs ul li .glyphicons { padding: 5px 10px; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px 0 8px 10px; } .navbar.main .topnav > li.active:last-child, .navbar.main .topnav > li:hover:last-child, .navbar.main .topnav > li.open:last-child { padding: 8px 9px 8px 10px; } .navbar.main .topnav > li.search { padding: 8px 9px !important; } .navbar.main .topnav > li.glyphs { padding: 8px !important; } .navbar.main .topnav > li.active > a.glyphicons, .navbar.main .topnav > li:hover > a.glyphicons, .navbar.main .topnav > li.open > a.glyphicons { padding: 6px 9px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after { display: none; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu { top: 45px; } /* input + btn */ .input-append .btn { height: 30px; } .fileupload-new .input-append .btn-file { height: 22px; } /* tabs */ .tabsbar ul li a { background: #f9f9f9; } .tabsbar:not(.tabsbar-2) ul li.active a { background: #4a8bc2; } .widget.widget-tabs-double-2 > .widget-head { border-bottom: 1px solid #dbdbdb !important; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/css/font-awesome-ie7.css ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large { font-size: 1.3333333333333333em; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; vertical-align: middle; } .nav [class^="icon-"], .nav [class*=" icon-"] { vertical-align: inherit; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; } .nav [class^="icon-"].icon-large, .nav [class*=" icon-"].icon-large { vertical-align: -25%; } .nav-pills [class^="icon-"].icon-large, .nav-tabs [class^="icon-"].icon-large, .nav-pills [class*=" icon-"].icon-large, .nav-tabs [class*=" icon-"].icon-large { line-height: .75em; margin-top: -7px; padding-top: 5px; margin-bottom: -5px; padding-bottom: 4px; } .btn [class^="icon-"].pull-left, .btn [class*=" icon-"].pull-left, .btn [class^="icon-"].pull-right, .btn [class*=" icon-"].pull-right { vertical-align: inherit; } .btn [class^="icon-"].icon-large, .btn [class*=" icon-"].icon-large { margin-top: -0.5em; } a [class^="icon-"], a [class*=" icon-"] { cursor: pointer; } .icon-glass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-music { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-envelope-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-film { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th-large { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-power-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-road { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-download-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-inbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-repeat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rotate-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-headphones { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-qrcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-barcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-book { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bookmark { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-print { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-camera { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-text-height { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-text-width { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-center { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-justify { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-indent-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-indent-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facetime-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-map-marker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-adjust { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tint { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-step-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fast-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pause { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fast-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-step-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eject { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-question-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-info-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-screenshot { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ban-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-full { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-small { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-asterisk { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exclamation-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gift { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-leaf { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fire { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eye-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eye-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-warning-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plane { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-random { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-magnet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-retweet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-shopping-cart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-horizontal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bar-chart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-twitter-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facebook-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-camera-retro { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cogs { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comments { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-up-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-down-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-heart-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linkedin-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pushpin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-external-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trophy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-upload-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lemon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-phone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unchecked { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bookmark-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-phone-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-credit-card { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rss { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hdd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bullhorn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bell { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-certificate { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-briefcase { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fullscreen { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-beaker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cut { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-copy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paper-clip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paperclip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-save { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sign-blank { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reorder { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-ul { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-ol { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-strikethrough { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-magic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pinterest-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-google-plus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-google-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-columns { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-envelope { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-undo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rotate-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-legal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dashboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comment-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comments-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-umbrella { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paste { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lightbulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-user-md { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stethoscope { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-suitcase { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bell-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-coffee { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-food { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-text-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hospital { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ambulance { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-medkit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fighter-jet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-beer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-h-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus-sign-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tablet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mobile-phone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-blank { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-quote-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-spinner { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-close-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-open-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-expand-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-smile { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-frown { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-meh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gamepad { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-keyboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag-checkered { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-terminal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reply-all { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-reply-all { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half-full { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-location-arrow { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-code-fork { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlink { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-question { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exclamation { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-subscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eraser { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-puzzle-piece { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-microphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-microphone-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-shield { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-calendar-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fire-extinguisher { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rocket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-maxcdn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-html5 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-css3 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-anchor { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlock-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bullseye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ellipsis-horizontal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ellipsis-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rss-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ticket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus-sign-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-level-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-level-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-edit-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-external-link-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-compass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse-top { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-expand { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eur { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-euro { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gbp { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-usd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dollar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-inr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rupee { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-jpy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-yen { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cny { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-renminbi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-krw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-won { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-btc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitcoin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-alphabet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-alphabet-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-attributes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-attributes-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-order { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-order-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-xing { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-xing-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dropbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stackexchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flickr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-adn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitbucket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitbucket-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tumblr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tumblr-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-apple { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-windows { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-android { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linux { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dribble { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-skype { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-foursquare { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trello { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-female { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-male { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gittip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bug { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-vk { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-weibo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-renren { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/css/font-awesome.css ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../font/fontawesome-webfont.eot?v=3.2.0'); src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.0') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.0') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.0') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.0') format('svg'); font-weight: normal; font-style: normal; } /* FONT AWESOME CORE * -------------------------- */ [class^="icon-"], [class*=" icon-"] { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; -webkit-font-smoothing: antialiased; *margin-right: .3em; } [class^="icon-"]:before, [class*=" icon-"]:before { text-decoration: inherit; display: inline-block; cursor: default; speak: none; } /* makes the font 33% larger relative to the icon container */ .icon-large:before { vertical-align: -10%; font-size: 1.3333333333333333em; } /* makes sure icons active on rollover in links */ a [class^="icon-"], a [class*=" icon-"] { display: inline; } /* increased font size for icon-large */ [class^="icon-"].icon-fixed-width, [class*=" icon-"].icon-fixed-width { display: inline-block; width: 1.1428571428571428em; text-align: right; padding-right: 0.2857142857142857em; } [class^="icon-"].icon-fixed-width.icon-large, [class*=" icon-"].icon-fixed-width.icon-large { width: 1.4285714285714286em; } .icons-ul { margin-left: 2.142857142857143em; list-style-type: none; } .icons-ul > li { position: relative; } .icons-ul .icon-li { position: absolute; left: -2.142857142857143em; width: 2.142857142857143em; text-align: center; line-height: inherit; } [class^="icon-"].hide, [class*=" icon-"].hide { display: none; } .icon-muted { color: #eeeeee; } .icon-light { color: #ffffff; } .icon-dark { color: #333333; } .icon-border { border: solid 1px #eeeeee; padding: .2em .25em .15em; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .icon-2x { font-size: 2em; } .icon-2x.icon-border { border-width: 2px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .icon-3x { font-size: 3em; } .icon-3x.icon-border { border-width: 3px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .icon-4x { font-size: 4em; } .icon-4x.icon-border { border-width: 4px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .icon-5x { font-size: 5em; } .icon-5x.icon-border { border-width: 5px; -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; } .pull-right { float: right; } .pull-left { float: left; } [class^="icon-"].pull-left, [class*=" icon-"].pull-left { margin-right: .3em; } [class^="icon-"].pull-right, [class*=" icon-"].pull-right { margin-left: .3em; } /* BOOTSTRAP SPECIFIC CLASSES * -------------------------- */ /* Bootstrap 2.0 sprites.less reset */ [class^="icon-"], [class*=" icon-"] { display: inline; width: auto; height: auto; line-height: normal; vertical-align: baseline; background-image: none; background-position: 0% 0%; background-repeat: repeat; margin-top: 0; } /* more sprites.less reset */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], .nav-list > .active > a > [class^="icon-"], .nav-list > .active > a > [class*=" icon-"], .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], .dropdown-submenu:hover > a > [class*=" icon-"] { background-image: none; } /* keeps Bootstrap styles with and without icons the same */ .btn [class^="icon-"].icon-large, .nav [class^="icon-"].icon-large, .btn [class*=" icon-"].icon-large, .nav [class*=" icon-"].icon-large { line-height: .9em; } .btn [class^="icon-"].icon-spin, .nav [class^="icon-"].icon-spin, .btn [class*=" icon-"].icon-spin, .nav [class*=" icon-"].icon-spin { display: inline-block; } .nav-tabs [class^="icon-"], .nav-pills [class^="icon-"], .nav-tabs [class*=" icon-"], .nav-pills [class*=" icon-"], .nav-tabs [class^="icon-"].icon-large, .nav-pills [class^="icon-"].icon-large, .nav-tabs [class*=" icon-"].icon-large, .nav-pills [class*=" icon-"].icon-large { line-height: .9em; } .btn [class^="icon-"].pull-left.icon-2x, .btn [class*=" icon-"].pull-left.icon-2x, .btn [class^="icon-"].pull-right.icon-2x, .btn [class*=" icon-"].pull-right.icon-2x { margin-top: .18em; } .btn [class^="icon-"].icon-spin.icon-large, .btn [class*=" icon-"].icon-spin.icon-large { line-height: .8em; } .btn.btn-small [class^="icon-"].pull-left.icon-2x, .btn.btn-small [class*=" icon-"].pull-left.icon-2x, .btn.btn-small [class^="icon-"].pull-right.icon-2x, .btn.btn-small [class*=" icon-"].pull-right.icon-2x { margin-top: .25em; } .btn.btn-large [class^="icon-"], .btn.btn-large [class*=" icon-"] { margin-top: 0; } .btn.btn-large [class^="icon-"].pull-left.icon-2x, .btn.btn-large [class*=" icon-"].pull-left.icon-2x, .btn.btn-large [class^="icon-"].pull-right.icon-2x, .btn.btn-large [class*=" icon-"].pull-right.icon-2x { margin-top: .05em; } .btn.btn-large [class^="icon-"].pull-left.icon-2x, .btn.btn-large [class*=" icon-"].pull-left.icon-2x { margin-right: .2em; } .btn.btn-large [class^="icon-"].pull-right.icon-2x, .btn.btn-large [class*=" icon-"].pull-right.icon-2x { margin-left: .2em; } /* EXTRAS * -------------------------- */ /* Stacked and layered icon */ .icon-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: -35%; } .icon-stack [class^="icon-"], .icon-stack [class*=" icon-"] { display: block; text-align: center; position: absolute; width: 100%; height: 100%; font-size: 1em; line-height: inherit; *line-height: 2em; } .icon-stack .icon-stack-base { font-size: 2em; *line-height: 1em; } /* Animated rotating icon */ .icon-spin { display: inline-block; -moz-animation: spin 2s infinite linear; -o-animation: spin 2s infinite linear; -webkit-animation: spin 2s infinite linear; animation: spin 2s infinite linear; } a .icon-spin { display: inline-block; text-decoration: none; } @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); } 100% { -moz-transform: rotate(359deg); } } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @-o-keyframes spin { 0% { -o-transform: rotate(0deg); } 100% { -o-transform: rotate(359deg); } } @-ms-keyframes spin { 0% { -ms-transform: rotate(0deg); } 100% { -ms-transform: rotate(359deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } /* Icon rotations and mirroring */ .icon-rotate-90:before { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); } .icon-rotate-180:before { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); } .icon-rotate-270:before { -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); } .icon-flip-horizontal:before { -webkit-transform: scale(-1, 1); -moz-transform: scale(-1, 1); -ms-transform: scale(-1, 1); -o-transform: scale(-1, 1); transform: scale(-1, 1); } .icon-flip-vertical:before { -webkit-transform: scale(1, -1); -moz-transform: scale(1, -1); -ms-transform: scale(1, -1); -o-transform: scale(1, -1); transform: scale(1, -1); } /* ensure rotation occurs inside anchor tags */ a .icon-rotate-90:before, a .icon-rotate-180:before, a .icon-rotate-270:before, a .icon-flip-horizontal:before, a .icon-flip-vertical:before { display: inline-block; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .icon-glass:before { content: "\f000"; } .icon-music:before { content: "\f001"; } .icon-search:before { content: "\f002"; } .icon-envelope-alt:before { content: "\f003"; } .icon-heart:before { content: "\f004"; } .icon-star:before { content: "\f005"; } .icon-star-empty:before { content: "\f006"; } .icon-user:before { content: "\f007"; } .icon-film:before { content: "\f008"; } .icon-th-large:before { content: "\f009"; } .icon-th:before { content: "\f00a"; } .icon-th-list:before { content: "\f00b"; } .icon-ok:before { content: "\f00c"; } .icon-remove:before { content: "\f00d"; } .icon-zoom-in:before { content: "\f00e"; } .icon-zoom-out:before { content: "\f010"; } .icon-power-off:before, .icon-off:before { content: "\f011"; } .icon-signal:before { content: "\f012"; } .icon-cog:before { content: "\f013"; } .icon-trash:before { content: "\f014"; } .icon-home:before { content: "\f015"; } .icon-file-alt:before { content: "\f016"; } .icon-time:before { content: "\f017"; } .icon-road:before { content: "\f018"; } .icon-download-alt:before { content: "\f019"; } .icon-download:before { content: "\f01a"; } .icon-upload:before { content: "\f01b"; } .icon-inbox:before { content: "\f01c"; } .icon-play-circle:before { content: "\f01d"; } .icon-rotate-right:before, .icon-repeat:before { content: "\f01e"; } .icon-refresh:before { content: "\f021"; } .icon-list-alt:before { content: "\f022"; } .icon-lock:before { content: "\f023"; } .icon-flag:before { content: "\f024"; } .icon-headphones:before { content: "\f025"; } .icon-volume-off:before { content: "\f026"; } .icon-volume-down:before { content: "\f027"; } .icon-volume-up:before { content: "\f028"; } .icon-qrcode:before { content: "\f029"; } .icon-barcode:before { content: "\f02a"; } .icon-tag:before { content: "\f02b"; } .icon-tags:before { content: "\f02c"; } .icon-book:before { content: "\f02d"; } .icon-bookmark:before { content: "\f02e"; } .icon-print:before { content: "\f02f"; } .icon-camera:before { content: "\f030"; } .icon-font:before { content: "\f031"; } .icon-bold:before { content: "\f032"; } .icon-italic:before { content: "\f033"; } .icon-text-height:before { content: "\f034"; } .icon-text-width:before { content: "\f035"; } .icon-align-left:before { content: "\f036"; } .icon-align-center:before { content: "\f037"; } .icon-align-right:before { content: "\f038"; } .icon-align-justify:before { content: "\f039"; } .icon-list:before { content: "\f03a"; } .icon-indent-left:before { content: "\f03b"; } .icon-indent-right:before { content: "\f03c"; } .icon-facetime-video:before { content: "\f03d"; } .icon-picture:before { content: "\f03e"; } .icon-pencil:before { content: "\f040"; } .icon-map-marker:before { content: "\f041"; } .icon-adjust:before { content: "\f042"; } .icon-tint:before { content: "\f043"; } .icon-edit:before { content: "\f044"; } .icon-share:before { content: "\f045"; } .icon-check:before { content: "\f046"; } .icon-move:before { content: "\f047"; } .icon-step-backward:before { content: "\f048"; } .icon-fast-backward:before { content: "\f049"; } .icon-backward:before { content: "\f04a"; } .icon-play:before { content: "\f04b"; } .icon-pause:before { content: "\f04c"; } .icon-stop:before { content: "\f04d"; } .icon-forward:before { content: "\f04e"; } .icon-fast-forward:before { content: "\f050"; } .icon-step-forward:before { content: "\f051"; } .icon-eject:before { content: "\f052"; } .icon-chevron-left:before { content: "\f053"; } .icon-chevron-right:before { content: "\f054"; } .icon-plus-sign:before { content: "\f055"; } .icon-minus-sign:before { content: "\f056"; } .icon-remove-sign:before { content: "\f057"; } .icon-ok-sign:before { content: "\f058"; } .icon-question-sign:before { content: "\f059"; } .icon-info-sign:before { content: "\f05a"; } .icon-screenshot:before { content: "\f05b"; } .icon-remove-circle:before { content: "\f05c"; } .icon-ok-circle:before { content: "\f05d"; } .icon-ban-circle:before { content: "\f05e"; } .icon-arrow-left:before { content: "\f060"; } .icon-arrow-right:before { content: "\f061"; } .icon-arrow-up:before { content: "\f062"; } .icon-arrow-down:before { content: "\f063"; } .icon-mail-forward:before, .icon-share-alt:before { content: "\f064"; } .icon-resize-full:before { content: "\f065"; } .icon-resize-small:before { content: "\f066"; } .icon-plus:before { content: "\f067"; } .icon-minus:before { content: "\f068"; } .icon-asterisk:before { content: "\f069"; } .icon-exclamation-sign:before { content: "\f06a"; } .icon-gift:before { content: "\f06b"; } .icon-leaf:before { content: "\f06c"; } .icon-fire:before { content: "\f06d"; } .icon-eye-open:before { content: "\f06e"; } .icon-eye-close:before { content: "\f070"; } .icon-warning-sign:before { content: "\f071"; } .icon-plane:before { content: "\f072"; } .icon-calendar:before { content: "\f073"; } .icon-random:before { content: "\f074"; } .icon-comment:before { content: "\f075"; } .icon-magnet:before { content: "\f076"; } .icon-chevron-up:before { content: "\f077"; } .icon-chevron-down:before { content: "\f078"; } .icon-retweet:before { content: "\f079"; } .icon-shopping-cart:before { content: "\f07a"; } .icon-folder-close:before { content: "\f07b"; } .icon-folder-open:before { content: "\f07c"; } .icon-resize-vertical:before { content: "\f07d"; } .icon-resize-horizontal:before { content: "\f07e"; } .icon-bar-chart:before { content: "\f080"; } .icon-twitter-sign:before { content: "\f081"; } .icon-facebook-sign:before { content: "\f082"; } .icon-camera-retro:before { content: "\f083"; } .icon-key:before { content: "\f084"; } .icon-cogs:before { content: "\f085"; } .icon-comments:before { content: "\f086"; } .icon-thumbs-up-alt:before { content: "\f087"; } .icon-thumbs-down-alt:before { content: "\f088"; } .icon-star-half:before { content: "\f089"; } .icon-heart-empty:before { content: "\f08a"; } .icon-signout:before { content: "\f08b"; } .icon-linkedin-sign:before { content: "\f08c"; } .icon-pushpin:before { content: "\f08d"; } .icon-external-link:before { content: "\f08e"; } .icon-signin:before { content: "\f090"; } .icon-trophy:before { content: "\f091"; } .icon-github-sign:before { content: "\f092"; } .icon-upload-alt:before { content: "\f093"; } .icon-lemon:before { content: "\f094"; } .icon-phone:before { content: "\f095"; } .icon-unchecked:before, .icon-check-empty:before { content: "\f096"; } .icon-bookmark-empty:before { content: "\f097"; } .icon-phone-sign:before { content: "\f098"; } .icon-twitter:before { content: "\f099"; } .icon-facebook:before { content: "\f09a"; } .icon-github:before { content: "\f09b"; } .icon-unlock:before { content: "\f09c"; } .icon-credit-card:before { content: "\f09d"; } .icon-rss:before { content: "\f09e"; } .icon-hdd:before { content: "\f0a0"; } .icon-bullhorn:before { content: "\f0a1"; } .icon-bell:before { content: "\f0a2"; } .icon-certificate:before { content: "\f0a3"; } .icon-hand-right:before { content: "\f0a4"; } .icon-hand-left:before { content: "\f0a5"; } .icon-hand-up:before { content: "\f0a6"; } .icon-hand-down:before { content: "\f0a7"; } .icon-circle-arrow-left:before { content: "\f0a8"; } .icon-circle-arrow-right:before { content: "\f0a9"; } .icon-circle-arrow-up:before { content: "\f0aa"; } .icon-circle-arrow-down:before { content: "\f0ab"; } .icon-globe:before { content: "\f0ac"; } .icon-wrench:before { content: "\f0ad"; } .icon-tasks:before { content: "\f0ae"; } .icon-filter:before { content: "\f0b0"; } .icon-briefcase:before { content: "\f0b1"; } .icon-fullscreen:before { content: "\f0b2"; } .icon-group:before { content: "\f0c0"; } .icon-link:before { content: "\f0c1"; } .icon-cloud:before { content: "\f0c2"; } .icon-beaker:before { content: "\f0c3"; } .icon-cut:before { content: "\f0c4"; } .icon-copy:before { content: "\f0c5"; } .icon-paperclip:before, .icon-paper-clip:before { content: "\f0c6"; } .icon-save:before { content: "\f0c7"; } .icon-sign-blank:before { content: "\f0c8"; } .icon-reorder:before { content: "\f0c9"; } .icon-list-ul:before { content: "\f0ca"; } .icon-list-ol:before { content: "\f0cb"; } .icon-strikethrough:before { content: "\f0cc"; } .icon-underline:before { content: "\f0cd"; } .icon-table:before { content: "\f0ce"; } .icon-magic:before { content: "\f0d0"; } .icon-truck:before { content: "\f0d1"; } .icon-pinterest:before { content: "\f0d2"; } .icon-pinterest-sign:before { content: "\f0d3"; } .icon-google-plus-sign:before { content: "\f0d4"; } .icon-google-plus:before { content: "\f0d5"; } .icon-money:before { content: "\f0d6"; } .icon-caret-down:before { content: "\f0d7"; } .icon-caret-up:before { content: "\f0d8"; } .icon-caret-left:before { content: "\f0d9"; } .icon-caret-right:before { content: "\f0da"; } .icon-columns:before { content: "\f0db"; } .icon-sort:before { content: "\f0dc"; } .icon-sort-down:before { content: "\f0dd"; } .icon-sort-up:before { content: "\f0de"; } .icon-envelope:before { content: "\f0e0"; } .icon-linkedin:before { content: "\f0e1"; } .icon-rotate-left:before, .icon-undo:before { content: "\f0e2"; } .icon-legal:before { content: "\f0e3"; } .icon-dashboard:before { content: "\f0e4"; } .icon-comment-alt:before { content: "\f0e5"; } .icon-comments-alt:before { content: "\f0e6"; } .icon-bolt:before { content: "\f0e7"; } .icon-sitemap:before { content: "\f0e8"; } .icon-umbrella:before { content: "\f0e9"; } .icon-paste:before { content: "\f0ea"; } .icon-lightbulb:before { content: "\f0eb"; } .icon-exchange:before { content: "\f0ec"; } .icon-cloud-download:before { content: "\f0ed"; } .icon-cloud-upload:before { content: "\f0ee"; } .icon-user-md:before { content: "\f0f0"; } .icon-stethoscope:before { content: "\f0f1"; } .icon-suitcase:before { content: "\f0f2"; } .icon-bell-alt:before { content: "\f0f3"; } .icon-coffee:before { content: "\f0f4"; } .icon-food:before { content: "\f0f5"; } .icon-file-text-alt:before { content: "\f0f6"; } .icon-building:before { content: "\f0f7"; } .icon-hospital:before { content: "\f0f8"; } .icon-ambulance:before { content: "\f0f9"; } .icon-medkit:before { content: "\f0fa"; } .icon-fighter-jet:before { content: "\f0fb"; } .icon-beer:before { content: "\f0fc"; } .icon-h-sign:before { content: "\f0fd"; } .icon-plus-sign-alt:before { content: "\f0fe"; } .icon-double-angle-left:before { content: "\f100"; } .icon-double-angle-right:before { content: "\f101"; } .icon-double-angle-up:before { content: "\f102"; } .icon-double-angle-down:before { content: "\f103"; } .icon-angle-left:before { content: "\f104"; } .icon-angle-right:before { content: "\f105"; } .icon-angle-up:before { content: "\f106"; } .icon-angle-down:before { content: "\f107"; } .icon-desktop:before { content: "\f108"; } .icon-laptop:before { content: "\f109"; } .icon-tablet:before { content: "\f10a"; } .icon-mobile-phone:before { content: "\f10b"; } .icon-circle-blank:before { content: "\f10c"; } .icon-quote-left:before { content: "\f10d"; } .icon-quote-right:before { content: "\f10e"; } .icon-spinner:before { content: "\f110"; } .icon-circle:before { content: "\f111"; } .icon-mail-reply:before, .icon-reply:before { content: "\f112"; } .icon-github-alt:before { content: "\f113"; } .icon-folder-close-alt:before { content: "\f114"; } .icon-folder-open-alt:before { content: "\f115"; } .icon-expand-alt:before { content: "\f116"; } .icon-collapse-alt:before { content: "\f117"; } .icon-smile:before { content: "\f118"; } .icon-frown:before { content: "\f119"; } .icon-meh:before { content: "\f11a"; } .icon-gamepad:before { content: "\f11b"; } .icon-keyboard:before { content: "\f11c"; } .icon-flag-alt:before { content: "\f11d"; } .icon-flag-checkered:before { content: "\f11e"; } .icon-terminal:before { content: "\f120"; } .icon-code:before { content: "\f121"; } .icon-reply-all:before { content: "\f122"; } .icon-mail-reply-all:before { content: "\f122"; } .icon-star-half-full:before, .icon-star-half-empty:before { content: "\f123"; } .icon-location-arrow:before { content: "\f124"; } .icon-crop:before { content: "\f125"; } .icon-code-fork:before { content: "\f126"; } .icon-unlink:before { content: "\f127"; } .icon-question:before { content: "\f128"; } .icon-info:before { content: "\f129"; } .icon-exclamation:before { content: "\f12a"; } .icon-superscript:before { content: "\f12b"; } .icon-subscript:before { content: "\f12c"; } .icon-eraser:before { content: "\f12d"; } .icon-puzzle-piece:before { content: "\f12e"; } .icon-microphone:before { content: "\f130"; } .icon-microphone-off:before { content: "\f131"; } .icon-shield:before { content: "\f132"; } .icon-calendar-empty:before { content: "\f133"; } .icon-fire-extinguisher:before { content: "\f134"; } .icon-rocket:before { content: "\f135"; } .icon-maxcdn:before { content: "\f136"; } .icon-chevron-sign-left:before { content: "\f137"; } .icon-chevron-sign-right:before { content: "\f138"; } .icon-chevron-sign-up:before { content: "\f139"; } .icon-chevron-sign-down:before { content: "\f13a"; } .icon-html5:before { content: "\f13b"; } .icon-css3:before { content: "\f13c"; } .icon-anchor:before { content: "\f13d"; } .icon-unlock-alt:before { content: "\f13e"; } .icon-bullseye:before { content: "\f140"; } .icon-ellipsis-horizontal:before { content: "\f141"; } .icon-ellipsis-vertical:before { content: "\f142"; } .icon-rss-sign:before { content: "\f143"; } .icon-play-sign:before { content: "\f144"; } .icon-ticket:before { content: "\f145"; } .icon-minus-sign-alt:before { content: "\f146"; } .icon-check-minus:before { content: "\f147"; } .icon-level-up:before { content: "\f148"; } .icon-level-down:before { content: "\f149"; } .icon-check-sign:before { content: "\f14a"; } .icon-edit-sign:before { content: "\f14b"; } .icon-external-link-sign:before { content: "\f14c"; } .icon-share-sign:before { content: "\f14d"; } .icon-compass:before { content: "\f14e"; } .icon-collapse:before { content: "\f150"; } .icon-collapse-top:before { content: "\f151"; } .icon-expand:before { content: "\f152"; } .icon-euro:before, .icon-eur:before { content: "\f153"; } .icon-gbp:before { content: "\f154"; } .icon-dollar:before, .icon-usd:before { content: "\f155"; } .icon-rupee:before, .icon-inr:before { content: "\f156"; } .icon-yen:before, .icon-jpy:before { content: "\f157"; } .icon-renminbi:before, .icon-cny:before { content: "\f158"; } .icon-won:before, .icon-krw:before { content: "\f159"; } .icon-bitcoin:before, .icon-btc:before { content: "\f15a"; } .icon-file:before { content: "\f15b"; } .icon-file-text:before { content: "\f15c"; } .icon-sort-by-alphabet:before { content: "\f15d"; } .icon-sort-by-alphabet-alt:before { content: "\f15e"; } .icon-sort-by-attributes:before { content: "\f160"; } .icon-sort-by-attributes-alt:before { content: "\f161"; } .icon-sort-by-order:before { content: "\f162"; } .icon-sort-by-order-alt:before { content: "\f163"; } .icon-thumbs-up:before { content: "\f164"; } .icon-thumbs-down:before { content: "\f165"; } .icon-youtube-sign:before { content: "\f166"; } .icon-youtube:before { content: "\f167"; } .icon-xing:before { content: "\f168"; } .icon-xing-sign:before { content: "\f169"; } .icon-youtube-play:before { content: "\f16a"; } .icon-dropbox:before { content: "\f16b"; } .icon-stackexchange:before { content: "\f16c"; } .icon-instagram:before { content: "\f16d"; } .icon-flickr:before { content: "\f16e"; } .icon-adn:before { content: "\f170"; } .icon-bitbucket:before { content: "\f171"; } .icon-bitbucket-sign:before { content: "\f172"; } .icon-tumblr:before { content: "\f173"; } .icon-tumblr-sign:before { content: "\f174"; } .icon-long-arrow-down:before { content: "\f175"; } .icon-long-arrow-up:before { content: "\f176"; } .icon-long-arrow-left:before { content: "\f177"; } .icon-long-arrow-right:before { content: "\f178"; } .icon-apple:before { content: "\f179"; } .icon-windows:before { content: "\f17a"; } .icon-android:before { content: "\f17b"; } .icon-linux:before { content: "\f17c"; } .icon-dribble:before { content: "\f17d"; } .icon-skype:before { content: "\f17e"; } .icon-foursquare:before { content: "\f180"; } .icon-trello:before { content: "\f181"; } .icon-female:before { content: "\f182"; } .icon-male:before { content: "\f183"; } .icon-gittip:before { content: "\f184"; } .icon-sun:before { content: "\f185"; } .icon-moon:before { content: "\f186"; } .icon-archive:before { content: "\f187"; } .icon-bug:before { content: "\f188"; } .icon-vk:before { content: "\f189"; } .icon-weibo:before { content: "\f18a"; } .icon-renren:before { content: "\f18b"; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/bootstrap.less ================================================ /* BOOTSTRAP SPECIFIC CLASSES * -------------------------- */ /* Bootstrap 2.0 sprites.less reset */ [class^="icon-"], [class*=" icon-"] { display: inline; width: auto; height: auto; line-height: normal; vertical-align: baseline; background-image: none; background-position: 0% 0%; background-repeat: repeat; margin-top: 0; } /* more sprites.less reset */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], .nav-list > .active > a > [class^="icon-"], .nav-list > .active > a > [class*=" icon-"], .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], .dropdown-submenu:hover > a > [class*=" icon-"] { background-image: none; } /* keeps Bootstrap styles with and without icons the same */ .btn, .nav { [class^="icon-"], [class*=" icon-"] { // display: inline; &.icon-large { line-height: .9em; } &.icon-spin { display: inline-block; } } } .nav-tabs, .nav-pills { [class^="icon-"], [class*=" icon-"] { &, &.icon-large { line-height: .9em; } } } .btn { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { &.icon-2x { margin-top: .18em; } } &.icon-spin.icon-large { line-height: .8em; } } } .btn.btn-small { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { &.icon-2x { margin-top: .25em; } } } } .btn.btn-large { [class^="icon-"], [class*=" icon-"] { margin-top: 0; // overrides bootstrap default &.pull-left, &.pull-right { &.icon-2x { margin-top: .05em; } } &.pull-left.icon-2x { margin-right: .2em; } &.pull-right.icon-2x { margin-left: .2em; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/core.less ================================================ /* FONT AWESOME CORE * -------------------------- */ [class^="icon-"], [class*=" icon-"] { .icon-FontAwesome(); } [class^="icon-"]:before, [class*=" icon-"]:before { text-decoration: inherit; display: inline-block; cursor: default; speak: none; } /* makes the font 33% larger relative to the icon container */ .icon-large:before { vertical-align: -10%; font-size: 4/3em; } /* makes sure icons active on rollover in links */ a { [class^="icon-"], [class*=" icon-"] { display: inline; } } /* increased font size for icon-large */ [class^="icon-"], [class*=" icon-"] { &.icon-fixed-width { display: inline-block; width: 16/14em; text-align: right; padding-right: 4/14em; &.icon-large { width: 20/14em; } } } .icons-ul { margin-left: @icons-li-width; list-style-type: none; > li { position: relative; } .icon-li { position: absolute; left: -@icons-li-width; width: @icons-li-width; text-align: center; line-height: inherit; } } // allows usage of the hide class directly on font awesome icons [class^="icon-"], [class*=" icon-"] { &.hide { display: none; } } .icon-muted { color: @iconMuted; } .icon-light { color: @iconLight; } .icon-dark { color: @iconDark; } // Icon Borders // ------------------------- .icon-border { border: solid 1px @borderColor; padding: .2em .25em .15em; .border-radius(3px); } // Icon Sizes // ------------------------- .icon-2x { font-size: 2em; &.icon-border { border-width: 2px; .border-radius(4px); } } .icon-3x { font-size: 3em; &.icon-border { border-width: 3px; .border-radius(5px); } } .icon-4x { font-size: 4em; &.icon-border { border-width: 4px; .border-radius(6px); } } .icon-5x { font-size: 5em; &.icon-border { border-width: 5px; .border-radius(7px); } } // Floats & Margins // ------------------------- // Quick floats .pull-right { float: right; } .pull-left { float: left; } [class^="icon-"], [class*=" icon-"] { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/extras.less ================================================ /* EXTRAS * -------------------------- */ /* Stacked and layered icon */ .icon-stack(); /* Animated rotating icon */ .icon-spin { display: inline-block; -moz-animation: spin 2s infinite linear; -o-animation: spin 2s infinite linear; -webkit-animation: spin 2s infinite linear; animation: spin 2s infinite linear; } a .icon-spin { display: inline-block; text-decoration: none; } @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); } 100% { -moz-transform: rotate(359deg); } } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @-o-keyframes spin { 0% { -o-transform: rotate(0deg); } 100% { -o-transform: rotate(359deg); } } @-ms-keyframes spin { 0% { -ms-transform: rotate(0deg); } 100% { -ms-transform: rotate(359deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } /* Icon rotations and mirroring */ .icon-rotate-90:before { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); } .icon-rotate-180:before { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); } .icon-rotate-270:before { -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); } .icon-flip-horizontal:before { -webkit-transform: scale(-1, 1); -moz-transform: scale(-1, 1); -ms-transform: scale(-1, 1); -o-transform: scale(-1, 1); transform: scale(-1, 1); } .icon-flip-vertical:before { -webkit-transform: scale(1, -1); -moz-transform: scale(1, -1); -ms-transform: scale(1, -1); -o-transform: scale(1, -1); transform: scale(1, -1); } /* ensure rotation occurs inside anchor tags */ a { .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical { &:before { display: inline-block; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/font-awesome-ie7.less ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large { font-size: 4/3em; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; vertical-align: middle; } .nav { [class^="icon-"], [class*=" icon-"] { vertical-align: inherit; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; &.icon-large { vertical-align: -25%; } } } .nav-pills, .nav-tabs { [class^="icon-"], [class*=" icon-"] { &.icon-large { line-height: .75em; margin-top: -7px; padding-top: 5px; margin-bottom: -5px; padding-bottom: 4px; } } } .btn { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { vertical-align: inherit; } &.icon-large { margin-top: -.5em; } } } a [class^="icon-"], a [class*=" icon-"] { cursor: pointer; } .ie7icon(@inner) { *zoom: ~"expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '@{inner}')"; } .icon-glass { .ie7icon(''); } .icon-music { .ie7icon(''); } .icon-search { .ie7icon(''); } .icon-envelope-alt { .ie7icon(''); } .icon-heart { .ie7icon(''); } .icon-star { .ie7icon(''); } .icon-star-empty { .ie7icon(''); } .icon-user { .ie7icon(''); } .icon-film { .ie7icon(''); } .icon-th-large { .ie7icon(''); } .icon-th { .ie7icon(''); } .icon-th-list { .ie7icon(''); } .icon-ok { .ie7icon(''); } .icon-remove { .ie7icon(''); } .icon-zoom-in { .ie7icon(''); } .icon-zoom-out { .ie7icon(''); } .icon-off { .ie7icon(''); } .icon-power-off { .ie7icon(''); } .icon-signal { .ie7icon(''); } .icon-cog { .ie7icon(''); } .icon-trash { .ie7icon(''); } .icon-home { .ie7icon(''); } .icon-file-alt { .ie7icon(''); } .icon-time { .ie7icon(''); } .icon-road { .ie7icon(''); } .icon-download-alt { .ie7icon(''); } .icon-download { .ie7icon(''); } .icon-upload { .ie7icon(''); } .icon-inbox { .ie7icon(''); } .icon-play-circle { .ie7icon(''); } .icon-repeat { .ie7icon(''); } .icon-rotate-right { .ie7icon(''); } .icon-refresh { .ie7icon(''); } .icon-list-alt { .ie7icon(''); } .icon-lock { .ie7icon(''); } .icon-flag { .ie7icon(''); } .icon-headphones { .ie7icon(''); } .icon-volume-off { .ie7icon(''); } .icon-volume-down { .ie7icon(''); } .icon-volume-up { .ie7icon(''); } .icon-qrcode { .ie7icon(''); } .icon-barcode { .ie7icon(''); } .icon-tag { .ie7icon(''); } .icon-tags { .ie7icon(''); } .icon-book { .ie7icon(''); } .icon-bookmark { .ie7icon(''); } .icon-print { .ie7icon(''); } .icon-camera { .ie7icon(''); } .icon-font { .ie7icon(''); } .icon-bold { .ie7icon(''); } .icon-italic { .ie7icon(''); } .icon-text-height { .ie7icon(''); } .icon-text-width { .ie7icon(''); } .icon-align-left { .ie7icon(''); } .icon-align-center { .ie7icon(''); } .icon-align-right { .ie7icon(''); } .icon-align-justify { .ie7icon(''); } .icon-list { .ie7icon(''); } .icon-indent-left { .ie7icon(''); } .icon-indent-right { .ie7icon(''); } .icon-facetime-video { .ie7icon(''); } .icon-picture { .ie7icon(''); } .icon-pencil { .ie7icon(''); } .icon-map-marker { .ie7icon(''); } .icon-adjust { .ie7icon(''); } .icon-tint { .ie7icon(''); } .icon-edit { .ie7icon(''); } .icon-share { .ie7icon(''); } .icon-check { .ie7icon(''); } .icon-move { .ie7icon(''); } .icon-step-backward { .ie7icon(''); } .icon-fast-backward { .ie7icon(''); } .icon-backward { .ie7icon(''); } .icon-play { .ie7icon(''); } .icon-pause { .ie7icon(''); } .icon-stop { .ie7icon(''); } .icon-forward { .ie7icon(''); } .icon-fast-forward { .ie7icon(''); } .icon-step-forward { .ie7icon(''); } .icon-eject { .ie7icon(''); } .icon-chevron-left { .ie7icon(''); } .icon-chevron-right { .ie7icon(''); } .icon-plus-sign { .ie7icon(''); } .icon-minus-sign { .ie7icon(''); } .icon-remove-sign { .ie7icon(''); } .icon-ok-sign { .ie7icon(''); } .icon-question-sign { .ie7icon(''); } .icon-info-sign { .ie7icon(''); } .icon-screenshot { .ie7icon(''); } .icon-remove-circle { .ie7icon(''); } .icon-ok-circle { .ie7icon(''); } .icon-ban-circle { .ie7icon(''); } .icon-arrow-left { .ie7icon(''); } .icon-arrow-right { .ie7icon(''); } .icon-arrow-up { .ie7icon(''); } .icon-arrow-down { .ie7icon(''); } .icon-share-alt { .ie7icon(''); } .icon-mail-forward { .ie7icon(''); } .icon-resize-full { .ie7icon(''); } .icon-resize-small { .ie7icon(''); } .icon-plus { .ie7icon(''); } .icon-minus { .ie7icon(''); } .icon-asterisk { .ie7icon(''); } .icon-exclamation-sign { .ie7icon(''); } .icon-gift { .ie7icon(''); } .icon-leaf { .ie7icon(''); } .icon-fire { .ie7icon(''); } .icon-eye-open { .ie7icon(''); } .icon-eye-close { .ie7icon(''); } .icon-warning-sign { .ie7icon(''); } .icon-plane { .ie7icon(''); } .icon-calendar { .ie7icon(''); } .icon-random { .ie7icon(''); } .icon-comment { .ie7icon(''); } .icon-magnet { .ie7icon(''); } .icon-chevron-up { .ie7icon(''); } .icon-chevron-down { .ie7icon(''); } .icon-retweet { .ie7icon(''); } .icon-shopping-cart { .ie7icon(''); } .icon-folder-close { .ie7icon(''); } .icon-folder-open { .ie7icon(''); } .icon-resize-vertical { .ie7icon(''); } .icon-resize-horizontal { .ie7icon(''); } .icon-bar-chart { .ie7icon(''); } .icon-twitter-sign { .ie7icon(''); } .icon-facebook-sign { .ie7icon(''); } .icon-camera-retro { .ie7icon(''); } .icon-key { .ie7icon(''); } .icon-cogs { .ie7icon(''); } .icon-comments { .ie7icon(''); } .icon-thumbs-up-alt { .ie7icon(''); } .icon-thumbs-down-alt { .ie7icon(''); } .icon-star-half { .ie7icon(''); } .icon-heart-empty { .ie7icon(''); } .icon-signout { .ie7icon(''); } .icon-linkedin-sign { .ie7icon(''); } .icon-pushpin { .ie7icon(''); } .icon-external-link { .ie7icon(''); } .icon-signin { .ie7icon(''); } .icon-trophy { .ie7icon(''); } .icon-github-sign { .ie7icon(''); } .icon-upload-alt { .ie7icon(''); } .icon-lemon { .ie7icon(''); } .icon-phone { .ie7icon(''); } .icon-check-empty { .ie7icon(''); } .icon-unchecked { .ie7icon(''); } .icon-bookmark-empty { .ie7icon(''); } .icon-phone-sign { .ie7icon(''); } .icon-twitter { .ie7icon(''); } .icon-facebook { .ie7icon(''); } .icon-github { .ie7icon(''); } .icon-unlock { .ie7icon(''); } .icon-credit-card { .ie7icon(''); } .icon-rss { .ie7icon(''); } .icon-hdd { .ie7icon(''); } .icon-bullhorn { .ie7icon(''); } .icon-bell { .ie7icon(''); } .icon-certificate { .ie7icon(''); } .icon-hand-right { .ie7icon(''); } .icon-hand-left { .ie7icon(''); } .icon-hand-up { .ie7icon(''); } .icon-hand-down { .ie7icon(''); } .icon-circle-arrow-left { .ie7icon(''); } .icon-circle-arrow-right { .ie7icon(''); } .icon-circle-arrow-up { .ie7icon(''); } .icon-circle-arrow-down { .ie7icon(''); } .icon-globe { .ie7icon(''); } .icon-wrench { .ie7icon(''); } .icon-tasks { .ie7icon(''); } .icon-filter { .ie7icon(''); } .icon-briefcase { .ie7icon(''); } .icon-fullscreen { .ie7icon(''); } .icon-group { .ie7icon(''); } .icon-link { .ie7icon(''); } .icon-cloud { .ie7icon(''); } .icon-beaker { .ie7icon(''); } .icon-cut { .ie7icon(''); } .icon-copy { .ie7icon(''); } .icon-paper-clip { .ie7icon(''); } .icon-paperclip { .ie7icon(''); } .icon-save { .ie7icon(''); } .icon-sign-blank { .ie7icon(''); } .icon-reorder { .ie7icon(''); } .icon-list-ul { .ie7icon(''); } .icon-list-ol { .ie7icon(''); } .icon-strikethrough { .ie7icon(''); } .icon-underline { .ie7icon(''); } .icon-table { .ie7icon(''); } .icon-magic { .ie7icon(''); } .icon-truck { .ie7icon(''); } .icon-pinterest { .ie7icon(''); } .icon-pinterest-sign { .ie7icon(''); } .icon-google-plus-sign { .ie7icon(''); } .icon-google-plus { .ie7icon(''); } .icon-money { .ie7icon(''); } .icon-caret-down { .ie7icon(''); } .icon-caret-up { .ie7icon(''); } .icon-caret-left { .ie7icon(''); } .icon-caret-right { .ie7icon(''); } .icon-columns { .ie7icon(''); } .icon-sort { .ie7icon(''); } .icon-sort-down { .ie7icon(''); } .icon-sort-up { .ie7icon(''); } .icon-envelope { .ie7icon(''); } .icon-linkedin { .ie7icon(''); } .icon-undo { .ie7icon(''); } .icon-rotate-left { .ie7icon(''); } .icon-legal { .ie7icon(''); } .icon-dashboard { .ie7icon(''); } .icon-comment-alt { .ie7icon(''); } .icon-comments-alt { .ie7icon(''); } .icon-bolt { .ie7icon(''); } .icon-sitemap { .ie7icon(''); } .icon-umbrella { .ie7icon(''); } .icon-paste { .ie7icon(''); } .icon-lightbulb { .ie7icon(''); } .icon-exchange { .ie7icon(''); } .icon-cloud-download { .ie7icon(''); } .icon-cloud-upload { .ie7icon(''); } .icon-user-md { .ie7icon(''); } .icon-stethoscope { .ie7icon(''); } .icon-suitcase { .ie7icon(''); } .icon-bell-alt { .ie7icon(''); } .icon-coffee { .ie7icon(''); } .icon-food { .ie7icon(''); } .icon-file-text-alt { .ie7icon(''); } .icon-building { .ie7icon(''); } .icon-hospital { .ie7icon(''); } .icon-ambulance { .ie7icon(''); } .icon-medkit { .ie7icon(''); } .icon-fighter-jet { .ie7icon(''); } .icon-beer { .ie7icon(''); } .icon-h-sign { .ie7icon(''); } .icon-plus-sign-alt { .ie7icon(''); } .icon-double-angle-left { .ie7icon(''); } .icon-double-angle-right { .ie7icon(''); } .icon-double-angle-up { .ie7icon(''); } .icon-double-angle-down { .ie7icon(''); } .icon-angle-left { .ie7icon(''); } .icon-angle-right { .ie7icon(''); } .icon-angle-up { .ie7icon(''); } .icon-angle-down { .ie7icon(''); } .icon-desktop { .ie7icon(''); } .icon-laptop { .ie7icon(''); } .icon-tablet { .ie7icon(''); } .icon-mobile-phone { .ie7icon(''); } .icon-circle-blank { .ie7icon(''); } .icon-quote-left { .ie7icon(''); } .icon-quote-right { .ie7icon(''); } .icon-spinner { .ie7icon(''); } .icon-circle { .ie7icon(''); } .icon-reply { .ie7icon(''); } .icon-mail-reply { .ie7icon(''); } .icon-github-alt { .ie7icon(''); } .icon-folder-close-alt { .ie7icon(''); } .icon-folder-open-alt { .ie7icon(''); } .icon-expand-alt { .ie7icon(''); } .icon-collapse-alt { .ie7icon(''); } .icon-smile { .ie7icon(''); } .icon-frown { .ie7icon(''); } .icon-meh { .ie7icon(''); } .icon-gamepad { .ie7icon(''); } .icon-keyboard { .ie7icon(''); } .icon-flag-alt { .ie7icon(''); } .icon-flag-checkered { .ie7icon(''); } .icon-terminal { .ie7icon(''); } .icon-code { .ie7icon(''); } .icon-reply-all { .ie7icon(''); } .icon-mail-reply-all { .ie7icon(''); } .icon-star-half-empty { .ie7icon(''); } .icon-star-half-full { .ie7icon(''); } .icon-location-arrow { .ie7icon(''); } .icon-crop { .ie7icon(''); } .icon-code-fork { .ie7icon(''); } .icon-unlink { .ie7icon(''); } .icon-question { .ie7icon(''); } .icon-info { .ie7icon(''); } .icon-exclamation { .ie7icon(''); } .icon-superscript { .ie7icon(''); } .icon-subscript { .ie7icon(''); } .icon-eraser { .ie7icon(''); } .icon-puzzle-piece { .ie7icon(''); } .icon-microphone { .ie7icon(''); } .icon-microphone-off { .ie7icon(''); } .icon-shield { .ie7icon(''); } .icon-calendar-empty { .ie7icon(''); } .icon-fire-extinguisher { .ie7icon(''); } .icon-rocket { .ie7icon(''); } .icon-maxcdn { .ie7icon(''); } .icon-chevron-sign-left { .ie7icon(''); } .icon-chevron-sign-right { .ie7icon(''); } .icon-chevron-sign-up { .ie7icon(''); } .icon-chevron-sign-down { .ie7icon(''); } .icon-html5 { .ie7icon(''); } .icon-css3 { .ie7icon(''); } .icon-anchor { .ie7icon(''); } .icon-unlock-alt { .ie7icon(''); } .icon-bullseye { .ie7icon(''); } .icon-ellipsis-horizontal { .ie7icon(''); } .icon-ellipsis-vertical { .ie7icon(''); } .icon-rss-sign { .ie7icon(''); } .icon-play-sign { .ie7icon(''); } .icon-ticket { .ie7icon(''); } .icon-minus-sign-alt { .ie7icon(''); } .icon-check-minus { .ie7icon(''); } .icon-level-up { .ie7icon(''); } .icon-level-down { .ie7icon(''); } .icon-check-sign { .ie7icon(''); } .icon-edit-sign { .ie7icon(''); } .icon-external-link-sign { .ie7icon(''); } .icon-share-sign { .ie7icon(''); } .icon-compass { .ie7icon(''); } .icon-collapse { .ie7icon(''); } .icon-collapse-top { .ie7icon(''); } .icon-expand { .ie7icon(''); } .icon-eur { .ie7icon(''); } .icon-euro { .ie7icon(''); } .icon-gbp { .ie7icon(''); } .icon-usd { .ie7icon(''); } .icon-dollar { .ie7icon(''); } .icon-inr { .ie7icon(''); } .icon-rupee { .ie7icon(''); } .icon-jpy { .ie7icon(''); } .icon-yen { .ie7icon(''); } .icon-cny { .ie7icon(''); } .icon-renminbi { .ie7icon(''); } .icon-krw { .ie7icon(''); } .icon-won { .ie7icon(''); } .icon-btc { .ie7icon(''); } .icon-bitcoin { .ie7icon(''); } .icon-file { .ie7icon(''); } .icon-file-text { .ie7icon(''); } .icon-sort-by-alphabet { .ie7icon(''); } .icon-sort-by-alphabet-alt { .ie7icon(''); } .icon-sort-by-attributes { .ie7icon(''); } .icon-sort-by-attributes-alt { .ie7icon(''); } .icon-sort-by-order { .ie7icon(''); } .icon-sort-by-order-alt { .ie7icon(''); } .icon-thumbs-up { .ie7icon(''); } .icon-thumbs-down { .ie7icon(''); } .icon-youtube-sign { .ie7icon(''); } .icon-youtube { .ie7icon(''); } .icon-xing { .ie7icon(''); } .icon-xing-sign { .ie7icon(''); } .icon-youtube-play { .ie7icon(''); } .icon-dropbox { .ie7icon(''); } .icon-stackexchange { .ie7icon(''); } .icon-instagram { .ie7icon(''); } .icon-flickr { .ie7icon(''); } .icon-adn { .ie7icon(''); } .icon-bitbucket { .ie7icon(''); } .icon-bitbucket-sign { .ie7icon(''); } .icon-tumblr { .ie7icon(''); } .icon-tumblr-sign { .ie7icon(''); } .icon-long-arrow-down { .ie7icon(''); } .icon-long-arrow-up { .ie7icon(''); } .icon-long-arrow-left { .ie7icon(''); } .icon-long-arrow-right { .ie7icon(''); } .icon-apple { .ie7icon(''); } .icon-windows { .ie7icon(''); } .icon-android { .ie7icon(''); } .icon-linux { .ie7icon(''); } .icon-dribble { .ie7icon(''); } .icon-skype { .ie7icon(''); } .icon-foursquare { .ie7icon(''); } .icon-trello { .ie7icon(''); } .icon-female { .ie7icon(''); } .icon-male { .ie7icon(''); } .icon-gittip { .ie7icon(''); } .icon-sun { .ie7icon(''); } .icon-moon { .ie7icon(''); } .icon-archive { .ie7icon(''); } .icon-bug { .ie7icon(''); } .icon-vk { .ie7icon(''); } .icon-weibo { .ie7icon(''); } .icon-renren { .ie7icon(''); } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/font-awesome.less ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ @import "variables.less"; @import "mixins.less"; @import "path.less"; @import "core.less"; @import "bootstrap.less"; @import "extras.less"; @import "icons.less"; ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/icons.less ================================================ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .icon-glass:before { content: @glass; } .icon-music:before { content: @music; } .icon-search:before { content: @search; } .icon-envelope-alt:before { content: @envelope-alt; } .icon-heart:before { content: @heart; } .icon-star:before { content: @star; } .icon-star-empty:before { content: @star-empty; } .icon-user:before { content: @user; } .icon-film:before { content: @film; } .icon-th-large:before { content: @th-large; } .icon-th:before { content: @th; } .icon-th-list:before { content: @th-list; } .icon-ok:before { content: @ok; } .icon-remove:before { content: @remove; } .icon-zoom-in:before { content: @zoom-in; } .icon-zoom-out:before { content: @zoom-out; } .icon-power-off:before, .icon-off:before { content: @off; } .icon-signal:before { content: @signal; } .icon-cog:before { content: @cog; } .icon-trash:before { content: @trash; } .icon-home:before { content: @home; } .icon-file-alt:before { content: @file-alt; } .icon-time:before { content: @time; } .icon-road:before { content: @road; } .icon-download-alt:before { content: @download-alt; } .icon-download:before { content: @download; } .icon-upload:before { content: @upload; } .icon-inbox:before { content: @inbox; } .icon-play-circle:before { content: @play-circle; } .icon-rotate-right:before, .icon-repeat:before { content: @repeat; } .icon-refresh:before { content: @refresh; } .icon-list-alt:before { content: @list-alt; } .icon-lock:before { content: @lock; } .icon-flag:before { content: @flag; } .icon-headphones:before { content: @headphones; } .icon-volume-off:before { content: @volume-off; } .icon-volume-down:before { content: @volume-down; } .icon-volume-up:before { content: @volume-up; } .icon-qrcode:before { content: @qrcode; } .icon-barcode:before { content: @barcode; } .icon-tag:before { content: @tag; } .icon-tags:before { content: @tags; } .icon-book:before { content: @book; } .icon-bookmark:before { content: @bookmark; } .icon-print:before { content: @print; } .icon-camera:before { content: @camera; } .icon-font:before { content: @font; } .icon-bold:before { content: @bold; } .icon-italic:before { content: @italic; } .icon-text-height:before { content: @text-height; } .icon-text-width:before { content: @text-width; } .icon-align-left:before { content: @align-left; } .icon-align-center:before { content: @align-center; } .icon-align-right:before { content: @align-right; } .icon-align-justify:before { content: @align-justify; } .icon-list:before { content: @list; } .icon-indent-left:before { content: @indent-left; } .icon-indent-right:before { content: @indent-right; } .icon-facetime-video:before { content: @facetime-video; } .icon-picture:before { content: @picture; } .icon-pencil:before { content: @pencil; } .icon-map-marker:before { content: @map-marker; } .icon-adjust:before { content: @adjust; } .icon-tint:before { content: @tint; } .icon-edit:before { content: @edit; } .icon-share:before { content: @share; } .icon-check:before { content: @check; } .icon-move:before { content: @move; } .icon-step-backward:before { content: @step-backward; } .icon-fast-backward:before { content: @fast-backward; } .icon-backward:before { content: @backward; } .icon-play:before { content: @play; } .icon-pause:before { content: @pause; } .icon-stop:before { content: @stop; } .icon-forward:before { content: @forward; } .icon-fast-forward:before { content: @fast-forward; } .icon-step-forward:before { content: @step-forward; } .icon-eject:before { content: @eject; } .icon-chevron-left:before { content: @chevron-left; } .icon-chevron-right:before { content: @chevron-right; } .icon-plus-sign:before { content: @plus-sign; } .icon-minus-sign:before { content: @minus-sign; } .icon-remove-sign:before { content: @remove-sign; } .icon-ok-sign:before { content: @ok-sign; } .icon-question-sign:before { content: @question-sign; } .icon-info-sign:before { content: @info-sign; } .icon-screenshot:before { content: @screenshot; } .icon-remove-circle:before { content: @remove-circle; } .icon-ok-circle:before { content: @ok-circle; } .icon-ban-circle:before { content: @ban-circle; } .icon-arrow-left:before { content: @arrow-left; } .icon-arrow-right:before { content: @arrow-right; } .icon-arrow-up:before { content: @arrow-up; } .icon-arrow-down:before { content: @arrow-down; } .icon-mail-forward:before, .icon-share-alt:before { content: @share-alt; } .icon-resize-full:before { content: @resize-full; } .icon-resize-small:before { content: @resize-small; } .icon-plus:before { content: @plus; } .icon-minus:before { content: @minus; } .icon-asterisk:before { content: @asterisk; } .icon-exclamation-sign:before { content: @exclamation-sign; } .icon-gift:before { content: @gift; } .icon-leaf:before { content: @leaf; } .icon-fire:before { content: @fire; } .icon-eye-open:before { content: @eye-open; } .icon-eye-close:before { content: @eye-close; } .icon-warning-sign:before { content: @warning-sign; } .icon-plane:before { content: @plane; } .icon-calendar:before { content: @calendar; } .icon-random:before { content: @random; } .icon-comment:before { content: @comment; } .icon-magnet:before { content: @magnet; } .icon-chevron-up:before { content: @chevron-up; } .icon-chevron-down:before { content: @chevron-down; } .icon-retweet:before { content: @retweet; } .icon-shopping-cart:before { content: @shopping-cart; } .icon-folder-close:before { content: @folder-close; } .icon-folder-open:before { content: @folder-open; } .icon-resize-vertical:before { content: @resize-vertical; } .icon-resize-horizontal:before { content: @resize-horizontal; } .icon-bar-chart:before { content: @bar-chart; } .icon-twitter-sign:before { content: @twitter-sign; } .icon-facebook-sign:before { content: @facebook-sign; } .icon-camera-retro:before { content: @camera-retro; } .icon-key:before { content: @key; } .icon-cogs:before { content: @cogs; } .icon-comments:before { content: @comments; } .icon-thumbs-up-alt:before { content: @thumbs-up-alt; } .icon-thumbs-down-alt:before { content: @thumbs-down-alt; } .icon-star-half:before { content: @star-half; } .icon-heart-empty:before { content: @heart-empty; } .icon-signout:before { content: @signout; } .icon-linkedin-sign:before { content: @linkedin-sign; } .icon-pushpin:before { content: @pushpin; } .icon-external-link:before { content: @external-link; } .icon-signin:before { content: @signin; } .icon-trophy:before { content: @trophy; } .icon-github-sign:before { content: @github-sign; } .icon-upload-alt:before { content: @upload-alt; } .icon-lemon:before { content: @lemon; } .icon-phone:before { content: @phone; } .icon-unchecked:before, .icon-check-empty:before { content: @check-empty; } .icon-bookmark-empty:before { content: @bookmark-empty; } .icon-phone-sign:before { content: @phone-sign; } .icon-twitter:before { content: @twitter; } .icon-facebook:before { content: @facebook; } .icon-github:before { content: @github; } .icon-unlock:before { content: @unlock; } .icon-credit-card:before { content: @credit-card; } .icon-rss:before { content: @rss; } .icon-hdd:before { content: @hdd; } .icon-bullhorn:before { content: @bullhorn; } .icon-bell:before { content: @bell; } .icon-certificate:before { content: @certificate; } .icon-hand-right:before { content: @hand-right; } .icon-hand-left:before { content: @hand-left; } .icon-hand-up:before { content: @hand-up; } .icon-hand-down:before { content: @hand-down; } .icon-circle-arrow-left:before { content: @circle-arrow-left; } .icon-circle-arrow-right:before { content: @circle-arrow-right; } .icon-circle-arrow-up:before { content: @circle-arrow-up; } .icon-circle-arrow-down:before { content: @circle-arrow-down; } .icon-globe:before { content: @globe; } .icon-wrench:before { content: @wrench; } .icon-tasks:before { content: @tasks; } .icon-filter:before { content: @filter; } .icon-briefcase:before { content: @briefcase; } .icon-fullscreen:before { content: @fullscreen; } .icon-group:before { content: @group; } .icon-link:before { content: @link; } .icon-cloud:before { content: @cloud; } .icon-beaker:before { content: @beaker; } .icon-cut:before { content: @cut; } .icon-copy:before { content: @copy; } .icon-paperclip:before, .icon-paper-clip:before { content: @paper-clip; } .icon-save:before { content: @save; } .icon-sign-blank:before { content: @sign-blank; } .icon-reorder:before { content: @reorder; } .icon-list-ul:before { content: @list-ul; } .icon-list-ol:before { content: @list-ol; } .icon-strikethrough:before { content: @strikethrough; } .icon-underline:before { content: @underline; } .icon-table:before { content: @table; } .icon-magic:before { content: @magic; } .icon-truck:before { content: @truck; } .icon-pinterest:before { content: @pinterest; } .icon-pinterest-sign:before { content: @pinterest-sign; } .icon-google-plus-sign:before { content: @google-plus-sign; } .icon-google-plus:before { content: @google-plus; } .icon-money:before { content: @money; } .icon-caret-down:before { content: @caret-down; } .icon-caret-up:before { content: @caret-up; } .icon-caret-left:before { content: @caret-left; } .icon-caret-right:before { content: @caret-right; } .icon-columns:before { content: @columns; } .icon-sort:before { content: @sort; } .icon-sort-down:before { content: @sort-down; } .icon-sort-up:before { content: @sort-up; } .icon-envelope:before { content: @envelope; } .icon-linkedin:before { content: @linkedin; } .icon-rotate-left:before, .icon-undo:before { content: @undo; } .icon-legal:before { content: @legal; } .icon-dashboard:before { content: @dashboard; } .icon-comment-alt:before { content: @comment-alt; } .icon-comments-alt:before { content: @comments-alt; } .icon-bolt:before { content: @bolt; } .icon-sitemap:before { content: @sitemap; } .icon-umbrella:before { content: @umbrella; } .icon-paste:before { content: @paste; } .icon-lightbulb:before { content: @lightbulb; } .icon-exchange:before { content: @exchange; } .icon-cloud-download:before { content: @cloud-download; } .icon-cloud-upload:before { content: @cloud-upload; } .icon-user-md:before { content: @user-md; } .icon-stethoscope:before { content: @stethoscope; } .icon-suitcase:before { content: @suitcase; } .icon-bell-alt:before { content: @bell-alt; } .icon-coffee:before { content: @coffee; } .icon-food:before { content: @food; } .icon-file-text-alt:before { content: @file-text-alt; } .icon-building:before { content: @building; } .icon-hospital:before { content: @hospital; } .icon-ambulance:before { content: @ambulance; } .icon-medkit:before { content: @medkit; } .icon-fighter-jet:before { content: @fighter-jet; } .icon-beer:before { content: @beer; } .icon-h-sign:before { content: @h-sign; } .icon-plus-sign-alt:before { content: @plus-sign-alt; } .icon-double-angle-left:before { content: @double-angle-left; } .icon-double-angle-right:before { content: @double-angle-right; } .icon-double-angle-up:before { content: @double-angle-up; } .icon-double-angle-down:before { content: @double-angle-down; } .icon-angle-left:before { content: @angle-left; } .icon-angle-right:before { content: @angle-right; } .icon-angle-up:before { content: @angle-up; } .icon-angle-down:before { content: @angle-down; } .icon-desktop:before { content: @desktop; } .icon-laptop:before { content: @laptop; } .icon-tablet:before { content: @tablet; } .icon-mobile-phone:before { content: @mobile-phone; } .icon-circle-blank:before { content: @circle-blank; } .icon-quote-left:before { content: @quote-left; } .icon-quote-right:before { content: @quote-right; } .icon-spinner:before { content: @spinner; } .icon-circle:before { content: @circle; } .icon-mail-reply:before, .icon-reply:before { content: @reply; } .icon-github-alt:before { content: @github-alt; } .icon-folder-close-alt:before { content: @folder-close-alt; } .icon-folder-open-alt:before { content: @folder-open-alt; } .icon-expand-alt:before { content: @expand-alt; } .icon-collapse-alt:before { content: @collapse-alt; } .icon-smile:before { content: @smile; } .icon-frown:before { content: @frown; } .icon-meh:before { content: @meh; } .icon-gamepad:before { content: @gamepad; } .icon-keyboard:before { content: @keyboard; } .icon-flag-alt:before { content: @flag-alt; } .icon-flag-checkered:before { content: @flag-checkered; } .icon-terminal:before { content: @terminal; } .icon-code:before { content: @code; } .icon-reply-all:before { content: @reply-all; } .icon-mail-reply-all:before { content: @mail-reply-all; } .icon-star-half-full:before, .icon-star-half-empty:before { content: @star-half-empty; } .icon-location-arrow:before { content: @location-arrow; } .icon-crop:before { content: @crop; } .icon-code-fork:before { content: @code-fork; } .icon-unlink:before { content: @unlink; } .icon-question:before { content: @question; } .icon-info:before { content: @info; } .icon-exclamation:before { content: @exclamation; } .icon-superscript:before { content: @superscript; } .icon-subscript:before { content: @subscript; } .icon-eraser:before { content: @eraser; } .icon-puzzle-piece:before { content: @puzzle-piece; } .icon-microphone:before { content: @microphone; } .icon-microphone-off:before { content: @microphone-off; } .icon-shield:before { content: @shield; } .icon-calendar-empty:before { content: @calendar-empty; } .icon-fire-extinguisher:before { content: @fire-extinguisher; } .icon-rocket:before { content: @rocket; } .icon-maxcdn:before { content: @maxcdn; } .icon-chevron-sign-left:before { content: @chevron-sign-left; } .icon-chevron-sign-right:before { content: @chevron-sign-right; } .icon-chevron-sign-up:before { content: @chevron-sign-up; } .icon-chevron-sign-down:before { content: @chevron-sign-down; } .icon-html5:before { content: @html5; } .icon-css3:before { content: @css3; } .icon-anchor:before { content: @anchor; } .icon-unlock-alt:before { content: @unlock-alt; } .icon-bullseye:before { content: @bullseye; } .icon-ellipsis-horizontal:before { content: @ellipsis-horizontal; } .icon-ellipsis-vertical:before { content: @ellipsis-vertical; } .icon-rss-sign:before { content: @rss-sign; } .icon-play-sign:before { content: @play-sign; } .icon-ticket:before { content: @ticket; } .icon-minus-sign-alt:before { content: @minus-sign-alt; } .icon-check-minus:before { content: @check-minus; } .icon-level-up:before { content: @level-up; } .icon-level-down:before { content: @level-down; } .icon-check-sign:before { content: @check-sign; } .icon-edit-sign:before { content: @edit-sign; } .icon-external-link-sign:before { content: @external-link-sign; } .icon-share-sign:before { content: @share-sign; } .icon-compass:before { content: @compass; } .icon-collapse:before { content: @collapse; } .icon-collapse-top:before { content: @collapse-top; } .icon-expand:before { content: @expand; } .icon-euro:before, .icon-eur:before { content: @eur; } .icon-gbp:before { content: @gbp; } .icon-dollar:before, .icon-usd:before { content: @usd; } .icon-rupee:before, .icon-inr:before { content: @inr; } .icon-yen:before, .icon-jpy:before { content: @jpy; } .icon-renminbi:before, .icon-cny:before { content: @cny; } .icon-won:before, .icon-krw:before { content: @krw; } .icon-bitcoin:before, .icon-btc:before { content: @btc; } .icon-file:before { content: @file; } .icon-file-text:before { content: @file-text; } .icon-sort-by-alphabet:before { content: @sort-by-alphabet; } .icon-sort-by-alphabet-alt:before { content: @sort-by-alphabet-alt; } .icon-sort-by-attributes:before { content: @sort-by-attributes; } .icon-sort-by-attributes-alt:before { content: @sort-by-attributes-alt; } .icon-sort-by-order:before { content: @sort-by-order; } .icon-sort-by-order-alt:before { content: @sort-by-order-alt; } .icon-thumbs-up:before { content: @thumbs-up; } .icon-thumbs-down:before { content: @thumbs-down; } .icon-youtube-sign:before { content: @youtube-sign; } .icon-youtube:before { content: @youtube; } .icon-xing:before { content: @xing; } .icon-xing-sign:before { content: @xing-sign; } .icon-youtube-play:before { content: @youtube-play; } .icon-dropbox:before { content: @dropbox; } .icon-stackexchange:before { content: @stackexchange; } .icon-instagram:before { content: @instagram; } .icon-flickr:before { content: @flickr; } .icon-adn:before { content: @adn; } .icon-bitbucket:before { content: @bitbucket; } .icon-bitbucket-sign:before { content: @bitbucket-sign; } .icon-tumblr:before { content: @tumblr; } .icon-tumblr-sign:before { content: @tumblr-sign; } .icon-long-arrow-down:before { content: @long-arrow-down; } .icon-long-arrow-up:before { content: @long-arrow-up; } .icon-long-arrow-left:before { content: @long-arrow-left; } .icon-long-arrow-right:before { content: @long-arrow-right; } .icon-apple:before { content: @apple; } .icon-windows:before { content: @windows; } .icon-android:before { content: @android; } .icon-linux:before { content: @linux; } .icon-dribble:before { content: @dribble; } .icon-skype:before { content: @skype; } .icon-foursquare:before { content: @foursquare; } .icon-trello:before { content: @trello; } .icon-female:before { content: @female; } .icon-male:before { content: @male; } .icon-gittip:before { content: @gittip; } .icon-sun:before { content: @sun; } .icon-moon:before { content: @moon; } .icon-archive:before { content: @archive; } .icon-bug:before { content: @bug; } .icon-vk:before { content: @vk; } .icon-weibo:before { content: @weibo; } .icon-renren:before { content: @renren; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/mixins.less ================================================ // Mixins // -------------------------- .icon(@icon) { .icon-FontAwesome(); content: @icon; } .icon-FontAwesome() { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; -webkit-font-smoothing: antialiased; *margin-right: .3em; // fixes ie7 issues } .border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } .icon-stack(@width: 2em, @height: 2em, @top-font-size: 1em, @base-font-size: 2em) { .icon-stack { position: relative; display: inline-block; width: @width; height: @height; line-height: @width; vertical-align: -35%; [class^="icon-"], [class*=" icon-"] { display: block; text-align: center; position: absolute; width: 100%; height: 100%; font-size: @top-font-size; line-height: inherit; *line-height: @height; } .icon-stack-base { font-size: @base-font-size; *line-height: @height / @base-font-size; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/path.less ================================================ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}'); src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=@{FontAwesomeVersion}') format('embedded-opentype'), url('@{FontAwesomePath}/fontawesome-webfont.woff?v=@{FontAwesomeVersion}') format('woff'), url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=@{FontAwesomeVersion}') format('truetype'), url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=@{FontAwesomeVersion}') format('svg'); // src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts font-weight: normal; font-style: normal; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/less/variables.less ================================================ // Variables // -------------------------- @FontAwesomePath: "../font"; //@FontAwesomePath: "//netdna.bootstrapcdn.com/font-awesome/3.2.0/font"; // for referencing Bootstrap CDN font files directly @FontAwesomeVersion: "3.2.0"; @borderColor: #eee; @iconMuted: #eee; @iconLight: #fff; @iconDark: #333; @icons-li-width: 30/14em; @glass: "\f000"; @music: "\f001"; @search: "\f002"; @envelope-alt: "\f003"; @heart: "\f004"; @star: "\f005"; @star-empty: "\f006"; @user: "\f007"; @film: "\f008"; @th-large: "\f009"; @th: "\f00a"; @th-list: "\f00b"; @ok: "\f00c"; @remove: "\f00d"; @zoom-in: "\f00e"; @zoom-out: "\f010"; @off: "\f011"; @signal: "\f012"; @cog: "\f013"; @trash: "\f014"; @home: "\f015"; @file-alt: "\f016"; @time: "\f017"; @road: "\f018"; @download-alt: "\f019"; @download: "\f01a"; @upload: "\f01b"; @inbox: "\f01c"; @play-circle: "\f01d"; @repeat: "\f01e"; @refresh: "\f021"; @list-alt: "\f022"; @lock: "\f023"; @flag: "\f024"; @headphones: "\f025"; @volume-off: "\f026"; @volume-down: "\f027"; @volume-up: "\f028"; @qrcode: "\f029"; @barcode: "\f02a"; @tag: "\f02b"; @tags: "\f02c"; @book: "\f02d"; @bookmark: "\f02e"; @print: "\f02f"; @camera: "\f030"; @font: "\f031"; @bold: "\f032"; @italic: "\f033"; @text-height: "\f034"; @text-width: "\f035"; @align-left: "\f036"; @align-center: "\f037"; @align-right: "\f038"; @align-justify: "\f039"; @list: "\f03a"; @indent-left: "\f03b"; @indent-right: "\f03c"; @facetime-video: "\f03d"; @picture: "\f03e"; @pencil: "\f040"; @map-marker: "\f041"; @adjust: "\f042"; @tint: "\f043"; @edit: "\f044"; @share: "\f045"; @check: "\f046"; @move: "\f047"; @step-backward: "\f048"; @fast-backward: "\f049"; @backward: "\f04a"; @play: "\f04b"; @pause: "\f04c"; @stop: "\f04d"; @forward: "\f04e"; @fast-forward: "\f050"; @step-forward: "\f051"; @eject: "\f052"; @chevron-left: "\f053"; @chevron-right: "\f054"; @plus-sign: "\f055"; @minus-sign: "\f056"; @remove-sign: "\f057"; @ok-sign: "\f058"; @question-sign: "\f059"; @info-sign: "\f05a"; @screenshot: "\f05b"; @remove-circle: "\f05c"; @ok-circle: "\f05d"; @ban-circle: "\f05e"; @arrow-left: "\f060"; @arrow-right: "\f061"; @arrow-up: "\f062"; @arrow-down: "\f063"; @share-alt: "\f064"; @resize-full: "\f065"; @resize-small: "\f066"; @plus: "\f067"; @minus: "\f068"; @asterisk: "\f069"; @exclamation-sign: "\f06a"; @gift: "\f06b"; @leaf: "\f06c"; @fire: "\f06d"; @eye-open: "\f06e"; @eye-close: "\f070"; @warning-sign: "\f071"; @plane: "\f072"; @calendar: "\f073"; @random: "\f074"; @comment: "\f075"; @magnet: "\f076"; @chevron-up: "\f077"; @chevron-down: "\f078"; @retweet: "\f079"; @shopping-cart: "\f07a"; @folder-close: "\f07b"; @folder-open: "\f07c"; @resize-vertical: "\f07d"; @resize-horizontal: "\f07e"; @bar-chart: "\f080"; @twitter-sign: "\f081"; @facebook-sign: "\f082"; @camera-retro: "\f083"; @key: "\f084"; @cogs: "\f085"; @comments: "\f086"; @thumbs-up-alt: "\f087"; @thumbs-down-alt: "\f088"; @star-half: "\f089"; @heart-empty: "\f08a"; @signout: "\f08b"; @linkedin-sign: "\f08c"; @pushpin: "\f08d"; @external-link: "\f08e"; @signin: "\f090"; @trophy: "\f091"; @github-sign: "\f092"; @upload-alt: "\f093"; @lemon: "\f094"; @phone: "\f095"; @check-empty: "\f096"; @bookmark-empty: "\f097"; @phone-sign: "\f098"; @twitter: "\f099"; @facebook: "\f09a"; @github: "\f09b"; @unlock: "\f09c"; @credit-card: "\f09d"; @rss: "\f09e"; @hdd: "\f0a0"; @bullhorn: "\f0a1"; @bell: "\f0a2"; @certificate: "\f0a3"; @hand-right: "\f0a4"; @hand-left: "\f0a5"; @hand-up: "\f0a6"; @hand-down: "\f0a7"; @circle-arrow-left: "\f0a8"; @circle-arrow-right: "\f0a9"; @circle-arrow-up: "\f0aa"; @circle-arrow-down: "\f0ab"; @globe: "\f0ac"; @wrench: "\f0ad"; @tasks: "\f0ae"; @filter: "\f0b0"; @briefcase: "\f0b1"; @fullscreen: "\f0b2"; @group: "\f0c0"; @link: "\f0c1"; @cloud: "\f0c2"; @beaker: "\f0c3"; @cut: "\f0c4"; @copy: "\f0c5"; @paper-clip: "\f0c6"; @save: "\f0c7"; @sign-blank: "\f0c8"; @reorder: "\f0c9"; @list-ul: "\f0ca"; @list-ol: "\f0cb"; @strikethrough: "\f0cc"; @underline: "\f0cd"; @table: "\f0ce"; @magic: "\f0d0"; @truck: "\f0d1"; @pinterest: "\f0d2"; @pinterest-sign: "\f0d3"; @google-plus-sign: "\f0d4"; @google-plus: "\f0d5"; @money: "\f0d6"; @caret-down: "\f0d7"; @caret-up: "\f0d8"; @caret-left: "\f0d9"; @caret-right: "\f0da"; @columns: "\f0db"; @sort: "\f0dc"; @sort-down: "\f0dd"; @sort-up: "\f0de"; @envelope: "\f0e0"; @linkedin: "\f0e1"; @undo: "\f0e2"; @legal: "\f0e3"; @dashboard: "\f0e4"; @comment-alt: "\f0e5"; @comments-alt: "\f0e6"; @bolt: "\f0e7"; @sitemap: "\f0e8"; @umbrella: "\f0e9"; @paste: "\f0ea"; @lightbulb: "\f0eb"; @exchange: "\f0ec"; @cloud-download: "\f0ed"; @cloud-upload: "\f0ee"; @user-md: "\f0f0"; @stethoscope: "\f0f1"; @suitcase: "\f0f2"; @bell-alt: "\f0f3"; @coffee: "\f0f4"; @food: "\f0f5"; @file-text-alt: "\f0f6"; @building: "\f0f7"; @hospital: "\f0f8"; @ambulance: "\f0f9"; @medkit: "\f0fa"; @fighter-jet: "\f0fb"; @beer: "\f0fc"; @h-sign: "\f0fd"; @plus-sign-alt: "\f0fe"; @double-angle-left: "\f100"; @double-angle-right: "\f101"; @double-angle-up: "\f102"; @double-angle-down: "\f103"; @angle-left: "\f104"; @angle-right: "\f105"; @angle-up: "\f106"; @angle-down: "\f107"; @desktop: "\f108"; @laptop: "\f109"; @tablet: "\f10a"; @mobile-phone: "\f10b"; @circle-blank: "\f10c"; @quote-left: "\f10d"; @quote-right: "\f10e"; @spinner: "\f110"; @circle: "\f111"; @reply: "\f112"; @github-alt: "\f113"; @folder-close-alt: "\f114"; @folder-open-alt: "\f115"; @expand-alt: "\f116"; @collapse-alt: "\f117"; @smile: "\f118"; @frown: "\f119"; @meh: "\f11a"; @gamepad: "\f11b"; @keyboard: "\f11c"; @flag-alt: "\f11d"; @flag-checkered: "\f11e"; @terminal: "\f120"; @code: "\f121"; @reply-all: "\f122"; @mail-reply-all: "\f122"; @star-half-empty: "\f123"; @location-arrow: "\f124"; @crop: "\f125"; @code-fork: "\f126"; @unlink: "\f127"; @question: "\f128"; @info: "\f129"; @exclamation: "\f12a"; @superscript: "\f12b"; @subscript: "\f12c"; @eraser: "\f12d"; @puzzle-piece: "\f12e"; @microphone: "\f130"; @microphone-off: "\f131"; @shield: "\f132"; @calendar-empty: "\f133"; @fire-extinguisher: "\f134"; @rocket: "\f135"; @maxcdn: "\f136"; @chevron-sign-left: "\f137"; @chevron-sign-right: "\f138"; @chevron-sign-up: "\f139"; @chevron-sign-down: "\f13a"; @html5: "\f13b"; @css3: "\f13c"; @anchor: "\f13d"; @unlock-alt: "\f13e"; @bullseye: "\f140"; @ellipsis-horizontal: "\f141"; @ellipsis-vertical: "\f142"; @rss-sign: "\f143"; @play-sign: "\f144"; @ticket: "\f145"; @minus-sign-alt: "\f146"; @check-minus: "\f147"; @level-up: "\f148"; @level-down: "\f149"; @check-sign: "\f14a"; @edit-sign: "\f14b"; @external-link-sign: "\f14c"; @share-sign: "\f14d"; @compass: "\f14e"; @collapse: "\f150"; @collapse-top: "\f151"; @expand: "\f152"; @eur: "\f153"; @gbp: "\f154"; @usd: "\f155"; @inr: "\f156"; @jpy: "\f157"; @cny: "\f158"; @krw: "\f159"; @btc: "\f15a"; @file: "\f15b"; @file-text: "\f15c"; @sort-by-alphabet: "\f15d"; @sort-by-alphabet-alt: "\f15e"; @sort-by-attributes: "\f160"; @sort-by-attributes-alt: "\f161"; @sort-by-order: "\f162"; @sort-by-order-alt: "\f163"; @thumbs-up: "\f164"; @thumbs-down: "\f165"; @youtube-sign: "\f166"; @youtube: "\f167"; @xing: "\f168"; @xing-sign: "\f169"; @youtube-play: "\f16a"; @dropbox: "\f16b"; @stackexchange: "\f16c"; @instagram: "\f16d"; @flickr: "\f16e"; @adn: "\f170"; @bitbucket: "\f171"; @bitbucket-sign: "\f172"; @tumblr: "\f173"; @tumblr-sign: "\f174"; @long-arrow-down: "\f175"; @long-arrow-up: "\f176"; @long-arrow-left: "\f177"; @long-arrow-right: "\f178"; @apple: "\f179"; @windows: "\f17a"; @android: "\f17b"; @linux: "\f17c"; @dribble: "\f17d"; @skype: "\f17e"; @foursquare: "\f180"; @trello: "\f181"; @female: "\f182"; @male: "\f183"; @gittip: "\f184"; @sun: "\f185"; @moon: "\f186"; @archive: "\f187"; @bug: "\f188"; @vk: "\f189"; @weibo: "\f18a"; @renren: "\f18b"; ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_bootstrap.scss ================================================ /* BOOTSTRAP SPECIFIC CLASSES * -------------------------- */ /* Bootstrap 2.0 sprites.less reset */ [class^="icon-"], [class*=" icon-"] { display: inline; width: auto; height: auto; line-height: normal; vertical-align: baseline; background-image: none; background-position: 0% 0%; background-repeat: repeat; margin-top: 0; } /* more sprites.less reset */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], .nav-list > .active > a > [class^="icon-"], .nav-list > .active > a > [class*=" icon-"], .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], .dropdown-submenu:hover > a > [class*=" icon-"] { background-image: none; } /* keeps Bootstrap styles with and without icons the same */ .btn, .nav { [class^="icon-"], [class*=" icon-"] { // display: inline; &.icon-large { line-height: .9em; } &.icon-spin { display: inline-block; } } } .nav-tabs, .nav-pills { [class^="icon-"], [class*=" icon-"] { &, &.icon-large { line-height: .9em; } } } .btn { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { &.icon-2x { margin-top: .18em; } } &.icon-spin.icon-large { line-height: .8em; } } } .btn.btn-small { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { &.icon-2x { margin-top: .25em; } } } } .btn.btn-large { [class^="icon-"], [class*=" icon-"] { margin-top: 0; // overrides bootstrap default &.pull-left, &.pull-right { &.icon-2x { margin-top: .05em; } } &.pull-left.icon-2x { margin-right: .2em; } &.pull-right.icon-2x { margin-left: .2em; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_core.scss ================================================ /* FONT AWESOME CORE * -------------------------- */ [class^="icon-"], [class*=" icon-"] { @include icon-FontAwesome(); } [class^="icon-"]:before, [class*=" icon-"]:before { text-decoration: inherit; display: inline-block; cursor: default; speak: none; } /* makes the font 33% larger relative to the icon container */ .icon-large:before { vertical-align: -10%; font-size: (4em/3); } /* makes sure icons active on rollover in links */ a { [class^="icon-"], [class*=" icon-"] { display: inline; } } /* increased font size for icon-large */ [class^="icon-"], [class*=" icon-"] { &.icon-fixed-width { display: inline-block; width: (16em/14); text-align: right; padding-right: (4em/14); &.icon-large { width: (20em/14); } } } .icons-ul { margin-left: $icons-li-width; list-style-type: none; > li { position: relative; } .icon-li { position: absolute; left: -$icons-li-width; width: $icons-li-width; text-align: center; line-height: inherit; } } // allows usage of the hide class directly on font awesome icons [class^="icon-"], [class*=" icon-"] { &.hide { display: none; } } .icon-muted { color: $iconMuted; } .icon-light { color: $iconLight; } .icon-dark { color: $iconDark; } // Icon Borders // ------------------------- .icon-border { border: solid 1px $borderColor; padding: .2em .25em .15em; @include border-radius(3px); } // Icon Sizes // ------------------------- .icon-2x { font-size: 2em; &.icon-border { border-width: 2px; @include border-radius(4px); } } .icon-3x { font-size: 3em; &.icon-border { border-width: 3px; @include border-radius(5px); } } .icon-4x { font-size: 4em; &.icon-border { border-width: 4px; @include border-radius(6px); } } .icon-5x { font-size: 5em; &.icon-border { border-width: 5px; @include border-radius(7px); } } // Floats & Margins // ------------------------- // Quick floats .pull-right { float: right; } .pull-left { float: left; } [class^="icon-"], [class*=" icon-"] { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_extras.scss ================================================ /* EXTRAS * -------------------------- */ /* Stacked and layered icon */ @include icon-stack(); /* Animated rotating icon */ .icon-spin { display: inline-block; -moz-animation: spin 2s infinite linear; -o-animation: spin 2s infinite linear; -webkit-animation: spin 2s infinite linear; animation: spin 2s infinite linear; } a .icon-spin { display: inline-block; text-decoration: none; } @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); } 100% { -moz-transform: rotate(359deg); } } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @-o-keyframes spin { 0% { -o-transform: rotate(0deg); } 100% { -o-transform: rotate(359deg); } } @-ms-keyframes spin { 0% { -ms-transform: rotate(0deg); } 100% { -ms-transform: rotate(359deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } /* Icon rotations and mirroring */ .icon-rotate-90:before { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); } .icon-rotate-180:before { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); } .icon-rotate-270:before { -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); } .icon-flip-horizontal:before { -webkit-transform: scale(-1, 1); -moz-transform: scale(-1, 1); -ms-transform: scale(-1, 1); -o-transform: scale(-1, 1); transform: scale(-1, 1); } .icon-flip-vertical:before { -webkit-transform: scale(1, -1); -moz-transform: scale(1, -1); -ms-transform: scale(1, -1); -o-transform: scale(1, -1); transform: scale(1, -1); } /* ensure rotation occurs inside anchor tags */ a { .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical { &:before { display: inline-block; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_icons.scss ================================================ /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen * readers do not read off random characters that represent icons */ .icon-glass:before { content: $glass; } .icon-music:before { content: $music; } .icon-search:before { content: $search; } .icon-envelope-alt:before { content: $envelope-alt; } .icon-heart:before { content: $heart; } .icon-star:before { content: $star; } .icon-star-empty:before { content: $star-empty; } .icon-user:before { content: $user; } .icon-film:before { content: $film; } .icon-th-large:before { content: $th-large; } .icon-th:before { content: $th; } .icon-th-list:before { content: $th-list; } .icon-ok:before { content: $ok; } .icon-remove:before { content: $remove; } .icon-zoom-in:before { content: $zoom-in; } .icon-zoom-out:before { content: $zoom-out; } .icon-power-off:before, .icon-off:before { content: $off; } .icon-signal:before { content: $signal; } .icon-cog:before { content: $cog; } .icon-trash:before { content: $trash; } .icon-home:before { content: $home; } .icon-file-alt:before { content: $file-alt; } .icon-time:before { content: $time; } .icon-road:before { content: $road; } .icon-download-alt:before { content: $download-alt; } .icon-download:before { content: $download; } .icon-upload:before { content: $upload; } .icon-inbox:before { content: $inbox; } .icon-play-circle:before { content: $play-circle; } .icon-rotate-right:before, .icon-repeat:before { content: $repeat; } .icon-refresh:before { content: $refresh; } .icon-list-alt:before { content: $list-alt; } .icon-lock:before { content: $lock; } .icon-flag:before { content: $flag; } .icon-headphones:before { content: $headphones; } .icon-volume-off:before { content: $volume-off; } .icon-volume-down:before { content: $volume-down; } .icon-volume-up:before { content: $volume-up; } .icon-qrcode:before { content: $qrcode; } .icon-barcode:before { content: $barcode; } .icon-tag:before { content: $tag; } .icon-tags:before { content: $tags; } .icon-book:before { content: $book; } .icon-bookmark:before { content: $bookmark; } .icon-print:before { content: $print; } .icon-camera:before { content: $camera; } .icon-font:before { content: $font; } .icon-bold:before { content: $bold; } .icon-italic:before { content: $italic; } .icon-text-height:before { content: $text-height; } .icon-text-width:before { content: $text-width; } .icon-align-left:before { content: $align-left; } .icon-align-center:before { content: $align-center; } .icon-align-right:before { content: $align-right; } .icon-align-justify:before { content: $align-justify; } .icon-list:before { content: $list; } .icon-indent-left:before { content: $indent-left; } .icon-indent-right:before { content: $indent-right; } .icon-facetime-video:before { content: $facetime-video; } .icon-picture:before { content: $picture; } .icon-pencil:before { content: $pencil; } .icon-map-marker:before { content: $map-marker; } .icon-adjust:before { content: $adjust; } .icon-tint:before { content: $tint; } .icon-edit:before { content: $edit; } .icon-share:before { content: $share; } .icon-check:before { content: $check; } .icon-move:before { content: $move; } .icon-step-backward:before { content: $step-backward; } .icon-fast-backward:before { content: $fast-backward; } .icon-backward:before { content: $backward; } .icon-play:before { content: $play; } .icon-pause:before { content: $pause; } .icon-stop:before { content: $stop; } .icon-forward:before { content: $forward; } .icon-fast-forward:before { content: $fast-forward; } .icon-step-forward:before { content: $step-forward; } .icon-eject:before { content: $eject; } .icon-chevron-left:before { content: $chevron-left; } .icon-chevron-right:before { content: $chevron-right; } .icon-plus-sign:before { content: $plus-sign; } .icon-minus-sign:before { content: $minus-sign; } .icon-remove-sign:before { content: $remove-sign; } .icon-ok-sign:before { content: $ok-sign; } .icon-question-sign:before { content: $question-sign; } .icon-info-sign:before { content: $info-sign; } .icon-screenshot:before { content: $screenshot; } .icon-remove-circle:before { content: $remove-circle; } .icon-ok-circle:before { content: $ok-circle; } .icon-ban-circle:before { content: $ban-circle; } .icon-arrow-left:before { content: $arrow-left; } .icon-arrow-right:before { content: $arrow-right; } .icon-arrow-up:before { content: $arrow-up; } .icon-arrow-down:before { content: $arrow-down; } .icon-mail-forward:before, .icon-share-alt:before { content: $share-alt; } .icon-resize-full:before { content: $resize-full; } .icon-resize-small:before { content: $resize-small; } .icon-plus:before { content: $plus; } .icon-minus:before { content: $minus; } .icon-asterisk:before { content: $asterisk; } .icon-exclamation-sign:before { content: $exclamation-sign; } .icon-gift:before { content: $gift; } .icon-leaf:before { content: $leaf; } .icon-fire:before { content: $fire; } .icon-eye-open:before { content: $eye-open; } .icon-eye-close:before { content: $eye-close; } .icon-warning-sign:before { content: $warning-sign; } .icon-plane:before { content: $plane; } .icon-calendar:before { content: $calendar; } .icon-random:before { content: $random; } .icon-comment:before { content: $comment; } .icon-magnet:before { content: $magnet; } .icon-chevron-up:before { content: $chevron-up; } .icon-chevron-down:before { content: $chevron-down; } .icon-retweet:before { content: $retweet; } .icon-shopping-cart:before { content: $shopping-cart; } .icon-folder-close:before { content: $folder-close; } .icon-folder-open:before { content: $folder-open; } .icon-resize-vertical:before { content: $resize-vertical; } .icon-resize-horizontal:before { content: $resize-horizontal; } .icon-bar-chart:before { content: $bar-chart; } .icon-twitter-sign:before { content: $twitter-sign; } .icon-facebook-sign:before { content: $facebook-sign; } .icon-camera-retro:before { content: $camera-retro; } .icon-key:before { content: $key; } .icon-cogs:before { content: $cogs; } .icon-comments:before { content: $comments; } .icon-thumbs-up-alt:before { content: $thumbs-up-alt; } .icon-thumbs-down-alt:before { content: $thumbs-down-alt; } .icon-star-half:before { content: $star-half; } .icon-heart-empty:before { content: $heart-empty; } .icon-signout:before { content: $signout; } .icon-linkedin-sign:before { content: $linkedin-sign; } .icon-pushpin:before { content: $pushpin; } .icon-external-link:before { content: $external-link; } .icon-signin:before { content: $signin; } .icon-trophy:before { content: $trophy; } .icon-github-sign:before { content: $github-sign; } .icon-upload-alt:before { content: $upload-alt; } .icon-lemon:before { content: $lemon; } .icon-phone:before { content: $phone; } .icon-unchecked:before, .icon-check-empty:before { content: $check-empty; } .icon-bookmark-empty:before { content: $bookmark-empty; } .icon-phone-sign:before { content: $phone-sign; } .icon-twitter:before { content: $twitter; } .icon-facebook:before { content: $facebook; } .icon-github:before { content: $github; } .icon-unlock:before { content: $unlock; } .icon-credit-card:before { content: $credit-card; } .icon-rss:before { content: $rss; } .icon-hdd:before { content: $hdd; } .icon-bullhorn:before { content: $bullhorn; } .icon-bell:before { content: $bell; } .icon-certificate:before { content: $certificate; } .icon-hand-right:before { content: $hand-right; } .icon-hand-left:before { content: $hand-left; } .icon-hand-up:before { content: $hand-up; } .icon-hand-down:before { content: $hand-down; } .icon-circle-arrow-left:before { content: $circle-arrow-left; } .icon-circle-arrow-right:before { content: $circle-arrow-right; } .icon-circle-arrow-up:before { content: $circle-arrow-up; } .icon-circle-arrow-down:before { content: $circle-arrow-down; } .icon-globe:before { content: $globe; } .icon-wrench:before { content: $wrench; } .icon-tasks:before { content: $tasks; } .icon-filter:before { content: $filter; } .icon-briefcase:before { content: $briefcase; } .icon-fullscreen:before { content: $fullscreen; } .icon-group:before { content: $group; } .icon-link:before { content: $link; } .icon-cloud:before { content: $cloud; } .icon-beaker:before { content: $beaker; } .icon-cut:before { content: $cut; } .icon-copy:before { content: $copy; } .icon-paperclip:before, .icon-paper-clip:before { content: $paper-clip; } .icon-save:before { content: $save; } .icon-sign-blank:before { content: $sign-blank; } .icon-reorder:before { content: $reorder; } .icon-list-ul:before { content: $list-ul; } .icon-list-ol:before { content: $list-ol; } .icon-strikethrough:before { content: $strikethrough; } .icon-underline:before { content: $underline; } .icon-table:before { content: $table; } .icon-magic:before { content: $magic; } .icon-truck:before { content: $truck; } .icon-pinterest:before { content: $pinterest; } .icon-pinterest-sign:before { content: $pinterest-sign; } .icon-google-plus-sign:before { content: $google-plus-sign; } .icon-google-plus:before { content: $google-plus; } .icon-money:before { content: $money; } .icon-caret-down:before { content: $caret-down; } .icon-caret-up:before { content: $caret-up; } .icon-caret-left:before { content: $caret-left; } .icon-caret-right:before { content: $caret-right; } .icon-columns:before { content: $columns; } .icon-sort:before { content: $sort; } .icon-sort-down:before { content: $sort-down; } .icon-sort-up:before { content: $sort-up; } .icon-envelope:before { content: $envelope; } .icon-linkedin:before { content: $linkedin; } .icon-rotate-left:before, .icon-undo:before { content: $undo; } .icon-legal:before { content: $legal; } .icon-dashboard:before { content: $dashboard; } .icon-comment-alt:before { content: $comment-alt; } .icon-comments-alt:before { content: $comments-alt; } .icon-bolt:before { content: $bolt; } .icon-sitemap:before { content: $sitemap; } .icon-umbrella:before { content: $umbrella; } .icon-paste:before { content: $paste; } .icon-lightbulb:before { content: $lightbulb; } .icon-exchange:before { content: $exchange; } .icon-cloud-download:before { content: $cloud-download; } .icon-cloud-upload:before { content: $cloud-upload; } .icon-user-md:before { content: $user-md; } .icon-stethoscope:before { content: $stethoscope; } .icon-suitcase:before { content: $suitcase; } .icon-bell-alt:before { content: $bell-alt; } .icon-coffee:before { content: $coffee; } .icon-food:before { content: $food; } .icon-file-text-alt:before { content: $file-text-alt; } .icon-building:before { content: $building; } .icon-hospital:before { content: $hospital; } .icon-ambulance:before { content: $ambulance; } .icon-medkit:before { content: $medkit; } .icon-fighter-jet:before { content: $fighter-jet; } .icon-beer:before { content: $beer; } .icon-h-sign:before { content: $h-sign; } .icon-plus-sign-alt:before { content: $plus-sign-alt; } .icon-double-angle-left:before { content: $double-angle-left; } .icon-double-angle-right:before { content: $double-angle-right; } .icon-double-angle-up:before { content: $double-angle-up; } .icon-double-angle-down:before { content: $double-angle-down; } .icon-angle-left:before { content: $angle-left; } .icon-angle-right:before { content: $angle-right; } .icon-angle-up:before { content: $angle-up; } .icon-angle-down:before { content: $angle-down; } .icon-desktop:before { content: $desktop; } .icon-laptop:before { content: $laptop; } .icon-tablet:before { content: $tablet; } .icon-mobile-phone:before { content: $mobile-phone; } .icon-circle-blank:before { content: $circle-blank; } .icon-quote-left:before { content: $quote-left; } .icon-quote-right:before { content: $quote-right; } .icon-spinner:before { content: $spinner; } .icon-circle:before { content: $circle; } .icon-mail-reply:before, .icon-reply:before { content: $reply; } .icon-github-alt:before { content: $github-alt; } .icon-folder-close-alt:before { content: $folder-close-alt; } .icon-folder-open-alt:before { content: $folder-open-alt; } .icon-expand-alt:before { content: $expand-alt; } .icon-collapse-alt:before { content: $collapse-alt; } .icon-smile:before { content: $smile; } .icon-frown:before { content: $frown; } .icon-meh:before { content: $meh; } .icon-gamepad:before { content: $gamepad; } .icon-keyboard:before { content: $keyboard; } .icon-flag-alt:before { content: $flag-alt; } .icon-flag-checkered:before { content: $flag-checkered; } .icon-terminal:before { content: $terminal; } .icon-code:before { content: $code; } .icon-reply-all:before { content: $reply-all; } .icon-mail-reply-all:before { content: $mail-reply-all; } .icon-star-half-full:before, .icon-star-half-empty:before { content: $star-half-empty; } .icon-location-arrow:before { content: $location-arrow; } .icon-crop:before { content: $crop; } .icon-code-fork:before { content: $code-fork; } .icon-unlink:before { content: $unlink; } .icon-question:before { content: $question; } .icon-info:before { content: $info; } .icon-exclamation:before { content: $exclamation; } .icon-superscript:before { content: $superscript; } .icon-subscript:before { content: $subscript; } .icon-eraser:before { content: $eraser; } .icon-puzzle-piece:before { content: $puzzle-piece; } .icon-microphone:before { content: $microphone; } .icon-microphone-off:before { content: $microphone-off; } .icon-shield:before { content: $shield; } .icon-calendar-empty:before { content: $calendar-empty; } .icon-fire-extinguisher:before { content: $fire-extinguisher; } .icon-rocket:before { content: $rocket; } .icon-maxcdn:before { content: $maxcdn; } .icon-chevron-sign-left:before { content: $chevron-sign-left; } .icon-chevron-sign-right:before { content: $chevron-sign-right; } .icon-chevron-sign-up:before { content: $chevron-sign-up; } .icon-chevron-sign-down:before { content: $chevron-sign-down; } .icon-html5:before { content: $html5; } .icon-css3:before { content: $css3; } .icon-anchor:before { content: $anchor; } .icon-unlock-alt:before { content: $unlock-alt; } .icon-bullseye:before { content: $bullseye; } .icon-ellipsis-horizontal:before { content: $ellipsis-horizontal; } .icon-ellipsis-vertical:before { content: $ellipsis-vertical; } .icon-rss-sign:before { content: $rss-sign; } .icon-play-sign:before { content: $play-sign; } .icon-ticket:before { content: $ticket; } .icon-minus-sign-alt:before { content: $minus-sign-alt; } .icon-check-minus:before { content: $check-minus; } .icon-level-up:before { content: $level-up; } .icon-level-down:before { content: $level-down; } .icon-check-sign:before { content: $check-sign; } .icon-edit-sign:before { content: $edit-sign; } .icon-external-link-sign:before { content: $external-link-sign; } .icon-share-sign:before { content: $share-sign; } .icon-compass:before { content: $compass; } .icon-collapse:before { content: $collapse; } .icon-collapse-top:before { content: $collapse-top; } .icon-expand:before { content: $expand; } .icon-euro:before, .icon-eur:before { content: $eur; } .icon-gbp:before { content: $gbp; } .icon-dollar:before, .icon-usd:before { content: $usd; } .icon-rupee:before, .icon-inr:before { content: $inr; } .icon-yen:before, .icon-jpy:before { content: $jpy; } .icon-renminbi:before, .icon-cny:before { content: $cny; } .icon-won:before, .icon-krw:before { content: $krw; } .icon-bitcoin:before, .icon-btc:before { content: $btc; } .icon-file:before { content: $file; } .icon-file-text:before { content: $file-text; } .icon-sort-by-alphabet:before { content: $sort-by-alphabet; } .icon-sort-by-alphabet-alt:before { content: $sort-by-alphabet-alt; } .icon-sort-by-attributes:before { content: $sort-by-attributes; } .icon-sort-by-attributes-alt:before { content: $sort-by-attributes-alt; } .icon-sort-by-order:before { content: $sort-by-order; } .icon-sort-by-order-alt:before { content: $sort-by-order-alt; } .icon-thumbs-up:before { content: $thumbs-up; } .icon-thumbs-down:before { content: $thumbs-down; } .icon-youtube-sign:before { content: $youtube-sign; } .icon-youtube:before { content: $youtube; } .icon-xing:before { content: $xing; } .icon-xing-sign:before { content: $xing-sign; } .icon-youtube-play:before { content: $youtube-play; } .icon-dropbox:before { content: $dropbox; } .icon-stackexchange:before { content: $stackexchange; } .icon-instagram:before { content: $instagram; } .icon-flickr:before { content: $flickr; } .icon-adn:before { content: $adn; } .icon-bitbucket:before { content: $bitbucket; } .icon-bitbucket-sign:before { content: $bitbucket-sign; } .icon-tumblr:before { content: $tumblr; } .icon-tumblr-sign:before { content: $tumblr-sign; } .icon-long-arrow-down:before { content: $long-arrow-down; } .icon-long-arrow-up:before { content: $long-arrow-up; } .icon-long-arrow-left:before { content: $long-arrow-left; } .icon-long-arrow-right:before { content: $long-arrow-right; } .icon-apple:before { content: $apple; } .icon-windows:before { content: $windows; } .icon-android:before { content: $android; } .icon-linux:before { content: $linux; } .icon-dribble:before { content: $dribble; } .icon-skype:before { content: $skype; } .icon-foursquare:before { content: $foursquare; } .icon-trello:before { content: $trello; } .icon-female:before { content: $female; } .icon-male:before { content: $male; } .icon-gittip:before { content: $gittip; } .icon-sun:before { content: $sun; } .icon-moon:before { content: $moon; } .icon-archive:before { content: $archive; } .icon-bug:before { content: $bug; } .icon-vk:before { content: $vk; } .icon-weibo:before { content: $weibo; } .icon-renren:before { content: $renren; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_mixins.scss ================================================ // Mixins // -------------------------- @mixin icon($icon) { @include icon-FontAwesome(); content: $icon; } @mixin icon-FontAwesome() { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; -webkit-font-smoothing: antialiased; *margin-right: .3em; // fixes ie7 issues } @mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } @mixin icon-stack($width: 2em, $height: 2em, $top-font-size: 1em, $base-font-size: 2em) { .icon-stack { position: relative; display: inline-block; width: $width; height: $height; line-height: $width; vertical-align: -35%; [class^="icon-"], [class*=" icon-"] { display: block; text-align: center; position: absolute; width: 100%; height: 100%; font-size: $top-font-size; line-height: inherit; *line-height: $height; } .icon-stack-base { font-size: $base-font-size; *line-height: #{$height / $base-font-size}em; } } } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_path.scss ================================================ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?v=#{$FontAwesomeVersion}'); src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=#{$FontAwesomeVersion}') format('embedded-opentype'), url('#{$FontAwesomePath}/fontawesome-webfont.woff?v=#{$FontAwesomeVersion}') format('woff'), url('#{$FontAwesomePath}/fontawesome-webfont.ttf?v=#{$FontAwesomeVersion}') format('truetype'), url('#{$FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=#{$FontAwesomeVersion}') format('svg'); // src: url('#{$FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts font-weight: normal; font-style: normal; } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/_variables.scss ================================================ // Variables // -------------------------- $FontAwesomePath: "../font" !default; $FontAwesomeVersion: "3.2.0" !default; $borderColor: #eeeeee !default; $iconMuted: #eeeeee !default; $iconLight: white !default; $iconDark: #333333 !default; $icons-li-width: (30em/14); $glass: "\f000"; $music: "\f001"; $search: "\f002"; $envelope-alt: "\f003"; $heart: "\f004"; $star: "\f005"; $star-empty: "\f006"; $user: "\f007"; $film: "\f008"; $th-large: "\f009"; $th: "\f00a"; $th-list: "\f00b"; $ok: "\f00c"; $remove: "\f00d"; $zoom-in: "\f00e"; $zoom-out: "\f010"; $off: "\f011"; $signal: "\f012"; $cog: "\f013"; $trash: "\f014"; $home: "\f015"; $file-alt: "\f016"; $time: "\f017"; $road: "\f018"; $download-alt: "\f019"; $download: "\f01a"; $upload: "\f01b"; $inbox: "\f01c"; $play-circle: "\f01d"; $repeat: "\f01e"; $refresh: "\f021"; $list-alt: "\f022"; $lock: "\f023"; $flag: "\f024"; $headphones: "\f025"; $volume-off: "\f026"; $volume-down: "\f027"; $volume-up: "\f028"; $qrcode: "\f029"; $barcode: "\f02a"; $tag: "\f02b"; $tags: "\f02c"; $book: "\f02d"; $bookmark: "\f02e"; $print: "\f02f"; $camera: "\f030"; $font: "\f031"; $bold: "\f032"; $italic: "\f033"; $text-height: "\f034"; $text-width: "\f035"; $align-left: "\f036"; $align-center: "\f037"; $align-right: "\f038"; $align-justify: "\f039"; $list: "\f03a"; $indent-left: "\f03b"; $indent-right: "\f03c"; $facetime-video: "\f03d"; $picture: "\f03e"; $pencil: "\f040"; $map-marker: "\f041"; $adjust: "\f042"; $tint: "\f043"; $edit: "\f044"; $share: "\f045"; $check: "\f046"; $move: "\f047"; $step-backward: "\f048"; $fast-backward: "\f049"; $backward: "\f04a"; $play: "\f04b"; $pause: "\f04c"; $stop: "\f04d"; $forward: "\f04e"; $fast-forward: "\f050"; $step-forward: "\f051"; $eject: "\f052"; $chevron-left: "\f053"; $chevron-right: "\f054"; $plus-sign: "\f055"; $minus-sign: "\f056"; $remove-sign: "\f057"; $ok-sign: "\f058"; $question-sign: "\f059"; $info-sign: "\f05a"; $screenshot: "\f05b"; $remove-circle: "\f05c"; $ok-circle: "\f05d"; $ban-circle: "\f05e"; $arrow-left: "\f060"; $arrow-right: "\f061"; $arrow-up: "\f062"; $arrow-down: "\f063"; $share-alt: "\f064"; $resize-full: "\f065"; $resize-small: "\f066"; $plus: "\f067"; $minus: "\f068"; $asterisk: "\f069"; $exclamation-sign: "\f06a"; $gift: "\f06b"; $leaf: "\f06c"; $fire: "\f06d"; $eye-open: "\f06e"; $eye-close: "\f070"; $warning-sign: "\f071"; $plane: "\f072"; $calendar: "\f073"; $random: "\f074"; $comment: "\f075"; $magnet: "\f076"; $chevron-up: "\f077"; $chevron-down: "\f078"; $retweet: "\f079"; $shopping-cart: "\f07a"; $folder-close: "\f07b"; $folder-open: "\f07c"; $resize-vertical: "\f07d"; $resize-horizontal: "\f07e"; $bar-chart: "\f080"; $twitter-sign: "\f081"; $facebook-sign: "\f082"; $camera-retro: "\f083"; $key: "\f084"; $cogs: "\f085"; $comments: "\f086"; $thumbs-up-alt: "\f087"; $thumbs-down-alt: "\f088"; $star-half: "\f089"; $heart-empty: "\f08a"; $signout: "\f08b"; $linkedin-sign: "\f08c"; $pushpin: "\f08d"; $external-link: "\f08e"; $signin: "\f090"; $trophy: "\f091"; $github-sign: "\f092"; $upload-alt: "\f093"; $lemon: "\f094"; $phone: "\f095"; $check-empty: "\f096"; $bookmark-empty: "\f097"; $phone-sign: "\f098"; $twitter: "\f099"; $facebook: "\f09a"; $github: "\f09b"; $unlock: "\f09c"; $credit-card: "\f09d"; $rss: "\f09e"; $hdd: "\f0a0"; $bullhorn: "\f0a1"; $bell: "\f0a2"; $certificate: "\f0a3"; $hand-right: "\f0a4"; $hand-left: "\f0a5"; $hand-up: "\f0a6"; $hand-down: "\f0a7"; $circle-arrow-left: "\f0a8"; $circle-arrow-right: "\f0a9"; $circle-arrow-up: "\f0aa"; $circle-arrow-down: "\f0ab"; $globe: "\f0ac"; $wrench: "\f0ad"; $tasks: "\f0ae"; $filter: "\f0b0"; $briefcase: "\f0b1"; $fullscreen: "\f0b2"; $group: "\f0c0"; $link: "\f0c1"; $cloud: "\f0c2"; $beaker: "\f0c3"; $cut: "\f0c4"; $copy: "\f0c5"; $paper-clip: "\f0c6"; $save: "\f0c7"; $sign-blank: "\f0c8"; $reorder: "\f0c9"; $list-ul: "\f0ca"; $list-ol: "\f0cb"; $strikethrough: "\f0cc"; $underline: "\f0cd"; $table: "\f0ce"; $magic: "\f0d0"; $truck: "\f0d1"; $pinterest: "\f0d2"; $pinterest-sign: "\f0d3"; $google-plus-sign: "\f0d4"; $google-plus: "\f0d5"; $money: "\f0d6"; $caret-down: "\f0d7"; $caret-up: "\f0d8"; $caret-left: "\f0d9"; $caret-right: "\f0da"; $columns: "\f0db"; $sort: "\f0dc"; $sort-down: "\f0dd"; $sort-up: "\f0de"; $envelope: "\f0e0"; $linkedin: "\f0e1"; $undo: "\f0e2"; $legal: "\f0e3"; $dashboard: "\f0e4"; $comment-alt: "\f0e5"; $comments-alt: "\f0e6"; $bolt: "\f0e7"; $sitemap: "\f0e8"; $umbrella: "\f0e9"; $paste: "\f0ea"; $lightbulb: "\f0eb"; $exchange: "\f0ec"; $cloud-download: "\f0ed"; $cloud-upload: "\f0ee"; $user-md: "\f0f0"; $stethoscope: "\f0f1"; $suitcase: "\f0f2"; $bell-alt: "\f0f3"; $coffee: "\f0f4"; $food: "\f0f5"; $file-text-alt: "\f0f6"; $building: "\f0f7"; $hospital: "\f0f8"; $ambulance: "\f0f9"; $medkit: "\f0fa"; $fighter-jet: "\f0fb"; $beer: "\f0fc"; $h-sign: "\f0fd"; $plus-sign-alt: "\f0fe"; $double-angle-left: "\f100"; $double-angle-right: "\f101"; $double-angle-up: "\f102"; $double-angle-down: "\f103"; $angle-left: "\f104"; $angle-right: "\f105"; $angle-up: "\f106"; $angle-down: "\f107"; $desktop: "\f108"; $laptop: "\f109"; $tablet: "\f10a"; $mobile-phone: "\f10b"; $circle-blank: "\f10c"; $quote-left: "\f10d"; $quote-right: "\f10e"; $spinner: "\f110"; $circle: "\f111"; $reply: "\f112"; $github-alt: "\f113"; $folder-close-alt: "\f114"; $folder-open-alt: "\f115"; $expand-alt: "\f116"; $collapse-alt: "\f117"; $smile: "\f118"; $frown: "\f119"; $meh: "\f11a"; $gamepad: "\f11b"; $keyboard: "\f11c"; $flag-alt: "\f11d"; $flag-checkered: "\f11e"; $terminal: "\f120"; $code: "\f121"; $reply-all: "\f122"; $mail-reply-all: "\f122"; $star-half-empty: "\f123"; $location-arrow: "\f124"; $crop: "\f125"; $code-fork: "\f126"; $unlink: "\f127"; $question: "\f128"; $info: "\f129"; $exclamation: "\f12a"; $superscript: "\f12b"; $subscript: "\f12c"; $eraser: "\f12d"; $puzzle-piece: "\f12e"; $microphone: "\f130"; $microphone-off: "\f131"; $shield: "\f132"; $calendar-empty: "\f133"; $fire-extinguisher: "\f134"; $rocket: "\f135"; $maxcdn: "\f136"; $chevron-sign-left: "\f137"; $chevron-sign-right: "\f138"; $chevron-sign-up: "\f139"; $chevron-sign-down: "\f13a"; $html5: "\f13b"; $css3: "\f13c"; $anchor: "\f13d"; $unlock-alt: "\f13e"; $bullseye: "\f140"; $ellipsis-horizontal: "\f141"; $ellipsis-vertical: "\f142"; $rss-sign: "\f143"; $play-sign: "\f144"; $ticket: "\f145"; $minus-sign-alt: "\f146"; $check-minus: "\f147"; $level-up: "\f148"; $level-down: "\f149"; $check-sign: "\f14a"; $edit-sign: "\f14b"; $external-link-sign: "\f14c"; $share-sign: "\f14d"; $compass: "\f14e"; $collapse: "\f150"; $collapse-top: "\f151"; $expand: "\f152"; $eur: "\f153"; $gbp: "\f154"; $usd: "\f155"; $inr: "\f156"; $jpy: "\f157"; $cny: "\f158"; $krw: "\f159"; $btc: "\f15a"; $file: "\f15b"; $file-text: "\f15c"; $sort-by-alphabet: "\f15d"; $sort-by-alphabet-alt: "\f15e"; $sort-by-attributes: "\f160"; $sort-by-attributes-alt: "\f161"; $sort-by-order: "\f162"; $sort-by-order-alt: "\f163"; $thumbs-up: "\f164"; $thumbs-down: "\f165"; $youtube-sign: "\f166"; $youtube: "\f167"; $xing: "\f168"; $xing-sign: "\f169"; $youtube-play: "\f16a"; $dropbox: "\f16b"; $stackexchange: "\f16c"; $instagram: "\f16d"; $flickr: "\f16e"; $adn: "\f170"; $bitbucket: "\f171"; $bitbucket-sign: "\f172"; $tumblr: "\f173"; $tumblr-sign: "\f174"; $long-arrow-down: "\f175"; $long-arrow-up: "\f176"; $long-arrow-left: "\f177"; $long-arrow-right: "\f178"; $apple: "\f179"; $windows: "\f17a"; $android: "\f17b"; $linux: "\f17c"; $dribble: "\f17d"; $skype: "\f17e"; $foursquare: "\f180"; $trello: "\f181"; $female: "\f182"; $male: "\f183"; $gittip: "\f184"; $sun: "\f185"; $moon: "\f186"; $archive: "\f187"; $bug: "\f188"; $vk: "\f189"; $weibo: "\f18a"; $renren: "\f18b"; ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/font-awesome-ie7.scss ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large { font-size: (4em/3); margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; vertical-align: middle; } .nav { [class^="icon-"], [class*=" icon-"] { vertical-align: inherit; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; &.icon-large { vertical-align: -25%; } } } .nav-pills, .nav-tabs { [class^="icon-"], [class*=" icon-"] { &.icon-large { line-height: .75em; margin-top: -7px; padding-top: 5px; margin-bottom: -5px; padding-bottom: 4px; } } } .btn { [class^="icon-"], [class*=" icon-"] { &.pull-left, &.pull-right { vertical-align: inherit; } &.icon-large { margin-top: -.5em; } } } a [class^="icon-"], a [class*=" icon-"] { cursor: pointer; } @mixin ie7icon($inner) { *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '#{$inner}'); } .icon-glass { @include ie7icon(''); } .icon-music { @include ie7icon(''); } .icon-search { @include ie7icon(''); } .icon-envelope-alt { @include ie7icon(''); } .icon-heart { @include ie7icon(''); } .icon-star { @include ie7icon(''); } .icon-star-empty { @include ie7icon(''); } .icon-user { @include ie7icon(''); } .icon-film { @include ie7icon(''); } .icon-th-large { @include ie7icon(''); } .icon-th { @include ie7icon(''); } .icon-th-list { @include ie7icon(''); } .icon-ok { @include ie7icon(''); } .icon-remove { @include ie7icon(''); } .icon-zoom-in { @include ie7icon(''); } .icon-zoom-out { @include ie7icon(''); } .icon-off { @include ie7icon(''); } .icon-power-off { @include ie7icon(''); } .icon-signal { @include ie7icon(''); } .icon-cog { @include ie7icon(''); } .icon-trash { @include ie7icon(''); } .icon-home { @include ie7icon(''); } .icon-file-alt { @include ie7icon(''); } .icon-time { @include ie7icon(''); } .icon-road { @include ie7icon(''); } .icon-download-alt { @include ie7icon(''); } .icon-download { @include ie7icon(''); } .icon-upload { @include ie7icon(''); } .icon-inbox { @include ie7icon(''); } .icon-play-circle { @include ie7icon(''); } .icon-repeat { @include ie7icon(''); } .icon-rotate-right { @include ie7icon(''); } .icon-refresh { @include ie7icon(''); } .icon-list-alt { @include ie7icon(''); } .icon-lock { @include ie7icon(''); } .icon-flag { @include ie7icon(''); } .icon-headphones { @include ie7icon(''); } .icon-volume-off { @include ie7icon(''); } .icon-volume-down { @include ie7icon(''); } .icon-volume-up { @include ie7icon(''); } .icon-qrcode { @include ie7icon(''); } .icon-barcode { @include ie7icon(''); } .icon-tag { @include ie7icon(''); } .icon-tags { @include ie7icon(''); } .icon-book { @include ie7icon(''); } .icon-bookmark { @include ie7icon(''); } .icon-print { @include ie7icon(''); } .icon-camera { @include ie7icon(''); } .icon-font { @include ie7icon(''); } .icon-bold { @include ie7icon(''); } .icon-italic { @include ie7icon(''); } .icon-text-height { @include ie7icon(''); } .icon-text-width { @include ie7icon(''); } .icon-align-left { @include ie7icon(''); } .icon-align-center { @include ie7icon(''); } .icon-align-right { @include ie7icon(''); } .icon-align-justify { @include ie7icon(''); } .icon-list { @include ie7icon(''); } .icon-indent-left { @include ie7icon(''); } .icon-indent-right { @include ie7icon(''); } .icon-facetime-video { @include ie7icon(''); } .icon-picture { @include ie7icon(''); } .icon-pencil { @include ie7icon(''); } .icon-map-marker { @include ie7icon(''); } .icon-adjust { @include ie7icon(''); } .icon-tint { @include ie7icon(''); } .icon-edit { @include ie7icon(''); } .icon-share { @include ie7icon(''); } .icon-check { @include ie7icon(''); } .icon-move { @include ie7icon(''); } .icon-step-backward { @include ie7icon(''); } .icon-fast-backward { @include ie7icon(''); } .icon-backward { @include ie7icon(''); } .icon-play { @include ie7icon(''); } .icon-pause { @include ie7icon(''); } .icon-stop { @include ie7icon(''); } .icon-forward { @include ie7icon(''); } .icon-fast-forward { @include ie7icon(''); } .icon-step-forward { @include ie7icon(''); } .icon-eject { @include ie7icon(''); } .icon-chevron-left { @include ie7icon(''); } .icon-chevron-right { @include ie7icon(''); } .icon-plus-sign { @include ie7icon(''); } .icon-minus-sign { @include ie7icon(''); } .icon-remove-sign { @include ie7icon(''); } .icon-ok-sign { @include ie7icon(''); } .icon-question-sign { @include ie7icon(''); } .icon-info-sign { @include ie7icon(''); } .icon-screenshot { @include ie7icon(''); } .icon-remove-circle { @include ie7icon(''); } .icon-ok-circle { @include ie7icon(''); } .icon-ban-circle { @include ie7icon(''); } .icon-arrow-left { @include ie7icon(''); } .icon-arrow-right { @include ie7icon(''); } .icon-arrow-up { @include ie7icon(''); } .icon-arrow-down { @include ie7icon(''); } .icon-share-alt { @include ie7icon(''); } .icon-mail-forward { @include ie7icon(''); } .icon-resize-full { @include ie7icon(''); } .icon-resize-small { @include ie7icon(''); } .icon-plus { @include ie7icon(''); } .icon-minus { @include ie7icon(''); } .icon-asterisk { @include ie7icon(''); } .icon-exclamation-sign { @include ie7icon(''); } .icon-gift { @include ie7icon(''); } .icon-leaf { @include ie7icon(''); } .icon-fire { @include ie7icon(''); } .icon-eye-open { @include ie7icon(''); } .icon-eye-close { @include ie7icon(''); } .icon-warning-sign { @include ie7icon(''); } .icon-plane { @include ie7icon(''); } .icon-calendar { @include ie7icon(''); } .icon-random { @include ie7icon(''); } .icon-comment { @include ie7icon(''); } .icon-magnet { @include ie7icon(''); } .icon-chevron-up { @include ie7icon(''); } .icon-chevron-down { @include ie7icon(''); } .icon-retweet { @include ie7icon(''); } .icon-shopping-cart { @include ie7icon(''); } .icon-folder-close { @include ie7icon(''); } .icon-folder-open { @include ie7icon(''); } .icon-resize-vertical { @include ie7icon(''); } .icon-resize-horizontal { @include ie7icon(''); } .icon-bar-chart { @include ie7icon(''); } .icon-twitter-sign { @include ie7icon(''); } .icon-facebook-sign { @include ie7icon(''); } .icon-camera-retro { @include ie7icon(''); } .icon-key { @include ie7icon(''); } .icon-cogs { @include ie7icon(''); } .icon-comments { @include ie7icon(''); } .icon-thumbs-up-alt { @include ie7icon(''); } .icon-thumbs-down-alt { @include ie7icon(''); } .icon-star-half { @include ie7icon(''); } .icon-heart-empty { @include ie7icon(''); } .icon-signout { @include ie7icon(''); } .icon-linkedin-sign { @include ie7icon(''); } .icon-pushpin { @include ie7icon(''); } .icon-external-link { @include ie7icon(''); } .icon-signin { @include ie7icon(''); } .icon-trophy { @include ie7icon(''); } .icon-github-sign { @include ie7icon(''); } .icon-upload-alt { @include ie7icon(''); } .icon-lemon { @include ie7icon(''); } .icon-phone { @include ie7icon(''); } .icon-check-empty { @include ie7icon(''); } .icon-unchecked { @include ie7icon(''); } .icon-bookmark-empty { @include ie7icon(''); } .icon-phone-sign { @include ie7icon(''); } .icon-twitter { @include ie7icon(''); } .icon-facebook { @include ie7icon(''); } .icon-github { @include ie7icon(''); } .icon-unlock { @include ie7icon(''); } .icon-credit-card { @include ie7icon(''); } .icon-rss { @include ie7icon(''); } .icon-hdd { @include ie7icon(''); } .icon-bullhorn { @include ie7icon(''); } .icon-bell { @include ie7icon(''); } .icon-certificate { @include ie7icon(''); } .icon-hand-right { @include ie7icon(''); } .icon-hand-left { @include ie7icon(''); } .icon-hand-up { @include ie7icon(''); } .icon-hand-down { @include ie7icon(''); } .icon-circle-arrow-left { @include ie7icon(''); } .icon-circle-arrow-right { @include ie7icon(''); } .icon-circle-arrow-up { @include ie7icon(''); } .icon-circle-arrow-down { @include ie7icon(''); } .icon-globe { @include ie7icon(''); } .icon-wrench { @include ie7icon(''); } .icon-tasks { @include ie7icon(''); } .icon-filter { @include ie7icon(''); } .icon-briefcase { @include ie7icon(''); } .icon-fullscreen { @include ie7icon(''); } .icon-group { @include ie7icon(''); } .icon-link { @include ie7icon(''); } .icon-cloud { @include ie7icon(''); } .icon-beaker { @include ie7icon(''); } .icon-cut { @include ie7icon(''); } .icon-copy { @include ie7icon(''); } .icon-paper-clip { @include ie7icon(''); } .icon-paperclip { @include ie7icon(''); } .icon-save { @include ie7icon(''); } .icon-sign-blank { @include ie7icon(''); } .icon-reorder { @include ie7icon(''); } .icon-list-ul { @include ie7icon(''); } .icon-list-ol { @include ie7icon(''); } .icon-strikethrough { @include ie7icon(''); } .icon-underline { @include ie7icon(''); } .icon-table { @include ie7icon(''); } .icon-magic { @include ie7icon(''); } .icon-truck { @include ie7icon(''); } .icon-pinterest { @include ie7icon(''); } .icon-pinterest-sign { @include ie7icon(''); } .icon-google-plus-sign { @include ie7icon(''); } .icon-google-plus { @include ie7icon(''); } .icon-money { @include ie7icon(''); } .icon-caret-down { @include ie7icon(''); } .icon-caret-up { @include ie7icon(''); } .icon-caret-left { @include ie7icon(''); } .icon-caret-right { @include ie7icon(''); } .icon-columns { @include ie7icon(''); } .icon-sort { @include ie7icon(''); } .icon-sort-down { @include ie7icon(''); } .icon-sort-up { @include ie7icon(''); } .icon-envelope { @include ie7icon(''); } .icon-linkedin { @include ie7icon(''); } .icon-undo { @include ie7icon(''); } .icon-rotate-left { @include ie7icon(''); } .icon-legal { @include ie7icon(''); } .icon-dashboard { @include ie7icon(''); } .icon-comment-alt { @include ie7icon(''); } .icon-comments-alt { @include ie7icon(''); } .icon-bolt { @include ie7icon(''); } .icon-sitemap { @include ie7icon(''); } .icon-umbrella { @include ie7icon(''); } .icon-paste { @include ie7icon(''); } .icon-lightbulb { @include ie7icon(''); } .icon-exchange { @include ie7icon(''); } .icon-cloud-download { @include ie7icon(''); } .icon-cloud-upload { @include ie7icon(''); } .icon-user-md { @include ie7icon(''); } .icon-stethoscope { @include ie7icon(''); } .icon-suitcase { @include ie7icon(''); } .icon-bell-alt { @include ie7icon(''); } .icon-coffee { @include ie7icon(''); } .icon-food { @include ie7icon(''); } .icon-file-text-alt { @include ie7icon(''); } .icon-building { @include ie7icon(''); } .icon-hospital { @include ie7icon(''); } .icon-ambulance { @include ie7icon(''); } .icon-medkit { @include ie7icon(''); } .icon-fighter-jet { @include ie7icon(''); } .icon-beer { @include ie7icon(''); } .icon-h-sign { @include ie7icon(''); } .icon-plus-sign-alt { @include ie7icon(''); } .icon-double-angle-left { @include ie7icon(''); } .icon-double-angle-right { @include ie7icon(''); } .icon-double-angle-up { @include ie7icon(''); } .icon-double-angle-down { @include ie7icon(''); } .icon-angle-left { @include ie7icon(''); } .icon-angle-right { @include ie7icon(''); } .icon-angle-up { @include ie7icon(''); } .icon-angle-down { @include ie7icon(''); } .icon-desktop { @include ie7icon(''); } .icon-laptop { @include ie7icon(''); } .icon-tablet { @include ie7icon(''); } .icon-mobile-phone { @include ie7icon(''); } .icon-circle-blank { @include ie7icon(''); } .icon-quote-left { @include ie7icon(''); } .icon-quote-right { @include ie7icon(''); } .icon-spinner { @include ie7icon(''); } .icon-circle { @include ie7icon(''); } .icon-reply { @include ie7icon(''); } .icon-mail-reply { @include ie7icon(''); } .icon-github-alt { @include ie7icon(''); } .icon-folder-close-alt { @include ie7icon(''); } .icon-folder-open-alt { @include ie7icon(''); } .icon-expand-alt { @include ie7icon(''); } .icon-collapse-alt { @include ie7icon(''); } .icon-smile { @include ie7icon(''); } .icon-frown { @include ie7icon(''); } .icon-meh { @include ie7icon(''); } .icon-gamepad { @include ie7icon(''); } .icon-keyboard { @include ie7icon(''); } .icon-flag-alt { @include ie7icon(''); } .icon-flag-checkered { @include ie7icon(''); } .icon-terminal { @include ie7icon(''); } .icon-code { @include ie7icon(''); } .icon-reply-all { @include ie7icon(''); } .icon-mail-reply-all { @include ie7icon(''); } .icon-star-half-empty { @include ie7icon(''); } .icon-star-half-full { @include ie7icon(''); } .icon-location-arrow { @include ie7icon(''); } .icon-crop { @include ie7icon(''); } .icon-code-fork { @include ie7icon(''); } .icon-unlink { @include ie7icon(''); } .icon-question { @include ie7icon(''); } .icon-info { @include ie7icon(''); } .icon-exclamation { @include ie7icon(''); } .icon-superscript { @include ie7icon(''); } .icon-subscript { @include ie7icon(''); } .icon-eraser { @include ie7icon(''); } .icon-puzzle-piece { @include ie7icon(''); } .icon-microphone { @include ie7icon(''); } .icon-microphone-off { @include ie7icon(''); } .icon-shield { @include ie7icon(''); } .icon-calendar-empty { @include ie7icon(''); } .icon-fire-extinguisher { @include ie7icon(''); } .icon-rocket { @include ie7icon(''); } .icon-maxcdn { @include ie7icon(''); } .icon-chevron-sign-left { @include ie7icon(''); } .icon-chevron-sign-right { @include ie7icon(''); } .icon-chevron-sign-up { @include ie7icon(''); } .icon-chevron-sign-down { @include ie7icon(''); } .icon-html5 { @include ie7icon(''); } .icon-css3 { @include ie7icon(''); } .icon-anchor { @include ie7icon(''); } .icon-unlock-alt { @include ie7icon(''); } .icon-bullseye { @include ie7icon(''); } .icon-ellipsis-horizontal { @include ie7icon(''); } .icon-ellipsis-vertical { @include ie7icon(''); } .icon-rss-sign { @include ie7icon(''); } .icon-play-sign { @include ie7icon(''); } .icon-ticket { @include ie7icon(''); } .icon-minus-sign-alt { @include ie7icon(''); } .icon-check-minus { @include ie7icon(''); } .icon-level-up { @include ie7icon(''); } .icon-level-down { @include ie7icon(''); } .icon-check-sign { @include ie7icon(''); } .icon-edit-sign { @include ie7icon(''); } .icon-external-link-sign { @include ie7icon(''); } .icon-share-sign { @include ie7icon(''); } .icon-compass { @include ie7icon(''); } .icon-collapse { @include ie7icon(''); } .icon-collapse-top { @include ie7icon(''); } .icon-expand { @include ie7icon(''); } .icon-eur { @include ie7icon(''); } .icon-euro { @include ie7icon(''); } .icon-gbp { @include ie7icon(''); } .icon-usd { @include ie7icon(''); } .icon-dollar { @include ie7icon(''); } .icon-inr { @include ie7icon(''); } .icon-rupee { @include ie7icon(''); } .icon-jpy { @include ie7icon(''); } .icon-yen { @include ie7icon(''); } .icon-cny { @include ie7icon(''); } .icon-renminbi { @include ie7icon(''); } .icon-krw { @include ie7icon(''); } .icon-won { @include ie7icon(''); } .icon-btc { @include ie7icon(''); } .icon-bitcoin { @include ie7icon(''); } .icon-file { @include ie7icon(''); } .icon-file-text { @include ie7icon(''); } .icon-sort-by-alphabet { @include ie7icon(''); } .icon-sort-by-alphabet-alt { @include ie7icon(''); } .icon-sort-by-attributes { @include ie7icon(''); } .icon-sort-by-attributes-alt { @include ie7icon(''); } .icon-sort-by-order { @include ie7icon(''); } .icon-sort-by-order-alt { @include ie7icon(''); } .icon-thumbs-up { @include ie7icon(''); } .icon-thumbs-down { @include ie7icon(''); } .icon-youtube-sign { @include ie7icon(''); } .icon-youtube { @include ie7icon(''); } .icon-xing { @include ie7icon(''); } .icon-xing-sign { @include ie7icon(''); } .icon-youtube-play { @include ie7icon(''); } .icon-dropbox { @include ie7icon(''); } .icon-stackexchange { @include ie7icon(''); } .icon-instagram { @include ie7icon(''); } .icon-flickr { @include ie7icon(''); } .icon-adn { @include ie7icon(''); } .icon-bitbucket { @include ie7icon(''); } .icon-bitbucket-sign { @include ie7icon(''); } .icon-tumblr { @include ie7icon(''); } .icon-tumblr-sign { @include ie7icon(''); } .icon-long-arrow-down { @include ie7icon(''); } .icon-long-arrow-up { @include ie7icon(''); } .icon-long-arrow-left { @include ie7icon(''); } .icon-long-arrow-right { @include ie7icon(''); } .icon-apple { @include ie7icon(''); } .icon-windows { @include ie7icon(''); } .icon-android { @include ie7icon(''); } .icon-linux { @include ie7icon(''); } .icon-dribble { @include ie7icon(''); } .icon-skype { @include ie7icon(''); } .icon-foursquare { @include ie7icon(''); } .icon-trello { @include ie7icon(''); } .icon-female { @include ie7icon(''); } .icon-male { @include ie7icon(''); } .icon-gittip { @include ie7icon(''); } .icon-sun { @include ie7icon(''); } .icon-moon { @include ie7icon(''); } .icon-archive { @include ie7icon(''); } .icon-bug { @include ie7icon(''); } .icon-vk { @include ie7icon(''); } .icon-weibo { @include ie7icon(''); } .icon-renren { @include ie7icon(''); } ================================================ FILE: src/main/webapp/style/eu/theme/fonts/font-awesome/scss/font-awesome.scss ================================================ /*! * Font Awesome 3.2.0 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/byscuits * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ @import "variables"; @import "mixins"; @import "path"; @import "core"; @import "bootstrap"; @import "extras"; @import "icons"; ================================================ FILE: src/main/webapp/style/eu/theme/fonts/glyphicons/css/glyphicons.css ================================================ /*! * * Project: GLYPHICONS * Author: Jan Kovarik - www.glyphicons.com * Twitter: @jankovarik * */ html, html .halflings { -webkit-font-smoothing: antialiased !important; } @font-face { font-family: 'Glyphicons'; src: url('../fonts/glyphicons-regular.eot'); src: url('../fonts/glyphicons-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-regular.woff') format('woff'), url('../fonts/glyphicons-regular.ttf') format('truetype'), url('../fonts/glyphicons-regular.svg#glyphicons_halflingsregular') format('svg'), url('../fonts/glyphicons-regular.otf') format('opentype'); font-weight: normal; font-style: normal; } .glyphicons { display: inline-block; position: relative; padding: 5px 0 5px 35px; color: #1d1d1b; text-decoration: none; *display: inline; *zoom: 1; } .glyphicons i:before { position: absolute; left: 0; top: 0; font: 24px/1em 'Glyphicons'; font-style: normal; color: #1d1d1b; } .glyphicons.white i:before { color: #fff; } .glyphicons.glass i:before { content: "\e001"; } .glyphicons.leaf i:before { content: "\e002"; } .glyphicons.dog i:before { content: "\e003"; } .glyphicons.user i:before { content: "\e004"; } .glyphicons.girl i:before { content: "\e005"; } .glyphicons.car i:before { content: "\e006"; } .glyphicons.user_add i:before { content: "\e007"; } .glyphicons.user_remove i:before { content: "\e008"; } .glyphicons.film i:before { content: "\e009"; } .glyphicons.magic i:before { content: "\e010"; } .glyphicons.envelope i:before { content: "\2709"; } .glyphicons.camera i:before { content: "\e012"; } .glyphicons.heart i:before { content: "\e013"; } .glyphicons.beach_umbrella i:before { content: "\e014"; } .glyphicons.train i:before { content: "\e015"; } .glyphicons.print i:before { content: "\e016"; } .glyphicons.bin i:before { content: "\e017"; } .glyphicons.music i:before { content: "\e018"; } .glyphicons.note i:before { content: "\e019"; } .glyphicons.heart_empty i:before { content: "\e020"; } .glyphicons.home i:before { content: "\e021"; } .glyphicons.snowflake i:before { content: "\2744"; } .glyphicons.fire i:before { content: "\e023"; } .glyphicons.magnet i:before { content: "\e024"; } .glyphicons.parents i:before { content: "\e025"; } .glyphicons.binoculars i:before { content: "\e026"; } .glyphicons.road i:before { content: "\e027"; } .glyphicons.search i:before { content: "\e028"; } .glyphicons.cars i:before { content: "\e029"; } .glyphicons.notes_2 i:before { content: "\e030"; } .glyphicons.pencil i:before { content: "\270F"; } .glyphicons.bus i:before { content: "\e032"; } .glyphicons.wifi_alt i:before { content: "\e033"; } .glyphicons.luggage i:before { content: "\e034"; } .glyphicons.old_man i:before { content: "\e035"; } .glyphicons.woman i:before { content: "\e036"; } .glyphicons.file i:before { content: "\e037"; } .glyphicons.coins i:before { content: "\e038"; } .glyphicons.airplane i:before { content: "\2708"; } .glyphicons.notes i:before { content: "\e040"; } .glyphicons.stats i:before { content: "\e041"; } .glyphicons.charts i:before { content: "\e042"; } .glyphicons.pie_chart i:before { content: "\e043"; } .glyphicons.group i:before { content: "\e044"; } .glyphicons.keys i:before { content: "\e045"; } .glyphicons.calendar i:before { content: "\e046"; } .glyphicons.router i:before { content: "\e047"; } .glyphicons.camera_small i:before { content: "\e048"; } .glyphicons.dislikes i:before { content: "\e049"; } .glyphicons.star i:before { content: "\e050"; } .glyphicons.link i:before { content: "\e051"; } .glyphicons.eye_open i:before { content: "\e052"; } .glyphicons.eye_close i:before { content: "\e053"; } .glyphicons.alarm i:before { content: "\e054"; } .glyphicons.clock i:before { content: "\e055"; } .glyphicons.stopwatch i:before { content: "\e056"; } .glyphicons.projector i:before { content: "\e057"; } .glyphicons.history i:before { content: "\e058"; } .glyphicons.truck i:before { content: "\e059"; } .glyphicons.cargo i:before { content: "\e060"; } .glyphicons.compass i:before { content: "\e061"; } .glyphicons.keynote i:before { content: "\e062"; } .glyphicons.paperclip i:before { content: "\e063"; } .glyphicons.power i:before { content: "\e064"; } .glyphicons.lightbulb i:before { content: "\e065"; } .glyphicons.tag i:before { content: "\e066"; } .glyphicons.tags i:before { content: "\e067"; } .glyphicons.cleaning i:before { content: "\e068"; } .glyphicons.ruller i:before { content: "\e069"; } .glyphicons.gift i:before { content: "\e070"; } .glyphicons.umbrella i:before { content: "\2602"; } .glyphicons.book i:before { content: "\e072"; } .glyphicons.bookmark i:before { content: "\e073"; } .glyphicons.wifi i:before { content: "\e074"; } .glyphicons.cup i:before { content: "\e075"; } .glyphicons.stroller i:before { content: "\e076"; } .glyphicons.headphones i:before { content: "\e077"; } .glyphicons.headset i:before { content: "\e078"; } .glyphicons.warning_sign i:before { content: "\e079"; } .glyphicons.signal i:before { content: "\e080"; } .glyphicons.retweet i:before { content: "\e081"; } .glyphicons.refresh i:before { content: "\e082"; } .glyphicons.roundabout i:before { content: "\e083"; } .glyphicons.random i:before { content: "\e084"; } .glyphicons.heat i:before { content: "\e085"; } .glyphicons.repeat i:before { content: "\e086"; } .glyphicons.display i:before { content: "\e087"; } .glyphicons.log_book i:before { content: "\e088"; } .glyphicons.adress_book i:before { content: "\e089"; } .glyphicons.building i:before { content: "\e090"; } .glyphicons.eyedropper i:before { content: "\e091"; } .glyphicons.adjust i:before { content: "\e092"; } .glyphicons.tint i:before { content: "\e093"; } .glyphicons.crop i:before { content: "\e094"; } .glyphicons.vector_path_square i:before { content: "\e095"; } .glyphicons.vector_path_circle i:before { content: "\e096"; } .glyphicons.vector_path_polygon i:before { content: "\e097"; } .glyphicons.vector_path_line i:before { content: "\e098"; } .glyphicons.vector_path_curve i:before { content: "\e099"; } .glyphicons.vector_path_all i:before { content: "\e100"; } .glyphicons.font i:before { content: "\e101"; } .glyphicons.italic i:before { content: "\e102"; } .glyphicons.bold i:before { content: "\e103"; } .glyphicons.text_underline i:before { content: "\e104"; } .glyphicons.text_strike i:before { content: "\e105"; } .glyphicons.text_height i:before { content: "\e106"; } .glyphicons.text_width i:before { content: "\e107"; } .glyphicons.text_resize i:before { content: "\e108"; } .glyphicons.left_indent i:before { content: "\e109"; } .glyphicons.right_indent i:before { content: "\e110"; } .glyphicons.align_left i:before { content: "\e111"; } .glyphicons.align_center i:before { content: "\e112"; } .glyphicons.align_right i:before { content: "\e113"; } .glyphicons.justify i:before { content: "\e114"; } .glyphicons.list i:before { content: "\e115"; } .glyphicons.text_smaller i:before { content: "\e116"; } .glyphicons.text_bigger i:before { content: "\e117"; } .glyphicons.embed i:before { content: "\e118"; } .glyphicons.embed_close i:before { content: "\e119"; } .glyphicons.table i:before { content: "\e120"; } .glyphicons.message_full i:before { content: "\e121"; } .glyphicons.message_empty i:before { content: "\e122"; } .glyphicons.message_in i:before { content: "\e123"; } .glyphicons.message_out i:before { content: "\e124"; } .glyphicons.message_plus i:before { content: "\e125"; } .glyphicons.message_minus i:before { content: "\e126"; } .glyphicons.message_ban i:before { content: "\e127"; } .glyphicons.message_flag i:before { content: "\e128"; } .glyphicons.message_lock i:before { content: "\e129"; } .glyphicons.message_new i:before { content: "\e130"; } .glyphicons.inbox i:before { content: "\e131"; } .glyphicons.inbox_plus i:before { content: "\e132"; } .glyphicons.inbox_minus i:before { content: "\e133"; } .glyphicons.inbox_lock i:before { content: "\e134"; } .glyphicons.inbox_in i:before { content: "\e135"; } .glyphicons.inbox_out i:before { content: "\e136"; } .glyphicons.cogwheel i:before { content: "\e137"; } .glyphicons.cogwheels i:before { content: "\e138"; } .glyphicons.picture i:before { content: "\e139"; } .glyphicons.adjust_alt i:before { content: "\e140"; } .glyphicons.database_lock i:before { content: "\e141"; } .glyphicons.database_plus i:before { content: "\e142"; } .glyphicons.database_minus i:before { content: "\e143"; } .glyphicons.database_ban i:before { content: "\e144"; } .glyphicons.folder_open i:before { content: "\e145"; } .glyphicons.folder_plus i:before { content: "\e146"; } .glyphicons.folder_minus i:before { content: "\e147"; } .glyphicons.folder_lock i:before { content: "\e148"; } .glyphicons.folder_flag i:before { content: "\e149"; } .glyphicons.folder_new i:before { content: "\e150"; } .glyphicons.edit i:before { content: "\e151"; } .glyphicons.new_window i:before { content: "\e152"; } .glyphicons.check i:before { content: "\e153"; } .glyphicons.unchecked i:before { content: "\e154"; } .glyphicons.more_windows i:before { content: "\e155"; } .glyphicons.show_big_thumbnails i:before { content: "\e156"; } .glyphicons.show_thumbnails i:before { content: "\e157"; } .glyphicons.show_thumbnails_with_lines i:before { content: "\e158"; } .glyphicons.show_lines i:before { content: "\e159"; } .glyphicons.playlist i:before { content: "\e160"; } .glyphicons.imac i:before { content: "\e161"; } .glyphicons.macbook i:before { content: "\e162"; } .glyphicons.ipad i:before { content: "\e163"; } .glyphicons.iphone i:before { content: "\e164"; } .glyphicons.iphone_transfer i:before { content: "\e165"; } .glyphicons.iphone_exchange i:before { content: "\e166"; } .glyphicons.ipod i:before { content: "\e167"; } .glyphicons.ipod_shuffle i:before { content: "\e168"; } .glyphicons.ear_plugs i:before { content: "\e169"; } .glyphicons.phone i:before { content: "\e170"; } .glyphicons.step_backward i:before { content: "\e171"; } .glyphicons.fast_backward i:before { content: "\e172"; } .glyphicons.rewind i:before { content: "\e173"; } .glyphicons.play i:before { content: "\e174"; } .glyphicons.pause i:before { content: "\e175"; } .glyphicons.stop i:before { content: "\e176"; } .glyphicons.forward i:before { content: "\e177"; } .glyphicons.fast_forward i:before { content: "\e178"; } .glyphicons.step_forward i:before { content: "\e179"; } .glyphicons.eject i:before { content: "\e180"; } .glyphicons.facetime_video i:before { content: "\e181"; } .glyphicons.download_alt i:before { content: "\e182"; } .glyphicons.mute i:before { content: "\e183"; } .glyphicons.volume_down i:before { content: "\e184"; } .glyphicons.volume_up i:before { content: "\e185"; } .glyphicons.screenshot i:before { content: "\e186"; } .glyphicons.move i:before { content: "\e187"; } .glyphicons.more i:before { content: "\e188"; } .glyphicons.brightness_reduce i:before { content: "\e189"; } .glyphicons.brightness_increase i:before { content: "\e190"; } .glyphicons.circle_plus i:before { content: "\e191"; } .glyphicons.circle_minus i:before { content: "\e192"; } .glyphicons.circle_remove i:before { content: "\e193"; } .glyphicons.circle_ok i:before { content: "\e194"; } .glyphicons.circle_question_mark i:before { content: "\e195"; } .glyphicons.circle_info i:before { content: "\e196"; } .glyphicons.circle_exclamation_mark i:before { content: "\e197"; } .glyphicons.remove i:before { content: "\e198"; } .glyphicons.ok i:before { content: "\e199"; } .glyphicons.ban i:before { content: "\e200"; } .glyphicons.download i:before { content: "\e201"; } .glyphicons.upload i:before { content: "\e202"; } .glyphicons.shopping_cart i:before { content: "\e203"; } .glyphicons.lock i:before { content: "\e204"; } .glyphicons.unlock i:before { content: "\e205"; } .glyphicons.electricity i:before { content: "\e206"; } .glyphicons.ok_2 i:before { content: "\e207"; } .glyphicons.remove_2 i:before { content: "\e208"; } .glyphicons.cart_out i:before { content: "\e209"; } .glyphicons.cart_in i:before { content: "\e210"; } .glyphicons.left_arrow i:before { content: "\e211"; } .glyphicons.right_arrow i:before { content: "\e212"; } .glyphicons.down_arrow i:before { content: "\e213"; } .glyphicons.up_arrow i:before { content: "\e214"; } .glyphicons.resize_small i:before { content: "\e215"; } .glyphicons.resize_full i:before { content: "\e216"; } .glyphicons.circle_arrow_left i:before { content: "\e217"; } .glyphicons.circle_arrow_right i:before { content: "\e218"; } .glyphicons.circle_arrow_top i:before { content: "\e219"; } .glyphicons.circle_arrow_down i:before { content: "\e220"; } .glyphicons.play_button i:before { content: "\e221"; } .glyphicons.unshare i:before { content: "\e222"; } .glyphicons.share i:before { content: "\e223"; } .glyphicons.chevron-right i:before { content: "\e224"; } .glyphicons.chevron-left i:before { content: "\e225"; } .glyphicons.bluetooth i:before { content: "\e226"; } .glyphicons.euro i:before { content: "\20AC"; } .glyphicons.usd i:before { content: "\e228"; } .glyphicons.gbp i:before { content: "\e229"; } .glyphicons.retweet_2 i:before { content: "\e230"; } .glyphicons.moon i:before { content: "\e231"; } .glyphicons.sun i:before { content: "\2609"; } .glyphicons.cloud i:before { content: "\2601"; } .glyphicons.direction i:before { content: "\e234"; } .glyphicons.brush i:before { content: "\e235"; } .glyphicons.pen i:before { content: "\e236"; } .glyphicons.zoom_in i:before { content: "\e237"; } .glyphicons.zoom_out i:before { content: "\e238"; } .glyphicons.pin i:before { content: "\e239"; } .glyphicons.albums i:before { content: "\e240"; } .glyphicons.rotation_lock i:before { content: "\e241"; } .glyphicons.flash i:before { content: "\e242"; } .glyphicons.google_maps i:before { content: "\e243"; } .glyphicons.anchor i:before { content: "\2693"; } .glyphicons.conversation i:before { content: "\e245"; } .glyphicons.chat i:before { content: "\e246"; } .glyphicons.male i:before { content: "\e247"; } .glyphicons.female i:before { content: "\e248"; } .glyphicons.asterisk i:before { content: "\002A"; } .glyphicons.divide i:before { content: "\00F7"; } .glyphicons.snorkel_diving i:before { content: "\e251"; } .glyphicons.scuba_diving i:before { content: "\e252"; } .glyphicons.oxygen_bottle i:before { content: "\e253"; } .glyphicons.fins i:before { content: "\e254"; } .glyphicons.fishes i:before { content: "\e255"; } .glyphicons.boat i:before { content: "\e256"; } .glyphicons.delete i:before { content: "\e257"; } .glyphicons.sheriffs_star i:before { content: "\e258"; } .glyphicons.qrcode i:before { content: "\e259"; } .glyphicons.barcode i:before { content: "\e260"; } .glyphicons.pool i:before { content: "\e261"; } .glyphicons.buoy i:before { content: "\e262"; } .glyphicons.spade i:before { content: "\e263"; } .glyphicons.bank i:before { content: "\e264"; } .glyphicons.vcard i:before { content: "\e265"; } .glyphicons.electrical_plug i:before { content: "\e266"; } .glyphicons.flag i:before { content: "\e267"; } .glyphicons.credit_card i:before { content: "\e268"; } .glyphicons.keyboard-wireless i:before { content: "\e269"; } .glyphicons.keyboard-wired i:before { content: "\e270"; } .glyphicons.shield i:before { content: "\e271"; } .glyphicons.ring i:before { content: "\02DA"; } .glyphicons.cake i:before { content: "\e273"; } .glyphicons.drink i:before { content: "\e274"; } .glyphicons.beer i:before { content: "\e275"; } .glyphicons.fast_food i:before { content: "\e276"; } .glyphicons.cutlery i:before { content: "\e277"; } .glyphicons.pizza i:before { content: "\e278"; } .glyphicons.birthday_cake i:before { content: "\e279"; } .glyphicons.tablet i:before { content: "\e280"; } .glyphicons.settings i:before { content: "\e281"; } .glyphicons.bullets i:before { content: "\e282"; } .glyphicons.cardio i:before { content: "\e283"; } .glyphicons.t-shirt i:before { content: "\e284"; } .glyphicons.pants i:before { content: "\e285"; } .glyphicons.sweater i:before { content: "\e286"; } .glyphicons.fabric i:before { content: "\e287"; } .glyphicons.leather i:before { content: "\e288"; } .glyphicons.scissors i:before { content: "\e289"; } .glyphicons.bomb i:before { content: "\e290"; } .glyphicons.skull i:before { content: "\e291"; } .glyphicons.celebration i:before { content: "\e292"; } .glyphicons.tea_kettle i:before { content: "\e293"; } .glyphicons.french_press i:before { content: "\e294"; } .glyphicons.coffe_cup i:before { content: "\e295"; } .glyphicons.pot i:before { content: "\e296"; } .glyphicons.grater i:before { content: "\e297"; } .glyphicons.kettle i:before { content: "\e298"; } .glyphicons.hospital i:before { content: "\e299"; } .glyphicons.hospital_h i:before { content: "\e300"; } .glyphicons.microphone i:before { content: "\e301"; } .glyphicons.webcam i:before { content: "\e302"; } .glyphicons.temple_christianity_church i:before { content: "\e303"; } .glyphicons.temple_islam i:before { content: "\e304"; } .glyphicons.temple_hindu i:before { content: "\e305"; } .glyphicons.temple_buddhist i:before { content: "\e306"; } .glyphicons.bicycle i:before { content: "\e307"; } .glyphicons.life_preserver i:before { content: "\e308"; } .glyphicons.share_alt i:before { content: "\e309"; } .glyphicons.comments i:before { content: "\e310"; } .glyphicons.flower i:before { content: "\2698"; } .glyphicons.baseball i:before { content: "\e312"; } .glyphicons.rugby i:before { content: "\e313"; } .glyphicons.ax i:before { content: "\e314"; } .glyphicons.table_tennis i:before { content: "\e315"; } .glyphicons.bowling i:before { content: "\e316"; } .glyphicons.tree_conifer i:before { content: "\e317"; } .glyphicons.tree_deciduous i:before { content: "\e318"; } .glyphicons.more_items i:before { content: "\e319"; } .glyphicons.sort i:before { content: "\e320"; } .glyphicons.filter i:before { content: "\e321"; } .glyphicons.gamepad i:before { content: "\e322"; } .glyphicons.playing_dices i:before { content: "\e323"; } .glyphicons.calculator i:before { content: "\e324"; } .glyphicons.tie i:before { content: "\e325"; } .glyphicons.wallet i:before { content: "\e326"; } .glyphicons.piano i:before { content: "\e327"; } .glyphicons.sampler i:before { content: "\e328"; } .glyphicons.podium i:before { content: "\e329"; } .glyphicons.soccer_ball i:before { content: "\e330"; } .glyphicons.blog i:before { content: "\e331"; } .glyphicons.dashboard i:before { content: "\e332"; } .glyphicons.certificate i:before { content: "\e333"; } .glyphicons.bell i:before { content: "\e334"; } .glyphicons.candle i:before { content: "\e335"; } .glyphicons.pushpin i:before { content: "\e336"; } .glyphicons.iphone_shake i:before { content: "\e337"; } .glyphicons.pin_flag i:before { content: "\e338"; } .glyphicons.turtle i:before { content: "\e339"; } .glyphicons.rabbit i:before { content: "\e340"; } .glyphicons.globe i:before { content: "\e341"; } .glyphicons.briefcase i:before { content: "\e342"; } .glyphicons.hdd i:before { content: "\e343"; } .glyphicons.thumbs_up i:before { content: "\e344"; } .glyphicons.thumbs_down i:before { content: "\e345"; } .glyphicons.hand_right i:before { content: "\e346"; } .glyphicons.hand_left i:before { content: "\e347"; } .glyphicons.hand_up i:before { content: "\e348"; } .glyphicons.hand_down i:before { content: "\e349"; } .glyphicons.fullscreen i:before { content: "\e350"; } .glyphicons.shopping_bag i:before { content: "\e351"; } .glyphicons.book_open i:before { content: "\e352"; } .glyphicons.nameplate i:before { content: "\e353"; } .glyphicons.nameplate_alt i:before { content: "\e354"; } .glyphicons.vases i:before { content: "\e355"; } .glyphicons.bullhorn i:before { content: "\e356"; } .glyphicons.dumbbell i:before { content: "\e357"; } .glyphicons.suitcase i:before { content: "\e358"; } .glyphicons.file_import i:before { content: "\e359"; } .glyphicons.file_export i:before { content: "\e360"; } .glyphicons.bug i:before { content: "\e361"; } .glyphicons.crown i:before { content: "\e362"; } .glyphicons.smoking i:before { content: "\e363"; } .glyphicons.cloud-upload i:before { content: "\e364"; } .glyphicons.cloud-download i:before { content: "\e365"; } .glyphicons.restart i:before { content: "\e366"; } .glyphicons.security_camera i:before { content: "\e367"; } .glyphicons.expand i:before { content: "\e368"; } .glyphicons.collapse i:before { content: "\e369"; } .glyphicons.collapse_top i:before { content: "\e370"; } .glyphicons.globe_af i:before { content: "\e371"; } .glyphicons.global i:before { content: "\e372"; } .glyphicons.spray i:before { content: "\e373"; } .glyphicons.nails i:before { content: "\e374"; } .glyphicons.claw_hammer i:before { content: "\e375"; } .glyphicons.classic_hammer i:before { content: "\e376"; } .glyphicons.hand_saw i:before { content: "\e377"; } .glyphicons.riflescope i:before { content: "\e378"; } .glyphicons.electrical_socket_eu i:before { content: "\e379"; } .glyphicons.electrical_socket_us i:before { content: "\e380"; } .glyphicons.pinterest i:before { content: "\e381"; } .glyphicons.dropbox i:before { content: "\e382"; } .glyphicons.google_plus i:before { content: "\e383"; } .glyphicons.jolicloud i:before { content: "\e384"; } .glyphicons.yahoo i:before { content: "\e385"; } .glyphicons.blogger i:before { content: "\e386"; } .glyphicons.picasa i:before { content: "\e387"; } .glyphicons.amazon i:before { content: "\e388"; } .glyphicons.tumblr i:before { content: "\e389"; } .glyphicons.wordpress i:before { content: "\e390"; } .glyphicons.instapaper i:before { content: "\e391"; } .glyphicons.evernote i:before { content: "\e392"; } .glyphicons.xing i:before { content: "\e393"; } .glyphicons.zootool i:before { content: "\e394"; } .glyphicons.dribbble i:before { content: "\e395"; } .glyphicons.deviantart i:before { content: "\e396"; } .glyphicons.read_it_later i:before { content: "\e397"; } .glyphicons.linked_in i:before { content: "\e398"; } .glyphicons.forrst i:before { content: "\e399"; } .glyphicons.pinboard i:before { content: "\e400"; } .glyphicons.behance i:before { content: "\e401"; } .glyphicons.github i:before { content: "\e402"; } .glyphicons.youtube i:before { content: "\e403"; } .glyphicons.skitch i:before { content: "\e404"; } .glyphicons.foursquare i:before { content: "\e405"; } .glyphicons.quora i:before { content: "\e406"; } .glyphicons.badoo i:before { content: "\e407"; } .glyphicons.spotify i:before { content: "\e408"; } .glyphicons.stumbleupon i:before { content: "\e409"; } .glyphicons.readability i:before { content: "\e410"; } .glyphicons.facebook i:before { content: "\e411"; } .glyphicons.twitter i:before { content: "\e412"; } .glyphicons.instagram i:before { content: "\e413"; } .glyphicons.posterous_spaces i:before { content: "\e414"; } .glyphicons.vimeo i:before { content: "\e415"; } .glyphicons.flickr i:before { content: "\e416"; } .glyphicons.last_fm i:before { content: "\e417"; } .glyphicons.rss i:before { content: "\e418"; } .glyphicons.skype i:before { content: "\e419"; } .glyphicons.e-mail i:before { content: "\e420"; } ================================================ FILE: src/main/webapp/style/eu/theme/less/accordions.less ================================================ // // Accordions // -------------------------------------------------- // Accordion // ------------------------- // .accordion { margin: 0 0 10px; position: relative; .accordion-group { border-color: @contentBorder; .rounded(); box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); } .accordion-inner { font-size: 13px; background: @widgetBg; .rounded(0,0,5px,5px); border-color: @contentBorder; } .accordion-heading .accordion-toggle { #gradient > .vertical(@contentGradient1, @contentGradient2); color: @bodyText; text-decoration: none; font-weight: 600; .rounded(5px,5px,0,0); height: 29px; padding: 0 10px; line-height: 29px; } &.accordion-2 { border: 1px solid @contentBorder; .accordion-heading .accordion-toggle { border-bottom: 1px solid @contentBorder; background: @widgetBg; height: 38px; line-height: 38px; .rounded(); &.glyphicons { padding: 0 10px; i { width: 30px; line-height: 38px; height: 38px; display: block; float: left; &:before { font-size: 20px; color: #cccccc; top: auto; left: auto; width: 30px; line-height: 38px; height: 38px; position: relative; text-align: center; } } } } .accordion-body.in { border-bottom: 1px solid @contentBorder; } .accordion-group { border: none; margin: 0; &:last-child { .accordion-body.in { border-top: 1px solid @contentBorder; } } } .accordion-inner { border: none; .rounded(); } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/alerts.less ================================================ // // Alerts // -------------------------------------------------- // Alert // ------------------------- // .alert { margin: 0 0 @spacing; color: #fff; h4 { margin: 0 0 5px; color: #fff; } border-color: @warningColor; background: @warningColor; text-shadow: 0 1px 0 rgba(0,0,0,.1); &.alert-error { background: @dangerColor; color: #fff; border-color: @dangerColor; .close { color: #fff; } h4 { color: #fff; } } &.alert-primary { background: @primaryColor; color: #fff; border-color: @primaryColor; .close { color: #fff; } h4 { color: #fff; } } &.alert-info { background: #dff3f8; color: #7399b9; border-color: #93b9d8; .close { color: #7399b9; } } &.alert-success { border-color: @successColor; background: @successColor; color: #fff; .close, h4 { color: #fff; } } .close { opacity: 1; filter: alpha(opacity=100); color: #fff; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/buttons.less ================================================ // // Buttons // -------------------------------------------------- // Button // ------------------------- .btn { font-weight: 600; .rounded(2px,2px,2px,2px); } .btn-block { width: 100%; } .btn + .btn:not(.btn-block) { margin: 0 0 0 5px; } .input-append, .input-prepend { .btn + .btn { margin-left: -1px; } } .btn-group { .btn + .btn:not(.btn-block) { margin-left: -1px; } &.dropup { .btn:first-child { .rounded(); } } } // Default // ------------------------- .btn-default { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.75); color: rgba(0,0,0,.6); text-shadow: 0 1px 0 #fff; font-weight: 600; #gradient > .vertical(lighten(#e7e7e7, 5%),#e7e7e7); border: 1px solid darken(#e7e7e7, 10%); } .btn-group.open .btn-default.dropdown-toggle, .btn-default.disabled, .btn-default[disabled], .btn-default:hover, .btn-default:focus { background: #e8e8e8; } .btn-default:active, .btn-default.active { background: #e8e8e8; color: #fff; text-shadow: none; } .btn-default .caret { border-top-color: rgba(0,0,0,.5); } // Warning // ------------------------- .btn-warning { #gradient > .vertical(lighten(@warningColor, 10%),@warningColor); border: 1px solid darken(@warningColor, 10%); color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: rgba(255,255,255,.5); text-shadow: none; } } } .btn-group.open .btn-warning.dropdown-toggle, .btn-warning.disabled, .btn-warning[disabled], .btn-warning:hover, .btn-warning:focus { background: @warningColor; color: #fff; } .btn-warning:active, .btn-warning.active { background: @warningColor; color: #fff; } .btn-warning .caret { border-top-color: rgba(255,255,255,.7); border-bottom-color: rgba(255,255,255,.7); } // Info // ------------------------- .btn-info { background: #93B9D8; border: 1px solid #93B9D8; color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: rgba(255,255,255,.5); text-shadow: none; } } } .btn-group.open .btn-info.dropdown-toggle, .btn-info.disabled, .btn-info[disabled], .btn-info:hover, .btn-info:focus { background: #93B9D8; color: #fff; } .btn-info:active, .btn-info.active { background: #93B9D8; color: #fff; } .btn-info .caret { border-top-color: rgba(255,255,255,.7); border-bottom-color: rgba(255,255,255,.7); } // Danger // ------------------------- .btn-danger { #gradient > .vertical(lighten(@dangerColor, 10%), @dangerColor); border: 1px solid darken(@dangerColor, 10%); color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: rgba(255,255,255,.5); text-shadow: none; } } } .btn-group.open .btn-danger.dropdown-toggle, .btn-danger.disabled, .btn-danger[disabled], .btn-danger:hover, .btn-danger:focus { background: @dangerColor; color: #fff; } .btn-danger:active, .btn-danger.active { background: @dangerColor; color: #fff; } .btn-danger .caret { border-top-color: rgba(255,255,255,.7); border-bottom-color: rgba(255,255,255,.7); } // Primary // ------------------------- .btn-primary { #gradient > .vertical(lighten(@primaryColor, 10%), @primaryColor); border: 1px solid darken(@primaryColor, 10%); color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: rgba(255,255,255,.4); text-shadow: none; } } } .btn-group.open .btn-primary.dropdown-toggle, .btn-primary.disabled, .btn-primary[disabled], .btn-primary:hover, .btn-primary:focus { background: @primaryColor; color: #fff; } .btn-primary:active, .btn-primary.active { background: @primaryColor; color: #fff; } .btn-primary .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } // Inverse // ------------------------- .btn-inverse { #gradient > .vertical(lighten(@inverseColor, 10%), @inverseColor); border: 1px solid darken(@inverseColor, 10%); color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: #919293; text-shadow: none; } } } .btn-group.open .btn-inverse.dropdown-toggle, .btn-inverse.disabled, .btn-inverse[disabled], .btn-inverse:hover, .btn-inverse:focus { background: @inverseColor; color: #fff; } .btn-inverse:active, .btn-inverse.active { background: @inverseColor; color: #fff; } .btn-inverse .caret { border-top-color: #fff; border-bottom-color: #fff; } // Success // ------------------------- .btn-success { #gradient > .vertical(lighten(@successColor, 10%), @successColor); border: 1px solid darken(@successColor, 10%); color: #ffffff; text-shadow: 0 1px 0 rgba(0,0,0,.5); &.glyphicons { i:before { color: #a2bc9b; text-shadow: none; } } } .btn-group.open .btn-success.dropdown-toggle, .btn-success.disabled, .btn-success[disabled], .btn-success:hover, .btn-success:focus { background: @successColor; color: #fff; } .btn-success:active, .btn-success.active { background: @successColor; color: #fff; } .btn-success .caret { border-top-color: #fff; border-bottom-color: #fff; } // Button groups // ------------------------- .btn-group { .btn-primary { &:not(.dropdown-toggle), &:not('[data-toggle*=""]') { margin-right: 2px; } } } .btn-group-vertical.block { display: block; } .btn-group.btn-block { padding: 0; position: relative; .leadcontainer { left: 0; position: absolute; right: 29px; > .btn:first-child { .rounded(); margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; text-align: left; } } .dropdown-lead { box-sizing: border-box; width: 100%; } .dropdown-toggle { width: 30px; float: right; box-sizing: border-box; text-align: center; padding-left: 0; padding-right: 0; } } // Button icon stacked // ------------------------- .btn-icon-stacked { text-align: left; padding: 5px 5px 5px 45px; i { display: block; width: 24px; height: 24px; position: absolute; left: 10px; top: 10px; &:before { left: auto; top: auto; position: relative; text-align: center; } } span { display: block; font-size: 13px; line-height: normal; } } // Button other styles // ------------------------- .btn-facebook { color: #fff; text-shadow: 0 1px 0 rgba(0,0,0,.1); #gradient > .vertical(lighten(#5d7cb6, 10%), #5d7cb6); border: 1px solid #5d7cb6; i:before { color: #fff; } &:hover { background: lighten(#5d7cb6, 10%); color: #fff; } } .btn-google { color: #fff; text-shadow: 0 1px 0 rgba(0,0,0,.1); #gradient > .vertical(lighten(#9e3838, 10%), #9e3838); border: 1px solid #9e3838; i:before { color: #fff; } &:hover { background: lighten(#9e3838, 10%); color: #fff; } } // Toggle view code Button // ------------------------- .btn-toggle-code { position: absolute; bottom: 0; right: 0; z-index: 1000; .rounded(); &.outside { bottom: -24px; } } // ONLY Buttons on UI Demo Page (Table) // ------------------------- #demo_buttons { .btn-block { max-width: 200px; margin: 0 auto; } thead th { width: 25%; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/calendar.less ================================================ // // Calendar // -------------------------------------------------- // Calendar // ------------------------- // .fc-state-highlight { background: rgba(0,0,0,.2); } #external-events ul { list-style: none; margin: 0 0 20px; } #external-events li { margin: 0 0 5px; padding: 2px 5px; background: @primaryColor; color: #fff; text-shadow: 0 1px 0 rgba(0,0,0, .5); font-size: .85em; cursor: pointer; .rounded(3px,3px,3px,3px); .bevelEmboss(); } #external-events li.glyphicons { padding: 2px 5px 2px 30px; display: block; i:before { font-size: 14px; color: #fff; top: 0; left: 0; background: rgba(0,0,0,.3); height: 24px; width: 24px; line-height: 24px; text-align: center; .rounded(3px, 0, 0, 3px); border-right: 1px solid rgba(255,255,255,.4); } } .fc-header-title h2 { font-size: 16pt; line-height: 25px; } .fc-event-skin { border-color: @primaryColor; background-color: @primaryColor; text-shadow: 0 1px 0 rgba(0,0,0, .5); .bevelEmboss(); } .fc-event-time, .fc-event-title { padding: 0 5px; } #calendar .btn-group .btn-primary { margin-right: 2px; } ================================================ FILE: src/main/webapp/style/eu/theme/less/choose.less ================================================ // Choose Preview // ------------------------- #choose-preview { padding: 50px 0; h2 { span.text-primary { font-size: 26pt; font-weight: bold; top: auto; } margin-left: 0; } .control-group { margin: 0 0 5px; } select { color: #000; } .heading-buttons { margin-bottom: 10px; } .box { padding: 10px; .options { display: none; } .actions a { display: none; &.btn-active { display: inline-block; } } h3 { text-transform: uppercase; margin: 0 0 12px; } &.active { background: @widgetBg; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); border: 1px solid @contentBorder; padding: @spacing; .options { display: block; } h3 { color: #000; text-shadow: 0 1px 0 #fff; } } } &.style-dark { .well { background: @widgetBg; } .box { &.active { background: @contentBg1; border-color: @contentBorder2; h3 { text-shadow: none; color: #fff; } hr { border-top-color: @contentBorder2; } } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/documentation.less ================================================ // // Documentation // -------------------------------------------------- // Icons // ------------------------- // #docs_icons { text-align: center; padding: 0 20px; .glyphicons { display: inline-block; *display: inline; *zoom: 1; width: 125px; font-size: 12px; line-height: 48px; overflow: hidden; color: @bodyText; } .glyphicons i:before { line-height: 55px !important; color: @primaryColor; } } // Documentation // ------------------------- // .documentation { ul { ul { margin-bottom: 10px; } } .span3 .menu.affix { position: fixed; top: 20px; width: 220px; } .show-grid { margin-top: 10px; margin-bottom: 20px; [class*="span"] { background-color: lighten(#232628, 20%); text-align: center; .rounded(3px,3px,3px,3px); min-height: 40px; line-height: 40px; color: #fff; } .show-grid { margin-top: 0; margin-bottom: 0; [class*="span"] { background-color: lighten(#232628, 40%); } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/form-wizards.less ================================================ // // Form Wizards // -------------------------------------------------- // Wizards // ------------------------- // .wizard { .wizard-head { background: #fff; border: 1px solid #e5e5e5; border-bottom: none; } } .bwizard-steps .label { position: relative; top: -1px; margin: 0 5px 0 0; padding: 1px 5px 2px; } .bwizard-steps .active .label { background-color: #333; } .bwizard-steps { display: block; margin: 0; padding: 0; height: 40px; list-style: none; li { display: block; float: left; position: relative; margin-right: 5px; line-height: 40px; height: 40px; background: #fafafa; a { display: block; height: 40px; line-height: 40px; padding: 0 20px 0 40px; } &.active { color: #fff; background: @primaryColor; &:after { border-left-color: @primaryColor; } a { color: #fff; cursor: default; } } &:after { position: absolute; right: -20px; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fafafa; border-top: 20px inset transparent; content: ""; z-index: 2; } &:before { position: absolute; left: 0; top: 0; height: 0; width: 0; border-bottom: 20px inset transparent; border-left: 20px solid #fff; border-top: 20px inset transparent; content: ""; } &:last-child:after { } &:last-child { margin-right: 0; } &:first-child:before { border: none; } &:first-child a { padding-left: 20px; } } } .bwizard-steps a:hover { text-decoration: none; } .bwizard-steps.clickable li:not (.active ) { cursor: pointer; } .bwizard-steps.clickable li:hover:not (.active ) { background: #ccc; } .bwizard-steps.clickable li:hover:not (.active ):after { border-left-color: #ccc; } .bwizard-steps.clickable li:hover:not (.active ) a { color: #08c; } // Responsive // ------------------------- // @media ( max-width : 480px) { /* badges only on small screens */ .bwizard-steps li:after,.bwizard-steps li:before { border: none } .bwizard-steps li,.bwizard-steps li.active,.bwizard-steps li:first-child,.bwizard-steps li:last-child { margin-right: 0; padding: 0; background-color: transparent } } ================================================ FILE: src/main/webapp/style/eu/theme/less/forms.less ================================================ // // Forms // -------------------------------------------------- // Inline // ------------------------- .form-inline.small { input,select { margin: 0 5px 0 0; .rounded(); padding: 1px 5px; border-color: #d8d9da; color: #a7a7a7; } select { padding: 1px 0; height: 23px; &:last-child { margin-right: 0; } } label { float: left; margin: 0 5px 0 0; display: block; } .input-append { &.block { display: block; } input { margin: 0; width: 85%; } .add-on { padding: 1px 3px; margin: 0 0 0 -1px; .rounded(); background: #fff; color: #d8d9da; border-color: #d8d9da; i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } } } } // General // ------------------------- textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: #c1c1c1; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { font-size: 13px; } .uniformjs .radio .disabled input[type="radio"], .uniformjs .checkbox .disabled input[type="checkbox"] { margin-left: 0; } .uniformjs .radio, .uniformjs .checkbox { padding-left: 0; } .uniformjs .radio { height: auto; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 3px; } .uniformjs label.radio { margin-bottom: 0; } .uniformjs label.radio.inline { margin: 0; } .checkbox.inline { padding-bottom: 1px; } .uniformjs .radio span { margin: 2px 0 0; } .uniformjs .checkbox span { margin: -2px 0 0; } label, input, button, select, textarea { font-size: 13px; } .input-full input { width: 83%; height: 17px; } legend { line-height: normal; height: auto; font-size: 18px; margin: 0 0 6px; text-align: left; padding: 0; border: 0; color: #797979; } .btn-group > .btn, .btn-group > .dropdown-menu { font-size: 13px; } .strong { font-weight: bold; } input[type=text], input[type=password], select, textarea { border-color: #D8D9DA; color: #A7A7A7; } .control-label.center { text-align: center; } .form-actions { background: none; border: none; margin: 0; } .form-horizontal { .form-actions { margin-top: 0; padding: 0; } .controls { margin-left: 145px; } .control-label { width: 125px; } .control-group:last-child { margin: 0; } } .input-prepend .add-on, .input-append .add-on { background: #fff; i:before { color: #D0D1D1; } icon { margin-top: 0; } } .input-prepend .add-on.glyphicons, .input-append .add-on.glyphicons { background: #fff; i:before { font-size: 14px; left: 7px; top: 7px; color: #D0D1D1; } } .input-append .add-on.glyphicons i:before { left: 6px; } // Multiselect // ------------------------- .ms-container .ms-selectable li.ms-hover, .ms-container .ms-selection li.ms-hover { background: @primaryColor; } .ms-container { .custom-header { height: 30px; line-height: 30px; #gradient > .vertical(@contentGradient1, @contentGradient2); padding: 0 @spacing; font-weight: 600; border: 1px solid @contentBorder; &:not(.custom-footer) { border-bottom: none; } &.custom-footer { border-top: none; } } } // Select2 Templating // ------------------------- .select2-container img.flag, .select2-drop img.flag { height: 10px; width: 15px; padding-right: 10px; } .select2-container .select2-choice { border-color: @contentBorder; background: #fff; .rounded(); } .select2-container-multi .select2-choices { border-color: @contentBorder; background: #fff; } .select2-container .select2-choice div { border-color: @containerBorder; background: #fff; .rounded(); } .select2-drop { border-color: @containerBorder; #reset .boxShadow(); } .select2-container-multi .select2-choices .select2-search-choice { margin: 5px 0 3px 5px; border-color: @containerBorder; } // DateTimePicker // ------------------------- .datetimepicker table tr td span.active:hover, .datetimepicker table tr td span.active:hover:hover, .datetimepicker table tr td span.active.disabled:hover, .datetimepicker table tr td span.active.disabled:hover:hover, .datetimepicker table tr td span.active:active, .datetimepicker table tr td span.active:hover:active, .datetimepicker table tr td span.active.disabled:active, .datetimepicker table tr td span.active.disabled:hover:active, .datetimepicker table tr td span.active.active, .datetimepicker table tr td span.active:hover.active, .datetimepicker table tr td span.active.disabled.active, .datetimepicker table tr td span.active.disabled:hover.active, .datetimepicker table tr td span.active.disabled, .datetimepicker table tr td span.active:hover.disabled, .datetimepicker table tr td span.active.disabled.disabled, .datetimepicker table tr td span.active.disabled:hover.disabled, .datetimepicker table tr td span.active[disabled], .datetimepicker table tr td span.active:hover[disabled], .datetimepicker table tr td span.active.disabled[disabled], .datetimepicker table tr td span.active.disabled:hover[disabled], .datetimepicker table tr td.active:hover, .datetimepicker table tr td.active:hover:hover, .datetimepicker table tr td.active.disabled:hover, .datetimepicker table tr td.active.disabled:hover:hover, .datetimepicker table tr td.active:active, .datetimepicker table tr td.active:hover:active, .datetimepicker table tr td.active.disabled:active, .datetimepicker table tr td.active.disabled:hover:active, .datetimepicker table tr td.active.active, .datetimepicker table tr td.active:hover.active, .datetimepicker table tr td.active.disabled.active, .datetimepicker table tr td.active.disabled:hover.active, .datetimepicker table tr td.active.disabled, .datetimepicker table tr td.active:hover.disabled, .datetimepicker table tr td.active.disabled.disabled, .datetimepicker table tr td.active.disabled:hover.disabled, .datetimepicker table tr td.active[disabled], .datetimepicker table tr td.active:hover[disabled], .datetimepicker table tr td.active.disabled[disabled], .datetimepicker table tr td.active.disabled:hover[disabled] { background: @primaryColor; } // Bootstrap TimePicker .bootstrap-timepicker-widget table td { font-size: 13px; } .bootstrap-timepicker { > [class*="icon-"] { vertical-align: text-top; margin: 0 0 0 -22.5px; pointer-events: none; position: relative; cursor: pointer; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/front.less ================================================ // // Front customizations // -------------------------------------------------- // Top menu // ------------------------- // html.front { .menu-hidden { .navbar.main { height: 99px; } } .navbar.main { height: auto; left: 0 !important; .secondary { height: 49px; line-height: 49px; position: relative; overflow: hidden; background-color: @navbarSecondaryBg; border-bottom: 1px solid @topnavBorder1; .appbrand { font-weight: 700; font-size: 25pt; color: #fff; text-decoration: none; padding: 0 8px; } } ul.topnav:first-of-type { border-left: none; margin-left: -8px; > li:first-of-type { border-left: none; } } li.search { #reset .boxShadow(); } li.glyphs + .glyphs { padding-left: 0; } li.glyphs { border: none; #reset .boxShadow(); margin-left: 0; ul li { .glyphicons { color: @navbarGlypsText; i { display: inline-block; width: 32px; vertical-align: top; } } &.active, &:hover { .glyphicons { color: #fff; } } &.single { &, &:last-child { .rounded(5px,5px,5px,5px); } } } } } #content { margin: 0; } #footer { background: #1f2123; color: #919192; a:not(.btn) { color: @primaryColor; } .copy { background: #000; color: #2a2a2a; a { color: #2a2a2a; text-decoration: none; } text-align: left; .appbrand { position: absolute; right: 10px; text-transform: uppercase; font-size: 15px; font-weight: 700; } } .box-generic { #reset .boxShadow(); background: #191a1c; border: none; } h4 { text-transform: uppercase; font-size: 15px; font-weight: 700; text-shadow: none; color: #fff; margin: 0 0 8px; } ul { list-style: none; margin: 0 0 @spacing; padding: 0; li { display: block; background: #191a1c; margin: 0 0 1px; line-height: 30px; height: 30px; a { line-height: 30px; height: 30px; display: block; padding: 0 10px; } &:first-of-type { .rounded(5px,5px,0,0); } &:last-of-type { margin: 0; .rounded(0,0,5px,5px); } } &.icons { li { padding: 0 10px 0 35px; i:before { top: 7px; left: 10px; } } } } } #contact_gmap { height: 400px; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/gallery.less ================================================ // // Gallery // -------------------------------------------------- // Gallery // ------------------------- // .gallery { ul { margin: 0; padding: 0; list-style: none; li { .thumb { position: relative; display: block; padding: 5px; margin-bottom: 10px; z-index: 1; overflow: hidden; } &.span2:nth-child(6n+7) { margin-left: 0; } &.span3:nth-child(4n+5) { margin-left: 0; } &.span4:nth-child(3n+4) { margin-left: 0; } } } &.gallery-masonry { li { &[class*="span"] { margin-left: 0; } } } &.gallery-2 { li { .thumb { padding: 0; border-color: #4c4c4c; } } } } .thumb { display: block; padding: 3px; border: 1px solid @contentBorder; &, img { .rounded(5px,5px,5px,5px); } } // Thumbnails // ------------------------- // .thumbnails { margin: 0; > li { margin-bottom: @spacing; .thumbnail { border-color: @contentBorder; background: @widgetBg; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); .caption { color: @bodyText; } } a.thumbnail:hover, a.thumbnail:focus { border-color: @primaryColor; -webkit-box-shadow: 0 1px 4px fade(@primaryColor, 25%); -moz-box-shadow: 0 1px 4px fade(@primaryColor, 25%); box-shadow: 0 1px 4px fade(@primaryColor, 25%); text-decoration: none; } } } .thumbnail { border-color: @contentBorder; } a.thumbnail { .caption { display: block; } } a.thumbnail:hover, a.thumbnail:focus { border-color: @primaryColor; -webkit-box-shadow: 0 1px 4px fade(@primaryColor, 25%); -moz-box-shadow: 0 1px 4px fade(@primaryColor, 25%); box-shadow: 0 1px 4px fade(@primaryColor, 25%); text-decoration: none; } // Carousels // ------------------------- // .carousel { margin-bottom: @spacing; .rounded(5px, 5px, 5px, 5px); .carousel-control { font-size: 45px; opacity: 1; filter: alpha(opacity=100); background: @widgetBgGray; color: #000; border-color: #000; text-shadow: @bodyTextShadow; &.right { text-align: center; } } .carousel-inner { .rounded(5px, 5px, 5px, 5px); box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; border: 1px solid @contentBorder; } .item { .rounded(5px, 5px, 5px, 5px); img { min-width: 100%; } } .carousel-caption { background: fade(@widgetBgGray, 95%); text-shadow: @bodyTextShadow; p { color: @bodyText; } h4 { font-size: 12pt; color: #000; font-weight: 600; } a { text-decoration: underline; color: #000; } } &.carousel-1 { height: 223px; margin-bottom: 33px; background: @widgetBgGray; .item { height: 223px; overflow: hidden; img { min-height: 100%; .rounded(0, 5px, 5px, 0); } } .carousel-indicators { top: auto; bottom: -23px; right: 0; li { background: lighten(@primaryColor, 20%); &.active { background: @primaryColor; } } } .carousel-caption { height: 223px-30px; background: @widgetBgGray; top: 0; } } } // Jcrop // --------------------------- /* Apply these styles only when #preview-pane has been placed within the Jcrop widget */ .jcrop-holder #preview-pane { display: block; position: absolute; z-index: 2000; top: 10px; right: 10px; padding: 6px; background-color: white; .rounded(5px,5px,5px,5px); -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); } /* The Javascript code will set the aspect ratio of the crop area based on the size of the thumbnail preview, specified here */ #preview-pane .preview-container { width: 125px; height: 85px; overflow: hidden; } .jcrop-holder { margin: 0 auto; .rounded(5px,5px,5px,5px); img { .rounded(5px,5px,5px,5px); } } ================================================ FILE: src/main/webapp/style/eu/theme/less/guidedtour.less ================================================ // // Guided Tour // -------------------------------------------------- // Guided Tour Button // ------------------------- #guided-tour { position: fixed; z-index: 10000; top: 100px; right: -100%; width: 40px; height: 20px; padding: 10px; background: @primaryColor; font-size: 14pt; color: #fff; text-align: center; box-shadow: -1px 3px 5px rgba(0,0,0,.2); -moz-box-shadow: -1px 3px 5px rgba(0,0,0,.2); -webkit-box-shadow: -1px 3px 5px rgba(0,0,0,.2); text-shadow: 0 1px 0 rgba(0,0,0,.2); cursor: pointer; .transition(width .5s ease); overflow: hidden; white-space: nowrap; .hide { float: left; height: 0; display: inline-block !important; opacity: 0; .transition(opacity .6s ease); } #close-tour { display: none; position: absolute; top: 0; right: 0; bottom: 0; padding: 10px; color: rgba(0,0,0,.8); text-shadow: 0 1px 0 #fff; background: rgba(255,255,255,.6); &:hover { background: rgba(255,255,255,.9); } } &:hover { width: 100px; padding: 10px 40px 10px 10px; .hide { padding: 0 5px 0 0; opacity: 1; height: auto; } #close-tour { display: block; } } } // Guided Tour // ------------------------- #tlyPageGuideWrapper #tlyPageGuideMessages { margin: 0; width: 100%; height: auto; padding: 20px; z-index: 9000; div { margin: 0 90px 0 120px; } h4 { color: #fff; } p:last-child { margin: 0; } } #tlyPageGuideWrapper #tlyPageGuide li { background: rgba(0,0,0,.4); } #tlyPageGuideWrapper #tlyPageGuide li:hover { background: rgba(0,0,0,.9); } #tlyPageGuideWrapper #tlyPageGuide li { &.tlypageguide_right:after, &.tlypageguide_left:after, &.tlypageguide_top:after { border-top-color: rgba(0,0,0,.3); } &.tlypageguide_bottom:after { border-bottom-color: rgba(0,0,0,.3); } &.tlypageguide_right:hover, &.tlypageguide_left:hover, &.tlypageguide_top:hover { margin: 0; &:after { border-top-color: rgba(0,0,0,.9); } } &.tlypageguide_bottom:hover { margin: 0; &:after { border-bottom-color: rgba(0,0,0,.9); } } } .tlypageguide_shadow:after { background: fade(@primaryColor, 20%); box-shadow: 0 0 1px 1px fade(@primaryColor, 70%); -moz-box-shadow: 0 0 1px 1px fade(@primaryColor, 70%); -webkit-box-shadow: 0 0 1px 1px fade(@primaryColor, 70%); } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active { background: @primaryColor; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_top:after { border-top-color: @primaryColor; } #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_bottom:after { border-bottom-color: @primaryColor; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_back, #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_fwd { top: 29px; } #tlyPageGuideWrapper #tlyPageGuideMessages span { top: 20px; background: @primaryColor; } #tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_close { background: @primaryColor; } ================================================ FILE: src/main/webapp/style/eu/theme/less/jquery-ui.less ================================================ // // jQueryUI // -------------------------------------------------- // General // ------------------------- // .ui-widget-header { border-color: @primaryColor; background: @primaryColor; color: #fff; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background: #fafafa; border-color: #dddddd; color: #797979; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { background: @primaryColor; color: #fff; } .ui-widget-content { border: none; } // Datepicker // ------------------------- // .ui-datepicker { padding: 10px; background: #fff; font-size: 12px; .ui-widget-header { background: none; color: #4d4d4d; border: none; } .ui-datepicker-calendar { border-collapse: collapse; thead { background: #cecece; th { padding: .5em .3em; } } tbody { td { padding: 0; span { text-align: center; } a { text-align: center; &.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } &.ui-state-active { background: @primaryColor; color: #fff; } } } } } } .widget-body-gray { .ui-datepicker { background: none; padding: 0; font-size: 12px; .ui-widget-header { background: none; color: #4d4d4d; border: none; } .ui-datepicker-calendar { border-collapse: collapse; thead { background: #cecece; th { padding: .5em .3em; } } tbody { td { padding: 0; span { text-align: center; } a { text-align: center; &.ui-state-default { background: none; color: #4d4d4d; font-weight: 600; } &.ui-state-active { background: @primaryColor; color: #fff; } } } } } } } .ui-datepicker-inline { width: 100%; padding: 0; } .datepicker-inline { margin: 0 0 5px; } ================================================ FILE: src/main/webapp/style/eu/theme/less/labels.less ================================================ // // Labels // -------------------------------------------------- // Label // ------------------------- .label { &.large { height: 29px; padding: 0 10px; line-height: 29px; background: #e5e5e5; color: #64625f; text-shadow: 0 1px 0 #fff; } &.label-primary { background: @primaryColor; } &.label-warning { background: @warningColor; } &.label-important { background: @dangerColor; } &.label-success { background: @successColor; } &.label-block { display: block; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/landings.less ================================================ // // Landing pages // -------------------------------------------------- #landing_1 { .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; &.mosaic-line-2 { line-height: 100px; height: 100px; h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; span { color: #ccc; } } } } .banner { background: #000; height: 321px; .banner-wrapper { height: 321px; position: relative; overflow: hidden; &.banner-1 { margin: 0; background: #000; h3 { height: 46px; line-height: 46px; top: 65px; right: 27px; position: absolute; background: #fff; color: @primaryColor; font-size: 22pt; font-weight: bold; padding: 0 15px; } p { position: absolute; top: 126px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 370px; text-align: right; padding: 10px 15px; a { text-decoration: underline; color: @primaryColor; } } .btn { position: absolute; top: 232px; right: 27px; } } } } } #landing_2 { .mosaic-line { height: 58px; line-height: 58px; border-bottom: 1px solid #e5e5e5; background: #f9f9f9; &.mosaic-line-2 { line-height: 100px; height: 100px; h2 { line-height: 100px; text-shadow: 0 1px 0 #fff; span { color: #ccc; } } } } .banner { background: #1f2123; height: 356px; .banner-wrapper { height: 356px; position: relative; overflow: hidden; &.banner-1 { margin: 0; h3 { height: 46px; line-height: 46px; top: 55px; right: 27px; position: absolute; color: #fff; font-size: 27pt; font-weight: bold; text-shadow: none; padding: 0; } p { position: absolute; top: 115px; right: 27px; background: #1f1e1e; color: #fff; line-height: 25px; width: 380px; text-align: right; padding: 10px 15px; a { text-decoration: underline; color: @primaryColor; } } .btn { position: absolute; bottom: 40px; &.btn-primary { right: 230px; } &.btn-danger { right: 27px; bottom: 37px; } } } } } } // Other // ------------------------- .container-960 { width: 960px; margin: 0 auto; } .separator-line { width: 100%; height: 1px; background: #e5e5e5; margin-bottom: 10px; } ================================================ FILE: src/main/webapp/style/eu/theme/less/layout.less ================================================ // // Layout // -------------------------------------------------- // General // ------------------------- .innerLR { padding: 0 @spacing; position: relative; } .innerTB { padding: @spacing 0; position: relative; } .innerAll { padding: @spacing; position: relative; } .innerL { padding-left: @spacing; position: relative; } .innerR { padding-right: @spacing; position: relative; } .innerT { padding-top: @spacing; position: relative; } .innerB { padding-bottom: @spacing; position: relative; } // Other Utilities // ------------------------- .center { text-align: center !important; } .margin-bottom-none { margin-bottom: 0 !important; } .margin-none { margin: 0 !important; } .padding-none { padding: 0 !important; } .border-none { border: none !important; } .box-shadow-none { #reset .boxShadow(); } .padding-none-TB { padding-bottom: 0 !important; padding-top: 0 !important; } .relativeWrap { position: relative; } .text-primary { color: @primaryColor; } .text-uppercase { text-transform: uppercase; } .text-faded { color: #d7d7d7 !important; } .text-large { font-size: 35px; line-height: 40px; } .text-xlarge { font-size: 50px; line-height: 50px; } .text-xxlarge { font-size: 70px; line-height: 70px; } .text-underline { text-decoration: underline; } .text-right { text-align: right !important; } .containerBg { background: @containerBg; } .whiteBg { background: #fff; } // Grid // ------------------------- .row-merge { position: relative; > [class*="span"] ~ [class*="span"] { margin-left: 0; &:after { position: absolute; top: 0; bottom: 0; width: 1px; background: @contentBorder; content: ""; } } > [class*="span"] ~ [class*="span3"] { width: 25.26315789473684%; } > [class*="span"] ~ [class*="span4"] { width: 33.68421052631579%; } > [class*="span"] ~ [class*="span5"] { width: 42.10526315789473%; } > [class*="span"] ~ [class*="span6"] { width: 50.74626865671642%; } > [class*="span"] ~ [class*="span8"] { width: 67.66169154228855%; } > [class*="span"] ~ [class*="span9"] { width: 75.78947368421052%; } &.border-top, & ~ & { border-top: 1px solid @contentBorder; } &.border-bottom { border-bottom: 1px solid @contentBorder; } } // Main Wrapper // ------------------------- #wrapper { overflow: hidden; overflow-y: auto; float: left; width: 100%; } // Content // ------------------------- body > .container-fluid { padding: 0; background: @containerBg; &.fixed { margin: 30px auto 30px; border-left: 1px solid @containerBorder; border-right: 1px solid @containerBorder; width: 94%; } &.documentation { background: #fff; } } body > .container-fluid.fixed { .rounded(5px, 5px, 5px, 5px); #wrapper { .rounded(5px, 5px, 0, 0); } #content { .rounded(0, 5px, 0, 0); } #footer { .rounded(0,0,5px,5px); } .navbar.main, .navbar.main .wrapper { .rounded(5px, 5px, 0, 0); } } #content { position: relative; overflow: hidden; margin: 0; min-width: 320px; min-height: 500px; padding: 0 0 @spacing; background: @containerBg; > .menubar { border-left: none; border-right: none; } > p { padding: 0 @spacing 5px; } > h1, > h2, > h3, > h4, > h5, > h6 { margin: @spacing+3 @spacing @spacing; } > .filter-bar { border-right: none; border-left: none; } .heading-buttons { margin-top: @spacing; } .heading-arrow { text-transform: uppercase; border-bottom: 1px solid @contentBorder; margin: 0 0 @spacing; padding: 0 @spacing; font-size: 11pt; height: 35px; line-height: 30px; position: relative; &:after { content: ""; display: inline-block; width: 0; height: 0; border-bottom: 8px solid @contentBorder; border-right: 8px solid transparent; border-left: 8px solid transparent; position: absolute; bottom: 0; left: 15px; } &.glyphicons { padding: 0 10px 0 40px; i:before { font-size: 17px; left: 15px; } } &.margin-bottom-none { margin-bottom: 0; } } > .widget { border-left: 0; border-right: 0; .widget-head, .widget-body { border-left: 0; border-right: 0; } &:last-child { margin: 0; } } > .table { border-left: none; border-right: none; tr td:first-child { border-left: none; } } } // Footer // ------------------------- #footer { font-weight: 600; position: relative; overflow: hidden; z-index: 10000; a:not(.btn) { color: @bodyText; } border-bottom: 1px solid @contentBorder; border-top: 1px solid @contentBorder; .copy { background: @widgetBgGray; text-align: center; padding: 5px 10px; font-size: 12px; a { color: @bodyText; text-decoration: underline; } height: 20px; } } html.sidebar { #content { margin: 0 0 0 65px; } .menu-right { #content { margin: 0 65px 0 0; } } } // Sticky Sidebar & Footer always bottom // ------------------------- @media (min-width: 768px) { html.sticky-sidebar.sidebar:not(.fixed) { body { overflow: hidden; } &, body, body > .container-fluid, #wrapper { min-height: 100%; height: 100%; } #wrapper { margin-bottom: -32px; } #menu { position: fixed; bottom: 0; } #content { padding-bottom: 47px; } } } // Sticky Top Menu // ------------------------- @media (min-width: 768px) { html.sticky-top:not(.fixed) { #content { padding-top: 50px; } .navbar.main { position: fixed; top: 0; left: 0; right: 0; z-index: 10000; } &.sidebar { .navbar.main { left: 65px; } .menu-right { .navbar.main { left: 0; right: 65px; } } } .menu-hidden { .navbar.main { left: 0 !important; right: 0 !important; } } &.front { #content { padding-top: 100px; margin: 0 !important; } } } } html.fixed { &, body { min-height: auto; height: auto; overflow: visible; } } body > .container-fluid.fixed { min-height: auto; height: auto; #wrapper { position: relative; overflow: hidden; min-height: auto; height: auto; margin: 0; } #menu { position: absolute; height: 100%; min-height: 100%; bottom: auto; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/login.less ================================================ // // Login section specific styles // -------------------------------------------------- // Login // ------------------------- body.login { background: @containerBg; #login { a:not(.btn) { color: @bodyText; text-decoration: underline; } padding: 40px 0 0; h1 { font-size: 20pt; text-align: center; display: block; padding: 0 0 20px; text-shadow: @bodyTextShadow; i { &:before { position: relative; left: auto; top: auto; color: @bodyText; } } } .wrapper { max-width: 354px; min-width: 300px; margin: 0 auto; position: relative; &.signup { max-width: 600px; } } .widget { .widget-head { .btn { margin: -4px 0 0 5px; } div { font-size: 12px; } } .widget-body { box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; background: #fafafa; } .widget-footer { height: 40px; line-height: 40px; margin: @spacing 0 0; .rounded(5px,5px,5px,5px); border: 1px solid @contentBorder; p { font-size: 12px; color: @bodyText; font-weight: 600; margin: 0; width: auto; float: none; padding: 0 10px 0 35px; display: block; height: 40px; line-height: 40px; i:before { top: 7px; left: 7px; } } } } label { font-size: 13px; color: #7c7c7c; font-weight: 600; } .checkbox { margin-top: 5px; } .password { float: right; font-size: 12px; font-weight: 400; } input[type="text"], input[type="password"] { font-size: 13px; height: auto; margin-bottom: 10px; padding: 5px 9px; .bevelEmboss(0,0); .rounded(); background: #fff; } ::-webkit-input-placeholder { /* WebKit browsers */ color: #ccc; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #ccc; } ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #ccc; } :-ms-input-placeholder { /* Internet Explorer 10+ */ color: #ccc; } form { margin: 0; } p { margin: 5px 0; &:first-child { margin: 0 0 10px; } &:last-child { margin: 10px 0 0; } } .form-signin { position: relative; max-width: 600px; margin: 0 auto 20px; background-color: #fff; border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); box-shadow: 0 1px 2px rgba(0,0,0,.05); .inner { padding: 20px; } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/lt-ie9.less ================================================ // // lt-ie9 // -------------------------------------------------- // lt-ie9 // ------------------------- // .lt-ie9 { .widget .widget-body.list ul li { border-bottom: 1px solid #efefef; } .navbar.main .btn-navbar { float: left; } .navbar.main .topnav { position: absolute; top: 0; right: 0; height: 42px; } .navbar.main .topnav .dropdown > a .caret { margin-top: 0; top: 8px; left: 5px; } .heading-buttons h1.glyphicons, .heading-buttons h2.glyphicons, .heading-buttons h3.glyphicons, .heading-buttons h4.glyphicons, .heading-buttons h5.glyphicons, .heading-buttons h6.glyphicons { float: left; } #guided-tour { .hide { display: none !important; } } .filter-bar div div.input-append .add-on { width: 24px; padding-right: 0; padding-left: 0; i { width: 24px; height: 24px; display: block; vertical-align: middle; line-height: 24px; &:before { width: 24px; height: 24px; line-height: 24px; top: auto; } } } .navbar.main .topnav .dropdown > a .caret { vertical-align: middle; margin-top: 0; top: 0; } #footer { background: #222; .copy { background: #111; } } .ribbon-wrapper { display: none; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/menus.less ================================================ // // Menus // -------------------------------------------------- // General // ------------------------- .ui-resizable-helper { &.menu { border: 1px dotted gray; border-left: none; background: rgba(0,0,0,.3); } } .ui-resizable-handle { width: 3px; border-style: solid; border-width: 0; border-color: rgba(0,0,0,.4); } .dropdown-menu { z-index: 100000; } // Left menu // ------------------------- #menu { .appbrand { font-weight: 700; display: block; text-decoration: none; line-height: 10px; padding: 10px; text-align: center; color: @menuAppbrand; border-bottom: 1px solid @menuBorder1; } .profile { display: block; padding: 10px 0; border-bottom: 1px solid @menuBorder1; border-top: 1px solid @menuBorder2; a { border: 1px solid @menuBorder1; display: inline-block; width: 36px; height: 36px; .rounded(5px,5px,5px,5px); img { .rounded(5px,5px,5px,5px); } &:hover { border-color: darken(@menuBorder1, 10%); } } } width: 65px; float: left; position: absolute; left: 0; top: 0; overflow: hidden; height: 100%; min-height: 100%; background: @menuBg; font-size: 11px; .slim-scroll > ul, > ul { list-style: none; float: left; margin: 0; padding: 0; display: block; width: 100%; border-top: 1px solid @menuBorder2; > li { display: block; border-bottom: 1px solid @menuBorder1; box-shadow: 0 1px 0 0 @menuBorder2; position: relative; overflow: hidden; padding: 0; margin: 0; a { display: block; width: auto; padding: 10px; margin: 0; line-height: 10px; text-decoration: none; font-weight: 600; color: @menuText; text-align: center; &.glyphicons { padding: 10px 5px; i { display: block; padding: 0 0 5px; &:before { display: block; font-size: 17px; color: @menuText; top: auto; left: auto; position: relative; text-align: center; } } } } &.glyphicons { > a { padding: 10px 5px; i { display: block; padding: 0 0 5px; &:before { display: block; font-size: 17px; color: @menuText; top: auto; left: auto; position: relative; text-align: center; } } } } &.active { box-shadow: 0 1px 0 0 @menuBorder2; border-top: 1px solid @menuBorder2; position: relative; overflow: visible; > a { background: @menuActiveBg; color: @menuActiveText; } &.glyphicons a i:before { color: @menuActiveText; } &:first-child { border-top: none; } } &:hover { > a { color: @menuActiveText; } &.glyphicons a i:before { color: @menuActiveText; } } } } &.ui-state-disabled { opacity: 1; filter: Alpha(Opacity=100); } } .menu-left .ui-resizable-e { background: rgba(255,255,255,.2); right: 0; border-left-width: 1px; border-right-width: 1px; &:hover { background: rgba(255,255,255,.4); } } // Right menu // ------------------------- body .menu-right { .ui-resizable-w { background: rgba(255,255,255,.2); left: 0; border-left-width: 1px; border-right-width: 1px; &:hover { background: rgba(255,255,255,.4); } } #menu { left: auto; right: 0; border-right: none; border-left: 1px solid #d8d8d8; } &.fixed { #content { .rounded(5px,0,0,0); } .navbar.main, .navbar.main .wrapper { .rounded(5px,0,0,0); } } } // Hidden menu // ------------------------- .menu-hidden { #menu { display: none; } #content { margin: 0 !important; } .navbar.main .btn-navbar { left: 0; border-left: none; } .navbar.main .topnav { &.tn1 { left: 37px; } } &.login, &.documentation { .navbar.main .appbrand { display: inline-block; border: none; span { border: none; } } } } // Top navbar // ------------------------- .navbar.main { height: 49px; background-color: @navbarBg; border-bottom: 1px solid @topnavBorder1; margin: 0; .btn-navbar { height: 49px; line-height: 49px; padding: 0 10px; margin: 0; float: left; display: block; border: none; background: @navbarBg; .rounded(); .icon-bar { background: @navbarText; box-shadow: 0 1px 0 @topnavBorder1; } &:hover { background: darken(@navbarBg, 2%); } &.ui-state-disabled { opacity: 1; filter: Alpha(Opacity=100); } } .topnav { margin: 0; padding: 0; list-style: none; border-left: 1px solid @topnavBorder1; border-right: 1px solid @topnavBorder2; &.pull-left + .topnav.pull-left { border-left: none; > li:first-child { border-left: none; } } > li { position: relative; float: left; height: 49px; line-height: 49px; display: block; padding: 0 0 0 10px; a { cursor: pointer; } > a { display: block; color: @navbarText; text-decoration: none; padding: 1px 11px 0 9px; height: 49px; line-height: 50px; > img { margin: 0 0 3px; } &.glyphicons { padding: 0 11px 0 9px; i { padding: 0 10px 0 0; display: block; float: left; width: 17px; line-height: 49px; height: 49px; &:before { color: @navbarText; font-size: 17px; position: relative; width: 17px; text-align: center; line-height: 51px; height: 49px; left: auto; right: auto; } } &.single-icon { i { padding: 0; } } &.logout { i { float: right; padding: 0; } span { padding: 0 8px 0 0; } } } /* &:hover { background: darken(@navbarBg, 2%); } */ } &.active, &:hover, &.open { padding: 8px 0 8px 8px; &:last-child { padding: 8px 9px 8px 8px; } height: 33px; line-height: 33px; > a { .caret { top: 2px; } background: @navbarActiveBg; padding: 5px 10px; height: 22px; line-height: 22px; .rounded(5px,5px,5px,5px); border: 1px solid @topnavBorder3; &.glyphicons { padding: 5px 10px; height: 22px; line-height: 22px; i { height: 22px; line-height: 22px; &:before { line-height: 22px; height: 22px; } } } } } &.glyphs { padding: 8px; height: 33px; border-left: 1px solid @topnavBorder1; border-right: 1px solid @topnavBorder2; box-shadow: -1px 0 0 0 @topnavBorder2, 1px 0 0 0 @topnavBorder1; ul { margin: 0; padding: 0; list-style: none; background: @navbarActiveBg; height: 32px; line-height: 32px; .rounded(5px,5px,5px,5px); border: 1px solid @topnavBorder3; li { float: left; display: block; height: 32px; line-height: 32px; padding: 0 1px 0 0; .glyphicons { height: 22px; line-height: 22px; padding: 5px 10px; display: block; text-decoration: none; i { height: 22px; line-height: 22px; display: block; &:before { line-height: 22px; height: 22px; position: relative; left: auto; top: auto; display: block; text-align: center; font-size: 17px; color: @navbarGlypsText; } } } &.active, &:hover { padding: 0; background: @navbarGlypsActiveBg; .glyphicons i:before { color: @navbarText; } border-right: 1px solid @topnavBorder3; &:first-child { .rounded(5px,0,0,5px); } &:last-child { .rounded(0,5px,5px,0); border-right: none; border-left: 1px solid @topnavBorder3; .glyphicons { padding: 5px 11px 5px 9px; } } } } } } &.search { padding: 8px; height: 33px; border-left: 1px solid @topnavBorder1; border-right: 1px solid @topnavBorder2; box-shadow: -1px 0 0 0 @topnavBorder2, 1px 0 0 0 @topnavBorder1; form { margin: 0; padding: 0; background: @navbarSearchBg; height: 32px; line-height: 32px; .rounded(5px,5px,5px,5px); border: 1px solid @topnavBorder3; input { background: none; border: none; color: @navbarSearchText; margin: 0; padding: 0; height: 32px; line-height: 32px; width: 100px; padding: 0 0 0 10px; #reset .boxShadow(); .placeholderColor(@navbarSearchText); } button { background: none; border: none; margin: 0; padding: 0; height: 32px; i:before { display: block; position: relative; left: auto; right: auto; height: 32px; line-height: 32px; padding: 0 5px; font-size: 17px; color: @topnavBorder1; } } input,button { vertical-align: top; } } } &.search, &.glyphs { margin-left: 10px; } &.search + .glyphs { margin-left: 0; } &.glyphs + .search, &.glyphs + .tooltip + .search { margin-left: 0; } &:last-child { border-right: 1px solid @topnavBorder1; padding: 0 9px 0 10px; &.glyphs, &.search { padding: 8px 9px; box-shadow: -1px 0 0 0 @topnavBorder2; } } &:first-child { border-left: 1px solid @topnavBorder2; } &:last-child.open .dropdown-menu { right: 0; } &.open { .dropdown-menu { background: #363432; border: none; box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; right: 0; &.pull-left { left: 0; } width: 180px; li { border-bottom: 1px solid #4a4947; &:last-child { border-bottom: none; } &:first-child { > a, > a:hover, > span { border-top: none; } } > a, > a:hover, > span { height: 29px; line-height: 29px; padding: 0 10px; display: block; background: #363432; color: #c8c8c8; &.glyphicons { i:before { left: auto; right: 10px; top: 5px; font-size: 17px; color: #c4c4c4; } } } > a:hover { background: darken(#363432, 10%); } &.active { background: darken(#363432, 15%); a { background: darken(#363432, 15%); } } .btn { margin: 3px 0; } &.highlight { > a, > a:hover, > span { background: rgba(0,0,0,.1); } } &.profile { a:hover { color: #fff; } > a, > a:hover, > span { height: auto; line-height: normal; padding: 5px 10px 10px; .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; a { text-transform: none; } } .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #272729; margin: 0 10px 0 0; position: relative; &:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #595959; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } } .clearfix { display: block; } } } } } &.account { > .dropdown-menu { width: 220px; } } &.dd-1, .dd-1 { > .dropdown-menu, .typeahead { &:before { content: ""; width: 0; height: 0; border: 11px solid transparent; position: absolute; display: block; left: 7px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } &:after { content: ""; width: 0; height: 0; border: 10px solid transparent; top: -10px; border-top-width: 0; border-bottom-color: #ffffff; position: absolute; display: block; left: 8px; } &.pull-right:before, &.pull-right:after { left: auto; right: 7px; margin: 0; } &.pull-right:after { right: 8px; } box-shadow: 0 0 10px 1px rgba(0,0,0,0.2); } .typeahead { margin-top: 13px !important; } .dropdown-menu.pull-right { .rounded(); } .dropdown-menu { background: #fff; border: 1px solid #c8c8c8; margin: 5px 0 0; .rounded(); li { border-color: #f3f3f3; a:not(.btn), span { background: #fff; color: #939494; i:before { color: #cccccc; font-size: 15px !important; top: 7px !important; } } } > li:not(.profile):hover, > li.active { > a { /* background: @primaryColor; border: 1px solid darken(@primaryColor, 15%); border-top: none; border-bottom: none; color: #fff; box-shadow: 0 5px 5px -5px darken(@primaryColor, 20%) inset, 0 -5px 5px -5px darken(@primaryColor, 20%) inset; i:before { color: #fff; } */ font-weight: 600; color: #000; } } li.profile { background: #fff; a:hover { color: #7c7c7c; } > a, > a:hover, > span { height: auto; line-height: normal; padding: 5px 10px 10px; .heading { display: block; text-transform: uppercase; font-weight: 600; margin-bottom: 5px; a { text-transform: none; } } .img { display: inline-block; float: left; width: 47px; height: 45px; line-height: 45px; background: #fdfdfd; margin: 0 10px 0 0; position: relative; &:before { text-align: center; width: 47px; height: 45px; line-height: 45px; content: "\e004"; color: #ccc; font-family: "Glyphicons"; font-size: 24px; position: absolute; display: block; } } .clearfix { display: block; } } } } } &.dd-2 { .dropdown-menu { li { a:not(.btn) { padding: 10px 10px 10px 50px; i:before { right: auto; left: 10px; top: 10px !important; font-size: 30px !important; color: lighten(#ccc, 15%); } } } > li:not(.profile):hover { border-color: #f3f3f3; > a { background: fade(@primaryColor, 8%); color: #939494; text-shadow: 0 1px 0 #fff; border: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; i:before { color: @primaryColor; left: 10px; top: 10px; } } } } } &.dd-flags { .dropdown-menu img { margin: -3px 4px 0 0; } } } } .dropdown > a { .caret { border-top-color: @navbarText; top: 16px; position: relative; } } .dropdown-menu { .rounded(); } } .topnav:last-of-type { border-right: none; li:last-child { border: none; } } } .submenu-show { display: block; margin-top: -35px !important; position: absolute; &.pull-left { left: auto !important; right: 100% !important; } &.pull-right { right: auto !important; left: 100% !important; } } .submenu-hide { display: none !important; position: relative; top: auto; float: left; } ================================================ FILE: src/main/webapp/style/eu/theme/less/mixins.less ================================================ #reset { .boxShadow() { box-shadow: none !important; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; } .rounded () { -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } } .bevelEmboss(@ol:0.2, @od:0.2) { box-shadow: inset 1px 1px 1px rgba(255, 255, 255, @ol), inset -1px -1px 1px rgba(0, 0, 0, @od); -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, @ol), inset -1px -1px 1px rgba(0, 0, 0, @od); -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, @ol), inset -1px -1px 1px rgba(0, 0, 0, @od); } .placeholderColor (@color: #ffffff) { &::-webkit-input-placeholder { color: @color; } &:-moz-placeholder { color: @color; } &::-moz-placeholder { color: @color; } &:-ms-input-placeholder { color: @color; } } .rounded (@a:0, @b:0, @c:0, @d:0) { -webkit-border-radius: @a @b @c @d; -moz-border-radius: @a @b @c @d; border-radius: @a @b @c @d; } // Transitions .transition(@transition) { -webkit-transition: @transition; -moz-transition: @transition; -o-transition: @transition; transition: @transition; } #gradient { .horizontal(@startColor: #555, @endColor: #333) { background-color: @endColor; background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 background-repeat: repeat-x; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down } .vertical(@startColor: #555, @endColor: #333) { background-color: mix(@startColor, @endColor, 60%); background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 background-repeat: repeat-x; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down } } ================================================ FILE: src/main/webapp/style/eu/theme/less/modals.less ================================================ // // Modals // -------------------------------------------------- // Backdrop // ------------------------- .modal-backdrop { z-index: 10000; background: #000000; &, &.fade.in { opacity: 0.9; filter: alpha(opacity=90); } } // Modal // ------------------------- .modal { z-index: 10001; border-color: @contentBorder; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; background: @widgetBg; .modal-header { padding: 0 10px; height: 29px; line-height: 29px; border-color: @contentBorder; #gradient > .vertical(@contentGradient1, @contentGradient2); .rounded(5px,5px,0,0); h3 { font-size: 14px; } .close { position: absolute; top: 5px; right: 10px; padding: 0; margin: 0; opacity: 1; filter: alpha(opacity=100); color: @bodyText; text-shadow: @bodyTextShadow; } } .modal-body { padding: 10px; p:last-child { margin: 0; } } .modal-footer { .rounded(0,0,5px,5px); .bevelEmboss(0,0); border-color: @contentBorder2; padding: 10px; background: @contentBg1 url("../images/pattern1.png") repeat; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/notifications.less ================================================ // // Notifications // -------------------------------------------------- // Gritter // ------------------------- .gritter-item-wrapper { .gritter-item { p { margin: 0 0 10px; &:last-child { margin: 0; } } } &.gritter-primary { .gritter-top { display: none; } .gritter-bottom { display: none; } .gritter-item { background: fade(@primaryColor, 90%); padding: 10px 10px 15px; .rounded(10px, 10px, 10px, 10px); color: #fff; a { color: #fff; text-decoration: underline; } } } } // Notyfy // ------------------------- .notyfy_wrapper { border: none; .rounded(); &.notyfy_alert { background: #ffffff; } &.notyfy_error { background: #bd362f; color: #fff; } &.notyfy_success { background: #51a351; color: #fff; } &.notyfy_warning { background: #74614f; color: #fff; } &.notyfy_information { background: #57B7E2; color: #fff; } &.notyfy_confirm { background: #ffffff; } &.notyfy_primary { background: @primaryColor; border: none; &, * { color: #fff; } } &.notyfy_default { background: #fafafa; } &.notyfy_dark { background: darken(#64625f, 10%); &, * { color: #fff; } } } // Notyfy TOP // ------------------------- #notyfy_container_top { top: 0; left: 0; width: 100%; .notyfy_wrapper { .rounded(); } } // Notyfy CONTENT (eg. Dashboard) // ------------------------- #content-notification { .notyfy_wrapper { border: none; box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 8px 8px -8px rgba(0, 0, 0, 0.5), inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); .rounded(); p { margin: 0; } .notyfy_message { padding: 15px 10px; } &.notyfy_default { background: #fafafa url("../images/pattern1.png") repeat; } &.notyfy_dark { background: darken(#64625f, 10%) url("../images/pattern1.png") repeat; } &.notyfy_primary { background: @primaryColor url("../images/pattern1.png") repeat; box-shadow: inset 0 8px 8px -8px darken(@primaryColor, 45%), inset 0 -8px 8px -8px darken(@primaryColor, 20%); -moz-box-shadow: inset 0 8px 8px -8px darken(@primaryColor, 45%), inset 0 -8px 8px -8px darken(@primaryColor, 20%); -webkit-box-shadow: inset 0 8px 8px -8px darken(@primaryColor, 45%), inset 0 -8px 8px -8px darken(@primaryColor, 20%); } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/pagination.less ================================================ // // Pagination // -------------------------------------------------- // Pagination // ------------------------- // .pager li > a, .pager li > span { .rounded(5px,5px,5px,5px); } .pagination ul { background: @widgetBg; } .pagination ul > li > a:hover { box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; } .pagination ul > li > a:hover, .pagination ul > li.primary > a { border-color: lighten(@primaryColor,10%); background: @primaryColor; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0,0,0,.5); } .pagination ul > .active > a, .pagination ul > .active > span { border-color: @primaryColor; background: @primaryColor; color: #fff; font-weight: 600; text-shadow: 0 1px 0 rgba(0,0,0,.5); box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; -webkit-box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; -moz-box-shadow: 0 0 6px 1px rgba(0,0,0,.2) inset; } .pagination ul > li > a, .pagination ul > li > span { border-color: @contentBorder; background: @widgetBg; } .pagination ul > .primary.disabled > a, .pagination ul > .disabled > a, .pagination ul > .disabled > span { border-color: @contentBorder; background: @widgetBg; color: #dddddd; font-weight: 600; text-shadow: none; .bevelEmboss(0,0); } .pagination ul > .disabled > a:hover { border-color: @contentBorder; background: @widgetBg; color: #dddddd; text-shadow: none; .bevelEmboss(0,0); } ================================================ FILE: src/main/webapp/style/eu/theme/less/popovers.less ================================================ // // Popovers // -------------------------------------------------- // Popovers // ------------------------- .popover { border-color: @contentBorder; background: @widgetBg; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .popover-title { font-weight: 600; padding: 0 10px; height: 29px; line-height: 29px; #gradient > .vertical(@contentGradient1, @contentGradient2); border-bottom: 1px solid @contentBorder; position: relative; overflow: hidden; } } // Popovers Demo ONLY (UI page) // ------------------------- #demo_popovers { .popover { position: relative; display: block; width: 100%; margin: 0; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/progress-bars.less ================================================ // // Progress bars // -------------------------------------------------- // Progress bar // ------------------------- // .progress { background: @widgetBg; margin: 0 0 10px; .bevelEmboss(0,0); .bar { background: #e8e8e8; } .bar.right { text-align: right; text-indent: 10px; direction: rtl; } &.white { background: #fff; } &.progress-info .bar { background: #93b9d8; } &.progress-success .bar { background: @successColor; } &.progress-warning .bar { background: @warningColor; } &.progress-primary .bar { background: @primaryColor; } &.progress-danger .bar { background: @dangerColor; } &.progress-inverse .bar { background: @inverseColor; } &.progress-small { height: 15px; .bar { font-size: 8px; line-height: 15px; &.right { text-indent: 2px; } } } &.progress-mini { height: 5px; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/responsive.less ================================================ // // Responsive // -------------------------------------------------- // Responsive // ------------------------- // /* Desktop wide */ @media (min-width: 1200px) { .navbar.main .topnav > li.search form input { width: 155px; } } /* Desktop regular */ @media (min-width: 980px) and (max-width: 1199px) { body > .container-fluid.fixed { width: 98%; margin: 10px auto 10px; } .hidden-desktop-1 { display: none !important; } } /* Tablet */ @media (max-width: 979px) and (min-width: 768px) { .navbar.main .topnav > li.search { margin-left: 10px !important; } } @media (max-width: 979px) { body > .container-fluid.fixed { width: auto; border: none; margin: 0; } } @media (max-width: 767px) { body { padding: 0; } .nav-tabs > li > a { font-size: 10pt; } .nav-tabs > li > a, .nav-pills > li > a { padding-left: 5px; padding-right: 5px; } .documentation .span3 .menu.affix { position: relative; top: 0; width: auto; } .phone-margin.bottom { margin: 0 0 10px; } .well { padding: 5px; } .widget { .widget-body { padding: 5px; } &.margin-bottom-none { margin-bottom: 10px; } &.widget-tabs { .widget-head { height: auto; padding: 0; ul { display: block; border-right: none; height: auto; li { float: none; display: block; width: 100%; } } } } &.widget-tabs-icons-only .widget-head { height: auto; } } .widget-activity ul.list li > span.ellipsis { max-width: 60%; } .widget-activity ul.list li.double > span.ellipsis { max-width: 75%; } .widget-gallery .nav { display: none; } .widget-gallery.widget-gallery-slide .gallery { width: auto; } .widget-chat .media .pull-left, .widget-chat .media .pull-right { margin: 0; } .widget-chat .chat-controls { height: 60px; } .widget-chat { padding-bottom: 90px !important; } .widget-chat .media small.author { position: relative; top: auto; left: auto; right: auto; width: auto; } .widget-chat .media small.date { border: none; } .tabsbar { &, &.tabsbar-2 { height: auto; ul { height: auto; } } } .layout-timeline ul.timeline { padding: 0; } .layout-timeline ul.timeline > li .date { position: relative; left: auto; display: block; top: auto; } .layout-timeline ul.timeline > li .type { position: relative; left: auto; top: auto; width: auto; margin: 0 60px 10px 0; &:before, &:after { display: none; } .time { top: 0; right: -40px; } } .layout-timeline ul.timeline > li.active .separator .type { margin-bottom: 0; } .layout-timeline ul.timeline > li .separator .type { top: auto; } .widget-activity ul.list { margin: 0; } .widget.widget-tabs.widget-tabs-icons-only-2 .widget-head { height: 35px; ul li { float: left; width: auto; } } .media { text-align: center; .pull-left, .pull-right { border: none; padding-bottom: 0; margin: 0; } img.pull-left, img.pull-right { display: inline-block; } blockquote { padding: 0; text-align: center; &.pull-right p, &.pull-right small { text-align: center; } } } .menu-right { #menu { left: 0; right: auto; } &.menu-hidden { #content { margin: 0; } } } .row-merge { > [class*="span"] ~ [class*="span"] { width: auto; &:after { display: none; } } &.border-top, & ~ & { border-top: 1px solid #e5e5e5; } } body.login #login { padding: 50px 5px; } #gritter-notice-wrapper { display: none !important; } .topnav .dropdown.submenu { height: auto; .submenu-show { position: relative; margin: 0 !important; top: auto !important; left: auto !important; right: auto !important; } } .navbar.main { height: auto; .topnav { border-left: none; border-right: none; float: none; > li { float: none; border-top: 1px solid @topnavBorder1; border-bottom: 1px solid @topnavBorder2; &.active, &:hover, &.open { padding: 8px; } &.search form { position: relative; input { width: 90%; } button { position: absolute; right: 0; top: 0; } } &:first-child { border-top: none; } .dropdown.submenu { .dropdown-menu { position: relative; float: none; display: block !important; padding: 0; border: none; border-top: 1px solid #f3f3f3; } } } &:first-of-type { > li:first-child { margin-left: 38px; } } } } .menu-hidden { .navbar.main { height: 50px; overflow: hidden; } } .container-960 { width: auto; } #landing_1 { [class*="span"] { padding: 0 5px; } .banner-1 { height: auto; .item { height: auto; img { min-height: 0; height: auto; } } .carousel-caption { height: auto; } } .banner { height: auto; .banner-wrapper { height: auto; &.banner-1 { h3,p,.btn { position: relative; top: auto; right: auto; } .btn { display: block; .rounded(0,0,0,0); } p { margin: 0 0 5px; text-align: center; } h3 { font-size: 12pt; line-height: 46px; text-align: center; } } } } } .social-large { height: auto; a { float: none; display: block; border: none; border-bottom: 1px solid #e5e5e5; &:last-child { border: none; } } } #content .heading-mosaic { height: auto !important; padding-top: 10px; padding-bottom: 10px; line-height: normal !important; } } @media (max-width: 480px) { h1, h2, h3 { line-height: 30px; font-size: 18pt; } h3.glyphicons, h2.glyphicons { i:before { font-size: 24px; top: 3px; left: 5px; } } .heading-buttons .buttons { margin-top: 10px; float: none; padding: 0 10px; .btn { margin: 0; float: none; } text-align: center; } .separator { padding: 5px 0; margin: 0; } .table-condensed th, .table-condensed td { padding: 4px 5px; } p.glyphicons { padding: 5px 0 10px 55px; i:before { color: #D67170; font-size: 35pt; top: 0; } &.right { padding: 0 55px 0 0; } } } @media (max-width: 320px) { .nav-tabs > li, .nav-tabs > li > a, .nav-tabs > li > a:hover { display: block; float: none; margin: 0 0 -1px; border-color: @primaryColor; } .nav-tabs > li:hover { border-color: @primaryColor; } .nav-tabs > li, .nav-tabs > li > a { border-color: #E0D5C6; background: #F5EADB; .rounded(); } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { } } ================================================ FILE: src/main/webapp/style/eu/theme/less/rtl.less ================================================ // RTL // ------------------------- html.rtl { /* Buttons */ .btn-group.btn-block .leadcontainer { left: 29px; right: 0; } .btn-group.btn-block .leadcontainer > .btn:first-child { .rounded(0,5px,5px,0); } .btn-group.btn-block .dropdown-toggle { float: left; } .btn-toggle-code { left: 0; right: auto; } /* Typography */ h3.glyphicons, h2.glyphicons { padding: 0 45px 0 0; i:before { left: auto; right: 2px; } } /* Widgets */ .widget .widget-head .heading { float: right; } .widget .widget-head .heading.glyphicons { padding: 0 35px 0 0; } .widget .widget-head .heading.glyphicons i:before { left: auto; right: 0; } .widget .widget-head { padding: 0 0 0 15px; } .widget .details.pull-right { float: left; } .breadcrumb li.pull-right { float: left; } [data-toggle="collapse-widget"] .collapse-toggle { float: left; } .widget-activity ul.list li > span { float: right; } .widget-activity ul.list li.double .activity-icon { margin-left: 10px; margin-right: 0; } .widget-activity ul.list li:hover:after, .widget-activity ul.list li.highlight:after { right: auto; left: 15px; } .widget .widget-body.list ul li .count { float: left; } .widget .widget-body.list ul li { text-align: right; } .widget .widget-body.list ul li .badge { left: 8px; right: auto; } .media > .pull-left { float: right; margin-left: 10px; margin-right: 0; } .media > .pull-right { float: left; margin-right: 10px; margin-left: 0; } .widget-chat .media small.author { left: auto; right: 0; } .widget-chat .media.right small.author { left: 0; right: auto; } .breadcrumb li a.glyphicons { padding: 0 25px 0 0; } .breadcrumb li a.glyphicons i:before { left: auto; right: 3px; } /* Tabs */ .widget.widget-tabs > .widget-head ul li { border-right: none; border-left: 1px solid @contentBorder; } .widget.widget-tabs > .widget-head ul li.active:first-child { .rounded(); } .widget.widget-tabs > .widget-head ul li.active:last-child { .rounded(0,5px,0,0); } .widget.widget-tabs > .widget-head ul li a.glyphicons { padding: 0 35px 0 15px; } .widget.widget-tabs > .widget-head ul li a i:before { left: auto; right: 5px; } .widget.widget-tabs-double > .widget-head ul li a.glyphicons, .widget.widget-tabs-double > .widget-head ul li.active a.glyphicons { padding: 5px 38px 0 15px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons { padding: 0 15px; } .widget.widget-tabs-double-2 > .widget-head ul li a.glyphicons i:before { right: auto; } .widget.widget-tabs-vertical { .widget-head { padding: 0; ul li { border-left: none; } } } .widget.widget-wizard-pills .widget-head { padding: 10px 10px 10px 0; ul li { border: none; } } .widget.widget-tabs-icons-only .widget-head ul.pull-right { float: left; } .tabsbar.tabsbar-2 ul li a { padding: 0 10px 0 0; } .tabsbar ul li a i { float: right; } /* Form elements */ .bootstrap-select.btn-group, .bootstrap-select.btn-group[class*="span"] { margin-right: 0; } .select2-container-multi .select2-search-choice-close { left: auto; right: 3px; } .select2-container-multi .select2-choices .select2-search-choice { padding: 3px 18px 3px 5px; } .select2-container img.flag, .select2-drop img.flag { padding: 0 0 0 10px; } .radio, .checkbox { padding: 0; } div.checker { margin: 0 0 0 5px; } /* Tables */ div.dataTables_paginate { float: left; } div.dataTables_filter label { float: left; } .table td.right, .table th.right { text-align: left; } /* Menus */ .navbar.main .topnav > li.search form input { padding: 0 10px 0 0; } .navbar.main .topnav > li.open .dropdown-menu li > a.glyphicons, .navbar.main .topnav > li.open .dropdown-menu li > a:hover.glyphicons, .navbar.main .topnav > li.open .dropdown-menu li > span.glyphicons { padding: 0 35px 0 10px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open.dd-1 .typeahead:before, .navbar.main .topnav > li.open .dd-1 .typeahead:before { left: auto; right: 7px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open .dd-1 > .dropdown-menu:after, .navbar.main .topnav > li.open.dd-1 .typeahead:after, .navbar.main .topnav > li.open .dd-1 .typeahead:after { left: auto; right: 8px; } .navbar.main .topnav { border-left-color: @topnavBorder2; border-right-color: @topnavBorder1; > li { float: right; &:first-child { border-left: none; } &.search, &.glyphs { margin: 0; } &.glyphs { border-left-color: @topnavBorder2; border-right-color: @topnavBorder1; box-shadow: -1px 0 0 0 @topnavBorder1, 1px 0 0 0 @topnavBorder2; } } &.pull-left { float: right; &:first-of-type { padding-right: 8px; } } &.pull-right { float: left; > li:last-child { border-left: 1px solid @topnavBorder1; } } &.open { .dropdown-menu { right: auto; left: 0; } } .submenu-show.pull-right { left: auto !important; right: 100% !important; } } .navbar.main .topnav > li.open.dd-1 .dropdown-menu li .pull-right { float: left; } /* UI elements */ .ribbon-wrapper { right: auto; left: -3px; .ribbon { -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); left: auto; right: -5px; &:after { right: auto; left: 0; } &:before { left: auto; right: 0; } } } /* Layout */ .row-merge > [class*="span"] ~ [class*="span"] { margin-right: 0; } .innerLR { padding: 0 @spacing; position: relative; } .innerL { padding-right: @spacing; padding-left: 0; position: relative; } .innerR { padding-left: @spacing; padding-right: 0; position: relative; } /* Timeline */ .layout-timeline { ul.timeline { padding: 15px 30px 15px 15px; > li { .date { right: -70px; left: auto; } .type { right: -195px; left: auto; text-align: left; padding: 0 0 0 35px;; i:before { left: 0; right: auto; } .time { right: auto; left: 0; } &:before { left: -20px; right: auto; } &:after { left: -60px; right: auto; } } .glyphicons.pencil { right: auto; left: 15px; } p.glyphicons { padding: 5px 25px 5px 0; i:before { left: auto; right: 0; } } } } .nav-timeline > li > a.glyphicons i:before { right: auto; left: 8px; } } /* Login */ body.login #login .password { float: left; } /* Front */ &.front .navbar.main .secondary .appbrand.pull-left { float: right; } &.front .navbar.main .topnav.pull-right > li:last-child { border-left: none; } &.front .navbar.main .secondary ul.topnav:first-of-type { margin-left: 0; padding-left: 8px; } } /* Responsive */ @media (max-width: 767px) { html.rtl { .layout-timeline ul.timeline { padding: 0; } .layout-timeline ul.timeline > li .date { right: auto; } .layout-timeline ul.timeline > li .type { right: auto; margin: 0 0 10px 60px; .time { left: -40px; right: auto; }} .navbar.main .topnav { > li { float: none; &.search { #reset .boxShadow(); form button { right: auto; left: 0; } } border-right: none; } &, &.pull-left, &.pull-right { float: none; } &.pull-left:first-of-type { padding-right: 0; } &.open .dropdown-menu { right: auto; left: auto; } .submenu-show.pull-right { left: auto !important; right: auto !important; } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/scaffolding.less ================================================ // // Scaffolding // -------------------------------------------------- // Body // ------------------------- body { font-family: 'Open Sans', sans-serif; background: @bodyBg; font-size: 13px; color: @bodyText; position: relative; } // Outlines // ------------------------- *, a:focus { outline: none !important; } button:focus { outline: none !important; } button::-moz-focus-inner { border: 0; } // Links // ------------------------- a:hover { color: @linkHover; } a { color: @primaryColor; outline: 0 !important; } // Headings // ------------------------- h1, h2, h3, h4, h5, h6 { font-family: 'Open Sans', sans-serif; margin: 0 0 5px; font-weight: 400; text-shadow: @bodyTextShadow; color: #4d4d4d; &.glyphicons { color: @bodyText; } span { color: @subheadingText; font-weight: 400; padding: 0 5px; font-style: italic; } } h1 span, h2 span, h3 span { font-size: 50%; text-transform: none; padding: 0; position: relative; top: -3px; font-weight: 400; } h1 { line-height: 40px; } h2, h3 { line-height: 30px; } h2 { font-size: 26px; } // Heading with buttons // ------------------------- .heading-buttons { h1,h2,h3,h4,h5,h6 { display: inline-block; margin: 0 @spacing; &.glyphicons { display: inline-block; } } .buttons { margin-top: 3px; margin-right: @spacing; text-align: right; } .btn { margin-right: @spacing; &:last-child { margin-right: 0; } } } // Paragraphs // ------------------------- p { margin: 0 0 10px; line-height: normal; } .lead { margin: 0 0 10px; } .glyphicons { color: @bodyText; } // Lists // ------------------------- ul.icons { text-align: left; padding: 0; li { display: block; padding: 0 0 0 25px; line-height: 22px; color: @bodyText; i:before { color: @bodyText; font-size: 17px; left: 0; top: 4px; } } } // Other // ------------------------- input, button, select, textarea { font-family: 'Open Sans', sans-serif; } // Code // ------------------------- pre.prettyprint { word-break: normal; word-wrap: normal; white-space: pre; background-color: @preBg1; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(50%, @preBg1), color-stop(50%, @preBg2)); background-image: -webkit-linear-gradient(@preBg1 50%, @preBg2 50%); background-image: -moz-linear-gradient(@preBg1 50%, @preBg2 50%); background-image: -o-linear-gradient(@preBg1 50%, @preBg2 50%); background-image: linear-gradient(@preBg1 50%, @preBg2 50%); -moz-background-size: 38px 38px; background-size: 38px 38px; border: 1px solid @contentBorder2; display: block; line-height: 19px; margin-bottom: @spacing; overflow: visible; overflow-y: hidden; padding: 0 0 0 4px; .glyphicons { padding: 0 0 0 20px; i:before { font-size: 17px; top: 1px; } } } #content { pre.prettyprint { &, span { color: @bodyText; } } } // Blockquote // ------------------------- blockquote { &, &.pull-right { border: none; } p { font-weight: 400; font-size: 13px; margin: 0 0 10px; } margin: 0; padding: 0 0 0 5px; } blockquote small { color: @primaryColor; } // Separators // ------------------------- .separator { padding: @spacing 0; display: block; } .separator.bottom { padding: 0 0 @spacing; } .separator.top { padding: @spacing 0 0; } hr { border-top-color: @contentBorder; border-bottom: none; margin: @spacing 0; &.separator { padding: 0; &.top { margin: @spacing 0 0; } &.bottom { margin: 0 0 @spacing; } } } // Print // ------------------------- @media print { html, body { height: auto !important; min-height: none !important; } @page { size: auto; margin: 10mm 10mm 10mm 10mm; } #content { margin: 0 !important; padding: 0 !important; } .breadcrumb, #tlyPageGuideWrapper, .filter-bar { display: none !important; } .table { td, th { vertical-align: middle; } th { padding: 3px; text-align: center; } img { float: left; } } } // Google maps // ------------------------- .map_canvas img { max-width: none !important; } .streetview { width:100%; height:300px; } .ui-dialog-vevent .dtstart { display:none; } .ui-dialog-vevent .website { margin:0 0 1em; } #fontawesome { [class^="icon-"], [class*=" icon-"] { font-size: 24px/1em; line-height: 24px; vertical-align: middle; margin: 0 5px 0 0; } a { line-height: 40px; } } ================================================ FILE: src/main/webapp/style/eu/theme/less/sliders.less ================================================ // // Sliders // -------------------------------------------------- // jQueryUI // ------------------------- // .sliders-vertical span { height: 120px; float: left; margin: 15px } .ui-slider-wrap { display: block; padding: 5px; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset, 0 0 0 1px rgba(255, 255, 255, 0.9) inset, 0 1px 0 rgba(255, 255, 255, 0.3) inset; .rounded(10px,10px,10px,10px); .ui-slider { background: rgba(0,0,0,.1); .bevelEmboss(); .rounded(10px,10px,10px,10px); } .ui-slider-horizontal { height: 10px; .ui-slider-handle { top: -5px; } } .ui-slider-vertical { .ui-slider-handle { left: -4px; } } .ui-slider-handle { .rounded(50%,50%,50%,50%); background: #fff; border-width: 3px; border-style: solid; border-color: rgba(0,0,0,.3); width: 13px; height: 13px; box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3); } .ui-slider-range { .rounded(10px,10px,10px,10px); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 2px 2px rgba(0, 0, 0, 0.05) inset; background: rgba(0,0,0,.2); } .slider-primary { .ui-slider-handle { border-color: @primaryColor; } .ui-slider-range { background: @primaryColor; } } .slider-warning { .ui-slider-handle { border-color: #FBB450; } .ui-slider-range { background: #FBB450; } } .slider-success { .ui-slider-handle { border-color: #609450; } .ui-slider-range { background: #609450; } } .slider-inverse { .ui-slider-handle { border-color: #3F4246; } .ui-slider-range { background: #3F4246; } } .slider-info { .ui-slider-handle { border-color: #93B9D8; } .ui-slider-range { background: #93B9D8; } } } .sliders-vertical { position: relative; margin: 0 auto; display: inline-block; .ui-slider-wrap { margin: 0 5px; } .ui-slider { margin: 0; } } .vertical-range-slider { .ui-slider-wrap { display: inline-block; margin: 0 auto; } .slider { } } // jQRangeSliders // ------------------------- // .sliderContainer { height: 35px; margin-top: 50px; width: 100%; select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { margin: 0; padding: 2px 4px; } .ui-rangeSlider-withArrows .ui-rangeSlider-container { margin: 0 20px; } .ui-rangeSlider-bar { background: @primaryColor; height: 30px; margin: 0; } .ui-rangeSlider-withArrows .ui-rangeSlider-container, .ui-rangeSlider-noArrow .ui-rangeSlider-container, .ui-rangeSlider-arrow, .ui-rangeSlider-bar { .bevelEmboss(0,0); } .ui-rangeSlider-container, .ui-rangeSlider-arrow, .ui-rangeSlider-label { background: @widgetBgGray; color: @bodyText; font-size: 13px; } .ui-rangeSlider-container { border-color: @contentBorder; } .ui-editRangeSlider .ui-rangeSlider-label { padding: 5px; } .ui-rangeSlider-label-inner { border-top-color: @widgetBgGray; } .ui-rangeSlider-arrow { border-color: @contentBorder; } .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: @primaryColor; margin-right: -4px; } .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: @primaryColor; margin-left: -4px; } .ui-rangeSlider-arrow { width: 20px; } .ui-rangeSlider .ui-ruler-scale { overflow: hidden; } .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-inner { border-color: @contentBorder; } .ui-rangeSlider .ui-ruler-scale0 .ui-ruler-tick-label { color: @bodyText; } .rangeslider-danger { .ui-rangeSlider-bar { background: @dangerColor; } .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: @dangerColor; } .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: @dangerColor; } } .rangeslider-success { .ui-rangeSlider-bar { background: @successColor; } .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: @successColor; } .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: @successColor; } } .rangeslider-warning { .ui-rangeSlider-bar { background: @warningColor; } .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: @warningColor; } .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: @warningColor; } } } .widget-body-gray { .sliderContainer { .ui-rangeSlider-label-inner { border-top-color: #cecece; } .ui-rangeSlider-container, .ui-rangeSlider-arrow, .ui-rangeSlider-label { background: #cecece; color: #4d4d4d; font-weight: 600; } .ui-rangeSlider:not(.rangeslider-success) { .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner { border-left-color: #4d4d4d; } .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner { border-right-color: #4d4d4d; } .ui-rangeSlider-bar { background: #4d4d4d; } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/style-default.less ================================================ /*! * QuickAdmin v1.3.1 * * Copyright MosaicPro * http://www.mosaicpro.biz * * Designed and built exclusively for sale @Envato Marketplaces. */ @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,800,700,600&subset=latin,latin-ext); @import "mixins.less"; // Variables // ------------------------- @import "variables.less"; // Scaffolding // ------------------------- @import "scaffolding.less"; // Layout // ------------------------- @import "layout.less"; // Menus // ------------------------- @import "menus.less"; // Widgets // ------------------------- @import "widgets.less"; // Tabs // ------------------------- @import "tabs.less"; // Buttons // ------------------------- @import "buttons.less"; // Forms // ------------------------- @import "forms.less"; // Tables // ------------------------- @import "tables.less"; // Labels // ------------------------- @import "labels.less"; // Tooltips // ------------------------- @import "tooltips.less"; // Popovers // ------------------------- @import "popovers.less"; // Modals // ------------------------- @import "modals.less"; // Alerts // ------------------------- @import "alerts.less"; // Progress bars // ------------------------- @import "progress-bars.less"; // Accordions // ------------------------- @import "accordions.less"; // Pagination // ------------------------- @import "pagination.less"; // Notifications // ------------------------- @import "notifications.less"; // Sliders // ------------------------- @import "sliders.less"; // jQueryUI // ------------------------- @import "jquery-ui.less"; // Form Wizards // ------------------------- @import "form-wizards.less"; // Timeline // ------------------------- @import "timeline.less"; // Login // ------------------------- @import "login.less"; // Gallery // ------------------------- @import "gallery.less"; // Calendar // ------------------------- @import "calendar.less"; // Guided Tour // ------------------------- @import "guidedtour.less"; // Documentation // ------------------------- @import "documentation.less"; // Landing pages // ------------------------- @import "landings.less"; // Choose (Start) Page // ------------------------- @import "choose.less"; // Front module customizations // ------------------------- @import "front.less"; // RTL // ------------------------- @import "rtl.less"; // lt-ie9 // ------------------------- @import "lt-ie9.less"; // Responsive // ------------------------- @import "responsive.less"; // Themer // ------------------------- @import "themer.less"; ================================================ FILE: src/main/webapp/style/eu/theme/less/style-flat.less ================================================ /*! * * QuickAdmin v1.3.1 * Copyright MosaicPro * http://www.mosaicpro.biz * * Designed and built exclusively for sale @Envato Marketplaces. */ @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,800,700,600&subset=latin,latin-ext); @import "mixins.less"; // Variables // ------------------------- @import "variables.less"; // Scaffolding // ------------------------- @import "scaffolding.less"; // Layout // ------------------------- @import "layout.less"; // Menus // ------------------------- @import "menus.less"; // Widgets // ------------------------- @import "widgets.less"; // Tabs // ------------------------- @import "tabs.less"; // Buttons // ------------------------- @import "buttons.less"; // Forms // ------------------------- @import "forms.less"; // Tables // ------------------------- @import "tables.less"; // Labels // ------------------------- @import "labels.less"; // Tooltips // ------------------------- @import "tooltips.less"; // Popovers // ------------------------- @import "popovers.less"; // Modals // ------------------------- @import "modals.less"; // Alerts // ------------------------- @import "alerts.less"; // Progress bars // ------------------------- @import "progress-bars.less"; // Accordions // ------------------------- @import "accordions.less"; // Pagination // ------------------------- @import "pagination.less"; // Notifications // ------------------------- @import "notifications.less"; // Sliders // ------------------------- @import "sliders.less"; // jQueryUI // ------------------------- @import "jquery-ui.less"; // Form Wizards // ------------------------- @import "form-wizards.less"; // Timeline // ------------------------- @import "timeline.less"; // Login // ------------------------- @import "login.less"; // Gallery // ------------------------- @import "gallery.less"; // Calendar // ------------------------- @import "calendar.less"; // Guided Tour // ------------------------- @import "guidedtour.less"; // Documentation // ------------------------- @import "documentation.less"; // Landing pages // ------------------------- @import "landings.less"; // Choose (Start) Page // ------------------------- @import "choose.less"; // Front module customizations // ------------------------- @import "front.less"; // RTL // ------------------------- @import "rtl.less"; // lt-ie9 // ------------------------- @import "lt-ie9.less"; // Responsive // ------------------------- @import "responsive.less"; // Themer // ------------------------- @import "themer.less"; // Customizations // ------------------------- /* Reset box-shadow & borders */ .btn, .widget, .widget-body, .widget-stats, .carousel-inner, .layout-timeline ul.timeline > li .date, .box-generic, .well, .accordion, .accordion .accordion-group { border: none !important; #reset .boxShadow(); } /* Reset box-shadow only */ select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input, .dropdown-menu, .table-bordered, .progress .bar, .popover { #reset .boxShadow(); } /* Reset borders only */ .chat-controls, .thumb, .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a, .navbar.main .topnav > li.glyphs ul, .navbar.main .topnav > li.glyphs ul li, .navbar.main .topnav > li.search form, .navbar.main .topnav > li.open.dd-1 .dropdown-menu, .menubar, .widget.widget-tabs-double-2 > .widget-head, .widget.widget-tabs-double-2 .widget-body-regular { border: none !important; } /* Reset padding only */ .thumb { padding: 0 !important; } /* Reset rounded corners */ #content, .navbar.main, #wrapper, .btn, .widget, .widget-head, .widget-body, .carousel, .carousel-inner, .carousel .item, .carousel .item img, .nav li a, .thumb, .thumb img, .widget-stats, .label, .badge, .navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a, .navbar.main .topnav > li.glyphs ul, .navbar.main .topnav > li.glyphs ul li, .navbar.main .topnav > li.search form, .layout-timeline ul.timeline > li .date, select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input, .alert, .tooltip-inner, .popover, .pagination ul, .pagination a, .pager a, .table-bordered, .table-bordered td, .table-bordered th, .box-generic, .progress, .progress .bar, .add-on, .well, .accordion .accordion-heading .accordion-toggle, .accordion .accordion-inner, pre, .widget-chat .chat-controls { #reset .rounded(); } /* Fix top menu */ .navbar.main .topnav > li > a { padding: 0 10px; } .navbar.main .topnav > li > a.glyphicons { padding: 0 9px; } .navbar.main .topnav > li.glyphs ul li { padding: 0; } .navbar.main .topnav > li.glyphs ul li .glyphicons { padding: 5px 10px; } .navbar.main .topnav > li.active, .navbar.main .topnav > li:hover, .navbar.main .topnav > li.open { padding: 8px 0 8px 10px; } .navbar.main .topnav > li.active:last-child, .navbar.main .topnav > li:hover:last-child, .navbar.main .topnav > li.open:last-child { padding: 8px 9px 8px 10px; } .navbar.main .topnav > li.search { padding: 8px 9px !important; } .navbar.main .topnav > li.glyphs { padding: 8px !important; } .navbar.main .topnav > li.active > a.glyphicons, .navbar.main .topnav > li:hover > a.glyphicons, .navbar.main .topnav > li.open > a.glyphicons { padding: 6px 9px; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:before, .navbar.main .topnav > li.open.dd-1 > .dropdown-menu:after { display: none; } .navbar.main .topnav > li.open.dd-1 > .dropdown-menu { top: 45px; } /* input + btn */ .input-append .btn { height: 30px; } .fileupload-new .input-append .btn-file { height: 22px; } /* tabs */ .tabsbar ul li a { background: #f9f9f9; } .tabsbar:not(.tabsbar-2) ul li.active a { background: @primaryColor; } .widget.widget-tabs-double-2 > .widget-head { border-bottom: 1px solid @contentBorder !important; } ================================================ FILE: src/main/webapp/style/eu/theme/less/tables.less ================================================ // // Tables // -------------------------------------------------- // Regular Tables // ------------------------- .table { margin: 0 0 @spacing; position: relative; .rounded(); &.table-white { background: #fff; } } .table th, .table td { border-top-color: @contentBorder2; } .table td.center, .table th.center { text-align: center; } .table td.right, .table th.right { text-align: right; } // Condensed // ------------------------- .table-condensed { font-size: 10pt; } .table-condensed th, .table-condensed td { padding: 4px 10px; } // Borderless // ------------------------- .table-borderless { th, td { border: none; } } // Striped // ------------------------- .table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { background-color: @contentBg1; } // Bordered // ------------------------- .table-bordered { border-color: @contentBorder; th, td { border-color: @contentBorder; } /* Reset rounded corners thead:first-child tr:first-child>th:first-child, tbody:first-child tr:first-child>td:first-child, tbody:first-child tr:first-child>th:first-child, thead:first-child tr:first-child>th:last-child, tbody:first-child tr:first-child>td:last-child, tbody:first-child tr:first-child>th:last-child, thead:last-child tr:last-child>th:first-child, tbody:last-child tr:last-child>td:first-child, tbody:last-child tr:last-child>th:first-child, tfoot:last-child tr:last-child>td:first-child, tfoot:last-child tr:last-child>th:first-child { .rounded(); } */ box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); } // Utilities // ------------------------- .table-fill td { background: #F8F8F8; } .table .progress:last-child, .table .alert:last-child { margin: 0; } .table .shortRight { width: 25%; text-align: right; direction: rtl; text-indent: 10px; } .table-large-spacing td { padding: 20px 15px; } .table .thead td { padding: 8px; font-weight: bold; } .table-vertical-center td, .table-vertical-center th { vertical-align: middle; } // table-thead-simple // ------------------------- .table-thead-simple { thead { th { background: none; border-left: none; border-right: none; border-top: none; border-bottom: 1px solid @contentBorder2; color: @bodyText; .rounded(); text-shadow: none; text-transform: none; .bevelEmboss(0,0); } } &.table-thead-border-none { border-top: none; .rounded(); thead { th { border-bottom: none; } } thead:first-child tr:first-child > th:last-child, tbody:first-child tr:first-child > td:last-child, tbody:first-child tr:first-child > th:last-child { .rounded(); } } } // Table Primary // ------------------------- .table-primary { border-color: @contentBorder; border-top: none; thead { th { border-color: @primaryColor; background-color: @primaryColor; color: #fff; font-size: 14px; } &:first-child tr:first-child > th:first-child, &:first-child tr:first-child > th:last-child { } } tbody td { color: @bodyText; background: @contentBg1; border-width: 0px; &.important { color: @primaryColor; font-weight: 600; } &.actions { padding-right: 1px; } } &.table-bordered { tbody td { border-color: @contentBorder; border-width: 1px; /* box-shadow: 0 0 0 1px #fff inset; -webkit-box-shadow: 0 0 0 1px #fff inset; -moz-box-shadow: 0 0 0 1px #fff inset; */ } } tbody tr:nth-child(odd) td, tbody tr:nth-child(odd) th { background: @widgetBg; } tbody tr.selectable td { cursor: pointer; } tbody tr.selected td, tbody tr.selectable:hover td { background: darken(@contentBorder, 5%); box-shadow: 0 0 0 1px darken(@contentBorder, 20%) inset; -webkit-box-shadow: 0 0 0 1px darken(@contentBorder, 20%) inset; -moz-box-shadow: 0 0 0 1px darken(@contentBorder, 20%) inset; } } // Pricing tables // ------------------------- .table-pricing { th, td { padding: 10px; } .plan { font-weight: 600; font-size: 14px; display: block; } .price { font-weight: 600; font-size: 24px; display: block; } .heading { font-weight: 600; font-size: 24px; vertical-align: middle; } .glyphicons.standard { vertical-align: middle; &.circle_ok { i:before { color: #9fc75f; } } } } .table-pricing-2 { th { padding: 12px 0; background: #64625f; font-size: 14px; color: #fff; border-color: #5a5855; } .pricing { td { padding: 12px 10px 10px; background: #e5e5e5; border-color: #cecece; } } } // DataTables // ------------------------- div.dataTables_filter label { float: none; } .row-fluid [class*="span"]:last-of-type { .dataTables_filter { text-align: right; } } #DataTables_Table_0_length select { width: 80px; } #DataTables_Table_0_info { padding: 0; } .dataTables_paginate { text-align: right; } .dataTables_length { padding-top: 5px; } .ColVis { margin: 0; } // Google Visualization Tables // ------------------------- .google-visualization-table-div-page { margin: 10px 0 0 0 !important; .a-d-e-h-g { padding: 0; border: none; margin: 0; } .a-d-e-f-g, .a-d-e-h-g { border-style: none; } .a-d-e-o-q .a-d-e-h-g { border: none; } .a-d-e { background: none; margin-left: 5px; } .a-d-e.a-d-e-o-p { margin-left: 0; } } .google-visualization-table-table { width: 100%; border-collapse: separate; border-spacing: 0; border: 1px solid #e5e5e5; border-left: 0; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; font-size: 10pt; background: none !important; td, .tableHeaderRow td { padding: 4px 10px; border: none; border-left: 1px solid #e5e5e5; border-top: 1px solid #e5e5e5; line-height: 20px; } .tableHeaderRow td { font-weight: bold; vertical-align: bottom; } tbody tr:nth-child(odd) td, tbody tr:nth-child(odd) td { background-color: rgba(255,255,255,.5); } .tableHeaderRow:first-child tr:first-child > td:first-child, tbody:first-child tr:first-child > td:first-child { -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; } .tableHeaderRow:first-child tr:first-child > td:last-child, tbody:first-child tr:first-child > td:last-child { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-topright: 4px; } tbody:last-child tr:last-child > td:first-child { -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; } tbody:last-child tr:last-child > td:last-child { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; } .tableHeaderRow:first-child tr:first-child td, tbody:first-child tr:first-child td { border-top: 0; } } // Responsive Tables // ------------------------- @media only screen and (max-width: 979px) { .table-responsive { &.swipe-horizontal { width: 100%; border-collapse: collapse; border-spacing: 0; display: block; position: relative; width: 100%; border-left: 1px solid #DDD; th, td { display: block; margin: 0; vertical-align: top; &:last-child { } } th { text-align: right; border-bottom: 0; border-left: 0; } td { min-height: 1.25em; text-align: left; border-left: 0; border-right: 0; border-bottom: 0; border-top: 0; font-size: 13px; } thead { display: block; float: left; tr { display: block; } } tbody { display: block; width: auto; position: relative; overflow-x: auto; white-space: nowrap; word-spacing: 0; letter-spacing: 0; font-size: 0; tr { display: inline-block; vertical-align: top; border-left: 1px solid #e5e5e5; } } } &.block { /* Force table to not be like tables anymore */ table, thead, tbody, th, td, tr { display: block; } /* Hide table headers (but not display: none;, for accessibility) */ thead tr { position: absolute; top: -9999px; left: -9999px; } tr { border: 1px solid #e5e5e5; } td { /* Behave like a "row" */ border: none; border-bottom: 1px solid #e5e5e5; position: relative; padding-left: 50%; white-space: normal; text-align:left; } td:before { /* Now like a table header */ position: absolute; /* Top/left values mimic padding */ vertical-align: middle; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; text-align:right; font-weight: bold; } /* Label the data */ td:before { content: attr(data-title); } } } } // Invoice // ------------------------- .table-invoice { td { border: none; padding: 0; } } // Advanced profile / projects // ------------------------- .table-projects { .stats { span { display: block; text-transform: uppercase; padding: 2px 0; &.count { font-size: 18pt; font-weight: normal; color: @primaryColor; } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/tabs.less ================================================ // // Tabs // -------------------------------------------------- .widget { &.widget-tabs { border-color: @contentBorder; .tab-content { padding: 0; } > .widget-head { background: @widgetBg; border-color: @contentBorder; overflow: visible; ul { position: relative; overflow: visible; list-style: none; height: 35px; margin: 0; display: inline-block; li { height: 35px; line-height: 35px; float: left; display: block; border-right: 1px solid @contentBorder; a { width: auto; height: 35px; display: block; padding: 0 15px; position: relative; overflow: hidden; color: @bodyText; text-decoration: none; i:before { left: 5px; top: 5px; color: #9d9d9d; text-shadow: @bodyTextShadow; } &.glyphicons { padding: 0 15px 0 35px; } } &.active { height: 36px; background: #fff; color: #505050; a { color: #505050; i:before { color: #505050; } } &:first-child { .rounded(5px,0,0,0); } } } } } > .widget-body { &.large { padding: 25px; } } } &.widget-tabs-double { > .widget-head { height: 40px; ul { height: 40px; li, li.active { height: 40px; line-height: 20px; a { height: 35px; padding: 5px 0 0; span { display: block; line-height: 15px; } &.glyphicons { padding: 5px 15px 0 38px; i:before { left: 4px; top: 9px; font-size: 20px; } } } } } } } &.widget-tabs-double-2 { border: none; > .widget-head { border: 1px solid @contentBorder; border-bottom: none; height: 70px; &.border-bottom { border-bottom: 1px solid @contentBorder; } ul { height: 70px; li { height: 70px; line-height: 20px; a { .transition(color 1s ease); height: 70px; padding: 5px 0 0; text-decoration: none; text-align: center; span { display: block; line-height: 30px; } &.glyphicons { padding: 0 15px; i { display: block; height: 24px; padding: 13px 0 0; line-height: 24px; text-align: center; } i:before { left: auto; top: auto; font-size: 24px; position: relative; .transition(color 1s ease); } } } &.active { height: 70px; background: @widgetBg; a { color: @primaryColor; i:before { color: @primaryColor; } } } &:hover { background: @widgetBg; a { color: @primaryColor; i:before { color: @primaryColor; } } } } } } > .widget-body { padding: 0; } .widget-body-regular { padding: 10px; border: 1px solid @contentBorder; p:last-child { margin: 0; } } } &.widget-tabs-vertical { .widget-head { border: none; height: auto; padding: 0; ul { display: block; height: auto; li { float: none; display: block; border-right: none; border-bottom: 1px solid @contentBorder; &:last-child { border: none; } } } } .widget-body { padding: 0; .tab-content { padding: 12px 15px; } } } &.widget-wizard-pills { .widget-head { height: 60px; padding: 10px 0; ul { height: 60px; li { height: 60px; line-height: 60px; color: @bodyText; padding: 0 0 0 10px; border: none; &.status { height: 45px; padding: 15px 15px 0; font-weight: 600; span.r { display: block; line-height: 15px; } } a { height: 58px; line-height: 60px; padding: 0; width: 58px; text-align: center; background: @contentBorder; border: 1px solid @contentBorder; color: #c8c8c8; font-weight: 600; font-size: 16pt; .rounded(5px,5px,5px,5px); position: relative; z-index: 2; } &.active { height: 60px; background: none; a { width: 60px; height: 60px; background: lighten(@contentBorder, 10%); border: none; } } &.primary { a { width: 60px; height: 60px; background: @primaryColor; border: none; color: #fff; } } position: relative; &:not(:first-child):before { position: absolute; background: @contentBorder; height: 1px; left: 0; right: 0; top: 29px; display: block; content: ""; z-index: 1; } &.no-padding { padding: 0; } } } } } &.widget-tabs-2 { border-bottom: 1px solid @contentBorder; &.border-bottom-none { border-bottom: none; } > .widget-head { background: #fff; border: none; border-bottom: 1px solid @contentBorder; padding: 0 10px; ul { border-color: @contentBorder; li { border: none; &.active { background-color: #f7f7f7; background-image: -moz-linear-gradient(top,#f7f7f7,#ffffff); background-image: -webkit-gradient(linear,0 0,0 100%,from(#f7f7f7),to(#ffffff)); background-image: -webkit-linear-gradient(top,#f7f7f7,#ffffff); background-image: -o-linear-gradient(top,#f7f7f7,#ffffff); background-image: linear-gradient(to bottom,#f7f7f7,#ffffff); background-repeat: repeat-x; } a { border: 1px solid #dddddd; border-bottom: none; border-right: none; color: #222; text-transform: uppercase; font-weight: 600; } &:first-child a { .rounded(); } } } } > .widget-body { background: #fff; border: none; padding: 15px; } } &.tabs-right { .widget-head { ul { float: right; } } } &.widget-tabs-icons-only-2 { > .widget-head { ul li { a.glyphicons { width: 38px; padding: 0; i { width: 38px; display: block; line-height: 35px; &:before { width: 38px; text-align: center; left: auto; top: auto; position: relative; display: block; line-height: 35px; color: #cbcbcb; } } } &.active a.glyphicons i:before { color: #505050; } } } } &.widget-tabs-icons-only { .widget-body { padding: 0; p:last-child { margin: 0; } } .widget-head { padding: 0 0 10px; ul { display: block; overflow: hidden; position: relative; list-style: none; margin: 0; height: 30px; line-height: 30px; padding: 0; li { color: #dadada; float: left; display: block; padding: 0 10px 0 0; font-size: 8pt; line-height: 30px; &.glyphicons { width: 30px; height: 30px; padding: 0 3px; text-align: center; cursor: pointer; i { background: #e5e5e5; .transition(background .5s ease); display: block; .rounded(2px,2px,2px,2px); height: 30px; position: relative; &:before { position: relative; top: 0; left: 0; color: #64625f; font-size: 17px; line-height: 30px; } } &:hover { i { background: #dedede; } } &.active { i { background: #64625f; &:before { color: #fff; } } } &:last-child { padding: 0; } } } } } } } // Tabsbar // ------------------------- .tabsbar { height: 60px; border: 1px solid @contentBorder; position: relative; overflow: hidden; margin: 0 0 @spacing; ul { list-style: none; margin: 0; padding: 0; height: 60px; li { float: left; display: block; height: 54px; border-right: 1px solid @contentBorder; background: @contentGradient1; padding: 3px; a { display: block; height: 54px; line-height: 54px; #gradient > .vertical(@contentGradient1, @contentGradient2); padding: 0 15px; color: @bodyText; text-decoration: none; .transition(background 1s ease); i { display: inline-block; float: left; width: 39px; height: 54px; &:before { color: @bodyText; position: relative; top: auto; left: auto; line-height: 54px; text-align: center; } } } &.active { a { #gradient > .vertical(lighten(@primaryColor, 15%), @primaryColor); color: #fff; i:before { color: #fff; } } } } } &.tabsbar-2 { height: 39px; ul { height: 39px; li { height: 39px; padding: 0; background: none; border: none; .transition(background .5s ease); a { height: 39px; line-height: 39px; background: none; .transition(color .5s ease); i { height: 39px; width: 33px; &:before { line-height: 39px; font-size: 20px; .transition(color 1s ease); } } } &.active { background: #fff; a { color: @primaryColor; i:before { color: @primaryColor; } } } &:not(.active):hover { a { color: @primaryColor; i:before { color: @primaryColor; } } } } } &.active-fill { ul li.active a { background: @primaryColor; color: #fff; i:before { color: #fff; } } } } } // nav-tabs & nav-pills // ------------------------- .nav-tabs > li > a:hover, .nav-pills > li > a, .nav-pills > li > a:hover { background: @primaryColor; border-bottom-color: @primaryColor; color: #fff; } .nav-tabs { border-bottom-color: @primaryColor; } .nav-tabs > li > a { padding: 6px 8px; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { background: @primaryColor; border-top-color: @primaryColor; border-left-color: @primaryColor; border-right-color: @primaryColor; color: #fff; font-weight: bold; text-shadow: 0 1px 0 rgba(0,0,0,.5); .bevelEmboss(); } .nav-pills a { cursor: pointer; } .nav-pills > .active > a, .nav-pills > .active > a:hover { background: @primaryColor; color: #fff; } .nav-pills { .glyphicons { padding-left: 25px; i:before { position: relative; font-size: 14px; left: -10px; top: 2px; color: #F5EADB; font-weight: normal; text-shadow: none; } } } .tab-content { overflow: visible; padding: 0; } ================================================ FILE: src/main/webapp/style/eu/theme/less/themer.less ================================================ // Themer // ------------------------- #themer { position: fixed; top: 40%; left: 50%; z-index: 1000; width: 260px; margin: -50px 0 0 -130px; text-align: left; &.in { overflow: visible; } .close2 { position: absolute; background: #DDD; color: #222; font-weight: 600; height: 20px; top: 14px; right: 10px; line-height: 20px; text-align: center; font-size: 10pt; padding: 0 10px; cursor: pointer; } .wrapper { position: relative; background: #292c2e; border: 1px solid #2f3235; padding: 15px; color: #fafafa; hr.separator { margin: 10px 0; border-top-color: #5e646b; border-bottom-color: #2f3235; } h4 { border-bottom: 1px solid #5e6060; padding: 0 0 10px; margin: 0 0 10px; color: #fff; span { color: #5e6060; font-weight: normal; font-size: 10pt; text-shadow: none; } } .btn { margin: 0; } #themer-getcode-less { margin: 0 0 0 5px; } ul { margin: 0; list-style: none; li { height: 25px; line-height: 25px; position: relative; .minicolors { line-height: normal; border: none; top: 2px; right: 0; position: absolute; } .minicolors input { border: none; height: 20px; width: 69px; background: #414649; color: #fff; font-size: 9pt; padding: 0 5px; margin: 0 0 1px; } .minicolors-swatch { cursor: pointer; width: 18px; height: 18px; } .minicolors-panel { z-index: 10000; top: 24px; } .minicolors-position-left .minicolors-panel { left: -152px; } select { position: absolute; top: 3px; right: 0; width: 100px; height: 20px; line-height: normal; padding: 0; margin: 0; font-size: 9pt; background: lighten(#292C2E, 10%); border: 1px solid #2F3235; color: #fff; } .link { text-decoration: underline; cursor: pointer; } label { margin: 0; line-height: 25px; font-size: 9pt; input { margin: 0 0 1px; } } &.advanced { display: none; } } } } &.themer-advanced { .wrapper ul li.advanced { display: block; } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/timeline.less ================================================ // // Timeline page // -------------------------------------------------- .layout-timeline { border-top-color: #d2d1d0 !important; border-top-width: 2px !important; > [class*="span"] ~ [class*="span"] { &:after { width: 2px; background: #d2d1d0; } } .media { margin: 0 0 @spacing; .media-body { padding: 10px 0 0; line-height: 17px; .author { font-size: 14px; } } } .glyphicons.pencil { position: absolute; top: @spacing; right: @spacing; margin: 0; padding: 0; width: 20px; height: 20px; i:before { top: 0; right: 0; font-size: 17px; color: #cccccc; } } ul.timeline { list-style: none; margin: 0; padding: @spacing @spacing @spacing @spacing*2; > li { position: relative; padding: 0 0 @spacing; .date { width: 50px; padding: 5px 0; text-align: center; text-transform: uppercase; font-weight: 600; position: absolute; left: -70px; top: 0; z-index: 2; strong { display: block; line-height: 10px; padding: 3px 0 0; } } .type { position: absolute; text-transform: uppercase; color: @bodyText; font-weight: 600; padding: 0 35px 0 0; top: 15px; width: 100px; text-align: right; left: -195px; line-height: 24px; z-index: 2; i:before { left: auto; right: 0; color: #c6c6c5; } .time { position: absolute; top: 24px; right: 0; color: #c6c6c5; } &:after { display: block; content: ""; position: absolute; right: -60px; top: 12px; width: 45px; height: 2px; background: #d2d1d0; } &:before { display: block; content: ""; position: absolute; right: -20px; top: 9px; width: 8px; height: 8px; background: #d2d1d0; } } .separator { .type { top: 60px; } } .alert-gray { background: #f8f8f8; color: @bodyText; .rounded(); border: none; margin: 0; } p.glyphicons { padding: 5px 0 5px 25px; i:before { color: #dfdfdf; font-size: 17px; top: 5px; left: 0; } } .widget-body-gray { .glyphicons i:before { color: @bodyText; } a { color: #000; text-decoration: underline; } strong { font-weight: 400; color: #000; } } &.active { .type { color: @primaryColor; i:before { color: @primaryColor; } &:before, &:after { background: @primaryColor; } } &:before { display: block; position: absolute; content: ""; top: 0; bottom: 0; left: -45px; width: 2px; z-index: 2; background: @primaryColor; } } } } } .nav-timeline { > li { margin: 0 0 5px; > a { background: #b3b3b3; border: none; margin: 0 !important; font-weight: 600; &.glyphicons { padding: 8px 12px; i:before { position: absolute; left: auto; right: 8px; top: 8px; color: #fff; } } } &.active { > a { background: @primaryColor; } } } } ================================================ FILE: src/main/webapp/style/eu/theme/less/tooltips.less ================================================ // // Tooltips // -------------------------------------------------- // Tooltips // ------------------------- .tooltip-inner { background: #272a2c; color: #bab9b9; } .tooltip.bottom .tooltip-arrow { border-bottom-color: #272a2c; } .tooltip.top .tooltip-arrow { border-top-color: #272a2c; } .tooltip.left .tooltip-arrow { border-left-color: #272a2c; } .tooltip.right .tooltip-arrow { border-right-color: #272a2c; } .tooltip.left { margin-left: -13px; } // Flot Charts Tooltips // ------------------------- #flotTip { white-space: nowrap; border: 1px solid @primaryColor; padding: 3px 8px; background: @primaryColor; .rounded(5px,5px,5px,5px); .bevelEmboss(); position: absolute; z-index: 100; color: #fff; } ================================================ FILE: src/main/webapp/style/eu/theme/less/variables.less ================================================ // Variables // ------------------------- @primaryColor: #4a8bc2; @dangerColor: #bd362f; @successColor: #609450; @warningColor: #ab7a4b; @inverseColor: #45484d; @spacing: 15px; // General Layout // ------------------------- @bodyBg: #f0f0f0; @bodyText: #7c7c7c; @bodyText2: #000; @containerBorder: #d8d8d8; @containerBg: #f0f0f0; @linkHover: #333333; @bodyTextShadow: 0 1px 0 #fff; // Top menus // ------------------------- @topnavBorder1: #346d9d; @topnavBorder2: #619aca; @topnavBorder3: #296190; @navbarBg: @primaryColor; @navbarText: #ffffff; @navbarActiveBg: #346d9d; @navbarGlypsText: #538fc1; @navbarGlypsActiveBg: #579ad2; @navbarSearchBg: #afcae2; @navbarSearchText: #628db3; @navbarSecondaryBg: #275b87; // Sidebar Menu // ------------------------- @menuBg: #1f2123; @menuAppbrand: #ffffff; @menuText: #4c4d4f; @menuBorder1: #161718; @menuBorder2: #2a2c2e; @menuActiveBg: #161718; @menuActiveText: #737474; // Content // ------------------------- @contentGradient1: #fdfdfd; @contentGradient2: #f4f4f4; @contentBorder: #d8d8d8; @contentShadow1: #dbdbdb; @contentShadow2: #f6f6f6; @widgetBg: #ffffff; @widgetBgGray: #e5e5e5; @contentBg1: #fafafa; @contentBorder: #dbdbdb; @contentBorder2: #ebebeb; @subheadingText: lighten(@bodyText, 20%); // Widget specific // ------------------------- @listActiveHoverBg: #f2f2f2; @listActiveHoverBoxShadow: 0 1px 0 0 #fff inset; @preBg1: #f8f8f8; @preBg2: #eeeeee; @wellBg: #fafafa; ================================================ FILE: src/main/webapp/style/eu/theme/less/widgets.less ================================================ // // Widgets // -------------------------------------------------- // Filters Widget // ------------------------- .filter-bar { background: @widgetBgGray; margin: 0 auto @spacing; border: 1px solid @contentBorder; box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; .rounded(5px,5px,5px,5px); &.border-top-none { border-top: none; } line-height: 30px; height: 40px; padding: 0 10px; div { div { padding: 0; margin: 0; &:not(.helper) { margin: 0 15px 0 0; } input { margin: 3px 0 0; } &.input-append { .add-on { padding: 1px 3px; margin: 3px 0 0 -1px; background: #fff; color: #d8d9da; border-color: #d8d9da; i:before { top: 4px; left: 4px; font-size: 14px; color: #d0d1d1; } } button.add-on { width: 24px; height: 24px; } margin: 0; } &:last-child { margin: 0; } } padding: 5px 0; display: block; &:not(.helper) { float: left; } line-height: 30px; &.glyphicons { padding: 0 0 0 35px; i:before { top: 12px; left: 9px; font-size: 17px; color: rgba(255,255,255,.8); } } &.clearfix { padding: 0; clear: both; float: none; display: block; height: 0; margin: 0; } &.lbl { padding: 0 10px 0 35px; background: @primaryColor; height: 40px; line-height: 40px; margin-right: 10px; color: #fff; } } form { margin: 0; input,select { margin: 0 5px 3px 0; padding: 1px 5px; color: #a7a7a7; } select { padding: 1px; height: 23px; } label { float: left; margin: 0 5px; display: block; line-height: 30px; } } &.border-none { border: none; } &.dark { background: #64625f; color: #fff; div div.input-append .add-on { background: #42403e; color: #fff; border-color: #42403e; i:before { color: #767473; text-shadow: none; } } form { input:focus { border-color: #42403e; } input,select { border-color: #42403e; } } } } // Buttons widget // ------------------------- .menubar { height: 30px; position: relative; overflow: hidden; border: 1px solid @contentBorder; background: @contentBg1; margin: 0; font-size: 9pt; ul { margin: 0; padding: 0 5px; list-style: none; height: 30px; li { float: left; display: block; height: 30px; line-height: 30px; padding: 0 5px; &.divider { border-left: 1px solid @contentBorder2; width: 0px; padding: 0; margin: 0 8px; } a { color: @bodyText; font-weight: 700; font-size: 9pt; } } } &.links { border: none; background: none; height: 25px; padding: 0 0 5px; ul { padding: 0; height: 25px; li { height: 25px; line-height: 25px; &:first-child { padding-left: 0; } } } &.primary { ul li a { color: @primaryColor; } } } } // Widgets // ------------------------- .widget { background: @widgetBg; margin: 0 auto @spacing; position: relative; border: 1px solid @contentBorder; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); .tab-content { padding: 0; } .widget-head { #gradient > .vertical(@contentGradient1, @contentGradient2); border-bottom: 1px solid @contentBorder; .rounded(5px,5px,0,0); text-shadow: 0 1px 0 @bodyTextShadow; height: 35px; line-height: 35px; position: relative; padding: 0 @spacing 0 0; overflow: hidden; &.progress { .rounded(); margin: 0; padding: 0; } > .glyphicons, ul .glyphicons { height: 30px; width: 30px; padding: 0; i:before { width: 30px; height: 30px; line-height: 23px; text-align: center; font-size: 16px; color: rgba(255,255,255,.5); } } .heading { margin: 0; color: @bodyText; font-size: 14px; height: 35px; line-height: 35px; padding: 0 @spacing; float: left; &.glyphicons { width: auto; display: block; padding: 0 0 0 35px; i:before { padding: 0; margin: 0; left: 0; top: 0; height: 35px; line-height: 35px; text-align: center; width: 35px; color: @bodyText; font-size: 16px; font-weight: normal; text-shadow: none; } } } a { text-shadow: none; } .dropdown-menu li > a:hover, .dropdown-menu li > a:focus, .dropdown-submenu:hover > a { background-color: @primaryColor; background-image: -moz-linear-gradient(top,@primaryColor,#d24343); background-image: -webkit-gradient(linear,0 0,0 100%,from(@primaryColor),to(#d24343)); background-image: -webkit-linear-gradient(top,@primaryColor,#d24343); background-image: -o-linear-gradient(top,@primaryColor,#d24343); background-image: linear-gradient(to bottom,@primaryColor,#d24343); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffda4c4c',endColorstr='#ffd24343',GradientType=0); } } .details { font-size: 8pt; color: @bodyText; } .widget-body { form { margin: 0; } padding: @spacing; > pre:last-child, > p:last-child { margin: 0; } &.list { .count { font-size: 15pt; font-weight: 400; } color: @bodyText; padding: 0; ul { margin: 0; list-style: none; li { .badge { position: absolute; right: 8px; top: 10px; } padding: 0 10px; height: 39px; border-bottom: 1px solid @contentBorder; position: relative; line-height: 39px; text-align: left; text-shadow: @bodyTextShadow; clear: both; &:first-child { border-top: none; } &:last-child { border-bottom: none; } .count { float: right; color: @bodyText2; } .sparkline { position: relative; top: 5px; margin-left: 5px; } a { color: @bodyText2; font-weight: bold; } } } &.products { li { height: 60px; line-height: 60px; } .img { float: left; display: inline-block; width: 48px; height: 44px; line-height: 44px; color: #fff; text-align: center; background: #272729; margin: 8px 8px 0 0; .rounded(3px,3px,3px,3px); text-shadow: none; cursor: pointer; font-size: 10pt; font-weight: 600; } .title { line-height: normal; display: inline-block; padding: 13px 0 0; text-transform: uppercase; strong { font-family: "Open Sans", sans-serif; text-transform: none; } } } &.fluid { ul li { height: auto; line-height: normal; padding: 10px; } } &.list-2 { ul li { border-bottom: 1px solid #d8d9da; border-top: none; background: #f8f8f8; &.active { border-color: #dddddd; background: #fff; i:before { font-weight: normal; background: @primaryColor; color: #fff; text-shadow: none; } a { color: @primaryColor; } } &:last-child { border-bottom: none; } a { display: block; color: #222; padding: 0 0 0 30px; i:before { color: #555; width: 20px; height: 17px; font-size: 14px; border: 1px solid #ccc; background: #dddddd; top: 9px; left: 0; text-align: center; vertical-align: middle; padding-top: 3px; text-shadow: 0 1px 0 #fff; } } &.hasSubmenu { height: auto; > a { } ul { padding: 0 0 10px; li { height: auto; line-height: normal; background: none; border: none; line-height: 20px; a { color: #333; padding: 0 0 0 20px; } &.active a { font-weight: bold; } } } } } } } } .widget-footer { background: @contentBg1; height: 25px; line-height: 25px; border-top: 1px solid @contentBorder2; .glyphicons { width: 25px; height: 25px; line-height: 25px; padding: 0; float: right; i:before { font-size: 16px; color: #c3c3c3; text-align: center; width: 20px; height: 25px; line-height: 25px; text-shadow: @bodyTextShadow; } &:hover i:before { color: rgba(0,0,0,.5); } } } &.margin-bottom-none { margin-bottom: 0; } &.widget-gray { background: #f5f5f5; .widget-head { background: #e9e9e9; border-color: #d1d2d3; .bevelEmboss(0.6, 0); .heading { color: #555555; text-shadow: 0 1px 0 #fff; &.glyphicons { i:before { background: none; color: #555; border-color: rgba(0,0,0,.1); } } } } } &.widget-2 { &:before, &:after { display: none; } .widget-head { background: #e2e2e4; .bevelEmboss(0.6, 0); height: 36px; line-height: 36px; border-color: #d1d2d3; .heading { line-height: 36px; color: #555555; text-shadow: 0 1px 0 #fff; font-size: 12pt; i:before { color: #555555; background: none; border: none; left: 3px; top: 2px; } } } .widget-body { border: 1px solid #d1d2d3; border-top: 0; background: #f5f5f5; } &.primary { .widget-head { background: @primaryColor; border-color: @primaryColor; .bevelEmboss(0.6,0.1); .heading { color: #fff; text-shadow: 0 1px 0 rgba(0,0,0,.5); i:before { color: #fff; text-shadow: 0 1px 0 rgba(0,0,0,.5); } } } } } &.widget-3 { &:before, &:after { display: none; } .widget-head { height: 36px; line-height: 36px; .heading { display: block; text-align: center; float: none; line-height: 36px; height: 36px; text-transform: uppercase; font-size: 12pt; i:before { background: none; border: none; left: 3px; top: 5px; font-size: 20px; color: #45484d; } .glyphicons { vertical-align: middle; width: 35px; height: 36px; padding: 0; } } } .widget-body { border-bottom: 1px solid @contentBorder; &.large { font-size: 26pt; font-weight: bold; text-align: center; padding: 25px 0; vertical-align: middle; line-height: normal; &.cancellations { span { line-height: 20px; text-align: left; font-size: 17pt; display: inline-block; text-shadow: none; span { display: block; } span:first-child { color: @primaryColor; text-transform: uppercase; font-size: 13pt; } } } &.dashboard { padding: 15px 0; } } } .widget-footer { background: @contentBg1; border-top: none; a { float: none; color: #dddddd; width: auto; padding: 0 10px 0 30px; border-right: 1px solid @contentBorder; text-decoration: none; i:before { color: #dddddd; left: 5px; } &:hover { color: @primaryColor; i:before { color: @primaryColor; } } } &.align-center { text-align: center; a:first-child { border-left: 1px solid @contentBorder; } } &.align-right { text-align: right; a:first-child { border-left: 1px solid @contentBorder; } a:last-child { border-right: none; } } } } &.widget-4 { border: none; background: none; .widget-head { background: none; padding: 10px; border: none; .heading { color: #544f49; text-shadow: none; padding: 0; margin: 0; } } .widget-body { padding: 0 10px 10px; border: none; &.list { ul li { padding: 0; } } } } &.widget-heading-simple { border: none; background: none; > .widget-head { border: none; background: none; padding: 0 0 5px; height: 25px; line-height: 25px; .heading { padding: 0; height: 25px; line-height: 25px; &.glyphicons { padding: 0 0 0 25px; i:before { text-align: left; width: 25px; height: 25px; line-height: 25px; } } } } > .widget-body { border: 1px solid @contentBorder; .rounded(5px,5px,5px,5px); } } &.widget-body-simple { #reset .boxShadow(); > .widget-body { background: none; border: none; padding: 0; } } &.widget-body-white { > .widget-body { background: @widgetBg; } } &.widget-body-gray { box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; > .widget-body { background: @widgetBgGray; } } &.widget-body-primary { box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; > .widget-body { background: @primaryColor; * { color: #fff; text-shadow: none; } } } &.widget-body-multiple { #reset .boxShadow(); > .widget-body { box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; margin-bottom: @spacing/2; &:last-of-type { margin-bottom: 0; } } &.widget-body-gray { > .widget-body { box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; } } } } // Dashboard widgets // ------------------------- .widget-offers { .price { font-size: 14px; strong { color: #000; } } .thumb { padding: 0; } h5 { border-bottom: 1px solid #cecece; font-weight: 600; text-shadow: @bodyTextShadow; box-shadow: 0 1px 0 0 #eeeeee; padding: 0 0 5px; } } // dashboard recent activity widget // ------------------------- .widget-activity { > .widget-body { padding: 0 @spacing; } ul.list { list-style: none; margin: 0 -@spacing; padding: 0; li { height: 39px; line-height: 39px; position: relative; overflow: hidden; border-bottom: 1px solid @contentBorder2; padding: 0 @spacing; .transition(background .5s ease); &:hover, &.highlight { background: @listActiveHoverBg; box-shadow: @listActiveHoverBoxShadow; -moz-box-shadow: @listActiveHoverBoxShadow; -webkit-box-shadow: @listActiveHoverBoxShadow; text-shadow: @bodyTextShadow; cursor: pointer; &:after { content: "\e212"; display: block; position: absolute; right: @spacing; top: 0; height: 39px; line-height: 39px; font-family: "Glyphicons"; font-size: 24px/1em; color: #d5d5d5; } .activity-icon i:before { color: #505050; } } > span { display: block; height: 39px; line-height: 39px; float: left; position: relative; overflow: hidden; &.ellipsis { white-space:nowrap; text-overflow:ellipsis; max-width:75%; } &.date { width: 40px; text-align: center; } } .activity-icon { width: 30px; height: 39px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; i { height: 39px; display: block; position: relative; } i:before { position: relative; top: 0; left: 0; color: #cbcbcb; font-size: 18px; line-height: 39px; } } &.double { height: 45px; line-height: 45px; > span { height: 45px; line-height: 45px; &.ellipsis { line-height: 15px; padding: 7px 0 0; font-weight: 600; font-size: 11px; } .meta { display: block; line-height: 15px; font-weight: 400; color: #b7b7b7; i:before { top: 1px; color: #b7b7b7; } span { font-style: italic; } } } .activity-icon { margin-left: 0; height: 45px; i { height: 45px; &:before { line-height: 45px; } } } &:hover, &.highlight { &:after { height: 45px; line-height: 45px; } } } &:last-child { border: none; } } } .view-all { position: absolute; top: @spacing+3; right: @spacing; } } .widget-messages { ul { margin: 0; padding: 0; list-style: none; li { border: 1px solid #e5e5e5; padding: 5px; margin: 0 0 10px; position: relative; .meta span { color: #a3a3a3; font-size: 12px; } .glyphicons.single.bin { position: relative; text-decoration: none; padding: 0; width: 15px; height: 20px; top: 5px; i { display: block; width: 15px; height: 20px; text-align: center; &:before { color: #cccccc; position: relative; line-height: 20px; left: auto; top: auto; } } } &:last-child { margin: 0; } } } } // Widget Timeline // ------------------------- .widget-timeline { .widget-body { padding: 15px; position: relative; &:before { display: block; width: 1px; background: @contentBorder; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } } &:not(.widget) { position: relative; &:before { display: block; width: 1px; background: @contentBorder; top: 15px; bottom: 30px; left: 75px; content: ""; position: absolute; } } .view-all { margin-left: 35px; } ul.list-timeline { list-style: none; margin: 0 0 15px; padding: 0; li { &:last-child { margin: 0; } display: block; height: 30px; line-height: 30px; position: relative; overflow: hidden; background: @widgetBg; border: 1px solid @contentBorder2; margin: 0 0 10px; padding: 0 10px; span { display: block; height: 30px; line-height: 30px; float: left; position: relative; overflow: hidden; &.ellipsis { white-space:nowrap; text-overflow:ellipsis; max-width:75%; } &.date { width: 40px; text-align: center; } } .activity-icon { width: 30px; height: 30px; padding: 0; margin: 0 10px; display: inline-block; text-align: center; i { height: 30px; display: block; .rounded(2px,2px,2px,2px); position: relative; background: #64625f; } i:before { position: relative; top: 0; left: 0; color: #fff; font-size: 17px; line-height: 30px; } } } } } // Chat widgets // ------------------------- .widget-chat { .media { position: relative; min-height: 80px; .media-object { position: relative; } .thumb { padding: 0; } small { color: #cccccc; &:before, &:after { content: ""; } &.author { position: absolute; left: 0; width: 50px; top: 60px; text-align: center; display: block; } &.date { display: block; border-bottom: 1px solid @contentBorder; margin: 0 0 5px; padding: 0 0 3px; text-align: right; width: 100%; } } &.right { small { &.author { left: auto; right: 0; } &.date { text-align: left; } } } .media-body { .rounded(2px, 2px, 2px, 2px); padding: 0; blockquote { padding: 0; width: 100%; p:last-child { margin: 0; } } } &:last-of-type { padding-bottom: 10px; } } .chat-controls { position: absolute; height: 30px; padding: @spacing 0; left: 0; right: 0; bottom: 0; border: 1px solid @contentBorder; border-top: none; .rounded(0, 0, 5px, 5px); background: #fff; } .widget-body { padding-bottom: 0; } &.widget-heading-simple > .widget-body { .rounded(5px, 5px, 0, 0); } padding-bottom: 60px !important; } // Stats widgets // ------------------------- .widget-stats { background: @widgetBg; padding: @spacing 0; margin: 0; height: 80px; position: relative; text-align: center; display: block; border: 1px solid @contentBorder; text-shadow: @bodyTextShadow; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); .count { position: absolute; top: 0; left: 0; font-size: 13px; .rounded(); } .label { font-weight: 600; padding: 4px; box-shadow: 0 0 0 1px rgba(0,0,0,.2) inset; } span { display: inline-block; } .txt { padding: 0; color: #cecece; } .glyphicons { padding: 0; display: block; i { display: block; } i:before { color: #cecece; font-size: 30px; top: 0; left: 0; position: relative; } } &, &:hover, &:focus { text-decoration: none; } &:hover { background: @contentGradient1; } &.small { padding: 5px 0; .glyphicons { padding: 12px 0 0; i:before { font-size: 25px; } } } &.widget-stats-1 { padding: 8px 0; height: 94px; .glyphicons { display: block; height: 35px; line-height: 35px; padding-bottom: 5px; .txt { display: inline-block; padding: 0 5px; line-height: 35px; } i { display: inline-block; &:before { top: 5px; font-size: 25px; } } } .count { position: relative; top: auto; right: auto; font-size: 60px; display: inline-block; font-weight: 700; padding: 0; line-height: 40px; } } &.widget-stats-2 { .txt { font-size: 14px; } .count { position: relative; top: auto; right: auto; font-size: 60px; font-weight: 700; padding: 0 0 3px; display: block; line-height: 55px; } } &.widget-stats-gray { &.widget-stats-1, &.widget-stats-2 { .txt { color: #000; } } } &.widget-stats-easy-pie { .easy-pie { display: block; width: 50px; margin: -5px auto 0; } &.txt-single { .easy-pie { margin: 0 auto; } .txt { padding: 7px 0 0; } } } &.widget-stats-3 { .sparkline { display: inline-block; } .txt { text-align: left; vertical-align: middle; padding: 13px 0 0 10px; } .count { padding: 0 0 5px; display: block; } } &.widget-stats-gray { background: @widgetBgGray; box-shadow: 0 3px 0 0 @contentShadow2; -moz-box-shadow: 0 3px 0 0 @contentShadow2; -webkit-box-shadow: 0 3px 0 0 @contentShadow2; } } // Generic Widget // ------------------------- .box-generic { border: 1px solid @contentBorder; padding: @spacing; position: relative; background: @widgetBg; box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); margin: 0 0 @spacing; } // Ribbons // ------------------------- .ribbon-wrapper { width: 85px; height: 88px; overflow: hidden; position: absolute; top: -3px; right: -3px; .ribbon { display: block; font-family: Arial, sans-serif; font-size: 15px; font-weight: 600; color: #fff; text-align: center; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); position: relative; padding: 7px 0; left: -5px; top: 15px; width: 120px; line-height: 20px; background-color: #797979; -webkit-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); &:before, &:after { content: ""; border-top: 2px solid #797979; border-left: 2px solid transparent; border-right: 2px solid transparent; position: absolute; bottom: -2px; } &:before { left: 0; bottom: -1px; } &:after { right: 0; } &.primary { background-color: @primaryColor; } &.success { background-color: @successColor; } &.warning { background-color: @warningColor; } &.danger { background-color: @dangerColor; } &.default { background-color: #e5e5e5; color: #595959; &:before, &:after { border-top: 2px solid #ccc; } } } &.small { width: 65px; height: 68px; .ribbon { width: 90px; padding: 0; font-size: 13px; &:before { bottom: -2px; } } } } // Breadcrumb // ------------------------- .breadcrumb { height: 38px; line-height: 39px; padding: 0 @spacing; .rounded(); margin: 0; background: none; border-bottom: 1px solid @contentBorder; box-shadow: 0 1px 0 0 #fff; -moz-box-shadow: 0 1px 0 0 #fff; -webkit-box-shadow: 0 1px 0 0 #fff; color: #ababab; font-size: 12px; position: relative; overflow: hidden; li { text-shadow: @bodyTextShadow; line-height: 38px; height: 38px; a { color: #ababab; font-weight: 600; &.glyphicons { color: #ababab; padding: 0 0 0 25px; i:before { color: #ababab; font-size: 14px; top: 12px; left: 3px; } } } &.divider { margin: 0 5px 0 7px; width: 0; border-left: 1px solid @contentBorder; border-right: 1px solid #fff; vertical-align: top; } } } // Wells // ------------------------- .well { z-index: 1; position: relative; padding: 15px; margin: 0 0 @spacing; &.small { padding: 10px; } .popover { z-index: 2; font-size: 13px; } box-shadow: 0 3px 0 0 @contentShadow1; -moz-box-shadow: 0 3px 0 0 @contentShadow1; -webkit-box-shadow: 0 3px 0 0 @contentShadow1; .rounded(5px,5px,5px,5px); background: @wellBg; border-color: @contentBorder; &.dark { background: rgba(0,0,0,.2); } &.white { background: #fff; } } // Collapsible Widgets // ------------------------- [data-toggle="collapse-widget"] { .collapse-toggle { position: relative; height: 35px; width: 30px; display: block; cursor: pointer; float: right; &:before { font-family: "Glyphicons"; font-size: 17px; display: block; width: 100%; height: 35px; line-height: 34px; text-align: center; color: #cccccc; content: "\e192"; } margin-right: -10px; } &.widget-heading-simple { .collapse-toggle { margin-right: 0; height: 25px; &:before { height: 25px; line-height: 25px; } } } a ~ .collapse-toggle { margin-right: 0; } &[data-collapse-closed="false"] { .collapse-toggle:before { content: "\e192"; } } &[data-collapse-closed="true"] { .collapse-toggle:before { content: "\e191"; } .widget-head { border-bottom: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } } .collapse:not(.list) { .transition(padding .10s ease); padding: 0px; &.in { padding: @spacing; } } } // Glyphicons // ------------------------- .glyphicons { &.standard { width: 24px; height: 24px; padding: 0; i { display: block; height: 24px; &:before { color: #64625f; position: relative; top: auto; left: auto; } } &:not(.disabled):hover { i:before { color: #797979; } } &.btn { padding: 4px; &.btn-small { padding: 2px 5px; width: auto; height: auto; i:before { top: auto; line-height: 22px; } } } } &.primary { i:before { color: @primaryColor; } } &.single { color: @primaryColor; padding: 0 0 0 20px; i:before { font-size: 13px; top: 4px; color: @primaryColor; } + .single { margin-left: 8px; } &.regular { color: @bodyText; i:before { color: @bodyText; } } } &.text-error { color: @primaryColor; i:before { color: @primaryColor; } } &.text-info { color: #5d92b3; i:before { color: #5d92b3; } } &.text-success { color: #719d46; i:before { color: #719d46; } } &.btn-action { width: 25px; height: 25px; padding: 0; .rounded(5px,5px,5px,5px); border-width: 1px; border-style: solid; vertical-align: middle; i:before { font-size: 14px; top: 5px; left: 5px; text-shadow: 0 1px 0 #fff; color: #fff !important; } &.btn-default i:before { color: #7c7c7c !important; } &.single { box-shadow: none; -webkit-box-shadow: none; -moz-box-shadow: none; border: none; background: none; margin-right: 10px; } } &.btn-icon { text-align: left; padding: 5px 7px 5px 40px; i { float: left; &:before { font-size: 15px; top: 0; left: 0; width: 33px; height: 23px; .rounded(3px, 0px, 0px, 3px); vertical-align: middle; padding: 7px 0 0; text-align: center; } } &.right { text-align: left; padding: 5px 0 5px 7px; i:before { .rounded(0, 3px, 3px, 0); right: 0; left: auto; text-align: center; } } } &.btn-large { padding: 10px 10px 10px 40px; font-weight: 600; i:before { top: 12px; left: 12px; font-size: 17px; } &.btn-icon { i:before { top: 0; left: 0; height: 28px; padding: 12px 0 0; } } } &.btn-small { padding: 2px 10px 2px 35px; i:before { padding: 5px 0 0; width: 28px; height: 19px; font-size: 14px; } } &.btn-mini { padding: 1px 6px 1px 33px; i:before { padding: 5px 0 0; width: 26px; height: 17px; font-size: 13px; } } &.orange i:before { color: #EDB459; } &.btn-default i:before { color: #9e9e9e; text-shadow: none; } } h4.glyphicons { padding: 0 0 0 35px; display: block; i:before { font-size: 22px; font-weight: normal; color: #575655; } } h3.glyphicons, h2.glyphicons { padding: 0 0 0 45px; display: block; i:before { font-size: 27px; font-weight: normal; left: 2px; top: 3px; color: #575655; } &.cogwheels i:before { left: 5px; } } // Finances Summary // ------------------------- .finances_summary { .well { font-size: 16px; text-align: center; strong { display: block; font-size: 22pt; color: #45494c; line-height: normal; } } .glyphicons.standard i:before { color: #cccccc; } } // Icons within content // ------------------------- div.glyphicons { padding: 0 0 0 35px; i:before { color: #cccccc; } &.glyphicon-large { padding: 0 0 0 75px; i:before { font-size: 50px; left: 0; } &.group-column { padding: 0 0 0 85px; i:before { font-size: 45px; left: 12px; } } } &.glyphicon-top { padding: 0; text-align: center; i { display: block; position: relative; &:before { position: relative; left: auto; top: auto; } } &.glyphicon-xlarge { i { padding: 0 0 10px; } i:before { font-size: 70px; } } } &.glyphicon-primary { i:before { color: @primaryColor; } } } .widget-body-primary { div.glyphicons i:before { color: #fff; } } // Large social icons // ------------------------- .social-large { height: 97px; a { display: block; height: 77px; float: left; padding: 10px 19px; color: #d5d5d5; background: #ffffff; font-weight: bold; text-align: center; border-right: 1px solid #e5e5e5; text-decoration: none; i { display: block; position: relative; padding: 0 0 8px; &:before { display: block; text-align: center; top: auto; left: auto; position: relative; font-size: 50px; color: #d5d5d5; } } &.active, &:hover { color: #fff; background: @primaryColor; i:before { color: #fff; } } &:last-child { border: none; } } &.social-large-2 { a { display: inline-block; font-weight: 400; float: none; border: none; background: none; color: #444444; i:before { color: #444444; } &.active, &:hover { color: @primaryColor; i:before { color: @primaryColor; } } } } } // Pinterest style widget // --------------------------- .widget-pinterest { .widget-body { padding: 0; .description { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; line-height:16px; padding: @spacing; } .thumb { padding: 0; border: none; img { width:100%; .rounded(5px, 5px, 0, 0); } } } } // Twitter // --------------------------- .jstwitter { position: relative; .item { overflow:hidden; } .tweet-wrapper { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; line-height:16px; padding: @spacing; } .widget-body { padding: 0; } .item a { text-decoration: none; } .item img { width:100%; .rounded(5px, 5px, 0, 0); } .item .thumb { padding: 0; border: none; } .item a:hover { text-decoration: underline; } .item .text { display:block; } .item .time, .item .user { font-style: italic; color: #999; } .item.active { display: block; } } // Star ratings // --------------------------- .rating { unicode-bidi: bidi-override; direction: rtl; &.text-large { margin: 7px 0; } span.star{ font-family:FontAwesome; font-weight:normal; font-style:normal; display:inline-block; } span.star:before { content:"\f006"; padding-right:5px; } &:not(.read-only) { span.star:hover { cursor:pointer; } span.star:hover:before, span.star:hover ~ span.star:before { content:"\f005"; color: @primaryColor; } } span.star.active:before, span.star.active ~ span.star:before { content:"\f005"; color: @primaryColor; } } // Hero unit // --------------------------- .hero-unit { background: none; border: none; #reset .rounded(); } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/calendar.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * calendar.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { /* initialize the external events -----------------------------------------------------------------*/ $('#external-events ul li').each(function() { // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) // it doesn't need to have a start or end var eventObject = { title: $.trim($(this).text()) // use the element's text as the event title }; // store the Event Object in the DOM element so we can get to it later $(this).data('eventObject', eventObject); // make the event draggable using jQuery UI $(this).draggable( { zIndex: 999, revert: true, // will cause the event to go back to its revertDuration: 0, // original position after the drag, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); }); /* initialize the calendar -----------------------------------------------------------------*/ $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay' }, editable: true, droppable: true, events: basePath + "ajax.php?section=calendarEvents", drop: function(date, allDay) { // retrieve the dropped element's stored Event Object var originalEventObject = $(this).data('eventObject'); // we need to copy it, so that multiple events don't have a reference to the same object var copiedEventObject = $.extend({}, originalEventObject); // assign it the date that was reported copiedEventObject.start = date; copiedEventObject.allDay = allDay; // render the event on the calendar // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) $('#calendar').fullCalendar('renderEvent', copiedEventObject, true); // is the "remove after drop" checkbox checked? if ($('#drop-remove').is(':checked')) { // if so, remove the element from the "Draggable Events" list $(this).remove(); } } }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/charts.helper.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * charts.helper.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ var charts = { // init charts on finances page initFinances: function() { // init simple chart this.chart_simple.init(); }, // init charts on Google Analytics page initGoogleAnalytics: function() { // init lines chart with fill & without points //this.chart_lines_fill_nopoints.init(); }, // init charts on Charts page initCharts: function() { // init simple chart this.chart_simple.init(); // init lines chart with fill & without points this.chart_lines_fill_nopoints.init(); // init ordered bars chart this.chart_ordered_bars.init(); // init donut chart this.chart_donut.init(); // init stacked bars chart this.chart_stacked_bars.init(); // init pie chart this.chart_pie.init(); // init horizontal bars chart this.chart_horizontal_bars.init(); // init live chart this.chart_live.init(); }, // init charts on dashboard initIndex: function() { // init simple chart this.chart_simple.init(); }, // utility class utility: { chartColors: [ themerPrimaryColor, "#444", "#777", "#999", "#DDD", "#EEE" ], chartBackgroundColors: ["transparent", "transparent"], applyStyle: function(that) { that.options.colors = charts.utility.chartColors; that.options.grid.backgroundColor = { colors: charts.utility.chartBackgroundColors }; that.options.grid.borderColor = charts.utility.chartColors[0]; that.options.grid.color = charts.utility.chartColors[0]; }, // generate random number for charts randNum: function() { return (Math.floor( Math.random()* (1+40-20) ) ) + 20; } }, traffic_sources_pie: { // data data: [ { label: "organic", data: 60 }, { label: "direct", data: 22.1 }, { label: "referral", data: 16.9 }, { label: "cpc", data: 1 } ], // chart object plot: null, // chart options options: { series: { pie: { show: true, redraw: true, radius: 1, tilt: 0.6, label: { show: true, radius: 1, formatter: function(label, series){ return '
        '+Math.round(series.percent)+'%
        '; }, background: { opacity: 0.8 } } } }, legend: { show: true, backgroundColor: null, backgroundOpacity: 0 }, colors: [], grid: { hoverable: true }, tooltip: true, tooltipOpts: { content: "%y% %s", dateFormat: "%y-%0m-%0d", shifts: { x: 10, y: 20 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); this.plot = $.plot($("#pie"), this.data, this.options); } }, // traffic sources dataTables // we are now using Google Charts instead of Flot traffic_sources_dataTables: { // tables data data: { tableSources: { data: null, init: function() { var data = new google.visualization.DataTable(); data.addColumn('string', 'source'); data.addColumn('string', 'medium'); data.addColumn('number', 'visits'); data.addColumn('number', 'pg_views'); data.addColumn('string', 'avg_time'); data.addRows(7); data.setCell(0, 0, 'google', null, {'style': 'text-align: center;'}); data.setCell(0, 1, 'organic', null, {'style': 'text-align: center;'}); data.setCell(0, 2, 89, null, {'style': 'text-align: center;'}); data.setCell(0, 3, 299, null, {'style': 'text-align: center;'}); data.setCell(0, 4, '00:01:48', null, {'style': 'text-align: center;'}); data.setCell(1, 0, '(direct)', null, {'style': 'text-align: center;'}); data.setCell(1, 1, '(none)', null, {'style': 'text-align: center;'}); data.setCell(1, 2, 14, null, {'style': 'text-align: center;'}); data.setCell(1, 3, 34, null, {'style': 'text-align: center;'}); data.setCell(1, 4, '00:03:15', null, {'style': 'text-align: center;'}); data.setCell(2, 0, 'yahoo', null, {'style': 'text-align: center;'}); data.setCell(2, 1, 'organic', null, {'style': 'text-align: center;'}); data.setCell(2, 2, 3, null, {'style': 'text-align: center;'}); data.setCell(2, 3, 3, null, {'style': 'text-align: center;'}); data.setCell(2, 4, '00:00:00', null, {'style': 'text-align: center;'}); data.setCell(3, 0, 'ask', null, {'style': 'text-align: center;'}); data.setCell(3, 1, 'organic', null, {'style': 'text-align: center;'}); data.setCell(3, 2, 1, null, {'style': 'text-align: center;'}); data.setCell(3, 3, 3, null, {'style': 'text-align: center;'}); data.setCell(3, 4, '00:01:34', null, {'style': 'text-align: center;'}); data.setCell(4, 0, 'bing', null, {'style': 'text-align: center;'}); data.setCell(4, 1, 'organic', null, {'style': 'text-align: center;'}); data.setCell(4, 2, 1, null, {'style': 'text-align: center;'}); data.setCell(4, 3, 1, null, {'style': 'text-align: center;'}); data.setCell(4, 4, '00:00:00', null, {'style': 'text-align: center;'}); data.setCell(5, 0, 'conduit', null, {'style': 'text-align: center;'}); data.setCell(5, 1, 'organic', null, {'style': 'text-align: center;'}); data.setCell(5, 2, 1, null, {'style': 'text-align: center;'}); data.setCell(5, 3, 1, null, {'style': 'text-align: center;'}); data.setCell(5, 4, '00:00:00', null, {'style': 'text-align: center;'}); data.setCell(6, 0, 'google', null, {'style': 'text-align: center;'}); data.setCell(6, 1, 'cpc', null, {'style': 'text-align: center;'}); data.setCell(6, 2, 1, null, {'style': 'text-align: center;'}); data.setCell(6, 3, 1, null, {'style': 'text-align: center;'}); data.setCell(6, 4, '00:00:00', null, {'style': 'text-align: center;'}); this.data = data; return data; } }, tableReffering: { data: null, init: function() { var data = new google.visualization.DataTable(); data.addColumn('string', 'source'); data.addColumn('number', 'pg_views'); data.addColumn('string', 'avg_time'); data.addColumn('string', 'exits'); data.addRows(6); data.setCell(0, 0, 'google.ro'); data.setCell(0, 1, 14, null, {'style': 'text-align: center;'}); data.setCell(0, 2, '00:05:51', null, {'style': 'text-align: center;'}); data.setCell(0, 3, '3', null, {'style': 'text-align: center;'}); data.setCell(1, 0, 'search.sweetim.com'); data.setCell(1, 1, 5, null, {'style': 'text-align: center;'}); data.setCell(1, 2, '00:03:29', null, {'style': 'text-align: center;'}); data.setCell(1, 3, '1', null, {'style': 'text-align: center;'}); data.setCell(2, 0, 'start.funmoods.com'); data.setCell(2, 1, 5, null, {'style': 'text-align: center;'}); data.setCell(2, 2, '00:01:02', null, {'style': 'text-align: center;'}); data.setCell(2, 3, '1', null, {'style': 'text-align: center;'}); data.setCell(3, 0, 'google.md'); data.setCell(3, 1, 2, null, {'style': 'text-align: center;'}); data.setCell(3, 2, '00:03:56', null, {'style': 'text-align: center;'}); data.setCell(3, 3, '1', null, {'style': 'text-align: center;'}); data.setCell(4, 0, 'searchmobileonline.com'); data.setCell(4, 1, 2, null, {'style': 'text-align: center;'}); data.setCell(4, 2, '00:02:21', null, {'style': 'text-align: center;'}); data.setCell(4, 3, '1', null, {'style': 'text-align: center;'}); data.setCell(5, 0, 'google.com'); data.setCell(5, 1, 1, null, {'style': 'text-align: center;'}); data.setCell(5, 2, '00:00:00', null, {'style': 'text-align: center;'}); data.setCell(5, 3, '1', null, {'style': 'text-align: center;'}); this.data = data; return data; } } }, // chart chart: { tableSources: null, tableReffering: null }, // options options: { tableSources: { page: 'enable', pageSize: 6, allowHtml: true, cssClassNames: { headerRow: 'tableHeaderRow', tableRow: 'tableRow', selectedTableRow: 'selectedTableRow', hoverTableRow: 'hoverTableRow' }, width: '100%', alternatingRowStyle: false, pagingSymbols: { prev: 'prev', next: 'next' } }, tableReffering: { page: 'enable', pageSize: 6, allowHtml: true, cssClassNames: { headerRow: 'tableHeaderRow', tableRow: 'tableRow', selectedTableRow: 'selectedTableRow', hoverTableRow: 'hoverTableRow' }, width: '100%', alternatingRowStyle: false, pagingSymbols: { prev: 'prev', next: 'next' } } }, // initialize init: function() { // data charts.traffic_sources_dataTables.data.tableSources.init(); charts.traffic_sources_dataTables.data.tableReffering.init(); // charts charts.traffic_sources_dataTables.drawTableSources(); charts.traffic_sources_dataTables.drawTableReffering(); }, // draw Traffic Sources Table drawTableSources: function() { this.chart.tableSources = new google.visualization.Table(document.getElementById('dataTableSources')); this.chart.tableSources.draw(this.data.tableSources.data, this.options.tableSources); }, // draw Refferals Table drawTableReffering: function() { this.chart.tableReffering = new google.visualization.Table(document.getElementById('dataTableReffering')); this.chart.tableReffering.draw(this.data.tableReffering.data, this.options.tableReffering); } }, // simple chart chart_simple: { // data data: { sin: [], cos: [] }, // will hold the chart object plot: null, // chart options options: { grid: { show: true, aboveData: true, color: "#3f3f3f", labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5, clickable: true, hoverable: true, autoHighlight: true, mouseActiveRadius: 20, backgroundColor : { } }, series: { grow: {active: false}, lines: { show: true, fill: false, lineWidth: 4, steps: false }, points: { show:true, radius: 5, symbol: "circle", fill: true, borderColor: "#fff" } }, legend: { position: "se", backgroundColor: null, backgroundOpacity: 0 }, colors: [], shadowSize:1, tooltip: true, //activate tooltip tooltipOpts: { content: "%s : %y.3", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); if (this.plot == null) { for (var i = 0; i < 14; i += 0.5) { this.data.sin.push([i, Math.sin(i)]); this.data.cos.push([i, Math.cos(i)]); } } this.plot = $.plot( $("#chart_simple"), [{ label: "Sin", data: this.data.sin, lines: {fillColor: "#DA4C4C"}, points: {fillColor: "#fff"} }, { label: "Cos", data: this.data.cos, lines: {fillColor: "#444"}, points: {fillColor: "#fff"} }], this.options); } }, // lines chart with fill & without points chart_lines_fill_nopoints: { // chart data data: { d1: [], d2: [] }, // will hold the chart object plot: null, // chart options options: { grid: { show: true, aboveData: true, color: "#3f3f3f", labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5 , clickable: true, hoverable: true, autoHighlight: true, mouseActiveRadius: 20, backgroundColor : { } }, series: { grow: {active:false}, lines: { show: true, fill: true, lineWidth: 2, steps: false }, points: {show:false} }, legend: { position: "nw", backgroundColor: null, backgroundOpacity: 0 }, yaxis: { min: 0 }, xaxis: {ticks:11, tickDecimals: 0}, colors: [], shadowSize:1, tooltip: true, tooltipOpts: { content: "%s : %y.0", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); // generate some data this.data.d1 = [[1, 3+charts.utility.randNum()], [2, 6+charts.utility.randNum()], [3, 9+charts.utility.randNum()], [4, 12+charts.utility.randNum()],[5, 15+charts.utility.randNum()],[6, 18+charts.utility.randNum()],[7, 21+charts.utility.randNum()],[8, 15+charts.utility.randNum()],[9, 18+charts.utility.randNum()],[10, 21+charts.utility.randNum()],[11, 24+charts.utility.randNum()],[12, 27+charts.utility.randNum()],[13, 30+charts.utility.randNum()],[14, 33+charts.utility.randNum()],[15, 24+charts.utility.randNum()],[16, 27+charts.utility.randNum()],[17, 30+charts.utility.randNum()],[18, 33+charts.utility.randNum()],[19, 36+charts.utility.randNum()],[20, 39+charts.utility.randNum()],[21, 42+charts.utility.randNum()],[22, 45+charts.utility.randNum()],[23, 36+charts.utility.randNum()],[24, 39+charts.utility.randNum()],[25, 42+charts.utility.randNum()],[26, 45+charts.utility.randNum()],[27,38+charts.utility.randNum()],[28, 51+charts.utility.randNum()],[29, 55+charts.utility.randNum()], [30, 60+charts.utility.randNum()]]; this.data.d2 = [[1, charts.utility.randNum()-5], [2, charts.utility.randNum()-4], [3, charts.utility.randNum()-4], [4, charts.utility.randNum()],[5, 4+charts.utility.randNum()],[6, 4+charts.utility.randNum()],[7, 5+charts.utility.randNum()],[8, 5+charts.utility.randNum()],[9, 6+charts.utility.randNum()],[10, 6+charts.utility.randNum()],[11, 6+charts.utility.randNum()],[12, 2+charts.utility.randNum()],[13, 3+charts.utility.randNum()],[14, 4+charts.utility.randNum()],[15, 4+charts.utility.randNum()],[16, 4+charts.utility.randNum()],[17, 5+charts.utility.randNum()],[18, 5+charts.utility.randNum()],[19, 2+charts.utility.randNum()],[20, 2+charts.utility.randNum()],[21, 3+charts.utility.randNum()],[22, 3+charts.utility.randNum()],[23, 3+charts.utility.randNum()],[24, 2+charts.utility.randNum()],[25, 4+charts.utility.randNum()],[26, 4+charts.utility.randNum()],[27,5+charts.utility.randNum()],[28, 2+charts.utility.randNum()],[29, 2+charts.utility.randNum()], [30, 3+charts.utility.randNum()]]; // make chart this.plot = $.plot( '#chart_lines_fill_nopoints', [{ label: "Visits", data: this.data.d1, lines: {fillColor: "rgba(0,0,0,0.01)"}, points: {fillColor: "#88bbc8"} }, { label: "Unique Visits", data: this.data.d2, lines: {fillColor: "rgba(0,0,0,0.1)"}, points: {fillColor: "#ed7a53"} }], this.options); } }, // ordered bars chart chart_ordered_bars: { // chart data data: null, // will hold the chart object plot: null, // chart options options: { bars: { show:true, barWidth: 0.2, fill:1 }, grid: { show: true, aboveData: false, color: "#3f3f3f" , labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5 , clickable: true, hoverable: true, autoHighlight: false, mouseActiveRadius: 20, backgroundColor : { } }, series: { grow: {active:false} }, legend: { position: "ne", backgroundColor: null, backgroundOpacity: 0 }, colors: [], tooltip: true, tooltipOpts: { content: "%s : %y.0", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); //some data var d1 = []; for (var i = 0; i <= 10; i += 1) d1.push([i, parseInt(Math.random() * 30)]); var d2 = []; for (var i = 0; i <= 10; i += 1) d2.push([i, parseInt(Math.random() * 30)]); var d3 = []; for (var i = 0; i <= 10; i += 1) d3.push([i, parseInt(Math.random() * 30)]); var ds = new Array(); ds.push({ label: "Data One", data:d1, bars: {order: 1} }); ds.push({ label: "Data Two", data:d2, bars: {order: 2} }); ds.push({ label: "Data Three", data:d3, bars: {order: 3} }); this.data = ds; this.plot = $.plot($("#chart_ordered_bars"), this.data, this.options); } }, // donut chart chart_donut: { // chart data data: [ { label: "USA", data: 38 }, { label: "Brazil", data: 23 }, { label: "India", data: 15 }, { label: "Turkey", data: 9 }, { label: "France", data: 7 }, { label: "China", data: 5 }, { label: "Germany", data: 3 } ], // will hold the chart object plot: null, // chart options options: { series: { pie: { show: true, innerRadius: 0.4, highlight: { opacity: 0.1 }, radius: 1, stroke: { color: '#fff', width: 8 }, startAngle: 2, combine: { color: '#EEE', threshold: 0.05 }, label: { show: true, radius: 1, formatter: function(label, series){ return '
        '+label+' '+Math.round(series.percent)+'%
        '; } } }, grow: { active: false} }, legend:{show:false}, grid: { hoverable: true, clickable: true, backgroundColor : { } }, colors: [], tooltip: true, tooltipOpts: { content: "%s : %y.1"+"%", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); this.plot = $.plot($("#chart_donut"), this.data, this.options); } }, // horizontal bars chart chart_horizontal_bars: { // chart data data: null, // will hold the chart object plot: null, // chart options options: { grid: { show: true, aboveData: false, color: "#3f3f3f" , labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5 , clickable: true, hoverable: true, autoHighlight: false, mouseActiveRadius: 20, backgroundColor : { } }, series: { grow: {active:false}, bars: { show:true, horizontal: true, barWidth:0.2, fill:1 } }, legend: { position: "ne", backgroundColor: null, backgroundOpacity: 0 }, colors: [], tooltip: true, tooltipOpts: { content: "%s : %y.0", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); var d1 = []; for (var i = 0; i <= 5; i += 1) d1.push([parseInt(Math.random() * 30),i ]); var d2 = []; for (var i = 0; i <= 5; i += 1) d2.push([parseInt(Math.random() * 30),i ]); var d3 = []; for (var i = 0; i <= 5; i += 1) d3.push([ parseInt(Math.random() * 30),i]); this.data = new Array(); this.data.push({ data: d1, bars: { horizontal:true, show: true, barWidth: 0.2, order: 1 } }); this.data.push({ data: d2, bars: { horizontal:true, show: true, barWidth: 0.2, order: 2 } }); this.data.push({ data: d3, bars: { horizontal:true, show: true, barWidth: 0.2, order: 3 } }); this.plot = $.plot($("#chart_horizontal_bars"), this.data, this.options); } }, // pie chart chart_pie: { // chart data data: [ { label: "USA", data: 38 }, { label: "Brazil", data: 23 }, { label: "India", data: 15 }, { label: "Turkey", data: 9 }, { label: "France", data: 7 }, { label: "China", data: 5 }, { label: "Germany", data: 3 } ], // will hold the chart object plot: null, // chart options options: { series: { pie: { show: true, highlight: { opacity: 0.1 }, radius: 1, stroke: { color: '#fff', width: 2 }, startAngle: 2, combine: { color: '#353535', threshold: 0.05 }, label: { show: true, radius: 1, formatter: function(label, series){ return '
        '+label+' '+Math.round(series.percent)+'%
        '; } } }, grow: { active: false} }, colors: [], legend:{show:false}, grid: { hoverable: true, clickable: true, backgroundColor : { } }, tooltip: true, tooltipOpts: { content: "%s : %y.1"+"%", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); this.plot = $.plot($("#chart_pie"), this.data, this.options); } }, // stacked bars chart chart_stacked_bars: { // chart data data: null, // will hold the chart object plot: null, // chart options options: { grid: { show: true, aboveData: false, color: "#3f3f3f" , labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5 , clickable: true, hoverable: true, autoHighlight: true, mouseActiveRadius: 20, backgroundColor : { } }, series: { grow: {active:false}, stack: 0, lines: { show: false, fill: true, steps: false }, bars: { show: true, barWidth: 0.5, fill:1} }, xaxis: {ticks:11, tickDecimals: 0}, legend: { position: "ne", backgroundColor: null, backgroundOpacity: 0 }, colors: [], shadowSize:1, tooltip: true, tooltipOpts: { content: "%s : %y.0", shifts: { x: -30, y: -50 }, defaultTheme: false } }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); var d1 = []; for (var i = 0; i <= 10; i += 1) d1.push([i, parseInt(Math.random() * 30)]); var d2 = []; for (var i = 0; i <= 10; i += 1) d2.push([i, parseInt(Math.random() * 20)]); var d3 = []; for (var i = 0; i <= 10; i += 1) d3.push([i, parseInt(Math.random() * 20)]); this.data = new Array(); this.data.push({ label: "Data One", data: d1 }); this.data.push({ label: "Data Two", data: d2 }); this.data.push({ label: "Data Tree", data: d3 }); this.plot = $.plot($("#chart_stacked_bars"), this.data, this.options); } }, // live chart chart_live: { // chart data data: [], totalPoints: 300, updateInterval: 200, // we use an inline data source in the example, usually data would // be fetched from a server getRandomData: function() { if (this.data.length > 0) this.data = this.data.slice(1); // do a random walk while (this.data.length < this.totalPoints) { var prev = this.data.length > 0 ? this.data[this.data.length - 1] : 50; var y = prev + Math.random() * 10 - 5; if (y < 0) y = 0; if (y > 100) y = 100; this.data.push(y); } // zip the generated y values with the x values var res = []; for (var i = 0; i < this.data.length; ++i) res.push([i, this.data[i]]) return res; }, // will hold the chart object plot: null, // chart options options: { series: { grow: { active: false }, shadowSize: 0, lines: { show: true, fill: true, lineWidth: 2, steps: false } }, grid: { show: true, aboveData: false, color: "#3f3f3f", labelMargin: 5, axisMargin: 0, borderWidth: 0, borderColor:null, minBorderMargin: 5 , clickable: true, hoverable: true, autoHighlight: false, mouseActiveRadius: 20, backgroundColor : { } }, colors: [], tooltip: true, tooltipOpts: { content: "Value is : %y.0", shifts: { x: -30, y: -50 }, defaultTheme: false }, yaxis: { min: 0, max: 100 }, xaxis: { show: true} }, // initialize init: function() { // apply styling charts.utility.applyStyle(this); this.plot = $.plot($("#chart_live"), [ this.getRandomData() ], this.options); setTimeout(this.update, charts.chart_live.updateInterval); }, // update update: function() { charts.chart_live.plot.setData([ charts.chart_live.getRandomData() ]); charts.chart_live.plot.draw(); setTimeout(charts.chart_live.update, charts.chart_live.updateInterval); } } }; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/charts.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * charts.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { // initialize charts if (typeof charts != 'undefined') charts.initCharts(); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/choose.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * choose.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { var url_default = []; url_default['admin'] = $('#choose-preview .options[data-for="admin"] .actions a').attr('href'); url_default['front'] = $('#choose-preview .options[data-for="front"] .actions a').attr('href'); $('#choose-preview') .find('.options select') .on('change', function() { var box = $(this).parents('.box:first'); var $for = $(this).attr('data-for'); var select_layout = box.find('select[data-type="layout"]'); var select_sidebar = box.find('select[data-type="sidebar"]'); var select_sidebar_position = box.find('select[data-type="menu"]'); var select_sidebar_sticky = box.find('select[data-type="sidebar-sticky"]'); var select_top_sticky = box.find('select[data-type="top-sticky"]'); var select_rtl = box.find('select[data-type="rtl"]'); var select_style = box.find('select[data-type="style"]'); var url = url_default[$for]; if (select_layout.length) url += '&layout_type=' + select_layout.val(); if (select_sidebar.length) url += '&sidebar=' + select_sidebar.val(); if (select_sidebar_position.length) url += '&menu_position=' + select_sidebar_position.val(); if (select_sidebar_sticky.length) url += '&sidebar-sticky=' + select_sidebar_sticky.val(); if (select_top_sticky.length) url += '&top-sticky=' + select_top_sticky.val(); if (select_rtl.length) url += '&rtl=' + select_rtl.val(); if (select_style.length) url += '&style=' + select_style.val(); $('#choose-preview .options[data-for="'+$for+'"] .actions a').attr('href', url); /* var selector = '#' + $for + '-' + select_style.val(); if (select_layout.length) selector += '-' + select_layout.val(); if (select_menu.length) selector += '-' + select_menu.val(); if (select_rtl.length) selector += '-rtl-' + select_rtl.val(); box.find('.actions a').removeClass('btn-active'); $(selector).addClass('btn-active'); console.log(selector); */ }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/common.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * common.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ /* Utility functions */ // generate a random number function randNum() { return (Math.floor( Math.random()* (1+40-20) ) ) + 20; } function PDFTarget(target) { var doc = $('html').clone(); var target = $(target).clone(); var form = $('#PDFTargetForm'); if (!form.length) { $('body').append('
        '); form = $('#PDFTargetForm'); } form.attr('action', basePath + 'ajax.php?section=pdf'); form.attr('method', 'POST'); form.append(''); target.find('.hidden-print').remove(); doc.find('body').html(target); var html = doc.html(); form.find('input').val(html); form.submit(); } function beautify(source) { var output, opts = {}; /* opts.indent_size = $('#tabsize').val(); opts.indent_char = opts.indent_size == 1 ? '\t' : ' '; opts.max_preserve_newlines = $('#max-preserve-newlines').val(); opts.preserve_newlines = opts.max_preserve_newlines !== -1; opts.keep_array_indentation = $('#keep-array-indentation').prop('checked'); opts.break_chained_methods = $('#break-chained-methods').prop('checked'); opts.indent_scripts = $('#indent-scripts').val(); opts.brace_style = $('#brace-style').val(); opts.space_before_conditional = $('#space-before-conditional').prop('checked'); opts.unescape_strings = $('#unescape-strings').prop('checked'); opts.wrap_line_length = $('#wrap-line-length').val(); opts.space_after_anon_function = true; */ opts.preserve_newlines = false; output = html_beautify(source, opts); return output; } // generate a random number within a range (PHP's mt_rand JavaScript implementation) function mt_rand (min, max) { // http://kevin.vanzonneveld.net // + original by: Onno Marsman // + improved by: Brett Zamir (http://brett-zamir.me) // + input by: Kongo // * example 1: mt_rand(1, 1); // * returns 1: 1 var argc = arguments.length; if (argc === 0) { min = 0; max = 2147483647; } else if (argc === 1) { throw new Error('Warning: mt_rand() expects exactly 2 parameters, 1 given'); } else { min = parseInt(min, 10); max = parseInt(max, 10); } return Math.floor(Math.random() * (max - min + 1)) + min; } // scroll to element animation function scrollTo(id) { if ($(id).length) $('html,body').animate({scrollTop: $(id).offset().top},'slow'); } // handle menu toggle button action function toggleMenuHidden() { //console.log('toggleMenuHidden'); $('.container-fluid:first').toggleClass('menu-hidden'); $('#menu').toggleClass('hidden-phone', function() { if ($('.container-fluid:first').is('.menu-hidden')) { if (typeof resetResizableMenu != 'undefined') resetResizableMenu(true); } else { removeMenuHiddenPhone(); if (typeof lastResizableMenuPosition != 'undefined') lastResizableMenuPosition(); } if (typeof $.cookie != 'undefined') $.cookie('menuHidden', $('.container-fluid:first').is('.menu-hidden')); }); if (typeof masonryGallery != 'undefined') masonryGallery(); } function removeMenuHiddenPhone() { if (!$('.container-fluid:first').is('.menu-hidden') && $('#menu').is('.hidden-phone')) $('#menu').removeClass('hidden-phone'); } // handle generate sparkline charts function genSparklines() { if ($('.sparkline').length) { $.each($('#content .sparkline'), function(k,v) { var size = { w: 150, h: 28 }; if ($(this).parent().is('.widget-stats')) size = { w: 150, h: 35 } var color = primaryColor; if ($(this).is('.danger')) color = dangerColor; if ($(this).is('.success')) color = successColor; if ($(this).is('.warning')) color = warningColor; if ($(this).is('.inverse')) color = inverseColor; var data = [[1, 3+randNum()], [2, 5+randNum()], [3, 8+randNum()], [4, 11+randNum()],[5, 14+randNum()],[6, 17+randNum()],[7, 20+randNum()], [8, 15+randNum()], [9, 18+randNum()], [10, 22+randNum()]]; $(v).sparkline(data, { type: 'bar', width: size.w, height: size.h, stackedBarColor: ["#dadada", color], lineWidth: 2 }); }); $.each($('#menu .sparkline'), function(k,v) { var size = { w: 150, h: 20 }; if ($(this).parent().is('.widget-stats-3')) size = { w: 150, h: 35 } var color = primaryColor; if ($(this).is('.danger')) color = dangerColor; if ($(this).is('.success')) color = successColor; if ($(this).is('.warning')) color = warningColor; if ($(this).is('.inverse')) color = inverseColor; var data = [[1, 3+randNum()], [2, 5+randNum()], [3, 8+randNum()], [4, 11+randNum()],[5, 14+randNum()],[6, 17+randNum()],[7, 20+randNum()], [8, 15+randNum()], [9, 18+randNum()], [10, 22+randNum()]]; $(v).sparkline(data, { type: 'bar', width: size.w, height: size.h, stackedBarColor: ["#dadada", color], lineWidth: 2 }); }); } } //handle generate easy-pie-charts function genEasyPie() { if ($('.easy-pie').length && $.fn.easyPieChart) { $.each($('.easy-pie'), function(k,v) { var color = primaryColor; if ($(this).is('.danger')) color = dangerColor; if ($(this).is('.success')) color = successColor; if ($(this).is('.warning')) color = warningColor; if ($(this).is('.inverse')) color = inverseColor; $(v).easyPieChart({ barColor: color, animate: ($('html').is('.ie') ? false : 3000), lineWidth: 4, size: 50 }); }); } } /* * Helper function for JQueryUI Sliders Create event */ function JQSliderCreate() { $(this) .removeClass('ui-corner-all ui-widget-content') .wrap('') .find('.ui-slider-handle') .removeClass('ui-corner-all ui-state-default'); } $(function() { // Sidebar menu collapsibles $('#menu .collapse').on('show', function(e) { e.stopPropagation(); $(this).parents('.hasSubmenu:first').addClass('active'); }) .on('hidden', function(e) { e.stopPropagation(); $(this).parents('.hasSubmenu:first').removeClass('active'); }); // main menu visibility toggle $('.navbar.main .btn-navbar').click(function() { var disabled = typeof toggleMenuButtonWhileTourOpen != 'undefined' ? toggleMenuButtonWhileTourOpen(true) : false; if (!disabled) toggleMenuHidden(); }); // topnav toggle $('.navbar.main .toggle-navbar').click(function() { var that = $(this); if ($('.navbar.main .wrapper').is(':hidden')) { $(this).slideUp(20, function(){ $('.navbar.main .wrapper').show(); $('.navbar.main').animate({ height: 34 }, 200, function(){ $('.navbar.main').toggleClass('navbar-hidden'); that.slideDown(); }); }); } else { $(this).slideUp(20, function(){ $('.navbar.main').animate({ height: 0 }, 200, function(){ $('.navbar.main .wrapper').hide(); $('.navbar.main').toggleClass('navbar-hidden'); that.slideDown(); }); }); } }); // multi-level top menu $('.submenu').hover(function() { $(this).children('ul').removeClass('submenu-hide').addClass('submenu-show'); }, function() { $(this).children('ul').removeClass('.submenu-show').addClass('submenu-hide'); }) .find("a:first").append(" » "); // tooltips $('[data-toggle="tooltip"]').tooltip(); // popovers $('[data-toggle="popover"]').popover(); // save to PDF $('[data-toggle*="pdf"]').on('click', function(e){ e.preventDefault(); PDFTarget($(this).attr('data-target')); }); // prettyphoto if ($('[data-toggle="prettyPhoto"]').length) $('[data-toggle="prettyPhoto"]').prettyPhoto(); // loading state for buttons $('[data-toggle*="btn-loading"]').click(function () { var btn = $(this); btn.button('loading'); setTimeout(function () { btn.button('reset') }, 3000); }); $('[data-toggle*="button-loading"]').click(function () { var btn = $(this); btn.button('loading'); }); // typeahead if ($('[data-toggle="typeahead"]').length) $('[data-toggle="typeahead"]').typeahead({ source: ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"], items: 4 }); // print $('[data-toggle="print"]').click(function(e) { e.preventDefault(); window.print(); }); // gridalicious $('[data-toggle*="gridalicious"]').each(function(){ var $that = $(this); $(this).gridalicious({ gutter: 13, width: $that.attr('data-gridalicious-width') ? parseInt($that.attr('data-gridalicious-width')) : 200, animate: true, selector: '.widget' }).removeClass('hide'); }); // collapsible widgets $('.widget[data-toggle="collapse-widget"] .widget-body') .on('show', function(){ $(this).parents('.widget:first').attr('data-collapse-closed', "false"); }) .on('shown', function(){ setTimeout(function(){ $(window).resize(); }, 500); }) .on('hidden', function(){ $(this).parents('.widget:first').attr('data-collapse-closed', "true"); }); $('.widget[data-toggle="collapse-widget"]').each(function() { // append toggle button $(this).find('.widget-head').append(''); // make the widget body collapsible $(this).find('.widget-body').addClass('collapse'); // verify if the widget should be opened if ($(this).attr('data-collapse-closed') !== "true") $(this).find('.widget-body').addClass('in'); // bind the toggle button $(this).find('.collapse-toggle').on('click', function(){ $(this).parents('.widget:first').find('.widget-body').collapse('toggle'); }); }); // generate sparkline charts genSparklines(); // generate easy-pie-charts genEasyPie(); // Google Code Prettify if ($('.prettyprint').length) prettyPrint(); // bind window resize event $(window).resize(function() { }); // trigger window resize event $(window).resize(); // view source toggle buttons $('.btn-source-toggle').click(function(e){ e.preventDefault(); $('.code:not(.show)').toggleClass('hide'); }); // source-code widgets $('[data-toggle="source-code"]').each(function(){ var button = $(' Source'); if ($(this).attr('data-placement') == 'outside') button.addClass('outside'); $(this).append(button); $(this).css('overflow', 'visible'); }).on('click', '[data-toggle="source-code-toggle"]', function(){ var html = $(this).parent().clone(); html.find('[data-toggle="source-code-toggle"]').remove(); html = beautify(html.html()); html = $('
        ').text(html);
        		
        		bootbox.alert(html);
        		
        		if ($('.prettyprint').length)
        			prettyPrint();
        	});
        	
        	// reset themer
        	$('[data-toggle="reset-themer"]').click(function(e){
        		e.preventDefault();
        		if (typeof updateTheme != 'undefined') {
        			updateTheme(0);
        		}
        		location = $(this).attr('href');
        	});
        	
        	// show/hide toggle buttons
        	$('[data-toggle="hide"]').click(function()
        	{
        		if ($(this).is('.bootboxTarget'))
        			bootbox.alert($($(this).attr('data-target')).html());
        		else {
        			$($(this).attr('data-target')).toggleClass('hide');
        			if ($(this).is('.scrollTarget') && !$($(this).attr('data-target')).is('.hide'))
        				scrollTo($(this).attr('data-target'));
        		}
        	});
        	
        	// handle menu position change
        	$('#toggle-menu-position').on('change', function()
        	{
        		$('.container-fluid:first').toggleClass('menu-right');
        		
        		if ($(this).prop('checked')) 
        			$('.container-fluid:first').removeClass('menu-left');
        		else
        			$('.container-fluid:first').addClass('menu-left');
        		
        		if (typeof $.cookie != 'undefined')
        			$.cookie('rightMenu', $(this).prop('checked') ? $(this).prop('checked') : null);
        		
        		if (typeof resetResizableMenu != 'undefined' && typeof lastResizableMenuPosition != 'undefined')
        		{
        			resetResizableMenu(true);
        			lastResizableMenuPosition();
        		}
        		removeMenuHiddenPhone();
        	});
        	
        	// handle persistent menu position on page load
        	if (typeof $.cookie != 'undefined' && $.cookie('rightMenu') && $('#toggle-menu-position').length)
        	{
        		$('#toggle-menu-position').prop('checked', true);
        		$('.container-fluid:first').not('.menu-right').removeClass('menu-left').addClass('menu-right');
        	}
        	
        	// handle layout type change
        	$('#toggle-layout').on('change', function()
        	{
        		if ($(this).prop('checked'))
        		{
        			$('.container-fluid:first').addClass('fixed');
        		}
        		else
        			$('.container-fluid:first').removeClass('fixed');
        		
        		if (typeof $.cookie != 'undefined')
        		{
        			$.cookie('layoutFixed', $(this).prop('checked') ? $(this).prop('checked') : null);
        			$.cookie('layoutFluid', $(this).prop('checked') ? null : $(this).prop('checked'));
        		}
        	});
        	
        	// handle persistent layout type on page load
        	if (typeof $.cookie != 'undefined' && $.cookie('layoutFixed') && $('#toggle-layout').length)
        	{
        		$('#toggle-layout').prop('checked', true);
        		$('.container-fluid:first').addClass('fixed');
        	}
        	else if (!$('.container-fluid:first').is('.fixed') || (typeof $.cookie != 'undefined' && $.cookie('layoutFluid')))
        	{
        		$('#toggle-layout').prop('checked', false);
        		$('.container-fluid:first').removeClass('fixed');
        	}
        	
        	// handle persistent menu visibility on page load
        	if (typeof $.cookie != 'undefined' && $.cookie('menuHidden') && $.cookie('menuHidden') == 'true' || (!$('.container-fluid').is('.menu-hidden') && !$('#menu').is(':visible')))
        		toggleMenuHidden();
        	else if ($('#menu').is(':visible'))
        	{
        		removeMenuHiddenPhone();
        		
        		if (typeof lastResizableMenuPosition != 'undefined') 
        			lastResizableMenuPosition();
        	}
        	
        	// menu slim scroll max height
        	setTimeout(function()
        	{
        		var menu_max_height = parseInt($('#menu .slim-scroll').attr('data-scroll-height'));
        		var menu_real_max_height = parseInt($('#wrapper').height());
        		$('#menu .slim-scroll').slimScroll({
        			height: (menu_max_height < menu_real_max_height ? (menu_real_max_height - 40) : menu_max_height) + "px",
        			allowPageScroll : true,
        			railDraggable: ($.fn.draggable ? true : false)
        	    });
        		
        		if (Modernizr.touch)
        			return; 
        		
        		// fixes weird bug when page loads and mouse over the sidebar (can't scroll)
        		$('#menu .slim-scroll').trigger('mouseenter').trigger('mouseleave');
        	}, 200);
        	
        	/* Slim Scroll Widgets */
        	$('.widget-scroll').each(function(){
        		$(this).find('.widget-body > div').slimScroll({
        			height: $(this).attr('data-scroll-height')
        	    });
        	});
        	
        	/* Other non-widget Slim Scroll areas */
        	$('#content .slim-scroll').each(function(){
        		var scrollSize = $(this).attr('data-scroll-size') ? $(this).attr('data-scroll-size') : "7px";
        		$(this).slimScroll({
        			height: $(this).attr('data-scroll-height'),
        			allowPageScroll : false,
        			railVisible: false,
        			size: '0',
        			railDraggable: ($.fn.draggable ? true : false)
        	    });
        	});
        
        	/* wysihtml5 */
        	if ($('textarea.wysihtml5').size() > 0)
        		$('textarea.wysihtml5').wysihtml5();
        	
        	/*
        	 * Boostrap Extended
        	 */
        	// custom select for Boostrap using dropdowns
        	if ($('.selectpicker').length) $('.selectpicker').selectpicker();
        	
        	// bootstrap-toggle-buttons
        	if ($('.toggle-button').length) $('.toggle-button').toggleButtons();
        	
        	/*
        	 * UniformJS: Sexy form elements
        	 */
        	if ($('.uniformjs').length) $('.uniformjs').find("select, input, button, textarea").uniform();
        	
        	// colorpicker
        	if ($('#colorpicker').length) $('#colorpicker').farbtastic('#colorpickerColor');
        	
        	// datepicker
        	if ($('#datepicker').length) $("#datepicker").datepicker({ showOtherMonths:true });
        	if ($('#datepicker-inline').length) $('#datepicker-inline').datepicker({ inline: true, showOtherMonths:true });
        	
        	// daterange
        	if ($('#dateRangeFrom').length && $('#dateRangeTo').length)
        	{
        		$( "#dateRangeFrom" ).datepicker({
        			defaultDate: "+1w",
        			changeMonth: false,
        			numberOfMonths: 2,
        			onClose: function( selectedDate ) {
        				$( "#dateRangeTo" ).datepicker( "option", "minDate", selectedDate );
        			}
        		}).datepicker( "option", "maxDate", $('#dateRangeTo').val() );
        
        		$( "#dateRangeTo" ).datepicker({
        			defaultDate: "+1w",
        			changeMonth: false,
        			numberOfMonths: 2,
        			onClose: function( selectedDate ) {
        				$( "#dateRangeFrom" ).datepicker( "option", "maxDate", selectedDate );
        			}
        		}).datepicker( "option", "minDate", $('#dateRangeFrom').val() );
        	}
        	
        	/* Table select / checkboxes utility */
        	$('.checkboxs thead :checkbox').change(function(){
        		if ($(this).is(':checked'))
        		{
        			$('.checkboxs tbody :checkbox').prop('checked', true).parent().addClass('checked');
        			$('.checkboxs tbody tr.selectable').addClass('selected');
        			$('.checkboxs_actions').show();
        		}
        		else
        		{
        			$('.checkboxs tbody :checkbox').prop('checked', false).parent().removeClass('checked');
        			$('.checkboxs tbody tr.selectable').removeClass('selected');
        			$('.checkboxs_actions').hide();
        		}
        	});
        	
        	$('.checkboxs tbody').on('click', 'tr.selectable', function(e){
        		var c = $(this).find(':checkbox');
        		var s = $(e.srcElement);
        		
        		if (e.srcElement.nodeName == 'INPUT')
        		{
        			if (c.is(':checked'))
        				$(this).addClass('selected');
        			else
        				$(this).removeClass('selected');
        		}
        		else if (e.srcElement.nodeName != 'TD' && e.srcElement.nodeName != 'TR' && e.srcElement.nodeName != 'DIV')
        		{
        			return true;
        		}
        		else
        		{
        			if (c.is(':checked'))
        			{
        				c.prop('checked', false).parent().removeClass('checked');
        				$(this).removeClass('selected');
        			}
        			else
        			{
        				c.prop('checked', true).parent().addClass('checked');
        				$(this).addClass('selected');
        			}
        		}
        		if ($('.checkboxs tr.selectable :checked').size() == $('.checkboxs tr.selectable :checkbox').size())
        			$('.checkboxs thead :checkbox').prop('checked', true).parent().addClass('checked');
        		else
        			$('.checkboxs thead :checkbox').prop('checked', false).parent().removeClass('checked');
        
        		if ($('.checkboxs tr.selectable :checked').size() >= 1)
        			$('.checkboxs_actions').show();
        		else
        			$('.checkboxs_actions').hide();
        	});
        	
        	if ($('.checkboxs tbody :checked').size() == $('.checkboxs tbody :checkbox').size() && $('.checkboxs tbody :checked').length)
        		$('.checkboxs thead :checkbox').prop('checked', true).parent().addClass('checked');
        	
        	if ($('.checkboxs tbody :checked').length)
        		$('.checkboxs_actions').show();
        	
        	$('.radioboxs tbody tr.selectable').click(function(e){
        		var c = $(this).find(':radio');
        		if (e.srcElement.nodeName == 'INPUT')
        		{
        			if (c.is(':checked'))
        				$(this).addClass('selected');
        			else
        				$(this).removeClass('selected');
        		}
        		else if (e.srcElement.nodeName != 'TD' && e.srcElement.nodeName != 'TR')
        		{
        			return true;
        		}
        		else
        		{
        			if (c.is(':checked'))
        			{
        				c.attr('checked', false);
        				$(this).removeClass('selected');				
        			}
        			else
        			{
        				c.attr('checked', true);
        				$('.radioboxs tbody tr.selectable').removeClass('selected');
        				$(this).addClass('selected');
        			}
        		}
        	});
        	
        	// sortable tables
        	if ($( ".js-table-sortable" ).length)
        	{	
        		$( ".js-table-sortable" ).sortable(
        		{
        			placeholder: "ui-state-highlight",
        			items: "tbody tr",
        			handle: ".js-sortable-handle",
        			forcePlaceholderSize: true,
        			helper: function(e, ui) 
        			{
        				ui.children().each(function() {
        					$(this).width($(this).width());
        				});
        				return ui;
        			},
        			start: function(event, ui) 
        			{
        				if (typeof mainYScroller != 'undefined') mainYScroller.disable();
        				ui.placeholder.html(' ');
        			},
        		    stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); }
        		});
        	}
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/contact.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * contact.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        /* Google Maps API */
        if (typeof google != 'undefined')
        {
        	var map_latlng = new google.maps.LatLng(47.06285,21.943721);
        	var map_options = {
        			zoom: 1,
        			center: map_latlng,
        			mapTypeId: google.maps.MapTypeId.ROADMAP,
        			panControl: false,
        			zoomControl: false,
        			scaleControl: false,
        			mapTypeControl: false,
        			disableDefaultUI: true,
        			scrollwheel: false,
        			styles: [{
        				stylers: [{ 
        					saturation: -20
        				}, { 
        					hue: themerPrimaryColor 
        				}]
        			}, {
        				elementType: "labels.text.fill",
        				stylers: [{ color: "#444444" }]
        			    //stylers: [{ color: primaryColor }]
        			}]
        	};
        
        	var markerIconDefault_image = new google.maps.MarkerImage(commonPath + "theme/images/marker.png",
        			// This marker is 44 pixels wide by 56 pixels tall.
        			new google.maps.Size(44, 56),
        			// The origin for this image is 0,0.
        			new google.maps.Point(0, 0),
        			// The anchor for this image is the base of the flagpole at 0,32.
        			new google.maps.Point(22, 56));
        
        	var markerIconDefault_shadow = new google.maps.MarkerImage(commonPath + "theme/images/marker_shadow.png",
        			// This marker is 44 pixels wide by 56 pixels tall.
        			new google.maps.Size(37, 21),
        			// The origin for this image is 0,0.
        			new google.maps.Point(0,0),
        			// The anchor for this image is the base of the flagpole at 0,32.
        			new google.maps.Point(20, 10));
        
        	var markerIconDefault_shape = {
        			coord: [1, 1, 1, 52, 42, 52, 42 , 1],
        			type: 'poly'
        	};
        
        }
        
        function initializeMap(el, options)
        {
        	if (typeof google == 'undefined') 
        		return false;
        
        	var map = new google.maps.Map(document.getElementById(el), options);
        	var marker = new google.maps.Marker({
        		position: map_latlng,
        		title: 'My Location',
        		shadow: markerIconDefault_shadow,
        		icon: markerIconDefault_image,
        		map: map
        	});
        }
        
        $(function()
        {
        	// Contact Page Google Maps
            if ($('#contact_gmap').size() > 0 && typeof google != 'undefined')
            {
            	map_options.zoom = 13;
            	initializeMap('contact_gmap', map_options);
            }
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/file_managers.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * file_managers.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        $(function() 
        {
        	/* Plupload */
        	$("#pluploadUploader").pluploadQueue({
        		// General settings
        		runtimes : 'gears,browserplus,html5',
        		url : 'theme/scripts/plugins/forms/plupload/examples/upload.php',
        		max_file_size : '10mb',
        		chunk_size : '1mb',
        		unique_names : true,
        
        		// Resize images on clientside if we can
        		resize : {width : 320, height : 240, quality : 90},
        
        		// Specify what files to browse for
        		filters : [
        			{title : "Image files", extensions : "jpg,gif,png"},
        			{title : "Zip files", extensions : "zip"}
        		],
        
        		// Flash settings
        		flash_swf_url : 'theme/scripts/plugins/forms/plupload/js/plupload.flash.swf',
        
        		// Silverlight settings
        		silverlight_xap_url : 'theme/scripts/plugins/forms/plupload/js/plupload.silverlight.xap'
        	});
        
        	// Client side form validation
        	$('#pluploadForm').submit(function(e) {
                var uploader = $('#pluploadUploader').pluploadQueue();
        
                // Files in queue upload them first
                if (uploader.files.length > 0) {
                    // When all files are uploaded submit form
                    uploader.bind('StateChanged', function() {
                        if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                            $('#pluploadForm').submit();
                        }
                    });
                        
                    uploader.start();
                } else {
                    alert('You must queue at least one file.');
                }
        
                return false;
            });
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/finances.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * finances.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        $(function()
        {
        	// initialize charts
        	if (typeof charts != 'undefined') 
        		charts.initFinances();
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/form_elements.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * form_elements.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        $(function()
        {
        	// button state demo
        	$('#btn-loading')
        	    .click(function () {
        	        var btn = $(this)
        	        btn.button('loading')
        	        setTimeout(function () {
        	            btn.button('reset')
        	        }, 3000)
        	    });
        	
        	/* Select2 - Advanced Select Controls */
        	
        	// Basic
        	$('#select2_1').select2();
        	
        	// Multiple
        	$('#select2_2').select2();
        	
        	// Placeholders
        	$("#select2_3").select2({
        		placeholder: "Select a State",
        		allowClear: true
        	});
        	$("#select2_4").select2({
        	    placeholder: "Select a State",
        	    allowClear: true
        	});
        	
        	// tagging support
        	$("#select2_5").select2({tags:["red", "green", "blue"]});
        	
        	// enable/disable mode
        	$("#select2_6_1").select2();
        	$("#select2_6_2").select2();
        	$("#select2_6_enable").click(function() { $("#select2_6_1,#select2_6_2").select2("enable"); });
        	$("#select2_6_disable").click(function() { $("#select2_6_1,#select2_6_2").select2("disable"); });
        	
        	// templating
        	function format(state) {
        	    if (!state.id) return state.text; // optgroup
        	    return "" + state.text;
        	}
        	$("#select2_7").select2({
        	    formatResult: format,
        	    formatSelection: format,
        	    escapeMarkup: function(m) { return m; }
        	});
        	
        	/* DateTimePicker */
        	
        	// default
        	$("#datetimepicker1").datetimepicker({
        		format: 'yyyy-mm-dd hh:ii',
        		startDate: "2013-02-14 10:00",
        		minView: 0
        	});
        	
        	// component
        	$('#datetimepicker2').datetimepicker({
        		format: "dd MM yyyy - hh:ii",
        		startDate: "2013-02-14 10:00"
        	});
        	
        	// positioning
        	$('#datetimepicker3').datetimepicker({
        		format: "dd MM yyyy - hh:ii",
                autoclose: true,
                todayBtn: true,
                startDate: "2013-02-14 10:00",
                pickerPosition: "bottom-left"
        	});
        	
        	// advanced
        	$('#datetimepicker4').datetimepicker({
        		format: "dd MM yyyy - hh:ii",
                autoclose: true,
                todayBtn: true,
                startDate: "2013-02-14 10:00",
                minuteStep: 10
        	});
        	
        	// meridian
        	$('#datetimepicker5').datetimepicker({
        		format: "dd MM yyyy - HH:ii P",
        	    showMeridian: true,
        	    autoclose: true,
        	    startDate: "2013-02-14 10:00",
        	    todayBtn: true
        	});
        	
        	// with date only
        	$("#datetimepicker6").datetimepicker({
        	    format: 'yyyy-mm-dd',
        	    startDate: "2013-06-18",
        	    minView: 2, // this forces the picker to not go any further than days view
        	    pickerPosition: "bottom-left"
        	});
        	
        	/*
        	 * Input Masks
        	 */
        	$.extend($.inputmask.defaults, {
                'autounmask': true
            });
        
            $("#inputmask-date").inputmask("d/m/y", {autoUnmask: true});
            $("#inputmask-date-1").inputmask("d/m/y",{ "placeholder": "*"});
            $("#inputmask-date-2").inputmask("d/m/y",{ "placeholder": "dd/mm/yyyy" });
            $("#inputmask-phone").inputmask("mask", {"mask": "(999) 999-9999"});
            $("#inputmask-tax").inputmask({"mask": "99-9999999"});
            $("#inputmask-decimal").inputmask('decimal', { rightAlignNumerics: false });
            $("#inputmask-currency").inputmask('\u20AC 999,999,999.99', { numericInput: true, rightAlignNumerics: false, greedy: false});
            $("#inputmask-ssn").inputmask("999-99-9999", {clearMaskOnLostFocus: true });
            
            /*
             * Multiselect
             */
            $('#multiselect-optgroup').multiSelect({ selectableOptgroup: true });
            $('#pre-selected-options').multiSelect();
            $('#multiselect-custom').multiSelect({
            	selectableHeader: "
        Selectable items
        ", selectionHeader: "
        Selection items
        ", selectableFooter: "", selectionFooter: "" }); /* * bootstrap-timepicker */ $('#timepicker1').timepicker(); $('#timepicker2').timepicker({ minuteStep: 1, template: 'modal', showSeconds: true, showMeridian: false, modalBackdrop: true }); $('#timepicker3').timepicker({ minuteStep: 5, showInputs: false, disableFocus: true }); $('#timepicker4').timepicker({ minuteStep: 1, secondStep: 5, showInputs: false, showSeconds: true, showMeridian: false }); $('#timepicker5').timepicker({ template: false, showInputs: false, minuteStep: 5 }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/form_validator.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * form_validator.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $.validator.setDefaults( { submitHandler: function() { alert("submitted!"); }, showErrors: function(map, list) { this.currentElements.parents('label:first, .controls:first').find('.error').remove(); this.currentElements.parents('.control-group:first').removeClass('error'); $.each(list, function(index, error) { var ee = $(error.element); var eep = ee.parents('label:first').length ? ee.parents('label:first') : ee.parents('.controls:first'); ee.parents('.control-group:first').addClass('error'); eep.find('.error').remove(); eep.append('

        ' + error.message + '

        '); }); //refreshScrollers(); } }); $(function() { // validate signup form on keyup and submit $("#validateSubmitForm").validate({ rules: { firstname: "required", lastname: "required", username: { required: true, minlength: 2 }, password: { required: true, minlength: 5 }, confirm_password: { required: true, minlength: 5, equalTo: "#password" }, email: { required: true, email: true }, topic: { required: "#newsletter:checked", minlength: 2 }, agree: "required" }, messages: { firstname: "Please enter your firstname", lastname: "Please enter your lastname", username: { required: "Please enter a username", minlength: "Your username must consist of at least 2 characters" }, password: { required: "Please provide a password", minlength: "Your password must be at least 5 characters long" }, confirm_password: { required: "Please provide a password", minlength: "Your password must be at least 5 characters long", equalTo: "Please enter the same password as above" }, email: "Please enter a valid email address", agree: "Please accept our policy" } }); // propose username by combining first- and lastname $("#username").focus(function() { var firstname = $("#firstname").val(); var lastname = $("#lastname").val(); if(firstname && lastname && !this.value) { this.value = firstname + "." + lastname; } }); //code to hide topic selection, disable for demo var newsletter = $("#newsletter"); // newsletter topics are optional, hide at first var inital = newsletter.is(":checked"); var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray"); var topicInputs = topics.find("input").attr("disabled", !inital); // show when newsletter is checked newsletter.click(function() { topics[this.checked ? "removeClass" : "addClass"]("gray"); topicInputs.attr("disabled", !this.checked); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/form_wizards.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * form_wizards.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { var bWizardTabClass = ''; $('.wizard').each(function() { if ($(this).is('#rootwizard')) bWizardTabClass = 'bwizard-steps'; else bWizardTabClass = ''; var wiz = $(this); $(this).bootstrapWizard( { onNext: function(tab, navigation, index) { if(index==1) { // Make sure we entered the title if(!wiz.find('#inputTitle').val()) { alert('You must enter the product title'); wiz.find('#inputTitle').focus(); return false; } } }, onLast: function(tab, navigation, index) { // Make sure we entered the title if(!wiz.find('#inputTitle').val()) { alert('You must enter the product title'); wiz.find('#inputTitle').focus(); return false; } }, onTabClick: function(tab, navigation, index) { // Make sure we entered the title if(!wiz.find('#inputTitle').val()) { alert('You must enter the product title'); wiz.find('#inputTitle').focus(); return false; } }, onTabShow: function(tab, navigation, index) { var $total = navigation.find('li:not(.status)').length; var $current = index+1; var $percent = ($current/$total) * 100; if (wiz.find('.bar').length) { wiz.find('.bar').css({width:$percent+'%'}); wiz.find('.bar') .find('.step-current').html($current) .parent().find('.steps-total').html($total) .parent().find('.steps-percent').html(Math.round($percent) + "%"); } // update status if (wiz.find('.step-current').length) wiz.find('.step-current').html($current); if (wiz.find('.steps-total').length) wiz.find('.steps-total').html($total); if (wiz.find('.steps-complete').length) wiz.find('.steps-complete').html(($current-1)); // mark all previous tabs as complete navigation.find('li:not(.status)').removeClass('primary'); navigation.find('li:not(.status):lt('+($current-1)+')').addClass('primary'); // If it's the last tab then hide the last button and show the finish instead if($current >= $total) { wiz.find('.pagination .next').hide(); wiz.find('.pagination .finish').show(); wiz.find('.pagination .finish').removeClass('disabled'); } else { wiz.find('.pagination .next').show(); wiz.find('.pagination .finish').hide(); } }, tabClass: bWizardTabClass, nextSelector: '.next', previousSelector: '.previous', firstSelector: '.first', lastSelector: '.last' }); wiz.find('.finish').click(function() { alert('Finished!, Starting over!'); wiz.find("a[data-toggle*='tab']:first").trigger('click'); }); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/google_analytics.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * google_analytics.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { // initialize charts if (typeof charts != 'undefined') charts.initGoogleAnalytics(); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/image_crop.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * image_crop.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { $('#jcrop-target-1').Jcrop({},function(){ api = this; api.setSelect([130,65,130+350,65+285]); api.setOptions({ bgFade: true }); api.ui.selection.addClass('jcrop-selection'); }); /* * JCrop with preview Example */ // Create variables (in this scope) to hold the API and image size var jcrop_api, boundx, boundy, // Grab some information about the preview pane $preview = $('#preview-pane'), $pcnt = $('#preview-pane .preview-container'), $pimg = $('#preview-pane .preview-container img'), xsize = $pcnt.width(), ysize = $pcnt.height(); function handleTarget2() { $('#jcrop-target-2').Jcrop({ onChange: updatePreview, onSelect: updatePreview, aspectRatio: xsize / ysize },function(){ // Use the API to get the real image size var bounds = this.getBounds(); boundx = bounds[0]; boundy = bounds[1]; // Store the API in the jcrop_api variable jcrop_api = this; jcrop_api.setSelect([130,65,130+350,65+285]); jcrop_api.setOptions({ bgFade: true }); jcrop_api.ui.selection.addClass('jcrop-selection'); // Move the preview into the jcrop container for css positioning $preview.appendTo(jcrop_api.ui.holder); }); } function updatePreview(c) { if (parseInt(c.w) > 0) { var rx = xsize / c.w; var ry = ysize / c.h; $pimg.css({ width: Math.round(rx * boundx) + 'px', height: Math.round(ry * boundy) + 'px', marginLeft: '-' + Math.round(rx * c.x) + 'px', marginTop: '-' + Math.round(ry * c.y) + 'px' }); } }; handleTarget2(); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/index.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * index.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { // initialize charts if (typeof charts != 'undefined') charts.initIndex(); /* * Chat widget */ if ($('.widget-chat').length) { $('.widget-chat form').submit(function(e) { e.preventDefault(); var direction = $(this).parents('.widget-chat').find('.media:first blockquote').is('.pull-right') ? 'left' : 'right'; var media = $(this).parents('.widget-chat').find('.media:first').clone(); var message = $(this).find('[name="message"]'); // prepare media media.hide(); media.find('small.author a.strong').text('Awesome'); // apply direction media.removeClass('right').addClass(direction); media.find('blockquote').attr('class', '').addClass('pull-' + direction); media.find('.media-object').removeClass('pull-left pull-right').addClass('pull-' + direction); // apply message media.find('blockquote p').text(message.val()); // reset input message.val(''); // jump slimScroll to top $(this).parents('.widget-chat:first').find('.slim-scroll').slimScroll({ scrollTo: '0' }); // insert media in the conversation $(this).parents('.widget-chat:first').find('.chat-items').prepend(media).find('.media:hidden').slideDown(); }); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/infinite_scroll.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * infinite_scroll.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { var isCustomScroll = $('body').css('overflow') === 'hidden'; $('.jscroll').jscroll({ loadingHtml: '
        Loading ...
        ', debug: false, nextSelector: '.jscroll-next:last', isCustomScroll: isCustomScroll, isWindow: !isCustomScroll, customScroll: isCustomScroll ? '#wrapper' : 'window' }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/maps_google.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * maps_google.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ /* * Extending Gmaps with pagination */ ( function($) { $.extend($.ui.gmap.prototype, { pagination: function(prop) { var $el = $(""); var self = this, i = 0, prop = prop || 'title'; self.set('pagination', function(a, b) { if (a) { i = i + b; $el.find('.display').text(self.get('markers')[i][prop]); self.get('map').panTo(self.get('markers')[i].getPosition()); } }); self.get('pagination')(true, 0); $el.find('.back-btn').click(function(e) { e.preventDefault(); self.get('pagination')((i > 0), -1, this); }); $el.find('.fwd-btn').click(function(e) { e.preventDefault(); self.get('pagination')((i < self.get('markers').length - 1), 1, this); }); self.addControl($el, google.maps.ControlPosition.TOP_LEFT); } }); } (jQuery) ); $(function() { /* * Clustering */ if ($('#google-map-clustering').length) { // We need to bind the map with the "init" event otherwise bounds will be null $('#google-map-clustering').gmap({'zoom': 2, 'disableDefaultUI':true}).bind('init', function(evt, map) { var bounds = map.getBounds(); var southWest = bounds.getSouthWest(); var northEast = bounds.getNorthEast(); var lngSpan = northEast.lng() - southWest.lng(); var latSpan = northEast.lat() - southWest.lat(); for ( var i = 0; i < 1000; i++ ) { var lat = southWest.lat() + latSpan * Math.random(); var lng = southWest.lng() + lngSpan * Math.random(); $('#google-map-clustering').gmap('addMarker', { 'position': new google.maps.LatLng(lat, lng) }).click(function() { $('#google-map-clustering').gmap('openInfoWindow', { content : 'Hello world!' }, this); }); } $('#google-map-clustering').gmap('set', 'MarkerClusterer', new MarkerClusterer(map, $(this).gmap('get', 'markers'))); // To call methods in MarkerClusterer simply call // $('#google-map-clustering').gmap('get', 'MarkerClusterer').callingSomeMethod(); }); } /* * Extend with pagination */ if ($('#google-map-extend-pagination').length) { var markers = [ {'position': '59.32893000000001,18.064910000000054', 'title': 'Stockholm, Sweden' }, {'position': '35.6894875,139.69170639999993', 'title': 'Tokyo, Japan' }, {'position': '13.7234186, 100.47623190000002', 'title': 'Bangkok, Thailand' }, {'position': '51.508129,-0.12800500000003012', 'title': 'London, Great Britain' }, {'position': '40.7143528,-74.0059731', 'title': 'New York, USA' }, {'position': '48.856614,2.3522219000000177', 'title': 'Paris, France' }, {'position': '34.0522342,-118.2436849', 'title': 'Los Angeles, USA' }, {'position': '55.75,37.616666699999996', 'title': 'Moskva, Ryssia' } ]; $('#google-map-extend-pagination').gmap({'zoom': 5, 'disableDefaultUI':true, 'callback': function() { var self = this; $.each(markers, function(i, marker) { self.addMarker(marker).click(function() { self.openInfoWindow({'content': this.title}, this); }); }); }}).gmap('pagination', 'title'); } /* * Filtering */ if ($('#google-map-filters').length) { // format String.prototype.format = function() { a = this; for ( k in arguments ) { a = a.replace("{" + k + "}", arguments[k]); } return a; }; $('#google-map-filters').gmap({'disableDefaultUI':true}).bind('init', function(evt, map) { //$('#google-map-filters').gmap('addControl', 'tags-control', google.maps.ControlPosition.TOP_LEFT); $('#google-map-filters').gmap('addControl', 'radios', google.maps.ControlPosition.TOP_LEFT); var southWest = map.getBounds().getSouthWest(); var northEast = map.getBounds().getNorthEast(); var lngSpan = northEast.lng() - southWest.lng(); var latSpan = northEast.lat() - southWest.lat(); var images = ['http://google-maps-icons.googlecode.com/files/friends.png', 'http://google-maps-icons.googlecode.com/files/home.png', 'http://google-maps-icons.googlecode.com/files/girlfriend.png', 'http://google-maps-icons.googlecode.com/files/dates.png', 'http://google-maps-icons.googlecode.com/files/realestate.png', 'http://google-maps-icons.googlecode.com/files/apartment.png', 'http://google-maps-icons.googlecode.com/files/family.png']; var tags = ['jQuery', 'Google maps', 'Plugin', 'SEO', 'Java', 'PHP', 'C#', 'Ruby', 'JavaScript', 'HTML']; //$('#tags').append(''); $.each(tags, function(i, tag) { //$('#tags').append(('').format(tag, tag)); $('#radios').append(('').format(tag, tag)); }); for ( i = 0; i < 100; i++ ) { var temp = []; for ( j = 0; j < Math.random()*5; j++ ) { temp.push(tags[Math.floor(Math.random()*10)]); } $('#google-map-filters').gmap('addMarker', { 'icon': images[(Math.floor(Math.random()*7))], 'tags':temp, 'bound':true, 'position': new google.maps.LatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random()) } ).click(function() { var visibleInViewport = ( $('#google-map-filters').gmap('inViewport', $(this)[0]) ) ? 'I\'m visible in the viewport.' : 'I\'m sad and hidden.'; $('#google-map-filters').gmap('openInfoWindow', { 'content': $(this)[0].tags + '
        ' +visibleInViewport }, this); }); } $('input:checkbox').click(function() { $('#google-map-filters').gmap('closeInfoWindow'); $('#google-map-filters').gmap('set', 'bounds', null); var filters = []; $('input:checkbox:checked').each(function(i, checkbox) { filters.push($(checkbox).val()); }); if ( filters.length > 0 ) { $('#google-map-filters').gmap('find', 'markers', { 'property': 'tags', 'value': filters, 'operator': 'OR' }, function(marker, found) { if (found) { $('#google-map-filters').gmap('addBounds', marker.position); } marker.setVisible(found); }); } else { $.each($('#google-map-filters').gmap('get', 'markers'), function(i, marker) { $('#google-map-filters').gmap('addBounds', marker.position); marker.setVisible(true); }); } }); /*$("#tags").change(function() { $('#google-map-filters').gmap('closeInfoWindow'); $('#google-map-filters').gmap('set', 'bounds', null); if ( $(this).val() == 'all' ) { $.each($('#google-map-filters').gmap('get', 'markers'), function(i, marker) { marker.setVisible(true); }); } else { $('#google-map-filters').gmap('find', 'markers', { 'property': 'tags', 'value': $(this).val() }, function(marker, found) { if (found) { $('#google-map-filters').gmap('addBounds', marker.position); } marker.setVisible(found); }); } });*/ }); } /* * Geocoding */ if ($('#google-map-geocoding').length) { $('#google-map-geocoding').gmap({'zoom': 2 }).bind('init', function(event, map) { $(map).click( function(event) { $('#google-map-geocoding').gmap('addMarker', { 'position': event.latLng, 'draggable': true, 'bounds': false }, function(map, marker) { $('#modals').append('
        ' + ''+ '' + '' + '' + '' + '' + '' + '' + '
        '); findLocation(marker.getPosition(), marker); }).dragend( function(event) { findLocation(event.latLng, this); }).click( function() { openDialog(this); }) }); }); function findLocation(location, marker) { $('#google-map-geocoding').gmap('search', {'location': location}, function(results, status) { if ( status === 'OK' ) { $.each(results[0].address_components, function(i,v) { if ( v.types[0] == "administrative_area_level_1" || v.types[0] == "administrative_area_level_2" ) { $('#dialog'+marker.__gm_id + ' [name="state"]').attr('value', v.long_name); } else if ( v.types[0] == "country") { $('#dialog'+marker.__gm_id + ' [name="country"]').attr('value', v.long_name); } }); marker.setTitle(results[0].formatted_address); $('#dialog'+marker.__gm_id + ' [name="address"]').attr('value', results[0].formatted_address); openDialog(marker); } }); } function openDialog(marker) { bootbox.dialog($('#dialog'+marker.__gm_id).html(), [{ 'label': 'Save', 'class': 'btn-success', 'callback': function(){} }, { 'label': 'Remove', 'class': 'btn-danger', 'callback': function(){ marker.setMap(null); } }]); } } /* * JSON */ if ($('#google-map-json').length) { $('#google-map-json').gmap().bind('init', function() { $.getJSON( basePath + 'theme/scripts/plugins/maps/jquery-ui-map/data/demo.json', function(data) { $.each( data.markers, function(i, marker) { $('#google-map-json').gmap('addMarker', { 'position': new google.maps.LatLng(marker.latitude, marker.longitude), 'bounds': true }).click(function() { $('#google-map-json').gmap('openInfoWindow', { 'content': marker.content }, this); }); }); }); }); } /* * Streetview */ if ($('#google-map-streetview').length) { $('#google-map-streetview').gmap({ 'disableDefaultUI':true, 'callback': function() { var self = this; self.microformat('.vevent', function(result, item, index) { var clone = $(item).clone().addClass('ui-dialog-vevent').append('
        '.replace('{0}', index)); clone.find('p').remove(); var latlng = new google.maps.LatLng(result.location[0].geo[0].latitude['value-title'], result.location[0].geo[0].longitude['value-title']); self.addMarker( { 'bounds':true, 'position': latlng, 'title': result.summary, 'icon': 'http://google-maps-icons.googlecode.com/files/music-rock.png' }, function(map, marker) { $(item).find('.summary').click( function() { $(marker).triggerEvent('click'); return false; }); $(item).mouseover(function() { self.get('map').panTo(marker.getPosition()); }); }).click(function() { self.get('map').panTo( $(this)[0].getPosition()); //$(clone).dialog({ 'modal': true, 'width': 530, 'title': result.summary, 'resizable': false, 'draggable': false }); bootbox.alert($(clone).html()); self.displayStreetView('streetview{0}'.replace('{0}', index), { 'position': $(this)[0].getPosition() }); }); }); }}); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/maps_vector.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * maps_vector.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { $('#maps_vector_tabs a[data-toggle="tab"]').on('shown', function (e) { if ($(this).attr('data-init')) return; $(this).attr('data-init', 1); switch ($(this).attr('href')) { case '#tab1': initWorldMapGDP(); break; case '#tab2': initWorldMapMarkers(); break; case '#tab3': initUSAUnemployment(); break; case '#tab4': initRegionSelection(); break; case '#tab5': initFranceElections(); break; case '#tab6': initRandomColors(); break; case '#tab7': initMallMap(); break; case '#tab8': initProjectionMap(); break; } }); // load this map by default initWorldMapGDP(); // GDP by country function initWorldMapGDP() { $('#world-map-gdp').vectorMap({ map: 'world_mill_en', series: { regions: [{ values: gdpData, scale: ['#C8EEFF', '#0071A4'], normalizeFunction: 'polynomial' }] }, onLabelShow: function(e, el, code){ el.html(el.html()+' (GDP - '+gdpData[code]+')'); } }); } // World map markers function initWorldMapMarkers() { $('#world-map-markers').vectorMap({ map: 'world_mill_en', scaleColors: ['#C8EEFF', '#0071A4'], normalizeFunction: 'polynomial', hoverOpacity: 0.7, hoverColor: false, markerStyle: { initial: { fill: primaryColor, stroke: '#383f47' } }, backgroundColor: '#383f47', markers: [ {latLng: [41.90, 12.45], name: 'Vatican City'}, {latLng: [43.73, 7.41], name: 'Monaco'}, {latLng: [-0.52, 166.93], name: 'Nauru'}, {latLng: [-8.51, 179.21], name: 'Tuvalu'}, {latLng: [43.93, 12.46], name: 'San Marino'}, {latLng: [47.14, 9.52], name: 'Liechtenstein'}, {latLng: [7.11, 171.06], name: 'Marshall Islands'}, {latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis'}, {latLng: [3.2, 73.22], name: 'Maldives'}, {latLng: [35.88, 14.5], name: 'Malta'}, {latLng: [12.05, -61.75], name: 'Grenada'}, {latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines'}, {latLng: [13.16, -59.55], name: 'Barbados'}, {latLng: [17.11, -61.85], name: 'Antigua and Barbuda'}, {latLng: [-4.61, 55.45], name: 'Seychelles'}, {latLng: [7.35, 134.46], name: 'Palau'}, {latLng: [42.5, 1.51], name: 'Andorra'}, {latLng: [14.01, -60.98], name: 'Saint Lucia'}, {latLng: [6.91, 158.18], name: 'Federated States of Micronesia'}, {latLng: [1.3, 103.8], name: 'Singapore'}, {latLng: [1.46, 173.03], name: 'Kiribati'}, {latLng: [-21.13, -175.2], name: 'Tonga'}, {latLng: [15.3, -61.38], name: 'Dominica'}, {latLng: [-20.2, 57.5], name: 'Mauritius'}, {latLng: [26.02, 50.55], name: 'Bahrain'}, {latLng: [0.33, 6.73], name: 'So Tom and Prncipe'} ] }); } // USA unemployment function initUSAUnemployment() { $.getJSON( basePath + 'theme/scripts/plugins/maps/jvectormap/data/us-unemployment.json', function(data){ var val = 2009; statesValues = jvm.values.apply({}, jvm.values(data.states)), metroPopValues = Array.prototype.concat.apply([], jvm.values(data.metro.population)), metroUnemplValues = Array.prototype.concat.apply([], jvm.values(data.metro.unemployment)); $('#usa-unemployment').vectorMap({ map: 'us_aea_en', markers: data.metro.coords, series: { markers: [{ attribute: 'fill', scale: ['#FEE5D9', '#A50F15'], values: data.metro.unemployment[val], min: jvm.min(metroUnemplValues), max: jvm.max(metroUnemplValues) },{ attribute: 'r', scale: [5, 20], values: data.metro.population[val], min: jvm.min(metroPopValues), max: jvm.max(metroPopValues) }], regions: [{ scale: ['#DEEBF7', '#08519C'], attribute: 'fill', values: data.states[val], min: jvm.min(statesValues), max: jvm.max(statesValues) }] }, onMarkerLabelShow: function(event, label, index){ label.html( ''+data.metro.names[index]+'
        '+ 'Population: '+data.metro.population[val][index]+'
        '+ 'Unemployment rate: '+data.metro.unemployment[val][index]+'%' ); }, onRegionLabelShow: function(event, label, code){ label.html( ''+label.html()+'
        '+ 'Unemployment rate: '+data.states[val][code]+'%' ); } }); var mapObject = $('#usa-unemployment').vectorMap('get', 'mapObject'); $("#usa-unemployment-slider").slider({ value: val, min: 2005, max: 2009, step: 1, create: JQSliderCreate, slide: function( event, ui ) { $('#usa-unemployment-slider-year strong').html(ui.value); val = ui.value; mapObject.series.regions[0].setValues(data.states[ui.value]); mapObject.series.markers[0].setValues(data.metro.unemployment[ui.value]); mapObject.series.markers[1].setValues(data.metro.population[ui.value]); } }); }); } // regions selection function initRegionSelection() { map = new jvm.WorldMap({ container: $('#regions-selection'), map: 'de_merc_en', regionsSelectable: true, markersSelectable: true, markers: [ {latLng: [52.50, 13.39], name: 'Berlin'}, {latLng: [53.56, 10.00], name: 'Hamburg'}, {latLng: [48.13, 11.56], name: 'Munich'}, {latLng: [50.95, 6.96], name: 'Cologne'}, {latLng: [50.11, 8.68], name: 'Frankfurt am Main'}, {latLng: [48.77, 9.17], name: 'Stuttgart'}, {latLng: [51.23, 6.78], name: 'Dusseldorf'}, {latLng: [51.51, 7.46], name: 'Dortmund'}, {latLng: [51.45, 7.01], name: 'Essen'}, {latLng: [53.07, 8.80], name: 'Bremen'} ], markerStyle: { initial: { fill: '#4DAC26' }, selected: { fill: '#CA0020' } }, regionStyle: { initial: { fill: '#B8E186' }, selected: { fill: '#F4A582' } }, series: { markers: [{ attribute: 'r', scale: [5, 15], values: [ 887.70, 755.16, 310.69, 405.17, 248.31, 207.35, 217.22, 280.71, 210.32, 325.42 ] }] }, onRegionSelected: function(){ if (window.localStorage) { window.localStorage.setItem( 'jvectormap-selected-regions', JSON.stringify(map.getSelectedRegions()) ); } }, onMarkerSelected: function(){ if (window.localStorage) { window.localStorage.setItem( 'jvectormap-selected-markers', JSON.stringify(map.getSelectedMarkers()) ); } } }); map.setSelectedRegions( JSON.parse( window.localStorage.getItem('jvectormap-selected-regions') || '[]' ) ); map.setSelectedMarkers( JSON.parse( window.localStorage.getItem('jvectormap-selected-markers') || '[]' ) ); } // France elections function initFranceElections() { $.getJSON('theme/scripts/plugins/maps/jvectormap/data/france-elections.json', function(data){ new jvm.WorldMap({ map: 'fr_merc_en', container: $('#france-2007'), series: { regions: [{ scale: { '1': '#4169E1', '2': '#FF69B4' }, attribute: 'fill', values: data['year2007'].results }] } }); new jvm.WorldMap({ map: 'fr_merc_en', container: $('#france-2012'), series: { regions: [{ scale: { '1': '#FF69B4', '2': '#4169E1' }, attribute: 'fill', values: data['year2012'].results }] } }); }); } // random colors var palette = ['#66C2A5', '#FC8D62', '#8DA0CB', '#E78AC3', '#A6D854'], generateColors = function(){ var colors = {}, key; for (key in colorsMap.regions) { colors[key] = palette[Math.floor(Math.random()*palette.length)]; } return colors; }, colorsMap; function initRandomColors() { colorsMap = new jvm.WorldMap({ map: 'es_merc_en', container: $('#random-colors-map'), series: { regions: [{ attribute: 'fill' }] } }); colorsMap.series.regions[0].setValues(generateColors()); $('#update-colors-button').click(function(e){ e.preventDefault(); colorsMap.series.regions[0].setValues(generateColors()); }); } // mall map function initMallMap() { $('#mall-map').vectorMap({ map: 'mall', backgroundColor: 'transparent', markers: [{ coords: [60, 110], name: 'Escalator 1', style: {fill: 'yellow'} },{ coords: [260, 95], name: 'Escalator 2', style: {fill: 'yellow'} },{ coords: [434, 95], name: 'Escalator 3', style: {fill: 'yellow'} },{ coords: [634, 110], name: 'Escalator 4', style: {fill: 'yellow'} }], series: { regions: [{ values: { F102: 'SPORTS & OUTDOOR', F103: 'HOME DECOR', F105: 'FASHION', F106: 'OTHER', F108: 'BEAUTY & SPA', F109: 'FASHION', F110: 'BEAUTY & SPA', F111: 'URBAN FAVORITES', F114: 'SERVICES', F166: 'DINING', F167: 'FASHION', F169: 'DINING', F170: 'ENTERTAINMENT', F172: 'DINING', F174: 'DINING', F115: 'KIDS STUFF', F117: 'LIFESTYLE', F118: 'URBAN FAVORITES', F119: 'FASHION', F120: 'FASHION', F122: 'KIDS STUFF', F124: 'KIDS STUFF', F125: 'KIDS STUFF', F126: 'KIDS STUFF', F128: 'KIDS STUFF', F129: 'LIFESTYLE', F130: 'HOME DECOR', F132: 'DINING', F133: 'SPORTS & OUTDOOR', F134: 'KIDS STUFF', F135: 'LIFESTYLE', F136: 'LIFESTYLE', F139: 'KIDS STUFF', F153: 'DINING', F155: 'FASHION', F156: 'URBAN FAVORITES', F157: 'URBAN FAVORITES', F158: 'LINGERIE & UNDERWEAR', F159: 'FASHION', F160: 'FASHION', F162: 'FASHION', F164: 'FASHION', F165: 'FASHION', FR01: 'REST ROOMS', FR02: 'REST ROOMS', FR03: 'REST ROOMS', FR04: 'REST ROOMS', FFC: 'DINING' }, scale: { "FASHION": "#2761ad", "LINGERIE & UNDERWEAR": "#d58aa3", "BEAUTY & SPA": "#ee549f", "URBAN FAVORITES": "#15bbba", "SPORTS & OUTDOOR": "#8864ab", "KIDS STUFF": "#ef4e36", "ENTERTAINMENT": "#e47325", "HOME DECOR": "#a2614f", "LIFESTYLE": "#8a8934", "DINING": "#73bb43", "REST ROOMS": "#6c260f", "SERVICES": "#504d7c", "OTHER": "#c7b789" } }] }, onRegionLabelShow: function(e, el, code){ if (el.html() === '') { e.preventDefault(); } } }); } // reverse projection map var mapProjection, markerIndex = 0, markersCoords = {}; function initProjectionMap() { mapProjection = new jvm.WorldMap({ map: 'us_lcc_en', markerStyle: { initial: { fill: 'red' } }, container: $('#projection-map'), onMarkerLabelShow: function(e, label, code){ mapProjection.label.text(markersCoords[code].lat.toFixed(2)+', '+markersCoords[code].lng.toFixed(2)); }, onMarkerClick: function(e, code){ mapProjection.removeMarkers([code]); mapProjection.label.hide(); } }); mapProjection.container.click(function(e){ var latLng = mapProjection.pointToLatLng(e.offsetX, e.offsetY), targetCls = $(e.target).attr('class'); if (latLng && (!targetCls || (targetCls && $(e.target).attr('class').indexOf('jvectormap-marker') === -1))) { markersCoords[markerIndex] = latLng; mapProjection.addMarker(markerIndex, {latLng: [latLng.lat, latLng.lng]}); markerIndex += 1; } }); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/modals.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * modals.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { $('#modals-bootbox-alert').click(function() { bootbox.alert("Hello World!", function(result) { $.gritter.add({ title: 'Callback!', text: "I'm just a BootBox Alert callback!" }); }); }); $('#modals-bootbox-confirm').click(function() { bootbox.confirm("Are you sure?", function(result) { $.gritter.add({ title: 'Callback!', text: "BootBox Confirm Callback with result: "+ result }); }); }); $('#modals-bootbox-prompt').click(function() { bootbox.prompt("What is your name?", function(result) { if (result === null) { $.gritter.add({ title: 'Callback!', text: "BootBox Prompt Dismissed!" }); } else { $.gritter.add({ title: 'Hi ' + result, text: "BootBox Prompt Callback with result: "+ result }); } }); }); $('#modals-bootbox-custom').click(function() { bootbox.dialog("I am a custom dialog", [{ "label" : "Success!", "class" : "btn-success", "callback": function() { $.gritter.add({ title: 'Callback!', text: "Great success" }); } }, { "label" : "Danger!", "class" : "btn-danger", "callback": function() { $.gritter.add({ title: 'Callback!', text: "Uh oh, look out!" }); } }, { "label" : "Click ME!", "class" : "btn-primary", "callback": function() { $.gritter.add({ title: 'Callback!', text: "Primary button!" }); } }, { "label" : "Just a button..." }]); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/notifications.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * notifications.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { $('[data-toggle="notyfy"]').click(function () { var self = $(this); if(self.data('layout') == 'inline') { $(self.data('custom')).notyfy( { text: text[self.data('type')], type: self.data('type'), dismissQueue: true, buttons: (self.data('type') != 'confirm') ? false : [{ addClass: 'btn btn-success btn-small glyphicons btn-icon ok_2', text: ' Ok', onClick: function ($notyfy) { $notyfy.close(); $(self.data('custom')).notyfy({ force: true, text: 'You clicked "Ok" button.', type: 'success' }); } }, { addClass: 'btn btn-danger btn-small glyphicons btn-icon remove_2', text: 'Cancel', onClick: function ($notyfy) { $notyfy.close(); $(self.data('custom')).notyfy({ force: true, text: 'You clicked "Cancel" button', type: 'error' }); } }] }); return false; } notyfy({ text: notification[self.data('type')], type: self.data('type'), dismissQueue: true, layout: self.data('layout'), buttons: (self.data('type') != 'confirm') ? false : [{ addClass: 'btn btn-success btn-small btn-icon glyphicons ok_2', text: ' Ok', onClick: function ($notyfy) { $notyfy.close(); notyfy({ force: true, text: 'You clicked "Ok" button', type: 'success', layout: self.data('layout') }); } }, { addClass: 'btn btn-danger btn-small btn-icon glyphicons remove_2', text: ' Cancel', onClick: function ($notyfy) { $notyfy.close(); notyfy({ force: true, text: 'You clicked "Cancel" button', type: 'error', layout: self.data('layout') }); } }] }); return false; }); /* Gritter Notifications */ /* Global setting override $.extend($.gritter.options, { class_name: 'gritter-light', // for light notifications (can be added directly to $.gritter.add too) position: 'bottom-left', // possibilities: bottom-left, bottom-right, top-left, top-right fade_in_speed: 100, // how fast notifications fade in (string or int) fade_out_speed: 100, // how fast the notices fade out time: 3000 // hang on the screen for... }); */ $('.gritter-add-sticky').click(function() { var unique_id = $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a sticky notice!', // (string | mandatory) the text inside the notification text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'https://si0.twimg.com/profile_images/2873657673/f56ad0e8a62b588ad92b19969084b2ab_bigger.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: true, // (int | optional) the time you want it to be alive for before fading out time: '', // (string | optional) the class name you want to apply to that specific message class_name: 'my-sticky-class' }); // You can have it return a unique id, this can be used to manually remove it later using /* setTimeout(function(){ $.gritter.remove(unique_id, { fade: true, speed: 'slow' }); }, 6000) */ return false; }); $('.gritter-add-regular').click(function() { $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a regular notice!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'https://si0.twimg.com/profile_images/2873657673/f56ad0e8a62b588ad92b19969084b2ab_bigger.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: false, // (int | optional) the time you want it to be alive for before fading out time: '' }); return false; }); $('.gritter-add-primary').click(function() { $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a primary notice!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'https://si0.twimg.com/profile_images/2873657673/f56ad0e8a62b588ad92b19969084b2ab_bigger.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: false, // (int | optional) the time you want it to be alive for before fading out time: '', // (string | optional) the class name you want to apply to that specific message class_name: 'gritter-primary' }); return false; }); $('.gritter-add-max').click(function() { $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a notice with a max of 3 on screen at one time!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', // (string | optional) the image to display on the left image: 'https://si0.twimg.com/profile_images/2873657673/f56ad0e8a62b588ad92b19969084b2ab_bigger.png', // (bool | optional) if you want it to fade out on its own or just sit there sticky: false, // (function) before the gritter notice is opened before_open: function(){ if($('.gritter-item-wrapper').length == 3) { // Returning false prevents a new gritter from opening return false; } } }); return false; }); $('.gritter-add-without-image').click(function() { $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a notice without an image!', // (string | mandatory) the text inside the notification text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.' }); return false; }); $('.gritter-add-white').click(function() { $.gritter.add({ // (string | mandatory) the heading of the notification title: 'This is a light notification', // (string | mandatory) the text inside the notification text: 'Just add a "gritter-light" class_name to your $.gritter.add or globally to $.gritter.options.class_name', class_name: 'gritter-light' }); return false; }); }); var notification = []; notification['alert'] = 'Best check yo self, you\'re not looking too good.'; notification['primary'] = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."; notification['error'] = 'Change a few things up and try submitting again. This Error message.'; notification['success'] = 'You successfully read this important alert message.'; notification['information'] = 'This alert needs your attention, but it\'s not super important.'; notification['warning'] = 'Warning! Best check yo self, you\'re not looking too good.'; notification['confirm'] = 'Do you want to continue?'; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/sliders.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * sliders.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { /* jQRangeSliders */ // regular Range Slider $("#rangeSlider").rangeSlider(); // edit Range Slider $("#rangeSliderEdit").editRangeSlider(); // date Range Slider $("#rangeSliderDate").dateRangeSlider(); // Range Slider without Arrows $("#rangeSliderWArrows").rangeSlider({ arrows: false }); // Range Slider Formatter $("#rangeSliderFormatter").rangeSlider({ formatter:function(val){ var value = Math.round(val * 5) / 5, decimal = value - Math.round(val); return "$" + (decimal == 0 ? value.toString() + ".0" : value.toString()); } }); // Range Slider Ruler $("#rangeSliderRuler").rangeSlider({ scales: [ // Primary scale { first: function(val){ return val; }, next: function(val){ return val + 10; }, stop: function(val){ return false; }, label: function(val){ return val; }, format: function(tickContainer, tickStart, tickEnd){ tickContainer.addClass("myCustomClass"); } }, // Secondary scale { first: function(val){ return val; }, next: function(val){ if (val % 10 === 9){ return val + 2; } return val + 1; }, stop: function(val){ return false; }, label: function(){ return null; } }] }); // Date Range Slider Ruler var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"]; $("#rangeSliderRulerDate").dateRangeSlider( { bounds: {min: new Date(2012, 0, 1), max: new Date(2012, 11, 31, 12, 59, 59)}, defaultValues: {min: new Date(2012, 1, 10), max: new Date(2012, 4, 22)}, scales: [{ first: function(value){ return value; }, end: function(value) {return value; }, next: function(value){ var next = new Date(value); return new Date(next.setMonth(value.getMonth() + 1)); }, label: function(value){ return months[value.getMonth()]; }, format: function(tickContainer, tickStart, tickEnd){ tickContainer.addClass("myCustomClass"); } }] }); // Range Slider Step $("#rangeSliderStep").rangeSlider({step: 10}); // Range Slider Wheel Zoom $("#rangeSliderWheelZoom").rangeSlider({wheelMode: "zoom"}); // Range Slider Wheel Scroll $("#rangeSliderWheelScroll").rangeSlider({wheelMode: "scroll", wheelSpeed: 30}); /* * JQueryUI Slider: Default slider */ if ($('.slider-single').size() > 0) { $( ".slider-single" ).slider({ create: JQSliderCreate, value: 10, animate: true, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); } /* * JQueryUI Slider: Multiple Vertical Sliders */ $( ".sliders-vertical > span" ).each(function() { var value = parseInt( $( this ).text(), 10 ); $( this ).empty().slider({ create: JQSliderCreate, value: value, range: "min", animate: true, orientation: "vertical", start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); }); /* * JQueryUI Slider: Range Slider */ if ($('.range-slider').size() > 0) { $( ".range-slider .slider" ).slider({ create: JQSliderCreate, range: true, min: 0, max: 500, values: [ 75, 300 ], slide: function( event, ui ) { $( ".range-slider .amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] ); }, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); $( ".range-slider .amount" ).val( "$" + $( ".range-slider .slider" ).slider( "values", 0 ) + " - $" + $( ".range-slider .slider" ).slider( "values", 1 ) ); } /* * JQueryUI Slider: Snap to Increments */ if ($('.increments-slider').size() > 0) { $( ".increments-slider .slider" ).slider({ create: JQSliderCreate, value:100, min: 0, max: 500, step: 50, slide: function( event, ui ) { $( ".increments-slider .amount" ).val( "$" + ui.value ); }, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); $( ".increments-slider .amount" ).val( "$" + $( ".increments-slider .slider" ).slider( "value" ) ); } /* * JQueryUI Slider: Vertical Range Slider */ if ($('.vertical-range-slider').size() > 0) { $( ".vertical-range-slider .slider" ).slider({ create: JQSliderCreate, orientation: "vertical", range: true, min: 0, max: 500, values: [ 100, 400 ], slide: function( event, ui ) { $( ".vertical-range-slider .amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] ); }, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); $( ".vertical-range-slider .amount" ).val( "$" + $( ".vertical-range-slider .slider" ).slider( "values", 0 ) + " - $" + $( ".vertical-range-slider .slider" ).slider( "values", 1 ) ); } /* * JQueryUI Slider: Range fixed minimum */ if ($('.slider-range-min').size() > 0) { $( ".slider-range-min .slider" ).slider({ create: JQSliderCreate, range: "min", value: 150, min: 1, max: 700, slide: function( event, ui ) { $( ".slider-range-min .amount" ).val( "$" + ui.value ); }, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); $( ".slider-range-min .amount" ).val( "$" + $( ".slider-range-min .slider" ).slider( "value" ) ); } /* * JQueryUI Slider: Range fixed maximum */ if ($('.slider-range-max').size() > 0) { $( ".slider-range-max .slider" ).slider({ create: JQSliderCreate, range: "max", min: 1, max: 700, value: 150, slide: function( event, ui ) { $( ".slider-range-max .amount" ).val( "$" + ui.value ); }, start: function() { if (typeof mainYScroller != 'undefined') mainYScroller.disable(); }, stop: function() { if (typeof mainYScroller != 'undefined') mainYScroller.enable(); } }); $( ".slider-range-max .amount" ).val( "$" + $( ".slider-range-max .slider" ).slider( "value" ) ); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/tables.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * tables.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { /* DataTables */ if ($('.dynamicTable').size() > 0) { $('.dynamicTable').each(function() { // DataTables with TableTools if ($(this).is('.tableTools')) { $(this).dataTable({ "sPaginationType": "bootstrap", "sDom": "<'row-fluid'<'span5'T><'span3'l><'span4'f>r>t<'row-fluid'<'span6'i><'span6'p>>", "oLanguage": { "sLengthMenu": "_MENU_ per page" }, "oTableTools": { "sSwfPath": commonPath + "theme/scripts/plugins/tables/DataTables/extras/TableTools/media/swf/copy_csv_xls_pdf.swf" } }); } // colVis extras initialization else if ($(this).is('.colVis')) { $(this).dataTable({ "sPaginationType": "bootstrap", "sDom": "<'row-fluid'<'span3'f><'span3'l><'span6'C>r>t<'row-fluid'<'span6'i><'span6'p>>", "oLanguage": { "sLengthMenu": "_MENU_ per page" } }); } // default initialization else { $(this).dataTable({ "sPaginationType": "bootstrap", "sDom": "<'row-fluid'<'span5'T><'span3'l><'span4'f>r>t<'row-fluid'<'span6'i><'span6'p>>", "oLanguage": { "sLengthMenu": "_MENU_ per page" } }); } }); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/tables_responsive.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * tables_responsive.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { /* FooTable */ if ($('.footable').length) $('.footable').footable(); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/themer.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * themer.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ function themerUpdateColors(primary) { updatePrimaryColor(primary, true, true); } //Converts an RGB object to a hex string function rgb2hex(rgb) { var hex = [ rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16) ]; $.each(hex, function(nr, val) { if (val.length === 1) hex[nr] = '0' + val; }); return '#' + hex.join(''); } // converts a string to RGB object function rgbString2obj(string) { var parts = string.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); var rgbObj = { r: Number(parts[1]), g: Number(parts[2]), b: Number(parts[3]) }; return rgbObj; } function updatePrimaryColor(hex, attach, charts) { themerPrimaryColor = hex; $('#themer-primary-cp').val(themerPrimaryColor); $.minicolors.refresh(); if (attach === true) attachStylesheet(); if (charts === true) updateCharts(); if (themerPrimaryColor != themerThemes[themerSelectedTheme].primaryColor) themerCustom[themerSelectedTheme].primaryColor = themerPrimaryColor; else themerCustom[themerSelectedTheme].primaryColor = null; $.cookie('themerCustom', JSON.stringify(themerCustom)); toggleGetCode(); } function toggleGetCode() { var tcs = themerCustom[themerSelectedTheme]; if (themerSelectedTheme != 0 || (themerSelectedTheme == 0 && tcs.primaryColor != null)) { if ($('#themer-getcode').is(':hidden')) $('#themer-getcode').show(); } else { if ($('#themer-getcode').is(':visible')) $('#themer-getcode').hide(); } } var themerAdvanced = $.cookie('themerAdvanced') != null ? $.cookie('themerAdvanced') == true : false; function themerAdvancedToggle() { var cp = [$('#themer-primary-cp'), $('#themer-header-cp'), $('#themer-menu-cp')]; if ($('#themer-advanced-toggle').is(':checked')) { $('#themer').addClass('themer-advanced'); $.each(cp, function(k,v){ v.attr('data-textfield', true).removeClass('minicolors-hidden'); }); } else { $('#themer').removeClass('themer-advanced'); $.each(cp, function(k,v){ v.attr('data-textfield', false).addClass('minicolors-hidden'); }); } } function generateCSS(basePath) { if(!basePath) basePath = ""; var css = "@primaryColor: " + themerPrimaryColor + ";\n" + "#gradient {\n" + ".vertical(@startColor: #555, @endColor: #333) {\n" + " background-color: mix(@startColor, @endColor, 60%);\n" + " background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+\n" + " background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+\n" + " background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n" + " background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10\n" + " background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10\n" + " background-repeat: repeat-x;\n" + " filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@startColor),argb(@endColor))); // IE9 and down\n" + "}\n" + "}\n\n" + primaryBgColorTargets.join(", \n") + "\n" + "{\n" + " background-color: @primaryColor;\n"+ "}\n\n" + primaryGradientTargets.join(", \n") + "\n" + "{\n" + " #gradient > .vertical(lighten(@primaryColor, 15%), @primaryColor);\n"+ "}\n\n" + primaryTextColorTargets.join(", \n") + "\n" + "{\n" + " color: @primaryColor;\n"+ "}\n\n" + primaryBorderColorTargets.join(", \n") + "\n" + "{\n" + " border-color: @primaryColor;\n"+ "}\n\n"; css += ".table-primary tbody td\n" + "{\n" + " background-color: lighten(@primaryColor, 50%);\n" + "}\n\n" + ".table-primary tbody tr.selected td, .table-primary tbody tr.selectable:hover td\n" + "{\n" + " background-color: lighten(@primaryColor, 40%);\n" + "}\n\n" + ".table-primary.table-bordered tbody td, .table-primary, .pagination ul > .disabled > a, .pagination ul > .disabled > span\n" + "{\n" + " border-color: lighten(@primaryColor, 50%);\n" + "}\n\n" + // header special "@headerBorder0: darken(@primaryColor, 20%);\n" + "@headerBorder1: darken(@primaryColor, 15%);\n" + "@headerBorder2: lighten(@primaryColor, 20%);\n" + ".navbar.main {\n" + " border-bottom-color: @headerBorder1;\n" + "}\n\n" + ".navbar.main .topnav {\n" + " border-left-color: @headerBorder1;\n" + " border-right-color: @headerBorder2;\n" + "}\n\n" + ".navbar.main .topnav > li:first-child {\n" + " border-left-color: @headerBorder2;\n" + "}\n\n" + ".navbar.main .topnav > li.glyphs, .navbar.main .topnav > li.search {\n" + " border-left-color: @headerBorder1;\n" + " border-right-color: @headerBorder2;\n" + " box-shadow: -1px 0 0 0 @headerBorder2, 1px 0 0 0 @headerBorder1;\n" + " -moz-box-shadow: -1px 0 0 0 @headerBorder2, 1px 0 0 0 @headerBorder1;\n" + " -webkit-box-shadow: -1px 0 0 0 @headerBorder2, 1px 0 0 0 @headerBorder1;\n" + "}\n\n" + // rtl "html.rtl .navbar.main .topnav.pull-right > li:last-child {\n" + " border-left-color: @headerBorder1;\n" + "}\n\n" + "html.rtl .navbar.main .topnav {\n" + " border-left-color: @headerBorder2;\n" + " border-right-color: @headerBorder1;\n" + "}\n\n" + "html.rtl .navbar.main .topnav > li.glyphs {\n" + " border-left-color: @headerBorder2;\n" + " border-right-color: @headerBorder1;\n" + " box-shadow: -1px 0 0 0 @headerBorder1, 1px 0 0 0 @headerBorder2;\n" + " -moz-box-shadow: -1px 0 0 0 @headerBorder1, 1px 0 0 0 @headerBorder2;\n" + " -webkit-box-shadow: -1px 0 0 0 @headerBorder1, 1px 0 0 0 @headerBorder2;\n" + "}\n\n" + ".navbar.main .topnav > li:last-child.glyphs, .navbar.main .topnav > li:last-child.search {\n" + " box-shadow: -1px 0 0 0 @headerBorder2;\n" + " -moz-box-shadow: -1px 0 0 0 @headerBorder2;\n" + " -webkit-box-shadow: -1px 0 0 0 @headerBorder2;\n" + "}\n\n" + ".navbar.main .topnav > li:last-child {\n" + " border-right-color: @headerBorder1;\n" + "}\n\n" + ".navbar.main .topnav > li.active > a, .navbar.main .topnav > li:hover > a, .navbar.main .topnav > li.open > a,\n" + ".navbar.main .topnav > li.glyphs ul {\n" + " background: @headerBorder1;\n" + " border-color: @headerBorder0;\n" + "}\n\n" + ".navbar.main .topnav > li.glyphs ul li.active, .navbar.main .topnav > li.glyphs ul li:hover {\n" + " &:last-child { border-color: @headerBorder0; }\n" + "}\n\n" + ".navbar.main .topnav > li.glyphs ul li.active, .navbar.main .topnav > li.glyphs ul li:hover, \n" + ".navbar.main .topnav > li.search form {\n" + " background: @headerBorder2;\n" + " border-color: @headerBorder0;\n" + "}\n\n" + ".navbar.main .topnav > li.glyphs ul li .glyphicons,\n" + ".navbar.main .topnav > li.glyphs ul li .glyphicons i:before {\n" + " color: @headerBorder2 !important;\n" + "}\n\n" + ".navbar.main .topnav > li.glyphs ul li.active .glyphicons,\n" + ".navbar.main .topnav > li.glyphs ul li:hover .glyphicons,\n" + ".navbar.main .topnav > li.glyphs ul li .glyphicons i:before {\n" + " color: #fff !important;\n" + "}\n\n" + "html.front .navbar.main .secondary {\n" + " background: @headerBorder0;\n" + " border-color: @headerBorder1;\n" + "}\n\n" + ".navbar.main .topnav > li.search form button i:before, .navbar.main .topnav > li.search form input {\n" + " color: @headerBorder1;\n" + "}\n\n" + ".navbar.main .topnav > li.search form input {\n" + " &::-webkit-input-placeholder { color: @headerBorder1; }\n" + " &:-moz-placeholder { color: @headerBorder1; }\n" + " &::-moz-placeholder { color: @headerBorder1; }\n" + " &:-ms-input-placeholder { color: @headerBorder1; }\n" + "}\n\n" + // border left color ".bwizard-steps li.active:after, .sliderContainer .ui-rangeSlider-rightArrow .ui-rangeSlider-arrow-inner\n" + "{\n" + " border-left-color: @primaryColor;\n" + "}\n\n" + // border right color ".sliderContainer .ui-rangeSlider-leftArrow .ui-rangeSlider-arrow-inner\n" + "{\n" + " border-right-color: @primaryColor;\n" + "}\n\n" + // border top color "#tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_right:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_left:after, #tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_top:after\n" + "{\n" + " border-top-color: @primaryColor;\n" + "}\n\n" + // border bottom color "#tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active.tlypageguide_bottom:after\n" + "{\n" + " border-bottom-color: @primaryColor;\n" + "}\n\n" + // active primary button ".btn-primary:active, .btn-primary.active\n" + "{\n" + " background-color: darken(@primaryColor, 20%);\n" + "}\n\n" + // hover/focus primary button ".btn-primary:hover, .btn-primary:focus\n" + "{\n" + " background-color: darken(@primaryColor, 5%);\n" + "}\n\n" + // guide tour ".tlypageguide_shadow:after\n" + "{\n" + " background-color: fade(@primaryColor, 20%);\n" + "}\n\n" + ".widget .widget-body.list.list-2 ul li\n" + "{\n" + " &.active { border-color: lighten(@primaryColor, 20%); }\n" + " a { color: lighten(@primaryColor, 20%); i:before { background: lighten(@primaryColor, 50%); color: lighten(@primaryColor, 10%); border-color: lighten(@primaryColor, 20%); } }\n" + "}"; return css; } function attachStylesheet(basePath, reset) { /*if(!$("#themer-stylesheet").length) $('body').append('
        '); $("#themer-stylesheet").html($(''));*/ if (themerSelectedTheme == 0) { $('#themer-stylesheet').empty(); less.refreshStyles(); if (reset === true) return false; } if(!$("#themer-stylesheet").length) $('head').append(''); var code = generateCSS(basePath); latestCode.less = code; $('#themer-stylesheet').attr('type', 'text/x-less').text(code); less.refreshStyles(); } function updateCharts() { if (typeof primaryColor != 'undefined') primaryColor = themerPrimaryColor; if (typeof genSparklines != 'undefined') genSparklines(); if (typeof charts == 'undefined') return false; // apply styling charts.utility.chartColors.shift(); charts.utility.chartColors.unshift(themerPrimaryColor); if (typeof charts.website_traffic_graph != 'undefined' && charts.website_traffic_graph.plot != null) charts.website_traffic_graph.init(); if (typeof charts.website_traffic_overview != 'undefined' && charts.website_traffic_overview.plot != null) charts.website_traffic_overview.init(); if (typeof charts.traffic_sources_pie != 'undefined' && charts.traffic_sources_pie.plot != null) charts.traffic_sources_pie.init(); if (typeof charts.chart_simple != 'undefined' && charts.chart_simple.plot != null) charts.chart_simple.init(); if (typeof charts.chart_lines_fill_nopoints != 'undefined' && charts.chart_lines_fill_nopoints.plot != null) charts.chart_lines_fill_nopoints.init(); if (typeof charts.chart_ordered_bars != 'undefined' && charts.chart_ordered_bars.plot != null) charts.chart_ordered_bars.init(); if (typeof charts.chart_donut != 'undefined' && charts.chart_donut.plot != null) charts.chart_donut.init(); if (typeof charts.chart_stacked_bars != 'undefined' && charts.chart_stacked_bars.plot != null) charts.chart_stacked_bars.init(); if (typeof charts.chart_pie != 'undefined' && charts.chart_pie.plot != null) charts.chart_pie.init(); if (typeof charts.chart_horizontal_bars != 'undefined' && charts.chart_horizontal_bars.plot != null) charts.chart_horizontal_bars.init(); if (typeof charts.chart_live != 'undefined' && charts.chart_live.plot != null) charts.chart_live.init(); } function updateTheme(themeSelect) { if ($('#themer-theme').val() != themeSelect) $('#themer-theme').val(themeSelect); themerSelectedTheme = themeSelect; // index $.cookie('themerSelectedTheme', themerSelectedTheme); var uPrimaryColor = themerCustom[themeSelect].primaryColor != null ? themerCustom[themeSelect].primaryColor : themerThemes[themeSelect].primaryColor; updatePrimaryColor(uPrimaryColor, false, true); // gmaps colored support if (typeof map_options != 'undefined') map_options.styles[0].stylers[1].hue = themerPrimaryColor; if ($('#contact_gmap').size() > 0 && typeof google != 'undefined') { map_options.zoom = 13; initializeMap('contact_gmap', map_options); } if (themeSelect == 0 && themerCustom[themeSelect].primaryColor == null) attachStylesheet('', true); // reset else attachStylesheet(); } function themerGetCode(less) { var tlc; if (less === true) tlc = latestCode.less; else tlc = latestCode.css(); //bootbox.alert($('').val(tlc)); bootbox.alert($('
        ').html(tlc));
        }
        
        var primaryGradientTargets = 
        [
         	"#menu .slim-scroll > ul.menu-0 > li.active > a",
         	"#menu .slim-scroll > ul.menu-0 > li.active:not(.hasSubmenu) > a:hover",
         	"#menu > ul.menu-0 > li.active:not(.hasSubmenu) > a:hover",
         	".widget-stats.primary",
         	".btn-primary",
         	".tabsbar:not(.tabsbar-2) ul li.active a"
        ];
        
        var primaryBgColorTargets = 
        [
        	".btn-primary",
        	"#flotTip",
        	".btn-group.open .btn-primary.dropdown-toggle, .btn-primary.disabled, .btn-primary[disabled], .btn-primary:hover",
        	".label-primary",
        	".table-primary thead th",
        	".pagination ul > .active > a, .pagination ul > .active > span",
        	".gallery ul li .thumb",
        	".widget-activity ul.filters li.glyphicons.active i",
        	".ui-slider-wrap .slider-primary .ui-slider-range",
        	".accordion-heading .accordion-toggle",
        	".ui-widget-header",
        	".ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active",
        	".fc-event-skin",
        	"#external-events li",
        	".notyfy_wrapper.notyfy_primary",
        	".progress.progress-primary .bar",
        	".alert.alert-primary",
        	".pagination ul > li > a:hover, .pagination ul > li.primary > a",
        	".gritter-item-wrapper.gritter-primary .gritter-item",
        	"#content-notification .notyfy_wrapper.notyfy_primary",
        	".ribbon-wrapper .ribbon.primary",
        	".label.label-primary",
        	".widget-stats.primary, .widget-stats.primary:hover",
        	".tabsbar:not(.tabsbar-2) ul li.active a",
        	".widget.widget-wizard-pills .widget-head ul li.primary a",
        	".bwizard-steps li.active",
        	".sliderContainer .ui-rangeSlider-bar",
        	"#tlyPageGuideWrapper #tlyPageGuide li.tlypageguide-active",
        	"#tlyPageGuideWrapper #tlyPageGuideMessages .tlypageguide_close",
        	"#tlyPageGuideWrapper #tlyPageGuideMessages span",
        	".tabsbar.tabsbar-2.active-fill ul li.active a",
        	".shop-client-products.list ul li a .glyphicons i",
        	".social-large:not(.social-large-2) a.active, .social-large:not(.social-large-2) a:hover",
        	"#landing_1 .banner-1 .carousel-indicators li.active",
        	".navbar.main",
        	".navbar.main .btn-navbar, .navbar.main .btn-navbar:hover",
        	".nav-timeline > li.active > a, .nav-timeline > li > a:hover, .nav-timeline > li.active > a:hover",
        	".layout-timeline ul.timeline > li.active .type:before, .layout-timeline ul.timeline > li.active .type:after",
        	".layout-timeline ul.timeline > li.active:before",
        	".carousel.carousel-1 .carousel-indicators li.active",
        	".widget-body-gray .ui-datepicker .ui-datepicker-calendar tbody td a.ui-state-active",
        	".widget.widget-body-primary > .widget-body"
        ];
        var primaryTextColorTargets = 
        [
         	"a, p a",
        	".widget .widget-body.list ul li .count",
        	".widget-stats .txt strong",
        	".glyphicons.single i:before",
        	".glyphicons.single",
        	".table-primary tbody td.important",
        	".widget.widget-3 .widget-body.large.cancellations span span:first-child",
        	".widget .widget-footer a:hover, .widget .widget-footer a:hover i:before",
        	".widget.widget-3 .widget-footer a:hover, .widget.widget-3 .widget-footer a:hover i:before",
        	"blockquote small",
        	".tabsbar.tabsbar-2 ul li.active a",
        	".tabsbar.tabsbar-2 ul li.active a i:before",
        	".glyphicons.primary i:before, .glyphicons.standard:not(.disabled):hover i:before",
        	".menubar.links.primary ul li a",
        	".text-primary",
        	"#docs_icons .glyphicons i:before",
        	".widget.widget-tabs-double-2 .widget-head ul li.active a i:before, .widget.widget-tabs-double-2 .widget-head ul li.active a",
        	".shop-client-products.product-details .form-horizontal .price",
        	".widget-activity ul.list li:hover .activity-icon i:before, .widget-activity ul.list li.highlight .activity-icon i:before",
        	"#menu ul.menu-1 > li.hasSubmenu.active ul li .glyphicons:hover i:before",
        	"#landing_1 .banner .banner-wrapper.banner-1 p a",
        	"#landing_1 .banner .banner-wrapper.banner-1 h3",
        	"#landing_2 .banner .banner-wrapper.banner-1 p a, #landing_2 .banner .banner-wrapper.banner-1 .buy a",
        	"#landing_2 .banner .banner-wrapper.banner-1 h3",
        	"#landing_1 .banner-1 .carousel-caption a",
        	"div.glyphicons.glyphicon-primary i:before",
        	".layout-timeline ul.timeline > li.active .type",
        	".layout-timeline ul.timeline > li.active .type i:before",
        	".social-large.social-large-2 a.active i:before, .social-large.social-large-2 a:hover i:before",
        	".social-large.social-large-2 a.active, .social-large.social-large-2 a:hover",
        	"html.front #footer a:not(.btn)"
        ];
        var primaryBorderColorTargets = 
        [
        	".btn-primary",
        	".ui-slider-wrap .slider-primary .ui-slider-handle",
        	"#flotTip",
        	".widget.widget-2.primary .widget-head",
        	".widget .widget-body.list.list-2 ul li.active a i:before",
        	".table-primary thead th",
        	".pagination ul > .active > a, .pagination ul > .active > span",
        	".widget.widget-4 .widget-head .heading",
        	".ui-widget-header",
        	".fc-event-skin",
        	".alert.alert-primary",
        	".pagination ul > li > a:hover, .pagination ul > li.primary > a",
        	".widget-stats.primary",
        	"#menu .slim-scroll > ul.menu-0 > li.active > a",
        	".widget-chat .media .media-body",
        	".widget-chat .media .media-body.right",
        	"#menu .slim-scroll > ul.menu-0 > li.active > a, #menu > ul.menu-0 > li.active > a"
        ];
        
        /*
         * Persistent Selected Theme
         */
        var themerSelectedTheme = $.cookie('themerSelectedTheme') != null ? $.cookie('themerSelectedTheme') : 0;
        
        /*
         * Holds the latest CSS/LESS
         */
        var latestCode = {
        	css: function(){ return $('#themer-stylesheet').text(); },
        	less: null
        };
        
        var themerThemes = [
        	{
        		name: "Default",
        		primaryColor: primaryColor,
        		visible: true
        	},
        	{
        		name: "Brown",
        		primaryColor: "#ba5d32",
        		visible: true
        	},
        	{
        		name: "Purple-Gray",
        		primaryColor: "#86618f",
        		visible: true
        	},
        	{
        		name: "Purple-Wine",
        		primaryColor: "#b94b6f",
        		visible: true
        	},
        	{
        		name: "Blue-Gray",
        		primaryColor: "#496cad",
        		visible: true
        	},
        	{
        		name: "Green Army",
        		primaryColor: "#6f8745",
        		visible: true
        	},
        	{
        		name: "Black & White",
        		primaryColor: "#575757",
        		visible: true
        	},
        	{
        		name: "Army",
        		primaryColor: "#7a7a3a",
        		visible: false
        	},
        	{
        		name: "Evil Army",
        		primaryColor: "#567a3a",
        		visible: false
        	},
        	{
        		name: "Forest",
        		primaryColor: "#947131",
        		visible: false
        	},
        	{
        		name: "Cold Blue",
        		primaryColor: "#676d8a",
        		visible: false
        	},
        	{
        		name: "Warm Blue",
        		primaryColor: "#cc5470",
        		visible: false
        	},
        	{
        		name: "Experiment #2",
        		primaryColor: "#438080",
        		visible: false
        	}
        ];
        
        /*
         * Persistent Custom Theme Colors
         */
        var themerCustomDefault = [];
        $.each(themerThemes, function(k,v) { themerCustomDefault[k] = { primaryColor: null }; });
        var themerCustom = $.cookie('themerCustom') != null ? $.parseJSON($.cookie('themerCustom')) : themerCustomDefault;
        
        if (themerThemes.length != themerCustom.length)
        {
        	$.each(themerThemes, function(k,v){ if (typeof themerCustom[k] == 'undefined') themerCustom[k] = v; });
        	$.cookie('themerCustom', JSON.stringify(themerCustom));
        }
        
        $(function()
        {
        	if ($('#themer').length)
        	{
        		var themerOpened = $.cookie('themerOpened') ? $.cookie('themerOpened') : 0;
        		
        		$('#themer')
        			.on('shown', function(){ $.cookie('themerOpened', 1); })
        			.on('hidden', function(){ $.cookie('themerOpened', 0); });
        		
        		$('#themer .close2').on('click', function(){
        			$('#themer').collapse('hide');
        		});
        		
        		if (themerOpened == 1)
        			$('#themer').collapse('show');
        		
        		$("#themer-primary-cp")
        			.attr('data-default', themerPrimaryColor)
        			.on('change', function(){
        				var input = $(this),
        				hex = input.val();
        				if (hex) updatePrimaryColor(hex, true, true);
        			});
        		
        		var themeSelect = $('#themer-theme');
        		$.each(themerThemes, function( i, p ) {
        			if (p.visible === true)
        			{
        				var option = $("").text(p.name).val(i);
        				themeSelect.append(option);
        			}
        		});
        		themeSelect.on('change', function(e) 
        		{
        			e.preventDefault();
        			updateTheme(themeSelect.val());
        		});
        		
        		$('#themer-getcode-less').click(function(e){
        			e.preventDefault();
        			themerGetCode(true);
        		});
        		
        		$('#themer-getcode-css').click(function(e){
        			e.preventDefault();
        			themerGetCode();
        		});
        		
        		$('#themer-custom-reset').click(function()
        		{
        			themerCustom[themerSelectedTheme].primaryColor = null;
        			
        			$.cookie('themerCustom', JSON.stringify(themerCustom));
        			updateTheme(themerSelectedTheme);
        		});
        		
        		$('#themer-advanced-toggle').on('change', function()
        		{
        			$.cookie('themerAdvanced', $(this).is(':checked') ? "1" : "0");
        			themerAdvancedToggle();
        		});
        		
        		if (themerAdvanced)
        			$('#themer-advanced-toggle').prop('checked', true).trigger('change');
        		
        		updateTheme(themerSelectedTheme);
        	}
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/tour_demo.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * tour_demo.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        $(function()
        {
        	if (!$('#tlyPageGuide').length)
        		return false;
        	
        	tl.pg.init({
        		custom_open_button: '#tour-demo-start'
        	});
        	
        	setTimeout(function(){
        		$('#tour-demo-start').click();
        	}, 1000);
        
        });
        
        ================================================
        FILE: src/main/webapp/style/eu/theme/scripts/demo/twitter.js
        ================================================
        /* ==========================================================
         * QuickAdmin v1.3.1
         * twitter.js
         * 
         * http://www.mosaicpro.biz
         * Copyright MosaicPro
         *
         * Built exclusively for sale @Envato Marketplaces
         * ========================================================== */ 
        
        $(function() {		
        
        	JQTWEET = {
        
        			// Set twitter hash/user, number of tweets & id/class to append tweets
        			// You need to clear tweet-date.txt before toggle between hash and user
        			// for multiple hashtags, you can separate the hashtag with OR, eg:
        			// hash: '%23jquery OR %23css'			    
        			//search: '%23heroes2013', //leave this blank if you want to show user's tweet
        			search: '', //leave this blank if you want to show user's tweet
        		    user: 'quenesstestacc', //username
        			numTweets: 18, //number of tweets
        			appendTo: '.jstwitter',
        			useGridalicious: false,
        			template: '
        {IMG}
        {TEXT}\ {AGO}\ by {USER}
        ', // core function of jqtweet // https://dev.twitter.com/docs/using-search loadTweets: function() { var request; // different JSON request {hash|user} if (JQTWEET.search) { request = { q: JQTWEET.search, count: JQTWEET.numTweets, api: 'search_tweets' } } else { request = { q: JQTWEET.user, count: JQTWEET.numTweets, api: 'statuses_userTimeline' } } $.ajax({ url: basePath + 'ajax.php?section=twitter', type: 'POST', dataType: 'json', data: request, success: function(data, textStatus, xhr) { $(JQTWEET.appendTo).empty(); if (data.httpstatus == 200) { if (JQTWEET.search) data = data.statuses; var text, name, img; try { // append tweets into page for (var i = 0; i < JQTWEET.numTweets; i++) { img = ''; url = 'http://twitter.com/' + data[i].user.screen_name + '/status/' + data[i].id_str; try { if (data[i].entities['media']) { img = ''; } } catch (e) { //no media } $(JQTWEET.appendTo).append( JQTWEET.template.replace('{TEXT}', JQTWEET.ify.clean(data[i].text) ) .replace('{USER}', data[i].user.screen_name) .replace('{IMG}', img) .replace('{AGO}', JQTWEET.timeAgo(data[i].created_at) ) .replace('{URL}', url ) ); } $(JQTWEET.appendTo).each(function(index) { var $that = $(this); if (JQTWEET.useGridalicious || ($(this).attr('data-gridalicious') && $(this).attr('data-gridalicious') !== "false")) { $(this).find('.item').wrap('
        '); $(this).gridalicious({ gutter: 13, width: $that.attr('data-gridalicious-width') ? parseInt($that.attr('data-gridalicious-width')) : 200, animate: true, selector: '.widget' }); } if ((!JQTWEET.useGridalicious && !$(this).attr('data-gridalicious')) || $(this).attr('data-gridalicious') == "false") { if ($(this).attr('data-type') == 'slide') { if ($(this).find('.item').size() > 1) { $(this).find('.item').hide(); $(this).find('.item:first').show().addClass('active'); var $that = $(this); setInterval(function() { if ($that.find('.item').length <= 1) return; var active_index = $that.find('.item.active').index(JQTWEET.appendTo + ':eq('+index+') .item'); var next_index = $that.find('.item').eq(active_index+1).index(JQTWEET.appendTo + ':eq('+index+') .item'); if (next_index == -1) active_index = -1; $that.find('.item.active').hide().removeClass('active'); $that.find('.item').eq(active_index+1).show().addClass('active'); }, 3000); } } } if ($(this).attr('data-images') === 'false') $(this).find('.thumb').remove(); }); } catch (e) { //item is less than item count } } else alert('no data returned'); } }); }, /** * relative time calculator FROM TWITTER * @param {string} twitter date string returned from Twitter API * @return {string} relative time like "2 minutes ago" */ timeAgo: function(dateString) { var rightNow = new Date(); var then = new Date(dateString); if ($.browser.msie) { // IE can't parse these crazy Ruby dates then = Date.parse(dateString.replace(/( \+)/, ' UTC$1')); } var diff = rightNow - then; var second = 1000, minute = second * 60, hour = minute * 60, day = hour * 24, week = day * 7; if (isNaN(diff) || diff < 0) { return ""; // return blank string if unknown } if (diff < second * 2) { // within 2 seconds return "right now"; } if (diff < minute) { return Math.floor(diff / second) + " seconds ago"; } if (diff < minute * 2) { return "about 1 minute ago"; } if (diff < hour) { return Math.floor(diff / minute) + " minutes ago"; } if (diff < hour * 2) { return "about 1 hour ago"; } if (diff < day) { return Math.floor(diff / hour) + " hours ago"; } if (diff > day && diff < day * 2) { return "yesterday"; } if (diff < day * 365) { return Math.floor(diff / day) + " days ago"; } else { return "over a year ago"; } }, // timeAgo() /** * The Twitalinkahashifyer! * http://www.dustindiaz.com/basement/ify.html * Eg: * ify.clean('your tweet text'); */ ify: { link: function(tweet) { return tweet.replace(/\b(((https*\:\/\/)|www\.)[^\"\']+?)(([!?,.\)]+)?(\s|$))/g, function(link, m1, m2, m3, m4) { var http = m2.match(/w/) ? 'http://' : ''; return '' + ((m1.length > 25) ? m1.substr(0, 24) + '...' : m1) + '' + m4; }); }, at: function(tweet) { return tweet.replace(/\B[@@]([a-zA-Z0-9_]{1,20})/g, function(m, username) { return '@' + username + ''; }); }, list: function(tweet) { return tweet.replace(/\B[@@]([a-zA-Z0-9_]{1,20}\/\w+)/g, function(m, userlist) { return '@' + userlist + ''; }); }, hash: function(tweet) { return tweet.replace(/(^|\s+)#(\w+)/gi, function(m, before, hash) { return before + '#' + hash + ''; }); }, clean: function(tweet) { return this.hash(this.at(this.list(this.link(tweet)))); } } // ify }; }); $(function () { // start jqtweet! JQTWEET.loadTweets(); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/ui.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * ui.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { /* * JQuery Pagination Examples */ $('.jquery-bootpag-pagination').bootpag({ total: 23, page: 1, maxVisible: 10 }).on('page', function(event, num){ $(".jquery-bootpag-content").html("Page " + num); // or some ajax content loading ... }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/demo/widgets.js ================================================ /* ========================================================== * QuickAdmin v1.3.1 * widgets.js * * http://www.mosaicpro.biz * Copyright MosaicPro * * Built exclusively for sale @Envato Marketplaces * ========================================================== */ $(function() { $('#widget-progress-bar .bar').width("50%"); setInterval(function(){ var w = mt_rand(30, 100); $('#widget-progress-bar .steps-percent').html(w + "%"); $('#widget-progress-bar .bar').width(w + "%"); }, 2000); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/Makefile ================================================ dist: all @echo Done all: @echo Compiling coffee script coffee -c *.coffee watch: @echo Watch coffee script files coffee -w *.coffee .PHONY: dist all watch ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/Readme.md ================================================ easy pie chart ============== Easy pie chart is a jQuery plugin that uses the canvas element to render simple pie charts for single values. These charts are highly customizable, very easy to implement and **scale to the resolution of the display of the client to provide sharp charts even on retina displays**. ![](https://github.com/rendro/easy-pie-chart/raw/master/img/easy-pie-chart.png) Get started ----------- To use the easy pie chart plugin you need to load the current version of jQuery (testet with 1.7.2) and the source (css+js) of the plugin. Just add the following lines to the `head` of your website: The second step is to add a element to your site to represent chart and add the `data-percent` attribute with the percent number the pie chart should have:
        73%
        Finally you have to initialize the plugin with your desired configuration: Configuration parameter ----------------------- You can pass a set of these options to the initialize function to set a custom behaviour and look for the plugin.
        Property (Type) Default Description
        barColor #ef1e25 The color of the curcular bar. You can pass either a css valid color string like rgb, rgba hex or string colors. But you can also pass a function that accepts the current percentage as a value to return a dynamically generated color.
        trackColor #f2f2f2 The color of the track for the bar, false to disable rendering.
        scaleColor #dfe0e0 The color of the scale lines, false to disable rendering.
        lineCap round Defines how the ending of the bar line looks like. Possible values are: butt, round and square.
        lineWidth 3 Width of the bar line in px.
        size 110 Size of the pie chart in px. It will always be a square.
        animate false Time in milliseconds for a eased animation of the bar growing, or false to deactivate.
        onStart $.noop Callback function that is called at the start of any animation (only if animate is not false).
        onStop $.noop Callback function that is called at the end of any animation (only if animate is not false).
        Public plugin methods --------------------- If you want to update the current percentage of the a pie chart, you can call the `update` method. The instance of the plugin is saved in the jQuery-data. Credits ------- Thanks to [Rafal Bromirski](http://www.paranoida.com/) for making [this dribble shot](http://drbl.in/ezuc) which inspired me and [Philip Thrasher](http://philipthrasher.com/) for his [CoffeeScript jQuery boilerplate](https://github.com/pthrasher/coffee-plate) ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/examples/excanvas.js ================================================ // Copyright 2006 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Known Issues: // // * Patterns are not implemented. // * Radial gradient are not implemented. The VML version of these look very // different from the canvas one. // * Clipping paths are not implemented. // * Coordsize. The width and height attribute have higher priority than the // width and height style values which isn't correct. // * Painting mode isn't implemented. // * Canvas width/height should is using content-box by default. IE in // Quirks mode will draw the canvas using border-box. Either change your // doctype to HTML5 // (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) // or use Box Sizing Behavior from WebFX // (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) // * Non uniform scaling does not correctly scale strokes. // * Optimize. There is always room for speed improvements. // Only add this code if we do not already have a canvas implementation if (!document.createElement('canvas').getContext) { (function() { // alias some functions to make (compiled) code shorter var m = Math; var mr = m.round; var ms = m.sin; var mc = m.cos; var abs = m.abs; var sqrt = m.sqrt; // this is used for sub pixel precision var Z = 10; var Z2 = Z / 2; /** * This funtion is assigned to the elements as element.getContext(). * @this {HTMLElement} * @return {CanvasRenderingContext2D_} */ function getContext() { return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this)); } var slice = Array.prototype.slice; /** * Binds a function to an object. The returned function will always use the * passed in {@code obj} as {@code this}. * * Example: * * g = bind(f, obj, a, b) * g(c, d) // will do f.call(obj, a, b, c, d) * * @param {Function} f The function to bind the object to * @param {Object} obj The object that should act as this when the function * is called * @param {*} var_args Rest arguments that will be used as the initial * arguments when the function is called * @return {Function} A new function that has bound this */ function bind(f, obj, var_args) { var a = slice.call(arguments, 2); return function() { return f.apply(obj, a.concat(slice.call(arguments))); }; } var G_vmlCanvasManager_ = { init: function(opt_doc) { if (/MSIE/.test(navigator.userAgent) && !window.opera) { var doc = opt_doc || document; // Create a dummy element so that IE will allow canvas elements to be // recognized. doc.createElement('canvas'); doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); } }, init_: function(doc) { // create xmlns if (!doc.namespaces['g_vml_']) { doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml', '#default#VML'); } if (!doc.namespaces['g_o_']) { doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office', '#default#VML'); } // Setup default CSS. Only add one style sheet per document if (!doc.styleSheets['ex_canvas_']) { var ss = doc.createStyleSheet(); ss.owningElement.id = 'ex_canvas_'; ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + // default size is 300x150 in Gecko and Opera 'text-align:left;width:300px;height:150px}' + 'g_vml_\\:*{behavior:url(#default#VML)}' + 'g_o_\\:*{behavior:url(#default#VML)}'; } // find all canvas elements var els = doc.getElementsByTagName('canvas'); for (var i = 0; i < els.length; i++) { this.initElement(els[i]); } }, /** * Public initializes a canvas element so that it can be used as canvas * element from now on. This is called automatically before the page is * loaded but if you are creating elements using createElement you need to * make sure this is called on the element. * @param {HTMLElement} el The canvas element to initialize. * @return {HTMLElement} the element that was created. */ initElement: function(el) { if (!el.getContext) { el.getContext = getContext; // Remove fallback content. There is no way to hide text nodes so we // just remove all childNodes. We could hide all elements and remove // text nodes but who really cares about the fallback content. el.innerHTML = ''; // do not use inline function because that will leak memory el.attachEvent('onpropertychange', onPropertyChange); el.attachEvent('onresize', onResize); var attrs = el.attributes; if (attrs.width && attrs.width.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setWidth_(attrs.width.nodeValue); el.style.width = attrs.width.nodeValue + 'px'; } else { el.width = el.clientWidth; } if (attrs.height && attrs.height.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setHeight_(attrs.height.nodeValue); el.style.height = attrs.height.nodeValue + 'px'; } else { el.height = el.clientHeight; } //el.getContext().setCoordsize_() } return el; } }; function onPropertyChange(e) { var el = e.srcElement; switch (e.propertyName) { case 'width': el.style.width = el.attributes.width.nodeValue + 'px'; el.getContext().clearRect(); break; case 'height': el.style.height = el.attributes.height.nodeValue + 'px'; el.getContext().clearRect(); break; } } function onResize(e) { var el = e.srcElement; if (el.firstChild) { el.firstChild.style.width = el.clientWidth + 'px'; el.firstChild.style.height = el.clientHeight + 'px'; } } G_vmlCanvasManager_.init(); // precompute "00" to "FF" var dec2hex = []; for (var i = 0; i < 16; i++) { for (var j = 0; j < 16; j++) { dec2hex[i * 16 + j] = i.toString(16) + j.toString(16); } } function createMatrixIdentity() { return [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ]; } function matrixMultiply(m1, m2) { var result = createMatrixIdentity(); for (var x = 0; x < 3; x++) { for (var y = 0; y < 3; y++) { var sum = 0; for (var z = 0; z < 3; z++) { sum += m1[x][z] * m2[z][y]; } result[x][y] = sum; } } return result; } function copyState(o1, o2) { o2.fillStyle = o1.fillStyle; o2.lineCap = o1.lineCap; o2.lineJoin = o1.lineJoin; o2.lineWidth = o1.lineWidth; o2.miterLimit = o1.miterLimit; o2.shadowBlur = o1.shadowBlur; o2.shadowColor = o1.shadowColor; o2.shadowOffsetX = o1.shadowOffsetX; o2.shadowOffsetY = o1.shadowOffsetY; o2.strokeStyle = o1.strokeStyle; o2.globalAlpha = o1.globalAlpha; o2.arcScaleX_ = o1.arcScaleX_; o2.arcScaleY_ = o1.arcScaleY_; o2.lineScale_ = o1.lineScale_; } function processStyle(styleString) { var str, alpha = 1; styleString = String(styleString); if (styleString.substring(0, 3) == 'rgb') { var start = styleString.indexOf('(', 3); var end = styleString.indexOf(')', start + 1); var guts = styleString.substring(start + 1, end).split(','); str = '#'; for (var i = 0; i < 3; i++) { str += dec2hex[Number(guts[i])]; } if (guts.length == 4 && styleString.substr(3, 1) == 'a') { alpha = guts[3]; } } else { str = styleString; } return {color: str, alpha: alpha}; } function processLineCap(lineCap) { switch (lineCap) { case 'butt': return 'flat'; case 'round': return 'round'; case 'square': default: return 'square'; } } /** * This class implements CanvasRenderingContext2D interface as described by * the WHATWG. * @param {HTMLElement} surfaceElement The element that the 2D context should * be associated with */ function CanvasRenderingContext2D_(surfaceElement) { this.m_ = createMatrixIdentity(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; // Canvas context properties this.strokeStyle = '#000'; this.fillStyle = '#000'; this.lineWidth = 1; this.lineJoin = 'miter'; this.lineCap = 'butt'; this.miterLimit = Z * 1; this.globalAlpha = 1; this.canvas = surfaceElement; var el = surfaceElement.ownerDocument.createElement('div'); el.style.width = surfaceElement.clientWidth + 'px'; el.style.height = surfaceElement.clientHeight + 'px'; el.style.overflow = 'hidden'; el.style.position = 'absolute'; surfaceElement.appendChild(el); this.element_ = el; this.arcScaleX_ = 1; this.arcScaleY_ = 1; this.lineScale_ = 1; } var contextPrototype = CanvasRenderingContext2D_.prototype; contextPrototype.clearRect = function() { this.element_.innerHTML = ''; }; contextPrototype.beginPath = function() { // TODO: Branch current matrix so that save/restore has no effect // as per safari docs. this.currentPath_ = []; }; contextPrototype.moveTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.lineTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { var p = this.getCoords_(aX, aY); var cp1 = this.getCoords_(aCP1x, aCP1y); var cp2 = this.getCoords_(aCP2x, aCP2y); bezierCurveTo(this, cp1, cp2, p); }; // Helper function that takes the already fixed cordinates. function bezierCurveTo(self, cp1, cp2, p) { self.currentPath_.push({ type: 'bezierCurveTo', cp1x: cp1.x, cp1y: cp1.y, cp2x: cp2.x, cp2y: cp2.y, x: p.x, y: p.y }); self.currentX_ = p.x; self.currentY_ = p.y; } contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { // the following is lifted almost directly from // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes var cp = this.getCoords_(aCPx, aCPy); var p = this.getCoords_(aX, aY); var cp1 = { x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) }; var cp2 = { x: cp1.x + (p.x - this.currentX_) / 3.0, y: cp1.y + (p.y - this.currentY_) / 3.0 }; bezierCurveTo(this, cp1, cp2, p); }; contextPrototype.arc = function(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { aRadius *= Z; var arcType = aClockwise ? 'at' : 'wa'; var xStart = aX + mc(aStartAngle) * aRadius - Z2; var yStart = aY + ms(aStartAngle) * aRadius - Z2; var xEnd = aX + mc(aEndAngle) * aRadius - Z2; var yEnd = aY + ms(aEndAngle) * aRadius - Z2; // IE won't render arches drawn counter clockwise if xStart == xEnd. if (xStart == xEnd && !aClockwise) { xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something // that can be represented in binary } var p = this.getCoords_(aX, aY); var pStart = this.getCoords_(xStart, yStart); var pEnd = this.getCoords_(xEnd, yEnd); this.currentPath_.push({type: arcType, x: p.x, y: p.y, radius: aRadius, xStart: pStart.x, yStart: pStart.y, xEnd: pEnd.x, yEnd: pEnd.y}); }; contextPrototype.rect = function(aX, aY, aWidth, aHeight) { this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); }; contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.stroke(); this.currentPath_ = oldPath; }; contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.fill(); this.currentPath_ = oldPath; }; contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { var gradient = new CanvasGradient_('gradient'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.x1_ = aX1; gradient.y1_ = aY1; return gradient; }; contextPrototype.createRadialGradient = function(aX0, aY0, aR0, aX1, aY1, aR1) { var gradient = new CanvasGradient_('gradientradial'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.r0_ = aR0; gradient.x1_ = aX1; gradient.y1_ = aY1; gradient.r1_ = aR1; return gradient; }; contextPrototype.drawImage = function(image, var_args) { var dx, dy, dw, dh, sx, sy, sw, sh; // to find the original width we overide the width and height var oldRuntimeWidth = image.runtimeStyle.width; var oldRuntimeHeight = image.runtimeStyle.height; image.runtimeStyle.width = 'auto'; image.runtimeStyle.height = 'auto'; // get the original size var w = image.width; var h = image.height; // and remove overides image.runtimeStyle.width = oldRuntimeWidth; image.runtimeStyle.height = oldRuntimeHeight; if (arguments.length == 3) { dx = arguments[1]; dy = arguments[2]; sx = sy = 0; sw = dw = w; sh = dh = h; } else if (arguments.length == 5) { dx = arguments[1]; dy = arguments[2]; dw = arguments[3]; dh = arguments[4]; sx = sy = 0; sw = w; sh = h; } else if (arguments.length == 9) { sx = arguments[1]; sy = arguments[2]; sw = arguments[3]; sh = arguments[4]; dx = arguments[5]; dy = arguments[6]; dw = arguments[7]; dh = arguments[8]; } else { throw Error('Invalid number of arguments'); } var d = this.getCoords_(dx, dy); var w2 = sw / 2; var h2 = sh / 2; var vmlStr = []; var W = 10; var H = 10; // For some reason that I've now forgotten, using divs didn't work vmlStr.push(' ' , '', ''); this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); }; contextPrototype.stroke = function(aFill) { var lineStr = []; var lineOpen = false; var a = processStyle(aFill ? this.fillStyle : this.strokeStyle); var color = a.color; var opacity = a.alpha * this.globalAlpha; var W = 10; var H = 10; lineStr.push(''); if (!aFill) { var lineWidth = this.lineScale_ * this.lineWidth; // VML cannot correctly render a line if the width is less than 1px. // In that case, we dilute the color to make the line look thinner. if (lineWidth < 1) { opacity *= lineWidth; } lineStr.push( '' ); } else if (typeof this.fillStyle == 'object') { var fillStyle = this.fillStyle; var angle = 0; var focus = {x: 0, y: 0}; // additional offset var shift = 0; // scale factor for offset var expansion = 1; if (fillStyle.type_ == 'gradient') { var x0 = fillStyle.x0_ / this.arcScaleX_; var y0 = fillStyle.y0_ / this.arcScaleY_; var x1 = fillStyle.x1_ / this.arcScaleX_; var y1 = fillStyle.y1_ / this.arcScaleY_; var p0 = this.getCoords_(x0, y0); var p1 = this.getCoords_(x1, y1); var dx = p1.x - p0.x; var dy = p1.y - p0.y; angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number. if (angle < 0) { angle += 360; } // Very small angles produce an unexpected result because they are // converted to a scientific notation string. if (angle < 1e-6) { angle = 0; } } else { var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_); var width = max.x - min.x; var height = max.y - min.y; focus = { x: (p0.x - min.x) / width, y: (p0.y - min.y) / height }; width /= this.arcScaleX_ * Z; height /= this.arcScaleY_ * Z; var dimension = m.max(width, height); shift = 2 * fillStyle.r0_ / dimension; expansion = 2 * fillStyle.r1_ / dimension - shift; } // We need to sort the color stops in ascending order by offset, // otherwise IE won't interpret it correctly. var stops = fillStyle.colors_; stops.sort(function(cs1, cs2) { return cs1.offset - cs2.offset; }); var length = stops.length; var color1 = stops[0].color; var color2 = stops[length - 1].color; var opacity1 = stops[0].alpha * this.globalAlpha; var opacity2 = stops[length - 1].alpha * this.globalAlpha; var colors = []; for (var i = 0; i < length; i++) { var stop = stops[i]; colors.push(stop.offset * expansion + shift + ' ' + stop.color); } // When colors attribute is used, the meanings of opacity and o:opacity2 // are reversed. lineStr.push(''); } else { lineStr.push(''); } lineStr.push(''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); }; contextPrototype.fill = function() { this.stroke(true); } contextPrototype.closePath = function() { this.currentPath_.push({type: 'close'}); }; /** * @private */ contextPrototype.getCoords_ = function(aX, aY) { var m = this.m_; return { x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 } }; contextPrototype.save = function() { var o = {}; copyState(this, o); this.aStack_.push(o); this.mStack_.push(this.m_); this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); }; contextPrototype.restore = function() { copyState(this.aStack_.pop(), this); this.m_ = this.mStack_.pop(); }; function matrixIsFinite(m) { for (var j = 0; j < 3; j++) { for (var k = 0; k < 2; k++) { if (!isFinite(m[j][k]) || isNaN(m[j][k])) { return false; } } } return true; } function setM(ctx, m, updateLineScale) { if (!matrixIsFinite(m)) { return; } ctx.m_ = m; if (updateLineScale) { // Get the line scale. // Determinant of this.m_ means how much the area is enlarged by the // transformation. So its square root can be used as a scale factor // for width. var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; ctx.lineScale_ = sqrt(abs(det)); } } contextPrototype.translate = function(aX, aY) { var m1 = [ [1, 0, 0], [0, 1, 0], [aX, aY, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.rotate = function(aRot) { var c = mc(aRot); var s = ms(aRot); var m1 = [ [c, s, 0], [-s, c, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.scale = function(aX, aY) { this.arcScaleX_ *= aX; this.arcScaleY_ *= aY; var m1 = [ [aX, 0, 0], [0, aY, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { var m1 = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { var m = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, m, true); }; /******** STUBS ********/ contextPrototype.clip = function() { // TODO: Implement }; contextPrototype.arcTo = function() { // TODO: Implement }; contextPrototype.createPattern = function() { return new CanvasPattern_; }; // Gradient / Pattern Stubs function CanvasGradient_(aType) { this.type_ = aType; this.x0_ = 0; this.y0_ = 0; this.r0_ = 0; this.x1_ = 0; this.y1_ = 0; this.r1_ = 0; this.colors_ = []; } CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { aColor = processStyle(aColor); this.colors_.push({offset: aOffset, color: aColor.color, alpha: aColor.alpha}); }; function CanvasPattern_() {} // set up externs G_vmlCanvasManager = G_vmlCanvasManager_; CanvasRenderingContext2D = CanvasRenderingContext2D_; CanvasGradient = CanvasGradient_; CanvasPattern = CanvasPattern_; })(); } // if ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/examples/index.html ================================================ Easy Pie Chart

        EASY PIE CHART

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

        Update pie charts

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

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/examples/style.css ================================================ body { font: 13px/1.4 'Helvetica Neue', 'Helvetica','Arial', sans-serif; color: #333; } .container { width: 520px; margin: auto; } h1 { border-bottom: 1px solid #d9d9d9; } a { color: #be2221; text-decoration: none; } .chart { float: left; margin: 10px; } .percentage, .label { text-align: center; color: #333; font-weight: 100; font-size: 1.2em; margin-bottom: 0.3em; } .credits { padding-top: 0.5em; clear: both; color: #999; } .credits a { color: #333; } .dark { background: #333; } .dark .percentage-light, .dark .label { text-align: center; color: #999; font-weight: 100; font-size: 1.2em; margin-bottom: 0.3em; } .button { -webkit-box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); -moz-box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); box-shadow: inset 0 0 1px #000, inset 0 1px 0 1px rgba(255,255,255,0.2), 0 1px 1px -1px rgba(0, 0, 0, .5); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; padding: 6px 20px; font-weight: bold; text-transform: uppercase; display: block; margin: auto; max-width: 200px; text-align: center; background-color: #5c5c5c; background-image: -moz-linear-gradient(top, #666666, #4d4d4d); background-image: -ms-linear-gradient(top, #666666, #4d4d4d); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#666666), to(#4d4d4d)); background-image: -webkit-linear-gradient(top, #666666, #4d4d4d); background-image: -o-linear-gradient(top, #666666, #4d4d4d); background-image: linear-gradient(top, #666666, #4d4d4d); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#4d4d4d', GradientType=0); color: #ffffff; text-shadow: 0 1px 1px #333333; } .button:hover { color: #ffffff; text-decoration: none; background-color: #616161; background-image: -moz-linear-gradient(top, #6b6b6b, #525252); background-image: -ms-linear-gradient(top, #6b6b6b, #525252); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6b6b6b), to(#525252)); background-image: -webkit-linear-gradient(top, #6b6b6b, #525252); background-image: -o-linear-gradient(top, #6b6b6b, #525252); background-image: linear-gradient(top, #6b6b6b, #525252); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6b6b6b', endColorstr='#525252', GradientType=0); } .button:active { background-color: #575757; background-image: -moz-linear-gradient(top, #616161, #474747); background-image: -ms-linear-gradient(top, #616161, #474747); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#616161), to(#474747)); background-image: -webkit-linear-gradient(top, #616161, #474747); background-image: -o-linear-gradient(top, #616161, #474747); background-image: linear-gradient(top, #616161, #474747); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#616161', endColorstr='#474747', GradientType=0); -webkit-transform: translate(0, 1px); -moz-transform: translate(0, 1px); -ms-transform: translate(0, 1px); -o-transform: translate(0, 1px); transform: translate(0, 1px); } .button:disabled { background-color: #dddddd; background-image: -moz-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -ms-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e7e7e7), to(#cdcdcd)); background-image: -webkit-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: -o-linear-gradient(top, #e7e7e7, #cdcdcd); background-image: linear-gradient(top, #e7e7e7, #cdcdcd); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e7e7e7', endColorstr='#cdcdcd', GradientType=0); color: #939393; text-shadow: 0 1px 1px #fff; } @media screen and (max-device-width: 480px) { .container{ width: 100%; } } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/jquery.easy-pie-chart.coffee ================================================ ### Easy pie chart is a jquery plugin to display simple animated pie charts for only one value Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. Built on top of the jQuery library (http://jquery.com) @source: http://github.com/rendro/easy-pie-chart/ @autor: Robert Fleischmann @version: 1.0.1 Inspired by: http://dribbble.com/shots/631074-Simple-Pie-Charts-II?list=popular&offset=210 Thanks to Philip Thrasher for the jquery plugin boilerplate for coffee script ### (($) -> $.easyPieChart = (el, options) -> @el = el @$el = $ el @$el.data "easyPieChart", @ @init = => @options = $.extend {}, $.easyPieChart.defaultOptions, options #get relevant data percent = parseInt @$el.data('percent'), 10 @percentage = 0 #create canvas element and set the origin to the center @canvas = $("").get(0) @$el.append @canvas G_vmlCanvasManager.initElement @canvas if G_vmlCanvasManager? @ctx = @canvas.getContext '2d' if window.devicePixelRatio > 1 scaleBy = window.devicePixelRatio $(@canvas).css({ width: @options.size height: @options.size }) @canvas.width *= scaleBy @canvas.height *= scaleBy @ctx.scale scaleBy, scaleBy @ctx.translate @options.size/2, @options.size/2 @$el.addClass 'easyPieChart' @$el.css { width: @options.size height: @options.size lineHeight: "#{@options.size}px" } @update percent @ @update = (percent) => if @options.animate == false drawLine percent else animateLine @percentage, percent renderScale = => @ctx.fillStyle = @options.scaleColor @ctx.lineWidth = 1 addScaleLine i for i in [0..24] addScaleLine = (i) => offset = if i%6==0 then 0 else @options.size*0.017 @ctx.save() @ctx.rotate i * Math.PI / 12 @ctx.fillRect @options.size/2-offset, 0, -@options.size*0.05+offset, 1 @ctx.restore() renderTrack = => offset = @options.size/2-@options.lineWidth/2 offset -= @options.size*0.08 if @options.scaleColor != false @ctx.beginPath() @ctx.arc 0, 0, offset, 0, Math.PI * 2, true @ctx.closePath() @ctx.strokeStyle = @options.trackColor @ctx.lineWidth = @options.lineWidth @ctx.stroke() renderBackground = => do renderScale if @options.scaleColor != false do renderTrack if @options.trackColor != false drawLine = (percent) => do renderBackground @ctx.strokeStyle = if $.isFunction @options.barColor then @options.barColor percent else @options.barColor @ctx.lineCap = @options.lineCap @ctx.lineWidth = @options.lineWidth offset = @options.size/2-@options.lineWidth/2 offset -= @options.size*0.08 if @options.scaleColor != false @ctx.save() @ctx.rotate -Math.PI/2 @ctx.beginPath() @ctx.arc 0, 0, offset, 0, Math.PI * 2 * percent/100, false @ctx.stroke() @ctx.restore() animateLine = (from, to) => fps = 30 steps = fps * @options.animate/1000 currentStep = 0 @options.onStart.call @ @percentage = to if @animation clearInterval @animation @animation = false @animation = setInterval => @ctx.clearRect -@options.size/2, -@options.size/2, @options.size, @options.size renderBackground.call @ drawLine.call @, [easeInOutQuad currentStep, from, to-from, steps] currentStep++ if (currentStep/steps) > 1 clearInterval @animation @animation = false @options.onStop.call @ , 1000/fps #t=time;b=beginning value;c=change in value;d=duration easeInOutQuad = (t, b, c, d) -> easeIn = (t) -> return Math.pow(t, 2) # Quad easing = (t) -> if (t < 1) return easeIn(t) else return 2 - easeIn( (t/2) * -2 + 2 ) t /= d / 2 return c / 2 * easing(t) + b @init() $.easyPieChart.defaultOptions = barColor: '#ef1e25' trackColor: '#f2f2f2' scaleColor: '#dfe0e0' lineCap: 'round' size: 110 lineWidth: 3 animate: false onStart: $.noop onStop: $.noop $.fn.easyPieChart = (options) -> $.each @, (i, el) -> $el = ($ el) unless $el.data 'easyPieChart' $el.data 'easyPieChart', new $.easyPieChart el, options undefined )(jQuery) ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/jquery.easy-pie-chart.css ================================================ .easyPieChart { position: relative; text-align: center; } .easyPieChart canvas { position: absolute; top: 0; left: 0; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/easy-pie/jquery.easy-pie-chart.js ================================================ // Generated by CoffeeScript 1.4.0 /* Easy pie chart is a jquery plugin to display simple animated pie charts for only one value Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. Built on top of the jQuery library (http://jquery.com) @source: http://github.com/rendro/easy-pie-chart/ @autor: Robert Fleischmann @version: 1.0.1 Inspired by: http://dribbble.com/shots/631074-Simple-Pie-Charts-II?list=popular&offset=210 Thanks to Philip Thrasher for the jquery plugin boilerplate for coffee script */ (function() { (function($) { $.easyPieChart = function(el, options) { var addScaleLine, animateLine, drawLine, easeInOutQuad, renderBackground, renderScale, renderTrack, _this = this; this.el = el; this.$el = $(el); this.$el.data("easyPieChart", this); this.init = function() { var percent; _this.options = $.extend({}, $.easyPieChart.defaultOptions, options); percent = parseInt(_this.$el.data('percent'), 10); _this.percentage = 0; _this.canvas = $("").get(0); _this.$el.append(_this.canvas); if (typeof G_vmlCanvasManager !== "undefined" && G_vmlCanvasManager !== null) { G_vmlCanvasManager.initElement(_this.canvas); } _this.ctx = _this.canvas.getContext('2d'); if (window.devicePixelRatio > 1.5) { $(_this.canvas).css({ width: _this.options.size, height: _this.options.size }); _this.canvas.width *= 2; _this.canvas.height *= 2; _this.ctx.scale(2, 2); } _this.ctx.translate(_this.options.size / 2, _this.options.size / 2); _this.$el.addClass('easyPieChart'); _this.$el.css({ width: _this.options.size, height: _this.options.size, lineHeight: "" + _this.options.size + "px" }); _this.update(percent); return _this; }; this.update = function(percent) { if (_this.options.animate === false) { return drawLine(percent); } else { return animateLine(_this.percentage, percent); } }; renderScale = function() { var i, _i, _results; _this.ctx.fillStyle = _this.options.scaleColor; _this.ctx.lineWidth = 1; _results = []; for (i = _i = 0; _i <= 24; i = ++_i) { _results.push(addScaleLine(i)); } return _results; }; addScaleLine = function(i) { var offset; offset = i % 6 === 0 ? 0 : _this.options.size * 0.017; _this.ctx.save(); _this.ctx.rotate(i * Math.PI / 12); _this.ctx.fillRect(_this.options.size / 2 - offset, 0, -_this.options.size * 0.05 + offset, 1); return _this.ctx.restore(); }; renderTrack = function() { var offset; offset = _this.options.size / 2 - _this.options.lineWidth / 2; if (_this.options.scaleColor !== false) { offset -= _this.options.size * 0.08; } _this.ctx.beginPath(); _this.ctx.arc(0, 0, offset, 0, Math.PI * 2, true); _this.ctx.closePath(); _this.ctx.strokeStyle = _this.options.trackColor; _this.ctx.lineWidth = _this.options.lineWidth; return _this.ctx.stroke(); }; renderBackground = function() { if (_this.options.scaleColor !== false) { renderScale(); } if (_this.options.trackColor !== false) { return renderTrack(); } }; drawLine = function(percent) { var offset; renderBackground(); _this.ctx.strokeStyle = $.isFunction(_this.options.barColor) ? _this.options.barColor(percent) : _this.options.barColor; _this.ctx.lineCap = _this.options.lineCap; _this.ctx.lineWidth = _this.options.lineWidth; offset = _this.options.size / 2 - _this.options.lineWidth / 2; if (_this.options.scaleColor !== false) { offset -= _this.options.size * 0.08; } _this.ctx.save(); _this.ctx.rotate(-Math.PI / 2); _this.ctx.beginPath(); _this.ctx.arc(0, 0, offset, 0, Math.PI * 2 * percent / 100, false); _this.ctx.stroke(); return _this.ctx.restore(); }; animateLine = function(from, to) { var currentStep, fps, steps; fps = 30; steps = fps * _this.options.animate / 1000; currentStep = 0; _this.options.onStart.call(_this); _this.percentage = to; if (_this.animation) { clearInterval(_this.animation); _this.animation = false; } return _this.animation = setInterval(function() { _this.ctx.clearRect(-_this.options.size / 2, -_this.options.size / 2, _this.options.size, _this.options.size); renderBackground.call(_this); drawLine.call(_this, [easeInOutQuad(currentStep, from, to - from, steps)]); currentStep++; if ((currentStep / steps) > 1) { clearInterval(_this.animation); _this.animation = false; return _this.options.onStop.call(_this); } }, 1000 / fps); }; easeInOutQuad = function(t, b, c, d) { var easeIn, easing; easeIn = function(t) { return Math.pow(t, 2); }; easing = function(t) { if (t < 1) { return easeIn(t); } else { return 2 - easeIn((t / 2) * -2 + 2); } }; t /= d / 2; return c / 2 * easing(t) + b; }; return this.init(); }; $.easyPieChart.defaultOptions = { barColor: '#ef1e25', trackColor: '#f2f2f2', scaleColor: '#dfe0e0', lineCap: 'round', size: 110, lineWidth: 3, animate: false, onStart: $.noop, onStop: $.noop }; $.fn.easyPieChart = function(options) { return $.each(this, function(i, el) { var $el; $el = $(el); if (!$el.data('easyPieChart')) { return $el.data('easyPieChart', new $.easyPieChart(el, options)); } }); }; return void 0; })(jQuery); }).call(this); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/API.txt ================================================ Flot Reference -------------- Consider a call to the plot function: var plot = $.plot(placeholder, data, options) The placeholder is a jQuery object or DOM element or jQuery expression that the plot will be put into. This placeholder needs to have its width and height set as explained in the README (go read that now if you haven't, it's short). The plot will modify some properties of the placeholder so it's recommended you simply pass in a div that you don't use for anything else. Make sure you check any fancy styling you apply to the div, e.g. background images have been reported to be a problem on IE 7. The format of the data is documented below, as is the available options. The plot object returned from the call has some methods you can call. These are documented separately below. Note that in general Flot gives no guarantees if you change any of the objects you pass in to the plot function or get out of it since they're not necessarily deep-copied. Data Format ----------- The data is an array of data series: [ series1, series2, ... ] A series can either be raw data or an object with properties. The raw data format is an array of points: [ [x1, y1], [x2, y2], ... ] E.g. [ [1, 3], [2, 14.01], [3.5, 3.14] ] Note that to simplify the internal logic in Flot both the x and y values must be numbers (even if specifying time series, see below for how to do this). This is a common problem because you might retrieve data from the database and serialize them directly to JSON without noticing the wrong type. If you're getting mysterious errors, double check that you're inputting numbers and not strings. If a null is specified as a point or if one of the coordinates is null or couldn't be converted to a number, the point is ignored when drawing. As a special case, a null value for lines is interpreted as a line segment end, i.e. the points before and after the null value are not connected. Lines and points take two coordinates. For filled lines and bars, you can specify a third coordinate which is the bottom of the filled area/bar (defaults to 0). The format of a single series object is as follows: { color: color or number data: rawdata label: string lines: specific lines options bars: specific bars options points: specific points options xaxis: number yaxis: number clickable: boolean hoverable: boolean shadowSize: number } You don't have to specify any of them except the data, the rest are options that will get default values. Typically you'd only specify label and data, like this: { label: "y = 3", data: [[0, 3], [10, 3]] } The label is used for the legend, if you don't specify one, the series will not show up in the legend. If you don't specify color, the series will get a color from the auto-generated colors. The color is either a CSS color specification (like "rgb(255, 100, 123)") or an integer that specifies which of auto-generated colors to select, e.g. 0 will get color no. 0, etc. The latter is mostly useful if you let the user add and remove series, in which case you can hard-code the color index to prevent the colors from jumping around between the series. The "xaxis" and "yaxis" options specify which axis to use. The axes are numbered from 1 (default), so { yaxis: 2} means that the series should be plotted against the second y axis. "clickable" and "hoverable" can be set to false to disable interactivity for specific series if interactivity is turned on in the plot, see below. The rest of the options are all documented below as they are the same as the default options passed in via the options parameter in the plot commmand. When you specify them for a specific data series, they will override the default options for the plot for that data series. Here's a complete example of a simple data specification: [ { label: "Foo", data: [ [10, 1], [17, -14], [30, 5] ] }, { label: "Bar", data: [ [11, 13], [19, 11], [30, -7] ] } ] Plot Options ------------ All options are completely optional. They are documented individually below, to change them you just specify them in an object, e.g. var options = { series: { lines: { show: true }, points: { show: true } } }; $.plot(placeholder, data, options); Customizing the legend ====================== legend: { show: boolean labelFormatter: null or (fn: string, series object -> string) labelBoxBorderColor: color noColumns: number position: "ne" or "nw" or "se" or "sw" margin: number of pixels or [x margin, y margin] backgroundColor: null or color backgroundOpacity: number between 0 and 1 container: null or jQuery object/DOM element/jQuery expression } The legend is generated as a table with the data series labels and small label boxes with the color of the series. If you want to format the labels in some way, e.g. make them to links, you can pass in a function for "labelFormatter". Here's an example that makes them clickable: labelFormatter: function(label, series) { // series is the series object for the label return '' + label + ''; } "noColumns" is the number of columns to divide the legend table into. "position" specifies the overall placement of the legend within the plot (top-right, top-left, etc.) and margin the distance to the plot edge (this can be either a number or an array of two numbers like [x, y]). "backgroundColor" and "backgroundOpacity" specifies the background. The default is a partly transparent auto-detected background. If you want the legend to appear somewhere else in the DOM, you can specify "container" as a jQuery object/expression to put the legend table into. The "position" and "margin" etc. options will then be ignored. Note that Flot will overwrite the contents of the container. Customizing the axes ==================== xaxis, yaxis: { show: null or true/false position: "bottom" or "top" or "left" or "right" mode: null or "time" color: null or color spec tickColor: null or color spec min: null or number max: null or number autoscaleMargin: null or number transform: null or fn: number -> number inverseTransform: null or fn: number -> number ticks: null or number or ticks array or (fn: range -> ticks array) tickSize: number or array minTickSize: number or array tickFormatter: (fn: number, object -> string) or string tickDecimals: null or number labelWidth: null or number labelHeight: null or number reserveSpace: null or true tickLength: null or number alignTicksWithAxis: null or number } All axes have the same kind of options. The following describes how to configure one axis, see below for what to do if you've got more than one x axis or y axis. If you don't set the "show" option (i.e. it is null), visibility is auto-detected, i.e. the axis will show up if there's data associated with it. You can override this by setting the "show" option to true or false. The "position" option specifies where the axis is placed, bottom or top for x axes, left or right for y axes. The "mode" option determines how the data is interpreted, the default of null means as decimal numbers. Use "time" for time series data, see the time series data section. The "color" option determines the color of the labels and ticks for the axis (default is the grid color). For more fine-grained control you can also set the color of the ticks separately with "tickColor" (otherwise it's autogenerated as the base color with some transparency). The options "min"/"max" are the precise minimum/maximum value on the scale. If you don't specify either of them, a value will automatically be chosen based on the minimum/maximum data values. Note that Flot always examines all the data values you feed to it, even if a restriction on another axis may make some of them invisible (this makes interactive use more stable). The "autoscaleMargin" is a bit esoteric: it's the fraction of margin that the scaling algorithm will add to avoid that the outermost points ends up on the grid border. Note that this margin is only applied when a min or max value is not explicitly set. If a margin is specified, the plot will furthermore extend the axis end-point to the nearest whole tick. The default value is "null" for the x axes and 0.02 for y axes which seems appropriate for most cases. "transform" and "inverseTransform" are callbacks you can put in to change the way the data is drawn. You can design a function to compress or expand certain parts of the axis non-linearly, e.g. suppress weekends or compress far away points with a logarithm or some other means. When Flot draws the plot, each value is first put through the transform function. Here's an example, the x axis can be turned into a natural logarithm axis with the following code: xaxis: { transform: function (v) { return Math.log(v); }, inverseTransform: function (v) { return Math.exp(v); } } Similarly, for reversing the y axis so the values appear in inverse order: yaxis: { transform: function (v) { return -v; }, inverseTransform: function (v) { return -v; } } Note that for finding extrema, Flot assumes that the transform function does not reorder values (it should be monotone). The inverseTransform is simply the inverse of the transform function (so v == inverseTransform(transform(v)) for all relevant v). It is required for converting from canvas coordinates to data coordinates, e.g. for a mouse interaction where a certain pixel is clicked. If you don't use any interactive features of Flot, you may not need it. The rest of the options deal with the ticks. If you don't specify any ticks, a tick generator algorithm will make some for you. The algorithm has two passes. It first estimates how many ticks would be reasonable and uses this number to compute a nice round tick interval size. Then it generates the ticks. You can specify how many ticks the algorithm aims for by setting "ticks" to a number. The algorithm always tries to generate reasonably round tick values so even if you ask for three ticks, you might get five if that fits better with the rounding. If you don't want any ticks at all, set "ticks" to 0 or an empty array. Another option is to skip the rounding part and directly set the tick interval size with "tickSize". If you set it to 2, you'll get ticks at 2, 4, 6, etc. Alternatively, you can specify that you just don't want ticks at a size less than a specific tick size with "minTickSize". Note that for time series, the format is an array like [2, "month"], see the next section. If you want to completely override the tick algorithm, you can specify an array for "ticks", either like this: ticks: [0, 1.2, 2.4] Or like this where the labels are also customized: ticks: [[0, "zero"], [1.2, "one mark"], [2.4, "two marks"]] You can mix the two if you like. For extra flexibility you can specify a function as the "ticks" parameter. The function will be called with an object with the axis min and max and should return a ticks array. Here's a simplistic tick generator that spits out intervals of pi, suitable for use on the x axis for trigonometric functions: function piTickGenerator(axis) { var res = [], i = Math.floor(axis.min / Math.PI); do { var v = i * Math.PI; res.push([v, i + "\u03c0"]); ++i; } while (v < axis.max); return res; } You can control how the ticks look like with "tickDecimals", the number of decimals to display (default is auto-detected). Alternatively, for ultimate control over how ticks are formatted you can provide a function to "tickFormatter". The function is passed two parameters, the tick value and an axis object with information, and should return a string. The default formatter looks like this: function formatter(val, axis) { return val.toFixed(axis.tickDecimals); } The axis object has "min" and "max" with the range of the axis, "tickDecimals" with the number of decimals to round the value to and "tickSize" with the size of the interval between ticks as calculated by the automatic axis scaling algorithm (or specified by you). Here's an example of a custom formatter: function suffixFormatter(val, axis) { if (val > 1000000) return (val / 1000000).toFixed(axis.tickDecimals) + " MB"; else if (val > 1000) return (val / 1000).toFixed(axis.tickDecimals) + " kB"; else return val.toFixed(axis.tickDecimals) + " B"; } "labelWidth" and "labelHeight" specifies a fixed size of the tick labels in pixels. They're useful in case you need to align several plots. "reserveSpace" means that even if an axis isn't shown, Flot should reserve space for it - it is useful in combination with labelWidth and labelHeight for aligning multi-axis charts. "tickLength" is the length of the tick lines in pixels. By default, the innermost axes will have ticks that extend all across the plot, while any extra axes use small ticks. A value of null means use the default, while a number means small ticks of that length - set it to 0 to hide the lines completely. If you set "alignTicksWithAxis" to the number of another axis, e.g. alignTicksWithAxis: 1, Flot will ensure that the autogenerated ticks of this axis are aligned with the ticks of the other axis. This may improve the looks, e.g. if you have one y axis to the left and one to the right, because the grid lines will then match the ticks in both ends. The trade-off is that the forced ticks won't necessarily be at natural places. Multiple axes ============= If you need more than one x axis or y axis, you need to specify for each data series which axis they are to use, as described under the format of the data series, e.g. { data: [...], yaxis: 2 } specifies that a series should be plotted against the second y axis. To actually configure that axis, you can't use the xaxis/yaxis options directly - instead there are two arrays in the options: xaxes: [] yaxes: [] Here's an example of configuring a single x axis and two y axes (we can leave options of the first y axis empty as the defaults are fine): { xaxes: [ { position: "top" } ], yaxes: [ { }, { position: "right", min: 20 } ] } The arrays get their default values from the xaxis/yaxis settings, so say you want to have all y axes start at zero, you can simply specify yaxis: { min: 0 } instead of adding a min parameter to all the axes. Generally, the various interfaces in Flot dealing with data points either accept an xaxis/yaxis parameter to specify which axis number to use (starting from 1), or lets you specify the coordinate directly as x2/x3/... or x2axis/x3axis/... instead of "x" or "xaxis". Time series data ================ Time series are a bit more difficult than scalar data because calendars don't follow a simple base 10 system. For many cases, Flot abstracts most of this away, but it can still be a bit difficult to get the data into Flot. So we'll first discuss the data format. The time series support in Flot is based on Javascript timestamps, i.e. everywhere a time value is expected or handed over, a Javascript timestamp number is used. This is a number, not a Date object. A Javascript timestamp is the number of milliseconds since January 1, 1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's in milliseconds, so remember to multiply by 1000! You can see a timestamp like this alert((new Date()).getTime()) Normally you want the timestamps to be displayed according to a certain time zone, usually the time zone in which the data has been produced. However, Flot always displays timestamps according to UTC. It has to as the only alternative with core Javascript is to interpret the timestamps according to the time zone that the visitor is in, which means that the ticks will shift unpredictably with the time zone and daylight savings of each visitor. So given that there's no good support for custom time zones in Javascript, you'll have to take care of this server-side. The easiest way to think about it is to pretend that the data production time zone is UTC, even if it isn't. So if you have a datapoint at 2002-02-20 08:00, you can generate a timestamp for eight o'clock UTC even if it really happened eight o'clock UTC+0200. In PHP you can get an appropriate timestamp with 'strtotime("2002-02-20 UTC") * 1000', in Python with 'calendar.timegm(datetime_object.timetuple()) * 1000', in .NET with something like: public static int GetJavascriptTimestamp(System.DateTime input) { System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks); System.DateTime time = input.Subtract(span); return (long)(time.Ticks / 10000); } Javascript also has some support for parsing date strings, so it is possible to generate the timestamps manually client-side. If you've already got the real UTC timestamp, it's too late to use the pretend trick described above. But you can fix up the timestamps by adding the time zone offset, e.g. for UTC+0200 you would add 2 hours to the UTC timestamp you got. Then it'll look right on the plot. Most programming environments have some means of getting the timezone offset for a specific date (note that you need to get the offset for each individual timestamp to account for daylight savings). Once you've gotten the timestamps into the data and specified "time" as the axis mode, Flot will automatically generate relevant ticks and format them. As always, you can tweak the ticks via the "ticks" option - just remember that the values should be timestamps (numbers), not Date objects. Tick generation and formatting can also be controlled separately through the following axis options: minTickSize: array timeformat: null or format string monthNames: null or array of size 12 of strings twelveHourClock: boolean Here "timeformat" is a format string to use. You might use it like this: xaxis: { mode: "time" timeformat: "%y/%m/%d" } This will result in tick labels like "2000/12/24". The following specifiers are supported %h: hours %H: hours (left-padded with a zero) %M: minutes (left-padded with a zero) %S: seconds (left-padded with a zero) %d: day of month (1-31), use %0d for zero-padding %m: month (1-12), use %0m for zero-padding %y: year (four digits) %b: month name (customizable) %p: am/pm, additionally switches %h/%H to 12 hour instead of 24 %P: AM/PM (uppercase version of %p) Inserting a zero like %0m or %0d means that the specifier will be left-padded with a zero if it's only single-digit. So %y-%0m-%0d results in unambigious ISO timestamps like 2007-05-10 (for May 10th). You can customize the month names with the "monthNames" option. For instance, for Danish you might specify: monthNames: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"] If you set "twelveHourClock" to true, the autogenerated timestamps will use 12 hour AM/PM timestamps instead of 24 hour. The format string and month names are used by a very simple built-in format function that takes a date object, a format string (and optionally an array of month names) and returns the formatted string. If needed, you can access it as $.plot.formatDate(date, formatstring, monthNames) or even replace it with another more advanced function from a date library if you're feeling adventurous. If everything else fails, you can control the formatting by specifying a custom tick formatter function as usual. Here's a simple example which will format December 24 as 24/12: tickFormatter: function (val, axis) { var d = new Date(val); return d.getUTCDate() + "/" + (d.getUTCMonth() + 1); } Note that for the time mode "tickSize" and "minTickSize" are a bit special in that they are arrays on the form "[value, unit]" where unit is one of "second", "minute", "hour", "day", "month" and "year". So you can specify minTickSize: [1, "month"] to get a tick interval size of at least 1 month and correspondingly, if axis.tickSize is [2, "day"] in the tick formatter, the ticks have been produced with two days in-between. Customizing the data series =========================== series: { lines, points, bars: { show: boolean lineWidth: number fill: boolean or number fillColor: null or color/gradient } points: { radius: number symbol: "circle" or function } bars: { barWidth: number align: "left" or "center" horizontal: boolean } lines: { steps: boolean } shadowSize: number } colors: [ color1, color2, ... ] The options inside "series: {}" are copied to each of the series. So you can specify that all series should have bars by putting it in the global options, or override it for individual series by specifying bars in a particular the series object in the array of data. The most important options are "lines", "points" and "bars" that specify whether and how lines, points and bars should be shown for each data series. In case you don't specify anything at all, Flot will default to showing lines (you can turn this off with lines: { show: false }). You can specify the various types independently of each other, and Flot will happily draw each of them in turn (this is probably only useful for lines and points), e.g. var options = { series: { lines: { show: true, fill: true, fillColor: "rgba(255, 255, 255, 0.8)" }, points: { show: true, fill: false } } }; "lineWidth" is the thickness of the line or outline in pixels. You can set it to 0 to prevent a line or outline from being drawn; this will also hide the shadow. "fill" is whether the shape should be filled. For lines, this produces area graphs. You can use "fillColor" to specify the color of the fill. If "fillColor" evaluates to false (default for everything except points which are filled with white), the fill color is auto-set to the color of the data series. You can adjust the opacity of the fill by setting fill to a number between 0 (fully transparent) and 1 (fully opaque). For bars, fillColor can be a gradient, see the gradient documentation below. "barWidth" is the width of the bars in units of the x axis (or the y axis if "horizontal" is true), contrary to most other measures that are specified in pixels. For instance, for time series the unit is milliseconds so 24 * 60 * 60 * 1000 produces bars with the width of a day. "align" specifies whether a bar should be left-aligned (default) or centered on top of the value it represents. When "horizontal" is on, the bars are drawn horizontally, i.e. from the y axis instead of the x axis; note that the bar end points are still defined in the same way so you'll probably want to swap the coordinates if you've been plotting vertical bars first. For lines, "steps" specifies whether two adjacent data points are connected with a straight (possibly diagonal) line or with first a horizontal and then a vertical line. Note that this transforms the data by adding extra points. For points, you can specify the radius and the symbol. The only built-in symbol type is circles, for other types you can use a plugin or define them yourself by specifying a callback: function cross(ctx, x, y, radius, shadow) { var size = radius * Math.sqrt(Math.PI) / 2; ctx.moveTo(x - size, y - size); ctx.lineTo(x + size, y + size); ctx.moveTo(x - size, y + size); ctx.lineTo(x + size, y - size); } The parameters are the drawing context, x and y coordinates of the center of the point, a radius which corresponds to what the circle would have used and whether the call is to draw a shadow (due to limited canvas support, shadows are currently faked through extra draws). It's good practice to ensure that the area covered by the symbol is the same as for the circle with the given radius, this ensures that all symbols have approximately the same visual weight. "shadowSize" is the default size of shadows in pixels. Set it to 0 to remove shadows. The "colors" array specifies a default color theme to get colors for the data series from. You can specify as many colors as you like, like this: colors: ["#d18b2c", "#dba255", "#919733"] If there are more data series than colors, Flot will try to generate extra colors by lightening and darkening colors in the theme. Customizing the grid ==================== grid: { show: boolean aboveData: boolean color: color backgroundColor: color/gradient or null labelMargin: number axisMargin: number markings: array of markings or (fn: axes -> array of markings) borderWidth: number borderColor: color or null minBorderMargin: number or null clickable: boolean hoverable: boolean autoHighlight: boolean mouseActiveRadius: number } The grid is the thing with the axes and a number of ticks. Many of the things in the grid are configured under the individual axes, but not all. "color" is the color of the grid itself whereas "backgroundColor" specifies the background color inside the grid area, here null means that the background is transparent. You can also set a gradient, see the gradient documentation below. You can turn off the whole grid including tick labels by setting "show" to false. "aboveData" determines whether the grid is drawn above the data or below (below is default). "labelMargin" is the space in pixels between tick labels and axis line, and "axisMargin" is the space in pixels between axes when there are two next to each other. Note that you can style the tick labels with CSS, e.g. to change the color. They have class "tickLabel". "borderWidth" is the width of the border around the plot. Set it to 0 to disable the border. You can also set "borderColor" if you want the border to have a different color than the grid lines. "minBorderMargin" controls the default minimum margin around the border - it's used to make sure that points aren't accidentally clipped by the canvas edge so by default the value is computed from the point radius. "markings" is used to draw simple lines and rectangular areas in the background of the plot. You can either specify an array of ranges on the form { xaxis: { from, to }, yaxis: { from, to } } (with multiple axes, you can specify coordinates for other axes instead, e.g. as x2axis/x3axis/...) or with a function that returns such an array given the axes for the plot in an object as the first parameter. You can set the color of markings by specifying "color" in the ranges object. Here's an example array: markings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: "#bb0000" }, ... ] If you leave out one of the values, that value is assumed to go to the border of the plot. So for example if you only specify { xaxis: { from: 0, to: 2 } } it means an area that extends from the top to the bottom of the plot in the x range 0-2. A line is drawn if from and to are the same, e.g. markings: [ { yaxis: { from: 1, to: 1 } }, ... ] would draw a line parallel to the x axis at y = 1. You can control the line width with "lineWidth" in the range object. An example function that makes vertical stripes might look like this: markings: function (axes) { var markings = []; for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2) markings.push({ xaxis: { from: x, to: x + 1 } }); return markings; } If you set "clickable" to true, the plot will listen for click events on the plot area and fire a "plotclick" event on the placeholder with a position and a nearby data item object as parameters. The coordinates are available both in the unit of the axes (not in pixels) and in global screen coordinates. Likewise, if you set "hoverable" to true, the plot will listen for mouse move events on the plot area and fire a "plothover" event with the same parameters as the "plotclick" event. If "autoHighlight" is true (the default), nearby data items are highlighted automatically. If needed, you can disable highlighting and control it yourself with the highlight/unhighlight plot methods described elsewhere. You can use "plotclick" and "plothover" events like this: $.plot($("#placeholder"), [ d ], { grid: { clickable: true } }); $("#placeholder").bind("plotclick", function (event, pos, item) { alert("You clicked at " + pos.x + ", " + pos.y); // axis coordinates for other axes, if present, are in pos.x2, pos.x3, ... // if you need global screen coordinates, they are pos.pageX, pos.pageY if (item) { highlight(item.series, item.datapoint); alert("You clicked a point!"); } }); The item object in this example is either null or a nearby object on the form: item: { datapoint: the point, e.g. [0, 2] dataIndex: the index of the point in the data array series: the series object seriesIndex: the index of the series pageX, pageY: the global screen coordinates of the point } For instance, if you have specified the data like this $.plot($("#placeholder"), [ { label: "Foo", data: [[0, 10], [7, 3]] } ], ...); and the mouse is near the point (7, 3), "datapoint" is [7, 3], "dataIndex" will be 1, "series" is a normalized series object with among other things the "Foo" label in series.label and the color in series.color, and "seriesIndex" is 0. Note that plugins and options that transform the data can shift the indexes from what you specified in the original data array. If you use the above events to update some other information and want to clear out that info in case the mouse goes away, you'll probably also need to listen to "mouseout" events on the placeholder div. "mouseActiveRadius" specifies how far the mouse can be from an item and still activate it. If there are two or more points within this radius, Flot chooses the closest item. For bars, the top-most bar (from the latest specified data series) is chosen. If you want to disable interactivity for a specific data series, you can set "hoverable" and "clickable" to false in the options for that series, like this { data: [...], label: "Foo", clickable: false }. Specifying gradients ==================== A gradient is specified like this: { colors: [ color1, color2, ... ] } For instance, you might specify a background on the grid going from black to gray like this: grid: { backgroundColor: { colors: ["#000", "#999"] } } For the series you can specify the gradient as an object that specifies the scaling of the brightness and the opacity of the series color, e.g. { colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ] } where the first color simply has its alpha scaled, whereas the second is also darkened. For instance, for bars the following makes the bars gradually disappear, without outline: bars: { show: true, lineWidth: 0, fill: true, fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] } } Flot currently only supports vertical gradients drawn from top to bottom because that's what works with IE. Plot Methods ------------ The Plot object returned from the plot function has some methods you can call: - highlight(series, datapoint) Highlight a specific datapoint in the data series. You can either specify the actual objects, e.g. if you got them from a "plotclick" event, or you can specify the indices, e.g. highlight(1, 3) to highlight the fourth point in the second series (remember, zero-based indexing). - unhighlight(series, datapoint) or unhighlight() Remove the highlighting of the point, same parameters as highlight. If you call unhighlight with no parameters, e.g. as plot.unhighlight(), all current highlights are removed. - setData(data) You can use this to reset the data used. Note that axis scaling, ticks, legend etc. will not be recomputed (use setupGrid() to do that). You'll probably want to call draw() afterwards. You can use this function to speed up redrawing a small plot if you know that the axes won't change. Put in the new data with setData(newdata), call draw(), and you're good to go. Note that for large datasets, almost all the time is consumed in draw() plotting the data so in this case don't bother. - setupGrid() Recalculate and set axis scaling, ticks, legend etc. Note that because of the drawing model of the canvas, this function will immediately redraw (actually reinsert in the DOM) the labels and the legend, but not the actual tick lines because they're drawn on the canvas. You need to call draw() to get the canvas redrawn. - draw() Redraws the plot canvas. - triggerRedrawOverlay() Schedules an update of an overlay canvas used for drawing interactive things like a selection and point highlights. This is mostly useful for writing plugins. The redraw doesn't happen immediately, instead a timer is set to catch multiple successive redraws (e.g. from a mousemove). You can get to the overlay by setting up a drawOverlay hook. - width()/height() Gets the width and height of the plotting area inside the grid. This is smaller than the canvas or placeholder dimensions as some extra space is needed (e.g. for labels). - offset() Returns the offset of the plotting area inside the grid relative to the document, useful for instance for calculating mouse positions (event.pageX/Y minus this offset is the pixel position inside the plot). - pointOffset({ x: xpos, y: ypos }) Returns the calculated offset of the data point at (x, y) in data space within the placeholder div. If you are working with multiple axes, you can specify the x and y axis references, e.g. o = pointOffset({ x: xpos, y: ypos, xaxis: 2, yaxis: 3 }) // o.left and o.top now contains the offset within the div - resize() Tells Flot to resize the drawing canvas to the size of the placeholder. You need to run setupGrid() and draw() afterwards as canvas resizing is a destructive operation. This is used internally by the resize plugin. - shutdown() Cleans up any event handlers Flot has currently registered. This is used internally. There are also some members that let you peek inside the internal workings of Flot which is useful in some cases. Note that if you change something in the objects returned, you're changing the objects used by Flot to keep track of its state, so be careful. - getData() Returns an array of the data series currently used in normalized form with missing settings filled in according to the global options. So for instance to find out what color Flot has assigned to the data series, you could do this: var series = plot.getData(); for (var i = 0; i < series.length; ++i) alert(series[i].color); A notable other interesting field besides color is datapoints which has a field "points" with the normalized data points in a flat array (the field "pointsize" is the increment in the flat array to get to the next point so for a dataset consisting only of (x,y) pairs it would be 2). - getAxes() Gets an object with the axes. The axes are returned as the attributes of the object, so for instance getAxes().xaxis is the x axis. Various things are stuffed inside an axis object, e.g. you could use getAxes().xaxis.ticks to find out what the ticks are for the xaxis. Two other useful attributes are p2c and c2p, functions for transforming from data point space to the canvas plot space and back. Both returns values that are offset with the plot offset. Check the Flot source code for the complete set of attributes (or output an axis with console.log() and inspect it). With multiple axes, the extra axes are returned as x2axis, x3axis, etc., e.g. getAxes().y2axis is the second y axis. You can check y2axis.used to see whether the axis is associated with any data points and y2axis.show to see if it is currently shown. - getPlaceholder() Returns placeholder that the plot was put into. This can be useful for plugins for adding DOM elements or firing events. - getCanvas() Returns the canvas used for drawing in case you need to hack on it yourself. You'll probably need to get the plot offset too. - getPlotOffset() Gets the offset that the grid has within the canvas as an object with distances from the canvas edges as "left", "right", "top", "bottom". I.e., if you draw a circle on the canvas with the center placed at (left, top), its center will be at the top-most, left corner of the grid. - getOptions() Gets the options for the plot, normalized, with default values filled in. You get a reference to actual values used by Flot, so if you modify the values in here, Flot will use the new values. If you change something, you probably have to call draw() or setupGrid() or triggerRedrawOverlay() to see the change. Hooks ===== In addition to the public methods, the Plot object also has some hooks that can be used to modify the plotting process. You can install a callback function at various points in the process, the function then gets access to the internal data structures in Flot. Here's an overview of the phases Flot goes through: 1. Plugin initialization, parsing options 2. Constructing the canvases used for drawing 3. Set data: parsing data specification, calculating colors, copying raw data points into internal format, normalizing them, finding max/min for axis auto-scaling 4. Grid setup: calculating axis spacing, ticks, inserting tick labels, the legend 5. Draw: drawing the grid, drawing each of the series in turn 6. Setting up event handling for interactive features 7. Responding to events, if any 8. Shutdown: this mostly happens in case a plot is overwritten Each hook is simply a function which is put in the appropriate array. You can add them through the "hooks" option, and they are also available after the plot is constructed as the "hooks" attribute on the returned plot object, e.g. // define a simple draw hook function hellohook(plot, canvascontext) { alert("hello!"); }; // pass it in, in an array since we might want to specify several var plot = $.plot(placeholder, data, { hooks: { draw: [hellohook] } }); // we can now find it again in plot.hooks.draw[0] unless a plugin // has added other hooks The available hooks are described below. All hook callbacks get the plot object as first parameter. You can find some examples of defined hooks in the plugins bundled with Flot. - processOptions [phase 1] function(plot, options) Called after Flot has parsed and merged options. Useful in the instance where customizations beyond simple merging of default values is needed. A plugin might use it to detect that it has been enabled and then turn on or off other options. - processRawData [phase 3] function(plot, series, data, datapoints) Called before Flot copies and normalizes the raw data for the given series. If the function fills in datapoints.points with normalized points and sets datapoints.pointsize to the size of the points, Flot will skip the copying/normalization step for this series. In any case, you might be interested in setting datapoints.format, an array of objects for specifying how a point is normalized and how it interferes with axis scaling. The default format array for points is something along the lines of: [ { x: true, number: true, required: true }, { y: true, number: true, required: true } ] The first object means that for the first coordinate it should be taken into account when scaling the x axis, that it must be a number, and that it is required - so if it is null or cannot be converted to a number, the whole point will be zeroed out with nulls. Beyond these you can also specify "defaultValue", a value to use if the coordinate is null. This is for instance handy for bars where one can omit the third coordinate (the bottom of the bar) which then defaults to 0. - processDatapoints [phase 3] function(plot, series, datapoints) Called after normalization of the given series but before finding min/max of the data points. This hook is useful for implementing data transformations. "datapoints" contains the normalized data points in a flat array as datapoints.points with the size of a single point given in datapoints.pointsize. Here's a simple transform that multiplies all y coordinates by 2: function multiply(plot, series, datapoints) { var points = datapoints.points, ps = datapoints.pointsize; for (var i = 0; i < points.length; i += ps) points[i + 1] *= 2; } Note that you must leave datapoints in a good condition as Flot doesn't check it or do any normalization on it afterwards. - drawSeries [phase 5] function(plot, canvascontext, series) Hook for custom drawing of a single series. Called just before the standard drawing routine has been called in the loop that draws each series. - draw [phase 5] function(plot, canvascontext) Hook for drawing on the canvas. Called after the grid is drawn (unless it's disabled or grid.aboveData is set) and the series have been plotted (in case any points, lines or bars have been turned on). For examples of how to draw things, look at the source code. - bindEvents [phase 6] function(plot, eventHolder) Called after Flot has setup its event handlers. Should set any necessary event handlers on eventHolder, a jQuery object with the canvas, e.g. function (plot, eventHolder) { eventHolder.mousedown(function (e) { alert("You pressed the mouse at " + e.pageX + " " + e.pageY); }); } Interesting events include click, mousemove, mouseup/down. You can use all jQuery events. Usually, the event handlers will update the state by drawing something (add a drawOverlay hook and call triggerRedrawOverlay) or firing an externally visible event for user code. See the crosshair plugin for an example. Currently, eventHolder actually contains both the static canvas used for the plot itself and the overlay canvas used for interactive features because some versions of IE get the stacking order wrong. The hook only gets one event, though (either for the overlay or for the static canvas). Note that custom plot events generated by Flot are not generated on eventHolder, but on the div placeholder supplied as the first argument to the plot call. You can get that with plot.getPlaceholder() - that's probably also the one you should use if you need to fire a custom event. - drawOverlay [phase 7] function (plot, canvascontext) The drawOverlay hook is used for interactive things that need a canvas to draw on. The model currently used by Flot works the way that an extra overlay canvas is positioned on top of the static canvas. This overlay is cleared and then completely redrawn whenever something interesting happens. This hook is called when the overlay canvas is to be redrawn. "canvascontext" is the 2D context of the overlay canvas. You can use this to draw things. You'll most likely need some of the metrics computed by Flot, e.g. plot.width()/plot.height(). See the crosshair plugin for an example. - shutdown [phase 8] function (plot, eventHolder) Run when plot.shutdown() is called, which usually only happens in case a plot is overwritten by a new plot. If you're writing a plugin that adds extra DOM elements or event handlers, you should add a callback to clean up after you. Take a look at the section in PLUGINS.txt for more info. Plugins ------- Plugins extend the functionality of Flot. To use a plugin, simply include its Javascript file after Flot in the HTML page. If you're worried about download size/latency, you can concatenate all the plugins you use, and Flot itself for that matter, into one big file (make sure you get the order right), then optionally run it through a Javascript minifier such as YUI Compressor. Here's a brief explanation of how the plugin plumbings work: Each plugin registers itself in the global array $.plot.plugins. When you make a new plot object with $.plot, Flot goes through this array calling the "init" function of each plugin and merging default options from the "option" attribute of the plugin. The init function gets a reference to the plot object created and uses this to register hooks and add new public methods if needed. See the PLUGINS.txt file for details on how to write a plugin. As the above description hints, it's actually pretty easy. Version number -------------- The version number of Flot is available in $.plot.version. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/FAQ.txt ================================================ Frequently asked questions -------------------------- Q: How much data can Flot cope with? A: Flot will happily draw everything you send to it so the answer depends on the browser. The excanvas emulation used for IE (built with VML) makes IE by far the slowest browser so be sure to test with that if IE users are in your target group. 1000 points is not a problem, but as soon as you start having more points than the pixel width, you should probably start thinking about downsampling/aggregation as this is near the resolution limit of the chart anyway. If you downsample server-side, you also save bandwidth. Q: Flot isn't working when I'm using JSON data as source! A: Actually, Flot loves JSON data, you just got the format wrong. Double check that you're not inputting strings instead of numbers, like [["0", "-2.13"], ["5", "4.3"]]. This is most common mistake, and the error might not show up immediately because Javascript can do some conversion automatically. Q: Can I export the graph? A: This is a limitation of the canvas technology. There's a hook in the canvas object for getting an image out, but you won't get the tick labels. And it's not likely to be supported by IE. At this point, your best bet is probably taking a screenshot, e.g. with PrtScn. Q: The bars are all tiny in time mode? A: It's not really possible to determine the bar width automatically. So you have to set the width with the barWidth option which is NOT in pixels, but in the units of the x axis (or the y axis for horizontal bars). For time mode that's milliseconds so the default value of 1 makes the bars 1 millisecond wide. Q: Can I use Flot with libraries like Mootools or Prototype? A: Yes, Flot supports it out of the box and it's easy! Just use jQuery instead of $, e.g. call jQuery.plot instead of $.plot and use jQuery(something) instead of $(something). As a convenience, you can put in a DOM element for the graph placeholder where the examples and the API documentation are using jQuery objects. Depending on how you include jQuery, you may have to add one line of code to prevent jQuery from overwriting functions from the other libraries, see the documentation in jQuery ("Using jQuery with other libraries") for details. Q: Flot doesn't work with [insert name of Javascript UI framework]! A: The only non-standard thing used by Flot is the canvas tag; otherwise it is simply a series of absolute positioned divs within the placeholder tag you put in. If this is not working, it's probably because the framework you're using is doing something weird with the DOM, or you're using it the wrong way. A common problem is that there's display:none on a container until the user does something. Many tab widgets work this way, and there's nothing wrong with it - you just can't call Flot inside a display:none container as explained in the README so you need to hold off the Flot call until the container is actually displayed (or use visibility:hidden instead of display:none or move the container off-screen). If you find there's a specific thing we can do to Flot to help, feel free to submit a bug report. Otherwise, you're welcome to ask for help on the forum/mailing list, but please don't submit a bug report to Flot. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/LICENSE.txt ================================================ Copyright (c) 2007-2009 IOLA and Ole Laursen 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. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/Makefile ================================================ # Makefile for generating minified files .PHONY: all # we cheat and process all .js files instead of an exhaustive list all: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js))) %.min.js: %.js yui-compressor $< -o $@ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/NEWS.txt ================================================ Flot 0.7 -------- API changes: Multiple axes support. Code using dual axes should be changed from using x2axis/y2axis in the options to using an array (although backwards-compatibility hooks are in place). For instance, { xaxis: { ... }, x2axis: { ... }, yaxis: { ... }, y2axis: { ... } } becomes { xaxes: [ { ... }, { ... } ], yaxes: [ { ... }, { ... } ] } Note that if you're just using one axis, continue to use the xaxis/yaxis directly (it now sets the default settings for the arrays). Plugins touching the axes must be ported to take the extra axes into account, check the source to see some examples. A related change is that the visibility of axes is now auto-detected. So if you were relying on an axis to show up even without any data in the chart, you now need to set the axis "show" option explicitly. "tickColor" on the grid options is now deprecated in favour of a corresponding option on the axes, so { grid: { tickColor: "#000" }} becomes { xaxis: { tickColor: "#000"}, yaxis: { tickColor: "#000"} }, but if you just configure a base color Flot will now autogenerate a tick color by adding transparency. Backwards-compatibility hooks are in place. Final note: now that IE 9 is coming out with canvas support, you may want to adapt the excanvas include to skip loading it in IE 9 (the examples have been adapted thanks to Ryley Breiddal). An alternative to excanvas using Flash has also surfaced, if your graphs are slow in IE, you may want to give it a spin: http://code.google.com/p/flashcanvas/ Changes: - Support for specifying a bottom for each point for line charts when filling them, this means that an arbitrary bottom can be used instead of just the x axis (based on patches patiently provided by Roman V. Prikhodchenko). - New fillbetween plugin that can compute a bottom for a series from another series, useful for filling areas between lines (see new example percentiles.html for a use case). - More predictable handling of gaps for the stacking plugin, now all undefined ranges are skipped. - Stacking plugin can stack horizontal bar charts. - Navigate plugin now redraws the plot while panning instead of only after the fact (can be disabled by setting the pan.frameRate option to null), raised by lastthemy (issue 235). - Date formatter now accepts %0m and %0d to get a zero-padded month or day (issue raised by Maximillian Dornseif). - Revamped internals to support an unlimited number of axes, not just dual (sponsored by Flight Data Services, www.flightdataservices.com). - New setting on axes, "tickLength", to control the size of ticks or turn them off without turning off the labels. - Axis labels are now put in container divs with classes, for instance labels in the x axes can be reached via ".xAxis .tickLabel". - Support for setting the color of an axis (sponsored by Flight Data Services, www.flightdataservices.com). - Tick color is now auto-generated as the base color with some transparency (unless you override it). - Support for aligning ticks in the axes with "alignTicksWithAxis" to ensure that they appear next to each other rather than in between, at the expense of possibly awkward tick steps (sponsored by Flight Data Services, www.flightdataservices.com). - Support for customizing the point type through a callback when plotting points and new symbol plugin with some predefined point types (sponsored by Utility Data Corporation). - Resize plugin for automatically redrawing when the placeholder changes size, e.g. on window resizes (sponsored by Novus Partners). A resize() method has been added to plot object facilitate this. - Support Infinity/-Infinity for plotting asymptotes by hacking it into +/-Number.MAX_VALUE (reported by rabaea.mircea). - Support for restricting navigate plugin to not pan/zoom an axis (based on patch by kkaefer). - Support for providing the drag cursor for the navigate plugin as an option (based on patch by Kelly T. Moore). - Options for controlling whether an axis is shown or not (suggestion by Timo Tuominen) and whether to reserve space for it even if it isn't shown. - New attribute $.plot.version with the Flot version as a string. - The version comment is now included in the minified jquery.flot.min.js. - New options.grid.minBorderMargin for adjusting the minimum margin provided around the border (based on patch by corani, issue 188). - Refactor replot behaviour so Flot tries to reuse the existing canvas, adding shutdown() methods to the plot (based on patch by Ryley Breiddal, issue 269). This prevents a memory leak in Chrome and hopefully makes replotting faster for those who are using $.plot instead of .setData()/.draw(). Also update jQuery to 1.5.1 to prevent IE leaks fixed in jQuery. - New real-time line chart example. - New hooks: drawSeries, shutdown Bug fixes: - Fixed problem with findNearbyItem and bars on top of each other (reported by ragingchikn, issue 242). - Fixed problem with ticks and the border (based on patch from ultimatehustler69, issue 236). - Fixed problem with plugins adding options to the series objects. - Fixed a problem introduced in 0.6 with specifying a gradient with { brightness: x, opacity: y }. - Don't use $.browser.msie, check for getContext on the created canvas element instead and try to use excanvas if it's not found (fixes IE 9 compatibility). - highlight(s, index) was looking up the point in the original s.data instead of in the computed datapoints array, which breaks with plugins that modify the datapoints (such as the stacking plugin). Issue 316 reported by curlypaul924. - More robust handling of axis from data passed in from getData() (problem reported by Morgan). - Fixed problem with turning off bar outline (issue 253, fix by Jordi Castells). - Check the selection passed into setSelection in the selection plugin, to guard against errors when synchronizing plots (fix by Lau Bech Lauritzen). - Fix bug in crosshair code with mouseout resetting the crosshair even if it is locked (fix by Lau Bech Lauritzen and Banko Adam). - Fix bug with points plotting using line width from lines rather than points. - Fix bug with passing non-array 0 data (for plugins that don't expect arrays, patch by vpapp1). - Fix errors in JSON in examples so they work with jQuery 1.4.2 (fix reported by honestbleeps, issue 357). - Fix bug with tooltip in interacting.html, this makes the tooltip much smoother (fix by bdkahn). Fix related bug inside highlighting handler in Flot. - Use closure trick to make inline colorhelpers plugin respect jQuery.noConflict(true), renaming the global jQuery object (reported by Nick Stielau). - Listen for mouseleave events and fire a plothover event with empty item when it occurs to drop highlights when the mouse leaves the plot (reported by by outspirit). - Fix bug with using aboveData with a background (reported by amitayd). - Fix possible excanvas leak (report and suggested fix by tom9729). - Fix bug with backwards compatibility for shadowSize = 0 (report and suggested fix by aspinak). - Adapt examples to skip loading excanvas (fix by Ryley Breiddal). - Fix bug that prevent a simple f(x) = -x transform from working correctly (fix by Mike, issue 263). - Fix bug in restoring cursor in navigate plugin (reported by Matteo Gattanini, issue 395). - Fix bug in picking items when transform/inverseTransform is in use (reported by Ofri Raviv, and patches and analysis by Jan and Tom Paton, issue 334 and 467). - Fix problem with unaligned ticks and hover/click events caused by padding on the placeholder by hardcoding the placeholder padding to 0 (reported by adityadineshsaxena, Matt Sommer, Daniel Atos and some other people, issue 301). - Update colorhelpers plugin to avoid dying when trying to parse an invalid string (reported by cadavor, issue 483). Flot 0.6 -------- API changes: 1. Selection support has been moved to a plugin. Thus if you're passing selection: { mode: something }, you MUST include the file jquery.flot.selection.js after jquery.flot.js. This reduces the size of base Flot and makes it easier to customize the selection as well as improving code clarity. The change is based on a patch from andershol. 2. In the global options specified in the $.plot command, "lines", "points", "bars" and "shadowSize" have been moved to a sub-object called "series", i.e. $.plot(placeholder, data, { lines: { show: true }}) should be changed to $.plot(placeholder, data, { series: { lines: { show: true }}}) All future series-specific options will go into this sub-object to simplify plugin writing. Backward-compatibility code is in place, so old code should not break. 3. "plothover" no longer provides the original data point, but instead a normalized one, since there may be no corresponding original point. 4. Due to a bug in previous versions of jQuery, you now need at least jQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some improvements in event handling speed. Changes: - Added support for disabling interactivity for specific data series (request from Ronald Schouten and Steve Upton). - Flot now calls $() on the placeholder and optional legend container passed in so you can specify DOM elements or CSS expressions to make it easier to use Flot with libraries like Prototype or Mootools or through raw JSON from Ajax responses. - A new "plotselecting" event is now emitted while the user is making a selection. - The "plothover" event is now emitted immediately instead of at most 10 times per second, you'll have to put in a setTimeout yourself if you're doing something really expensive on this event. - The built-in date formatter can now be accessed as $.plot.formatDate(...) (suggestion by Matt Manela) and even replaced. - Added "borderColor" option to the grid (patch from Amaury Chamayou and patch from Mike R. Williamson). - Added support for gradient backgrounds for the grid, take a look at the "setting options" example (based on patch from Amaury Chamayou, issue 90). - Gradient bars (suggestion by stefpet). - Added a "plotunselected" event which is triggered when the selection is removed, see "selection" example (suggestion by Meda Ugo); - The option legend.margin can now specify horizontal and vertical margins independently (suggestion by someone who's annoyed). - Data passed into Flot is now copied to a new canonical format to enable further processing before it hits the drawing routines. As a side-effect, this should make Flot more robust in the face of bad data (and fixes issue 112). - Step-wise charting: line charts have a new option "steps" that when set to true connects the points with horizontal/vertical steps instead of diagonal lines. - The legend labelFormatter now passes the series in addition to just the label (suggestion by Vincent Lemeltier). - Horizontal bars (based on patch by Jason LeBrun). - Support for partial bars by specifying a third coordinate, i.e. they don't have to start from the axis. This can be used to make stacked bars. - New option to disable the (grid.show). - Added pointOffset method for converting a point in data space to an offset within the placeholder. - Plugin system: register an init method in the $.flot.plugins array to get started, see PLUGINS.txt for details on how to write plugins (it's easy). There are also some extra methods to enable access to internal state. - Hooks: you can register functions that are called while Flot is crunching the data and doing the plot. This can be used to modify Flot without changing the source, useful for writing plugins. Some hooks are defined, more are likely to come. - Threshold plugin: you can set a threshold and a color, and the data points below that threshold will then get the color. Useful for marking data below 0, for instance. - Stack plugin: you can specify a stack key for each series to have them summed. This is useful for drawing additive/cumulative graphs with bars and (currently unfilled) lines. - Crosshairs plugin: trace the mouse position on the axes, enable with crosshair: { mode: "x"} (see the new tracking example for a use). - Image plugin: plot prerendered images. - Navigation plugin for panning and zooming a plot. - More configurable grid. - Axis transformation support, useful for non-linear plots, e.g. log axes and compressed time axes (like omitting weekends). - Support for twelve-hour date formatting (patch by Forrest Aldridge). - The color parsing code in Flot has been cleaned up and split out so it's now available as a separate jQuery plugin. It's included inline in the Flot source to make dependency managing easier. This also makes it really easy to use the color helpers in Flot plugins. Bug fixes: - Fixed two corner-case bugs when drawing filled curves (report and analysis by Joshua Varner). - Fix auto-adjustment code when setting min to 0 for an axis where the dataset is completely flat on that axis (report by chovy). - Fixed a bug with passing in data from getData to setData when the secondary axes are used (issue 65, reported by nperelman). - Fixed so that it is possible to turn lines off when no other chart type is shown (based on problem reported by Glenn Vanderburg), and fixed so that setting lineWidth to 0 also hides the shadow (based on problem reported by Sergio Nunes). - Updated mousemove position expression to the latest from jQuery (bug reported by meyuchas). - Use CSS borders instead of background in legend (fix printing issue 25 and 45). - Explicitly convert axis min/max to numbers. - Fixed a bug with drawing marking lines with different colors (reported by Khurram). - Fixed a bug with returning y2 values in the selection event (fix by exists, issue 75). - Only set position relative on placeholder if it hasn't already a position different from static (reported by kyberneticist, issue 95). - Don't round markings to prevent sub-pixel problems (reported by Dan Lipsitt). - Make the grid border act similarly to a regular CSS border, i.e. prevent it from overlapping the plot itself. This also fixes a problem with anti-aliasing when the width is 1 pixel (reported by Anthony Ettinger). - Imported version 3 of excanvas and fixed two issues with the newer version. Hopefully, this will make Flot work with IE8 (nudge by Fabien Menager, further analysis by Booink, issue 133). - Changed the shadow code for lines to hopefully look a bit better with vertical lines. - Round tick positions to avoid possible problems with fractions (suggestion by Fred, issue 130). - Made the heuristic for determining how many ticks to aim for a bit smarter. - Fix for uneven axis margins (report and patch by Paul Kienzle) and snapping to ticks (concurrent report and patch by lifthrasiir). - Fixed bug with slicing in findNearbyItems (patch by zollman). - Make heuristic for x axis label widths more dynamic (patch by rickinhethuis). - Make sure points on top take precedence when finding nearby points when hovering (reported by didroe, issue 224). Flot 0.5 -------- Backwards API change summary: Timestamps are now in UTC. Also "selected" event -> becomes "plotselected" with new data, the parameters for setSelection are now different (but backwards compatibility hooks are in place), coloredAreas becomes markings with a new interface (but backwards compatibility hooks are in place). Interactivity: added a new "plothover" event and this and the "plotclick" event now returns the closest data item (based on patch by /david, patch by Mark Byers for bar support). See the revamped "interacting with the data" example for some hints on what you can do. Highlighting: you can now highlight points and datapoints are autohighlighted when you hover over them (if hovering is turned on). Support for dual axis has been added (based on patch by someone who's annoyed and /david). For each data series you can specify which axes it belongs to, and there are two more axes, x2axis and y2axis, to customize. This affects the "selected" event which has been renamed to "plotselected" and spews out { xaxis: { from: -10, to: 20 } ... }, setSelection in which the parameters are on a new form (backwards compatible hooks are in place so old code shouldn't break) and markings (formerly coloredAreas). Timestamps in time mode are now displayed according to UTC instead of the time zone of the visitor. This affects the way the timestamps should be input; you'll probably have to offset the timestamps according to your local time zone. It also affects any custom date handling code (which basically now should use the equivalent UTC date mehods, e.g. .setUTCMonth() instead of .setMonth(). Added support for specifying the size of tick labels (axis.labelWidth, axis.labelHeight). Useful for specifying a max label size to keep multiple plots aligned. Markings, previously coloredAreas, are now specified as ranges on the axes, like { xaxis: { from: 0, to: 10 }}. Furthermore with markings you can now draw horizontal/vertical lines by setting from and to to the same coordinate (idea from line support patch by by Ryan Funduk). The "fill" option can now be a number that specifies the opacity of the fill. You can now specify a coordinate as null (like [2, null]) and Flot will take the other coordinate into account when scaling the axes (based on patch by joebno). New option for bars "align". Set it to "center" to center the bars on the value they represent. setSelection now takes a second parameter which you can use to prevent the method from firing the "plotselected" handler. Using the "container" option in legend now overwrites the container element instead of just appending to it (fixes infinite legend bug, reported by several people, fix by Brad Dewey). Fixed a bug in calculating spacing around the plot (reported by timothytoe). Fixed a bug in finding max values for all-negative data sets. Prevent the possibility of eternal looping in tick calculations. Fixed a bug when borderWidth is set to 0 (reported by Rob/sanchothefat). Fixed a bug with drawing bars extending below 0 (reported by James Hewitt, patch by Ryan Funduk). Fixed a bug with line widths of bars (reported by MikeM). Fixed a bug with 'nw' and 'sw' legend positions. Improved the handling of axis auto-scaling with bars. Fixed a bug with multi-line x-axis tick labels (reported by Luca Ciano). IE-fix help by Savage Zhang. Flot 0.4 -------- API changes: deprecated axis.noTicks in favor of just specifying the number as axis.ticks. So "xaxis: { noTicks: 10 }" becomes "xaxis: { ticks: 10 }" Time series support. Specify axis.mode: "time", put in Javascript timestamps as data, and Flot will automatically spit out sensible ticks. Take a look at the two new examples. The format can be customized with axis.timeformat and axis.monthNames, or if that fails with axis.tickFormatter. Support for colored background areas via grid.coloredAreas. Specify an array of { x1, y1, x2, y2 } objects or a function that returns these given { xmin, xmax, ymin, ymax }. More members on the plot object (report by Chris Davies and others). "getData" for inspecting the assigned settings on data series (e.g. color) and "setData", "setupGrid" and "draw" for updating the contents without a total replot. The default number of ticks to aim for is now dependent on the size of the plot in pixels. Support for customizing tick interval sizes directly with axis.minTickSize and axis.tickSize. Cleaned up the automatic axis scaling algorithm and fixed how it interacts with ticks. Also fixed a couple of tick-related corner case bugs (one reported by mainstreetmark, another reported by timothytoe). The option axis.tickFormatter now takes a function with two parameters, the second parameter is an optional object with information about the axis. It has min, max, tickDecimals, tickSize. Added support for segmented lines (based on patch from Michael MacDonald) and for ignoring null and bad values (suggestion from Nick Konidaris and joshwaihi). Added support for changing the border width (joebno and safoo). Label colors can be changed via CSS by selecting the tickLabel class. Fixed a bug in handling single-item bar series (reported by Emil Filipov). Fixed erratic behaviour when interacting with the plot with IE 7 (reported by Lau Bech Lauritzen). Prevent IE/Safari text selection when selecting stuff on the canvas. Flot 0.3 -------- This is mostly a quick-fix release because jquery.js wasn't included in the previous zip/tarball. Support clicking on the plot. Turn it on with grid: { clickable: true }, then you get a "plotclick" event on the graph placeholder with the position in units of the plot. Fixed a bug in dealing with data where min = max, thanks to Michael Messinides. Include jquery.js in the zip/tarball. Flot 0.2 -------- Added support for putting a background behind the default legend. The default is the partly transparent background color. Added backgroundColor and backgroundOpacity to the legend options to control this. The ticks options can now be a callback function that takes one parameter, an object with the attributes min and max. The function should return a ticks array. Added labelFormatter option in legend, useful for turning the legend labels into links. Fixed a couple of bugs. The API should now be fully documented. Patch from Guy Fraser to make parts of the code smaller. API changes: Moved labelMargin option to grid from x/yaxis. Flot 0.1 -------- First public release. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/PLUGINS.txt ================================================ Writing plugins --------------- All you need to do to make a new plugin is creating an init function and a set of options (if needed), stuffing it into an object and putting it in the $.plot.plugins array. For example: function myCoolPluginInit(plot) { plot.coolstring = "Hello!"; }; $.plot.plugins.push({ init: myCoolPluginInit, options: { ... } }); // if $.plot is called, it will return a plot object with the // attribute "coolstring" Now, given that the plugin might run in many different places, it's a good idea to avoid leaking names. The usual trick here is wrap the above lines in an anonymous function which is called immediately, like this: (function () { inner code ... })(). To make it even more robust in case $ is not bound to jQuery but some other Javascript library, we can write it as (function ($) { // plugin definition // ... })(jQuery); There's a complete example below, but you should also check out the plugins bundled with Flot. Complete example ---------------- Here is a simple debug plugin which alerts each of the series in the plot. It has a single option that control whether it is enabled and how much info to output: (function ($) { function init(plot) { var debugLevel = 1; function checkDebugEnabled(plot, options) { if (options.debug) { debugLevel = options.debug; plot.hooks.processDatapoints.push(alertSeries); } } function alertSeries(plot, series, datapoints) { var msg = "series " + series.label; if (debugLevel > 1) msg += " with " + series.data.length + " points"; alert(msg); } plot.hooks.processOptions.push(checkDebugEnabled); } var options = { debug: 0 }; $.plot.plugins.push({ init: init, options: options, name: "simpledebug", version: "0.1" }); })(jQuery); We also define "name" and "version". It's not used by Flot, but might be helpful for other plugins in resolving dependencies. Put the above in a file named "jquery.flot.debug.js", include it in an HTML page and then it can be used with: $.plot($("#placeholder"), [...], { debug: 2 }); This simple plugin illustrates a couple of points: - It uses the anonymous function trick to avoid name pollution. - It can be enabled/disabled through an option. - Variables in the init function can be used to store plot-specific state between the hooks. The two last points are important because there may be multiple plots on the same page, and you'd want to make sure they are not mixed up. Shutting down a plugin ---------------------- Each plot object has a shutdown hook which is run when plot.shutdown() is called. This usually mostly happens in case another plot is made on top of an existing one. The purpose of the hook is to give you a chance to unbind any event handlers you've registered and remove any extra DOM things you've inserted. The problem with event handlers is that you can have registered a handler which is run in some point in the future, e.g. with setTimeout(). Meanwhile, the plot may have been shutdown and removed, but because your event handler is still referencing it, it can't be garbage collected yet, and worse, if your handler eventually runs, it may overwrite stuff on a completely different plot. Some hints on the options ------------------------- Plugins should always support appropriate options to enable/disable them because the plugin user may have several plots on the same page where only one should use the plugin. In most cases it's probably a good idea if the plugin is turned off rather than on per default, just like most of the powerful features in Flot. If the plugin needs options that are specific to each series, like the points or lines options in core Flot, you can put them in "series" in the options object, e.g. var options = { series: { downsample: { algorithm: null, maxpoints: 1000 } } } Then they will be copied by Flot into each series, providing default values in case none are specified. Think hard and long about naming the options. These names are going to be public API, and code is going to depend on them if the plugin is successful. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/README.txt ================================================ About ----- Flot is a Javascript plotting library for jQuery. Read more at the website: http://code.google.com/p/flot/ Take a look at the examples linked from above, they should give a good impression of what Flot can do and the source code of the examples is probably the fastest way to learn how to use Flot. Installation ------------ Just include the Javascript file after you've included jQuery. Generally, all browsers that support the HTML5 canvas tag are supported. For support for Internet Explorer < 9, you can use Excanvas, a canvas emulator; this is used in the examples bundled with Flot. You just include the excanvas script like this: If it's not working on your development IE 6.0, check that it has support for VML which Excanvas is relying on. It appears that some stripped down versions used for test environments on virtual machines lack the VML support. You can also try using Flashcanvas (see http://code.google.com/p/flashcanvas/), which uses Flash to do the emulation. Although Flash can be a bit slower to load than VML, if you've got a lot of points, the Flash version can be much faster overall. Flot contains some wrapper code for activating Excanvas which Flashcanvas is compatible with. You need at least jQuery 1.2.6, but try at least 1.3.2 for interactive charts because of performance improvements in event handling. Basic usage ----------- Create a placeholder div to put the graph in:
        You need to set the width and height of this div, otherwise the plot library doesn't know how to scale the graph. You can do it inline like this:
        You can also do it with an external stylesheet. Make sure that the placeholder isn't within something with a display:none CSS property - in that case, Flot has trouble measuring label dimensions which results in garbled looks and might have trouble measuring the placeholder dimensions which is fatal (it'll throw an exception). Then when the div is ready in the DOM, which is usually on document ready, run the plot function: $.plot($("#placeholder"), data, options); Here, data is an array of data series and options is an object with settings if you want to customize the plot. Take a look at the examples for some ideas of what to put in or look at the reference in the file "API.txt". Here's a quick example that'll draw a line from (0, 0) to (1, 1): $.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } }); The plot function immediately draws the chart and then returns a plot object with a couple of methods. What's with the name? --------------------- First: it's pronounced with a short o, like "plot". Not like "flawed". So "Flot" rhymes with "plot". And if you look up "flot" in a Danish-to-English dictionary, some up the words that come up are "good-looking", "attractive", "stylish", "smart", "impressive", "extravagant". One of the main goals with Flot is pretty looks. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/ajax.html ================================================ Flot Examples

        Flot Examples

        Example of loading data dynamically with AJAX. Percentage change in GDP (source: Eurostat). Click the buttons below.

        The data is fetched over HTTP, in this case directly from text files. Usually the URL would point to some web server handler (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that extracts it from a database and serializes it to JSON.

        - data -

        - data -

        - data -

        If you combine AJAX with setTimeout, you can poll the server for new data.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/annotating.html ================================================ Flot Examples

        Flot Examples

        Flot has support for simple background decorations such as lines and rectangles. They can be useful for marking up certain areas. You can easily add any HTML you need with standard DOM manipulation, e.g. for labels. For drawing custom shapes there is also direct access to the canvas.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/basic.html ================================================ Flot Examples

        Flot Examples

        Simple example. You don't need to specify much to get an attractive look. Put in a placeholder, make sure you set its dimensions (otherwise the plot library will barf) and call the plot function with the data. The axes are automatically scaled.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth-1.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth-2.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth-3.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth-4.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth-5.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-eu-gdp-growth.json ================================================ { "label": "Europe (EU27)", "data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-japan-gdp-growth.json ================================================ { "label": "Japan", "data": [[1999, -0.1], [2000, 2.9], [2001, 0.2], [2002, 0.3], [2003, 1.4], [2004, 2.7], [2005, 1.9], [2006, 2.0], [2007, 2.3], [2008, -0.7]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/data-usa-gdp-growth.json ================================================ { "label": "USA", "data": [[1999, 4.4], [2000, 3.7], [2001, 0.8], [2002, 1.6], [2003, 2.5], [2004, 3.6], [2005, 2.9], [2006, 2.8], [2007, 2.0], [2008, 1.1]] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/graph-types.html ================================================ Flot Examples

        Flot Examples

        Flot supports lines, points, filled areas, bars and any combinations of these, in the same plot and even on the same data series.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/image.html ================================================ Flot Examples

        Flot Examples

        The Cat's Eye Nebula (picture from Hubble).

        With the image plugin, you can plot images. This is for example useful for getting ticks on complex prerendered visualizations. Instead of inputting data points, you put in the images and where their two opposite corners are supposed to be in plot space.

        Images represent a little further complication because you need to make sure they are loaded before you can use them (Flot skips incomplete images). The plugin comes with a couple of helpers for doing that.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/index.html ================================================ Flot Examples

        Flot Examples

        Here are some examples for Flot, the Javascript charting library for jQuery:

        Being interactive:

        Various features:

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/interacting-axes.html ================================================ Flot Examples

        Flot Examples

        With multiple axes, you sometimes need to interact with them. A simple way to do this is to draw the plot, deduce the axis placements and insert a couple of divs on top to catch events. Try clicking an axis.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/interacting.html ================================================ Flot Examples

        Flot Examples

        One of the goals of Flot is to support user interactions. Try pointing and clicking on the points.

        Mouse hovers at (0, 0).

        A tooltip is easy to build with a bit of jQuery code and the data returned from the plot.

        Enable tooltip

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/layout.css ================================================ body { font-family: sans-serif; font-size: 16px; margin: 50px; max-width: 800px; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/multiple-axes.html ================================================ Flot Examples

        Flot Examples

        Multiple axis support showing the raw oil price in US $/barrel of crude oil vs. the exchange rate from US $ to €.

        As illustrated, you can put in multiple axes if you need to. For each data series, simply specify the axis number. In the options, you can then configure where you want the extra axes to appear.

        Position axis or .

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/navigate.html ================================================ Flot Examples

        Flot Examples

        With the navigate plugin it is easy to add panning and zooming. Drag to pan, double click to zoom (or use the mouse scrollwheel).

        The plugin fires events (useful for synchronizing several plots) and adds a couple of public methods so you can easily build a little user interface around it, like the little buttons at the top right in the plot.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/percentiles.html ================================================ Flot Examples

        Flot Examples

        Height in centimeters of individuals from the US (2003-2006) as function of age in years (source: CDC). The 15%-85%, 25%-75% and 50% percentiles are indicated.

        For each point of a filled curve, you can specify an arbitrary bottom. As this example illustrates, this can be useful for plotting percentiles. If you have the data sets available without appropriate fill bottoms, you can use the fillbetween plugin to compute the data point bottoms automatically.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/pie.html ================================================ Flot Pie Examples

        Flot Pie Examples

        Default with Legend

        Default without Legend

        Graph2

        Graph3

        Graph4

        Graph5

        Graph6

        Graph7

        Graph8

        Graph9

        Donut

        Interactive

        Pie Options

        • option: default value - Description of option
        • show: false - Enable the plugin and draw as a pie.
        • radius: 'auto' - Sets the radius of the pie. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length. If set to 'auto', it will be set to 1 if the legend is enabled and 3/4 if not.
        • innerRadius: 0 - Sets the radius of the donut hole. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the radius, otherwise it will use the value as a direct pixel length.
        • startAngle: 3/2 - Factor of PI used for the starting angle (in radians) It can range between 0 and 2 (where 0 and 2 have the same result).
        • tilt: 1 - Percentage of tilt ranging from 0 and 1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn).
        • offset:
          • top: 0 - Pixel distance to move the pie up and down (relative to the center).
          • left: 'auto' - Pixel distance to move the pie left and right (relative to the center).
        • stroke:
          • color: '#FFF' - Color of the border of each slice. Hexadecimal color definitions are prefered (other formats may or may not work).
          • width: 1 - Pixel width of the border of each slice.
        • label:
          • show: 'auto' - Enable/Disable the labels. This can be set to true, false, or 'auto'. When set to 'auto', it will be set to false if the legend is enabled and true if not.
          • radius: 1 - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.
          • threshold: 0 - Hides the labels of any pie slice that is smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will hide all slices 3% or less of the total.
          • formatter: [function] - This function specifies how the positioned labels should be formatted, and is applied after the legend's labelFormatter function. The labels can also still be styled using the class "pieLabel" (i.e. ".pieLabel" or "#graph1 .pieLabel").
          • radius: 1 - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.
          • background:
            • color: null - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the slice.
            • opacity: 0 - Opacity of the background for the positioned labels. Acceptable values range from 0 to 1, where 0 is completely transparent and 1 is completely opaque.
        • combine:
          • threshold: 0 - Combines all slices that are smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will combine all slices 3% or less into one slice).
          • color: null - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the first slice to be combined.
          • label: 'Other' - Label text for the combined slice.
        • highlight:
          • opacity: 0.5 - Opacity of the highlight overlay on top of the current pie slice. Currently this just uses a white overlay, but support for changing the color of the overlay will also be added at a later date.

        Changes/Features

        • v1.0 - November 20th, 2009 - Brian Medendorp
        • The pie plug-in is now part of the Flot repository! This should make it a lot easier to deal with.
        • Added a new option (innerRadius) to add a "donut hole" to the center of the pie, based on comtributions from Anthony Aragues. I was a little reluctant to add this feature because it doesn't work very well with the shadow created for the tilted pie, but figured it was worthwhile for non-tilted pies. Also, excanvas apparently doesn't support compositing, so it will fall back to using the stroke color to fill in the center (but I recommend setting the stroke color to the background color anyway).
        • Changed the lineJoin for the border of the pie slices to use the 'round' option. This should make the center of the pie look better, particularly when there are numerous thin slices.
        • Included a bug fix submitted by btburnett3 to display a slightly smaller slice in the event that the slice is 100% and being rendered with Internet Explorer. I haven't experienced this bug myself, but it doesn't seem to hurt anything so I've included it.
        • The tilt value is now used when calculating the maximum radius of the pie in relation to the height of the container. This should prevent the pie from being smaller than it needed to in some cases, as well as reducing the amount of extra white space generated above and below the pie.
        • Hover and Click functionality are now availabe!
          • Thanks to btburnett3 for the original hover functionality and Anthony Aragues for the modification that makes it compatable with excanvas, this was a huge help!
          • Added a new option (highlight opacity) to modify the highlight created when mousing over a slice. Currently this just uses a white overlay, but an option to change the hightlight color will be added when the appropriate functionality becomes available.
          • I had a major setback that required me to practically rebuild the hover/click events from scratch one piece at a time (I discovered that it only worked with a single pie on a page at a time), but the end result ended up being virtually identical to the original, so I'm not quite sure what exactly made it work.
          • Warning: There are some minor issues with using this functionality in conjuction with some of the other more advanced features (tilt and donut). When using a donut hole, the inner portion still triggers the events even though that portion of the pie is no longer visible. When tilted, the interactive portions still use the original, untilted version of the pie when determining mouse position (this is because the isPointInPath function apparently doesn't work with transformations), however hover and click both work this way, so the appropriate slice is still highlighted when clicking, and it isn't as noticable of a problem.
        • Included a bug fix submitted by Xavi Ivars to fix array issues when other javascript libraries are included in addition to jQuery

        • v0.4 - July 1st, 2009 - Brian Medendorp
        • Each series will now be shown in the legend, even if it's value is zero. The series will not get a positioned label because it will overlap with the other labels present and often makes them unreadable.
        • Data can now be passed in using the standard Flot method using an array of datapoints, the pie plugin will simply use the first y-value that it finds for each series in this case. The plugin uses this datastructure internally, but you can still use the old method of passing in a single numerical value for each series (the plugin will convert it as necessary). This should make it easier to transition from other types of graphs (such as a stacked bar graph) to a pie.
        • The pie can now be tilted at an angle with a new "tilt" option. Acceptable values range from 0-1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn). If the plugin determines that it will fit within the canvas, a drop shadow will be drawn under the tilted pie (this also requires a tilt value of 0.8 or less).

        • v0.3.2 - June 25th, 2009 - Brian Medendorp
        • Fixed a bug that was causing the pie to be shifted too far left or right when the legend is showing in some cases.

        • v0.3.1 - June 24th, 2009 - Brian Medendorp
        • Fixed a bug that was causing nothing to be drawn and generating a javascript error if any of the data values were set to zero.

        • v0.3 - June 23rd, 2009 - Brian Medendorp
        • The legend now works without any modifications! Because of changes made to flot and the plugin system (thanks Ole Laursen!) I was able to simplify a number of things and am now able to use the legend without the direct access hack that was required in the previous version.

        • v0.2 - June 22nd, 2009 - Brian Medendorp
        • The legend now works but only if you make the necessary changes to jquery.flot.js. Because of this, I changed the default values for pie.radius and pie.label.show to new 'auto' settings that change the default behavior of the size and labels depending on whether the legend functionality is available or not.

        • v0.1 - June 18th, 2009 - Brian Medendorp
        • Rewrote the entire pie code into a flot plugin (since that is now an option), so it should be much easier to use and the code is cleaned up a bit. However, the (standard flot) legend is no longer available because the only way to prevent the grid lines from being displayed also prevents the legend from being displayed. Hopefully this can be fixed at a later date.
        • Restructured and combined some of the options. It should be much easier to deal with now.
        • Added the ability to change the starting point of the pie (still defaults to the top).
        • Modified the default options to show the labels to compensate for the lack of a legend.
        • Modified this page to use a random dataset. Note: you may need to refresh the page to see the effects of some of the examples.

        • May 21st, 2009 - Brian Medendorp
        • Merged original pie modifications by Sergey Nosenko into the latest SVN version (as of May 15th, 2009) so that it will work with ie8.
        • Pie graph will now be centered in the canvas unless moved because of the legend or manually via the options. Additionally it prevents the pie from being moved beyond the edge of the canvas.
        • Modified the code related to the labelFormatter option to apply flot's legend labelFormatter first. This is so that the labels will be consistent, but still provide extra formatting for the positioned labels (such as adding the percentage value).
        • Positioned labels now have their backgrounds applied as a seperate element (much like the legend background) so that the opacity value can be set independently from the label itself (foreground). Additionally, the background color defaults to that of the matching slice.
        • As long as the labelOffset and radiusLimit are not set to hard values, the pie will be shrunk if the labels will extend outside the edge of the canvas
        • Added new options "radiusLimitFactor" and "radiusLimit" which limits how large the (visual) radius of the pie is in relation to the full radius (as calculated from the canvas dimensions) or a hard-pixel value (respectively). This allows for pushing the labels "outside" the pie.
        • Added a new option "labelHidePercent" that does not show the positioned labels of slices smaller than the specified percentage. This is to help prevent a bunch of overlapping labels from small slices.
        • Added a new option "sliceCombinePercent" that combines all slices smaller than the specified percentage into one larger slice. This is to help make the pie more attractive when there are a number of tiny slices. The options "sliceCombineColor" and "sliceCombineLabel" have also been added to change the color and name of the new slice if desired.
        • Tested in Firefox (3.0.10, 3.5b4), Internet Explorer (6.0.2900, 7.0.5730, 8.0.6001), Chrome (1.0.154), Opera (9.64), and Safari (3.1.1, 4 beta 5528.16).
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/realtime.html ================================================ Flot Examples

        Flot Examples

        You can update a chart periodically to get a real-time effect by using a timer to insert the new data in the plot and redraw it.

        Time between updates: milliseconds

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/resize.html ================================================ Flot Examples

        Flot Examples

        Sometimes it makes more sense to just let the plot take up the available space. In that case, we need to redraw the plot each time the placeholder changes its size. If you include the resize plugin, this is handled automatically.

        Try resizing the window.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/selection.html ================================================ Flot Examples

        Flot Examples

        1000 kg. CO2 emissions per year per capita for various countries (source: Wikipedia).

        Flot supports selections through the selection plugin. You can enable rectangular selection or one-dimensional selection if the user should only be able to select on one axis. Try left-click and drag on the plot above where selection on the x axis is enabled.

        You selected:

        The plot command returns a plot object you can use to control the selection. Click the buttons below.

        Selections are really useful for zooming. Just replot the chart with min and max values for the axes set to the values in the "plotselected" event triggered. Enable the checkbox below and select a region again.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/setting-options.html ================================================ Flot Examples

        Flot Examples

        There are plenty of options you can set to control the precise looks of your plot. You can control the ticks on the axes, the legend, the graph type, etc. The idea is that Flot goes to great lengths to provide sensible defaults so that you don't have to customize much for a good result.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/stacking.html ================================================ Flot Examples

        Flot Examples

        With the stack plugin, you can have Flot stack the series. This is useful if you wish to display both a total and the constituents it is made of. The only requirement is that you provide the input sorted on x.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/symbols.html ================================================ Flot Examples

        Flot Examples

        Various point types. Circles are built-in. For other point types, you can define a little callback function to draw the symbol; some common ones are available in the symbol plugin.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/thresholding.html ================================================ Flot Examples

        Flot Examples

        With the threshold plugin, you can apply a specific color to the part of a data series below a threshold. This is can be useful for highlighting negative values, e.g. when displaying net results or what's in stock.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/time.html ================================================ Flot Examples

        Flot Examples

        Monthly mean atmospheric CO2 in PPM at Mauna Loa, Hawaii (source: NOAA/ESRL).

        If you tell Flot that an axis represents time, the data will be interpreted as timestamps and the ticks adjusted and formatted accordingly.

        Zoom to:

        The timestamps must be specified as Javascript timestamps, as milliseconds since January 1, 1970 00:00. This is like Unix timestamps, but in milliseconds instead of seconds (remember to multiply with 1000!).

        As an extra caveat, the timestamps are interpreted according to UTC to avoid having the graph shift with each visitor's local time zone. So you might have to add your local time zone offset to the timestamps or simply pretend that the data was produced in UTC instead of your local time zone.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/tracking.html ================================================ Flot Examples

        Flot Examples

        You can add crosshairs that'll track the mouse position, either on both axes or as here on only one.

        If you combine it with listening on hover events, you can use it to track the intersection on the curves by interpolating the data points (look at the legend).

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/turning-series.html ================================================ Flot Examples

        Flot Examples

        Here is an example with real data: military budgets for various countries in constant (2005) million US dollars (source: SIPRI).

        Since all data is available client-side, it's pretty easy to make the plot interactive. Try turning countries on/off with the checkboxes below.

        Show:

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/visitors.html ================================================ Flot Examples

        Flot Examples

        Visitors per day to the Flot homepage. Weekends are colored. Try zooming. The plot below shows an overview.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/examples/zooming.html ================================================ Flot Examples

        Flot Examples

        The selection support makes it easy to construct flexible zooming schemes. With a few lines of code, the small overview plot to the right has been connected to the large plot. Try selecting a rectangle on either of them.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/excanvas.js ================================================ // Copyright 2006 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Known Issues: // // * Patterns only support repeat. // * Radial gradient are not implemented. The VML version of these look very // different from the canvas one. // * Clipping paths are not implemented. // * Coordsize. The width and height attribute have higher priority than the // width and height style values which isn't correct. // * Painting mode isn't implemented. // * Canvas width/height should is using content-box by default. IE in // Quirks mode will draw the canvas using border-box. Either change your // doctype to HTML5 // (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) // or use Box Sizing Behavior from WebFX // (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) // * Non uniform scaling does not correctly scale strokes. // * Filling very large shapes (above 5000 points) is buggy. // * Optimize. There is always room for speed improvements. // Only add this code if we do not already have a canvas implementation if (!document.createElement('canvas').getContext) { (function() { // alias some functions to make (compiled) code shorter var m = Math; var mr = m.round; var ms = m.sin; var mc = m.cos; var abs = m.abs; var sqrt = m.sqrt; // this is used for sub pixel precision var Z = 10; var Z2 = Z / 2; /** * This funtion is assigned to the elements as element.getContext(). * @this {HTMLElement} * @return {CanvasRenderingContext2D_} */ function getContext() { return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this)); } var slice = Array.prototype.slice; /** * Binds a function to an object. The returned function will always use the * passed in {@code obj} as {@code this}. * * Example: * * g = bind(f, obj, a, b) * g(c, d) // will do f.call(obj, a, b, c, d) * * @param {Function} f The function to bind the object to * @param {Object} obj The object that should act as this when the function * is called * @param {*} var_args Rest arguments that will be used as the initial * arguments when the function is called * @return {Function} A new function that has bound this */ function bind(f, obj, var_args) { var a = slice.call(arguments, 2); return function() { return f.apply(obj, a.concat(slice.call(arguments))); }; } function encodeHtmlAttribute(s) { return String(s).replace(/&/g, '&').replace(/"/g, '"'); } function addNamespacesAndStylesheet(doc) { // create xmlns if (!doc.namespaces['g_vml_']) { doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml', '#default#VML'); } if (!doc.namespaces['g_o_']) { doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office', '#default#VML'); } // Setup default CSS. Only add one style sheet per document if (!doc.styleSheets['ex_canvas_']) { var ss = doc.createStyleSheet(); ss.owningElement.id = 'ex_canvas_'; ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + // default size is 300x150 in Gecko and Opera 'text-align:left;width:300px;height:150px}'; } } // Add namespaces and stylesheet at startup. addNamespacesAndStylesheet(document); var G_vmlCanvasManager_ = { init: function(opt_doc) { if (/MSIE/.test(navigator.userAgent) && !window.opera) { var doc = opt_doc || document; // Create a dummy element so that IE will allow canvas elements to be // recognized. doc.createElement('canvas'); doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); } }, init_: function(doc) { // find all canvas elements var els = doc.getElementsByTagName('canvas'); for (var i = 0; i < els.length; i++) { this.initElement(els[i]); } }, /** * Public initializes a canvas element so that it can be used as canvas * element from now on. This is called automatically before the page is * loaded but if you are creating elements using createElement you need to * make sure this is called on the element. * @param {HTMLElement} el The canvas element to initialize. * @return {HTMLElement} the element that was created. */ initElement: function(el) { if (!el.getContext) { el.getContext = getContext; // Add namespaces and stylesheet to document of the element. addNamespacesAndStylesheet(el.ownerDocument); // Remove fallback content. There is no way to hide text nodes so we // just remove all childNodes. We could hide all elements and remove // text nodes but who really cares about the fallback content. el.innerHTML = ''; // do not use inline function because that will leak memory el.attachEvent('onpropertychange', onPropertyChange); el.attachEvent('onresize', onResize); var attrs = el.attributes; if (attrs.width && attrs.width.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setWidth_(attrs.width.nodeValue); el.style.width = attrs.width.nodeValue + 'px'; } else { el.width = el.clientWidth; } if (attrs.height && attrs.height.specified) { // TODO: use runtimeStyle and coordsize // el.getContext().setHeight_(attrs.height.nodeValue); el.style.height = attrs.height.nodeValue + 'px'; } else { el.height = el.clientHeight; } //el.getContext().setCoordsize_() } return el; } }; function onPropertyChange(e) { var el = e.srcElement; switch (e.propertyName) { case 'width': el.getContext().clearRect(); el.style.width = el.attributes.width.nodeValue + 'px'; // In IE8 this does not trigger onresize. el.firstChild.style.width = el.clientWidth + 'px'; break; case 'height': el.getContext().clearRect(); el.style.height = el.attributes.height.nodeValue + 'px'; el.firstChild.style.height = el.clientHeight + 'px'; break; } } function onResize(e) { var el = e.srcElement; if (el.firstChild) { el.firstChild.style.width = el.clientWidth + 'px'; el.firstChild.style.height = el.clientHeight + 'px'; } } G_vmlCanvasManager_.init(); // precompute "00" to "FF" var decToHex = []; for (var i = 0; i < 16; i++) { for (var j = 0; j < 16; j++) { decToHex[i * 16 + j] = i.toString(16) + j.toString(16); } } function createMatrixIdentity() { return [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ]; } function matrixMultiply(m1, m2) { var result = createMatrixIdentity(); for (var x = 0; x < 3; x++) { for (var y = 0; y < 3; y++) { var sum = 0; for (var z = 0; z < 3; z++) { sum += m1[x][z] * m2[z][y]; } result[x][y] = sum; } } return result; } function copyState(o1, o2) { o2.fillStyle = o1.fillStyle; o2.lineCap = o1.lineCap; o2.lineJoin = o1.lineJoin; o2.lineWidth = o1.lineWidth; o2.miterLimit = o1.miterLimit; o2.shadowBlur = o1.shadowBlur; o2.shadowColor = o1.shadowColor; o2.shadowOffsetX = o1.shadowOffsetX; o2.shadowOffsetY = o1.shadowOffsetY; o2.strokeStyle = o1.strokeStyle; o2.globalAlpha = o1.globalAlpha; o2.font = o1.font; o2.textAlign = o1.textAlign; o2.textBaseline = o1.textBaseline; o2.arcScaleX_ = o1.arcScaleX_; o2.arcScaleY_ = o1.arcScaleY_; o2.lineScale_ = o1.lineScale_; } var colorData = { aliceblue: '#F0F8FF', antiquewhite: '#FAEBD7', aquamarine: '#7FFFD4', azure: '#F0FFFF', beige: '#F5F5DC', bisque: '#FFE4C4', black: '#000000', blanchedalmond: '#FFEBCD', blueviolet: '#8A2BE2', brown: '#A52A2A', burlywood: '#DEB887', cadetblue: '#5F9EA0', chartreuse: '#7FFF00', chocolate: '#D2691E', coral: '#FF7F50', cornflowerblue: '#6495ED', cornsilk: '#FFF8DC', crimson: '#DC143C', cyan: '#00FFFF', darkblue: '#00008B', darkcyan: '#008B8B', darkgoldenrod: '#B8860B', darkgray: '#A9A9A9', darkgreen: '#006400', darkgrey: '#A9A9A9', darkkhaki: '#BDB76B', darkmagenta: '#8B008B', darkolivegreen: '#556B2F', darkorange: '#FF8C00', darkorchid: '#9932CC', darkred: '#8B0000', darksalmon: '#E9967A', darkseagreen: '#8FBC8F', darkslateblue: '#483D8B', darkslategray: '#2F4F4F', darkslategrey: '#2F4F4F', darkturquoise: '#00CED1', darkviolet: '#9400D3', deeppink: '#FF1493', deepskyblue: '#00BFFF', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1E90FF', firebrick: '#B22222', floralwhite: '#FFFAF0', forestgreen: '#228B22', gainsboro: '#DCDCDC', ghostwhite: '#F8F8FF', gold: '#FFD700', goldenrod: '#DAA520', grey: '#808080', greenyellow: '#ADFF2F', honeydew: '#F0FFF0', hotpink: '#FF69B4', indianred: '#CD5C5C', indigo: '#4B0082', ivory: '#FFFFF0', khaki: '#F0E68C', lavender: '#E6E6FA', lavenderblush: '#FFF0F5', lawngreen: '#7CFC00', lemonchiffon: '#FFFACD', lightblue: '#ADD8E6', lightcoral: '#F08080', lightcyan: '#E0FFFF', lightgoldenrodyellow: '#FAFAD2', lightgreen: '#90EE90', lightgrey: '#D3D3D3', lightpink: '#FFB6C1', lightsalmon: '#FFA07A', lightseagreen: '#20B2AA', lightskyblue: '#87CEFA', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#B0C4DE', lightyellow: '#FFFFE0', limegreen: '#32CD32', linen: '#FAF0E6', magenta: '#FF00FF', mediumaquamarine: '#66CDAA', mediumblue: '#0000CD', mediumorchid: '#BA55D3', mediumpurple: '#9370DB', mediumseagreen: '#3CB371', mediumslateblue: '#7B68EE', mediumspringgreen: '#00FA9A', mediumturquoise: '#48D1CC', mediumvioletred: '#C71585', midnightblue: '#191970', mintcream: '#F5FFFA', mistyrose: '#FFE4E1', moccasin: '#FFE4B5', navajowhite: '#FFDEAD', oldlace: '#FDF5E6', olivedrab: '#6B8E23', orange: '#FFA500', orangered: '#FF4500', orchid: '#DA70D6', palegoldenrod: '#EEE8AA', palegreen: '#98FB98', paleturquoise: '#AFEEEE', palevioletred: '#DB7093', papayawhip: '#FFEFD5', peachpuff: '#FFDAB9', peru: '#CD853F', pink: '#FFC0CB', plum: '#DDA0DD', powderblue: '#B0E0E6', rosybrown: '#BC8F8F', royalblue: '#4169E1', saddlebrown: '#8B4513', salmon: '#FA8072', sandybrown: '#F4A460', seagreen: '#2E8B57', seashell: '#FFF5EE', sienna: '#A0522D', skyblue: '#87CEEB', slateblue: '#6A5ACD', slategray: '#708090', slategrey: '#708090', snow: '#FFFAFA', springgreen: '#00FF7F', steelblue: '#4682B4', tan: '#D2B48C', thistle: '#D8BFD8', tomato: '#FF6347', turquoise: '#40E0D0', violet: '#EE82EE', wheat: '#F5DEB3', whitesmoke: '#F5F5F5', yellowgreen: '#9ACD32' }; function getRgbHslContent(styleString) { var start = styleString.indexOf('(', 3); var end = styleString.indexOf(')', start + 1); var parts = styleString.substring(start + 1, end).split(','); // add alpha if needed if (parts.length == 4 && styleString.substr(3, 1) == 'a') { alpha = Number(parts[3]); } else { parts[3] = 1; } return parts; } function percent(s) { return parseFloat(s) / 100; } function clamp(v, min, max) { return Math.min(max, Math.max(min, v)); } function hslToRgb(parts){ var r, g, b; h = parseFloat(parts[0]) / 360 % 360; if (h < 0) h++; s = clamp(percent(parts[1]), 0, 1); l = clamp(percent(parts[2]), 0, 1); if (s == 0) { r = g = b = l; // achromatic } else { var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hueToRgb(p, q, h + 1 / 3); g = hueToRgb(p, q, h); b = hueToRgb(p, q, h - 1 / 3); } return '#' + decToHex[Math.floor(r * 255)] + decToHex[Math.floor(g * 255)] + decToHex[Math.floor(b * 255)]; } function hueToRgb(m1, m2, h) { if (h < 0) h++; if (h > 1) h--; if (6 * h < 1) return m1 + (m2 - m1) * 6 * h; else if (2 * h < 1) return m2; else if (3 * h < 2) return m1 + (m2 - m1) * (2 / 3 - h) * 6; else return m1; } function processStyle(styleString) { var str, alpha = 1; styleString = String(styleString); if (styleString.charAt(0) == '#') { str = styleString; } else if (/^rgb/.test(styleString)) { var parts = getRgbHslContent(styleString); var str = '#', n; for (var i = 0; i < 3; i++) { if (parts[i].indexOf('%') != -1) { n = Math.floor(percent(parts[i]) * 255); } else { n = Number(parts[i]); } str += decToHex[clamp(n, 0, 255)]; } alpha = parts[3]; } else if (/^hsl/.test(styleString)) { var parts = getRgbHslContent(styleString); str = hslToRgb(parts); alpha = parts[3]; } else { str = colorData[styleString] || styleString; } return {color: str, alpha: alpha}; } var DEFAULT_STYLE = { style: 'normal', variant: 'normal', weight: 'normal', size: 10, family: 'sans-serif' }; // Internal text style cache var fontStyleCache = {}; function processFontStyle(styleString) { if (fontStyleCache[styleString]) { return fontStyleCache[styleString]; } var el = document.createElement('div'); var style = el.style; try { style.font = styleString; } catch (ex) { // Ignore failures to set to invalid font. } return fontStyleCache[styleString] = { style: style.fontStyle || DEFAULT_STYLE.style, variant: style.fontVariant || DEFAULT_STYLE.variant, weight: style.fontWeight || DEFAULT_STYLE.weight, size: style.fontSize || DEFAULT_STYLE.size, family: style.fontFamily || DEFAULT_STYLE.family }; } function getComputedStyle(style, element) { var computedStyle = {}; for (var p in style) { computedStyle[p] = style[p]; } // Compute the size var canvasFontSize = parseFloat(element.currentStyle.fontSize), fontSize = parseFloat(style.size); if (typeof style.size == 'number') { computedStyle.size = style.size; } else if (style.size.indexOf('px') != -1) { computedStyle.size = fontSize; } else if (style.size.indexOf('em') != -1) { computedStyle.size = canvasFontSize * fontSize; } else if(style.size.indexOf('%') != -1) { computedStyle.size = (canvasFontSize / 100) * fontSize; } else if (style.size.indexOf('pt') != -1) { computedStyle.size = fontSize / .75; } else { computedStyle.size = canvasFontSize; } // Different scaling between normal text and VML text. This was found using // trial and error to get the same size as non VML text. computedStyle.size *= 0.981; return computedStyle; } function buildStyle(style) { return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + style.size + 'px ' + style.family; } function processLineCap(lineCap) { switch (lineCap) { case 'butt': return 'flat'; case 'round': return 'round'; case 'square': default: return 'square'; } } /** * This class implements CanvasRenderingContext2D interface as described by * the WHATWG. * @param {HTMLElement} surfaceElement The element that the 2D context should * be associated with */ function CanvasRenderingContext2D_(surfaceElement) { this.m_ = createMatrixIdentity(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; // Canvas context properties this.strokeStyle = '#000'; this.fillStyle = '#000'; this.lineWidth = 1; this.lineJoin = 'miter'; this.lineCap = 'butt'; this.miterLimit = Z * 1; this.globalAlpha = 1; this.font = '10px sans-serif'; this.textAlign = 'left'; this.textBaseline = 'alphabetic'; this.canvas = surfaceElement; var el = surfaceElement.ownerDocument.createElement('div'); el.style.width = surfaceElement.clientWidth + 'px'; el.style.height = surfaceElement.clientHeight + 'px'; el.style.overflow = 'hidden'; el.style.position = 'absolute'; surfaceElement.appendChild(el); this.element_ = el; this.arcScaleX_ = 1; this.arcScaleY_ = 1; this.lineScale_ = 1; } var contextPrototype = CanvasRenderingContext2D_.prototype; contextPrototype.clearRect = function() { if (this.textMeasureEl_) { this.textMeasureEl_.removeNode(true); this.textMeasureEl_ = null; } this.element_.innerHTML = ''; }; contextPrototype.beginPath = function() { // TODO: Branch current matrix so that save/restore has no effect // as per safari docs. this.currentPath_ = []; }; contextPrototype.moveTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.lineTo = function(aX, aY) { var p = this.getCoords_(aX, aY); this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); this.currentX_ = p.x; this.currentY_ = p.y; }; contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { var p = this.getCoords_(aX, aY); var cp1 = this.getCoords_(aCP1x, aCP1y); var cp2 = this.getCoords_(aCP2x, aCP2y); bezierCurveTo(this, cp1, cp2, p); }; // Helper function that takes the already fixed cordinates. function bezierCurveTo(self, cp1, cp2, p) { self.currentPath_.push({ type: 'bezierCurveTo', cp1x: cp1.x, cp1y: cp1.y, cp2x: cp2.x, cp2y: cp2.y, x: p.x, y: p.y }); self.currentX_ = p.x; self.currentY_ = p.y; } contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { // the following is lifted almost directly from // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes var cp = this.getCoords_(aCPx, aCPy); var p = this.getCoords_(aX, aY); var cp1 = { x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) }; var cp2 = { x: cp1.x + (p.x - this.currentX_) / 3.0, y: cp1.y + (p.y - this.currentY_) / 3.0 }; bezierCurveTo(this, cp1, cp2, p); }; contextPrototype.arc = function(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { aRadius *= Z; var arcType = aClockwise ? 'at' : 'wa'; var xStart = aX + mc(aStartAngle) * aRadius - Z2; var yStart = aY + ms(aStartAngle) * aRadius - Z2; var xEnd = aX + mc(aEndAngle) * aRadius - Z2; var yEnd = aY + ms(aEndAngle) * aRadius - Z2; // IE won't render arches drawn counter clockwise if xStart == xEnd. if (xStart == xEnd && !aClockwise) { xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something // that can be represented in binary } var p = this.getCoords_(aX, aY); var pStart = this.getCoords_(xStart, yStart); var pEnd = this.getCoords_(xEnd, yEnd); this.currentPath_.push({type: arcType, x: p.x, y: p.y, radius: aRadius, xStart: pStart.x, yStart: pStart.y, xEnd: pEnd.x, yEnd: pEnd.y}); }; contextPrototype.rect = function(aX, aY, aWidth, aHeight) { this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); }; contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.stroke(); this.currentPath_ = oldPath; }; contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { var oldPath = this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.fill(); this.currentPath_ = oldPath; }; contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { var gradient = new CanvasGradient_('gradient'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.x1_ = aX1; gradient.y1_ = aY1; return gradient; }; contextPrototype.createRadialGradient = function(aX0, aY0, aR0, aX1, aY1, aR1) { var gradient = new CanvasGradient_('gradientradial'); gradient.x0_ = aX0; gradient.y0_ = aY0; gradient.r0_ = aR0; gradient.x1_ = aX1; gradient.y1_ = aY1; gradient.r1_ = aR1; return gradient; }; contextPrototype.drawImage = function(image, var_args) { var dx, dy, dw, dh, sx, sy, sw, sh; // to find the original width we overide the width and height var oldRuntimeWidth = image.runtimeStyle.width; var oldRuntimeHeight = image.runtimeStyle.height; image.runtimeStyle.width = 'auto'; image.runtimeStyle.height = 'auto'; // get the original size var w = image.width; var h = image.height; // and remove overides image.runtimeStyle.width = oldRuntimeWidth; image.runtimeStyle.height = oldRuntimeHeight; if (arguments.length == 3) { dx = arguments[1]; dy = arguments[2]; sx = sy = 0; sw = dw = w; sh = dh = h; } else if (arguments.length == 5) { dx = arguments[1]; dy = arguments[2]; dw = arguments[3]; dh = arguments[4]; sx = sy = 0; sw = w; sh = h; } else if (arguments.length == 9) { sx = arguments[1]; sy = arguments[2]; sw = arguments[3]; sh = arguments[4]; dx = arguments[5]; dy = arguments[6]; dw = arguments[7]; dh = arguments[8]; } else { throw Error('Invalid number of arguments'); } var d = this.getCoords_(dx, dy); var w2 = sw / 2; var h2 = sh / 2; var vmlStr = []; var W = 10; var H = 10; // For some reason that I've now forgotten, using divs didn't work vmlStr.push(' ' , '', ''); this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); }; contextPrototype.stroke = function(aFill) { var W = 10; var H = 10; // Divide the shape into chunks if it's too long because IE has a limit // somewhere for how long a VML shape can be. This simple division does // not work with fills, only strokes, unfortunately. var chunkSize = 5000; var min = {x: null, y: null}; var max = {x: null, y: null}; for (var j = 0; j < this.currentPath_.length; j += chunkSize) { var lineStr = []; var lineOpen = false; lineStr.push(''); if (!aFill) { appendStroke(this, lineStr); } else { appendFill(this, lineStr, min, max); } lineStr.push(''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); } }; function appendStroke(ctx, lineStr) { var a = processStyle(ctx.strokeStyle); var color = a.color; var opacity = a.alpha * ctx.globalAlpha; var lineWidth = ctx.lineScale_ * ctx.lineWidth; // VML cannot correctly render a line if the width is less than 1px. // In that case, we dilute the color to make the line look thinner. if (lineWidth < 1) { opacity *= lineWidth; } lineStr.push( '' ); } function appendFill(ctx, lineStr, min, max) { var fillStyle = ctx.fillStyle; var arcScaleX = ctx.arcScaleX_; var arcScaleY = ctx.arcScaleY_; var width = max.x - min.x; var height = max.y - min.y; if (fillStyle instanceof CanvasGradient_) { // TODO: Gradients transformed with the transformation matrix. var angle = 0; var focus = {x: 0, y: 0}; // additional offset var shift = 0; // scale factor for offset var expansion = 1; if (fillStyle.type_ == 'gradient') { var x0 = fillStyle.x0_ / arcScaleX; var y0 = fillStyle.y0_ / arcScaleY; var x1 = fillStyle.x1_ / arcScaleX; var y1 = fillStyle.y1_ / arcScaleY; var p0 = ctx.getCoords_(x0, y0); var p1 = ctx.getCoords_(x1, y1); var dx = p1.x - p0.x; var dy = p1.y - p0.y; angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number. if (angle < 0) { angle += 360; } // Very small angles produce an unexpected result because they are // converted to a scientific notation string. if (angle < 1e-6) { angle = 0; } } else { var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_); focus = { x: (p0.x - min.x) / width, y: (p0.y - min.y) / height }; width /= arcScaleX * Z; height /= arcScaleY * Z; var dimension = m.max(width, height); shift = 2 * fillStyle.r0_ / dimension; expansion = 2 * fillStyle.r1_ / dimension - shift; } // We need to sort the color stops in ascending order by offset, // otherwise IE won't interpret it correctly. var stops = fillStyle.colors_; stops.sort(function(cs1, cs2) { return cs1.offset - cs2.offset; }); var length = stops.length; var color1 = stops[0].color; var color2 = stops[length - 1].color; var opacity1 = stops[0].alpha * ctx.globalAlpha; var opacity2 = stops[length - 1].alpha * ctx.globalAlpha; var colors = []; for (var i = 0; i < length; i++) { var stop = stops[i]; colors.push(stop.offset * expansion + shift + ' ' + stop.color); } // When colors attribute is used, the meanings of opacity and o:opacity2 // are reversed. lineStr.push(''); } else if (fillStyle instanceof CanvasPattern_) { if (width && height) { var deltaLeft = -min.x; var deltaTop = -min.y; lineStr.push(''); } } else { var a = processStyle(ctx.fillStyle); var color = a.color; var opacity = a.alpha * ctx.globalAlpha; lineStr.push(''); } } contextPrototype.fill = function() { this.stroke(true); }; contextPrototype.closePath = function() { this.currentPath_.push({type: 'close'}); }; /** * @private */ contextPrototype.getCoords_ = function(aX, aY) { var m = this.m_; return { x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 }; }; contextPrototype.save = function() { var o = {}; copyState(this, o); this.aStack_.push(o); this.mStack_.push(this.m_); this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); }; contextPrototype.restore = function() { if (this.aStack_.length) { copyState(this.aStack_.pop(), this); this.m_ = this.mStack_.pop(); } }; function matrixIsFinite(m) { return isFinite(m[0][0]) && isFinite(m[0][1]) && isFinite(m[1][0]) && isFinite(m[1][1]) && isFinite(m[2][0]) && isFinite(m[2][1]); } function setM(ctx, m, updateLineScale) { if (!matrixIsFinite(m)) { return; } ctx.m_ = m; if (updateLineScale) { // Get the line scale. // Determinant of this.m_ means how much the area is enlarged by the // transformation. So its square root can be used as a scale factor // for width. var det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; ctx.lineScale_ = sqrt(abs(det)); } } contextPrototype.translate = function(aX, aY) { var m1 = [ [1, 0, 0], [0, 1, 0], [aX, aY, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.rotate = function(aRot) { var c = mc(aRot); var s = ms(aRot); var m1 = [ [c, s, 0], [-s, c, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.scale = function(aX, aY) { this.arcScaleX_ *= aX; this.arcScaleY_ *= aY; var m1 = [ [aX, 0, 0], [0, aY, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) { var m1 = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) { var m = [ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, m, true); }; /** * The text drawing function. * The maxWidth argument isn't taken in account, since no browser supports * it yet. */ contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) { var m = this.m_, delta = 1000, left = 0, right = delta, offset = {x: 0, y: 0}, lineStr = []; var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_); var fontStyleString = buildStyle(fontStyle); var elementStyle = this.element_.currentStyle; var textAlign = this.textAlign.toLowerCase(); switch (textAlign) { case 'left': case 'center': case 'right': break; case 'end': textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left'; break; case 'start': textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left'; break; default: textAlign = 'left'; } // 1.75 is an arbitrary number, as there is no info about the text baseline switch (this.textBaseline) { case 'hanging': case 'top': offset.y = fontStyle.size / 1.75; break; case 'middle': break; default: case null: case 'alphabetic': case 'ideographic': case 'bottom': offset.y = -fontStyle.size / 2.25; break; } switch(textAlign) { case 'right': left = delta; right = 0.05; break; case 'center': left = right = delta / 2; break; } var d = this.getCoords_(x + offset.x, y + offset.y); lineStr.push(''); if (stroke) { appendStroke(this, lineStr); } else { // TODO: Fix the min and max params. appendFill(this, lineStr, {x: -left, y: 0}, {x: right, y: fontStyle.size}); } var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z); lineStr.push('', '', ''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); }; contextPrototype.fillText = function(text, x, y, maxWidth) { this.drawText_(text, x, y, maxWidth, false); }; contextPrototype.strokeText = function(text, x, y, maxWidth) { this.drawText_(text, x, y, maxWidth, true); }; contextPrototype.measureText = function(text) { if (!this.textMeasureEl_) { var s = ''; this.element_.insertAdjacentHTML('beforeEnd', s); this.textMeasureEl_ = this.element_.lastChild; } var doc = this.element_.ownerDocument; this.textMeasureEl_.innerHTML = ''; this.textMeasureEl_.style.font = this.font; // Don't use innerHTML or innerText because they allow markup/whitespace. this.textMeasureEl_.appendChild(doc.createTextNode(text)); return {width: this.textMeasureEl_.offsetWidth}; }; /******** STUBS ********/ contextPrototype.clip = function() { // TODO: Implement }; contextPrototype.arcTo = function() { // TODO: Implement }; contextPrototype.createPattern = function(image, repetition) { return new CanvasPattern_(image, repetition); }; // Gradient / Pattern Stubs function CanvasGradient_(aType) { this.type_ = aType; this.x0_ = 0; this.y0_ = 0; this.r0_ = 0; this.x1_ = 0; this.y1_ = 0; this.r1_ = 0; this.colors_ = []; } CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { aColor = processStyle(aColor); this.colors_.push({offset: aOffset, color: aColor.color, alpha: aColor.alpha}); }; function CanvasPattern_(image, repetition) { assertImageIsValid(image); switch (repetition) { case 'repeat': case null: case '': this.repetition_ = 'repeat'; break case 'repeat-x': case 'repeat-y': case 'no-repeat': this.repetition_ = repetition; break; default: throwException('SYNTAX_ERR'); } this.src_ = image.src; this.width_ = image.width; this.height_ = image.height; } function throwException(s) { throw new DOMException_(s); } function assertImageIsValid(img) { if (!img || img.nodeType != 1 || img.tagName != 'IMG') { throwException('TYPE_MISMATCH_ERR'); } if (img.readyState != 'complete') { throwException('INVALID_STATE_ERR'); } } function DOMException_(s) { this.code = this[s]; this.message = s +': DOM Exception ' + this.code; } var p = DOMException_.prototype = new Error; p.INDEX_SIZE_ERR = 1; p.DOMSTRING_SIZE_ERR = 2; p.HIERARCHY_REQUEST_ERR = 3; p.WRONG_DOCUMENT_ERR = 4; p.INVALID_CHARACTER_ERR = 5; p.NO_DATA_ALLOWED_ERR = 6; p.NO_MODIFICATION_ALLOWED_ERR = 7; p.NOT_FOUND_ERR = 8; p.NOT_SUPPORTED_ERR = 9; p.INUSE_ATTRIBUTE_ERR = 10; p.INVALID_STATE_ERR = 11; p.SYNTAX_ERR = 12; p.INVALID_MODIFICATION_ERR = 13; p.NAMESPACE_ERR = 14; p.INVALID_ACCESS_ERR = 15; p.VALIDATION_ERR = 16; p.TYPE_MISMATCH_ERR = 17; // set up externs G_vmlCanvasManager = G_vmlCanvasManager_; CanvasRenderingContext2D = CanvasRenderingContext2D_; CanvasGradient = CanvasGradient_; CanvasPattern = CanvasPattern_; DOMException = DOMException_; })(); } // if ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.colorhelpers.js ================================================ /* Plugin for jQuery for working with colors. * * Version 1.1. * * Inspiration from jQuery color animation plugin by John Resig. * * Released under the MIT license by Ole Laursen, October 2009. * * Examples: * * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() * var c = $.color.extract($("#mydiv"), 'background-color'); * console.log(c.r, c.g, c.b, c.a); * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" * * Note that .scale() and .add() return the same modified object * instead of making a new one. * * V. 1.1: Fix error handling so e.g. parsing an empty string does * produce a color rather than just crashing. */ (function($) { $.color = {}; // construct color object with some convenient chainable helpers $.color.make = function (r, g, b, a) { var o = {}; o.r = r || 0; o.g = g || 0; o.b = b || 0; o.a = a != null ? a : 1; o.add = function (c, d) { for (var i = 0; i < c.length; ++i) o[c.charAt(i)] += d; return o.normalize(); }; o.scale = function (c, f) { for (var i = 0; i < c.length; ++i) o[c.charAt(i)] *= f; return o.normalize(); }; o.toString = function () { if (o.a >= 1.0) { return "rgb("+[o.r, o.g, o.b].join(",")+")"; } else { return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")"; } }; o.normalize = function () { function clamp(min, value, max) { return value < min ? min: (value > max ? max: value); } o.r = clamp(0, parseInt(o.r), 255); o.g = clamp(0, parseInt(o.g), 255); o.b = clamp(0, parseInt(o.b), 255); o.a = clamp(0, o.a, 1); return o; }; o.clone = function () { return $.color.make(o.r, o.b, o.g, o.a); }; return o.normalize(); } // extract CSS color property from element, going up in the DOM // if it's "transparent" $.color.extract = function (elem, css) { var c; do { c = elem.css(css).toLowerCase(); // keep going until we find an element that has color, or // we hit the body if (c != '' && c != 'transparent') break; elem = elem.parent(); } while (!$.nodeName(elem.get(0), "body")); // catch Safari's way of signalling transparent if (c == "rgba(0, 0, 0, 0)") c = "transparent"; return $.color.parse(c); } // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"), // returns color object, if parsing failed, you get black (0, 0, // 0) out $.color.parse = function (str) { var res, m = $.color.make; // Look for rgb(num,num,num) if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)) return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); // Look for rgba(num,num,num,num) if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); // Look for rgb(num%,num%,num%) if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)) return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55); // Look for rgba(num%,num%,num%,num) if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4])); // Look for #a0b1c2 if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); // Look for #fff if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16)); // Otherwise, we're most likely dealing with a named color var name = $.trim(str).toLowerCase(); if (name == "transparent") return m(255, 255, 255, 0); else { // default to black res = lookupColors[name] || [0, 0, 0]; return m(res[0], res[1], res[2]); } } var lookupColors = { 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] }; })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.crosshair.js ================================================ /* Flot plugin for showing crosshairs, thin lines, when the mouse hovers over the plot. crosshair: { mode: null or "x" or "y" or "xy" color: color lineWidth: number } Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical crosshair that lets you trace the values on the x axis, "y" enables a horizontal crosshair and "xy" enables them both. "color" is the color of the crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of the drawn lines (default is 1). The plugin also adds four public methods: - setCrosshair(pos) Set the position of the crosshair. Note that this is cleared if the user moves the mouse. "pos" is in coordinates of the plot and should be on the form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple axes), which is coincidentally the same format as what you get from a "plothover" event. If "pos" is null, the crosshair is cleared. - clearCrosshair() Clear the crosshair. - lockCrosshair(pos) Cause the crosshair to lock to the current location, no longer updating if the user moves the mouse. Optionally supply a position (passed on to setCrosshair()) to move it to. Example usage: var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; $("#graph").bind("plothover", function (evt, position, item) { if (item) { // Lock the crosshair to the data point being hovered myFlot.lockCrosshair({ x: item.datapoint[0], y: item.datapoint[1] }); } else { // Return normal crosshair operation myFlot.unlockCrosshair(); } }); - unlockCrosshair() Free the crosshair to move again after locking it. */ (function ($) { var options = { crosshair: { mode: null, // one of null, "x", "y" or "xy", color: "rgba(170, 0, 0, 0.80)", lineWidth: 1 } }; function init(plot) { // position of crosshair in pixels var crosshair = { x: -1, y: -1, locked: false }; plot.setCrosshair = function setCrosshair(pos) { if (!pos) crosshair.x = -1; else { var o = plot.p2c(pos); crosshair.x = Math.max(0, Math.min(o.left, plot.width())); crosshair.y = Math.max(0, Math.min(o.top, plot.height())); } plot.triggerRedrawOverlay(); }; plot.clearCrosshair = plot.setCrosshair; // passes null for pos plot.lockCrosshair = function lockCrosshair(pos) { if (pos) plot.setCrosshair(pos); crosshair.locked = true; } plot.unlockCrosshair = function unlockCrosshair() { crosshair.locked = false; } function onMouseOut(e) { if (crosshair.locked) return; if (crosshair.x != -1) { crosshair.x = -1; plot.triggerRedrawOverlay(); } } function onMouseMove(e) { if (crosshair.locked) return; if (plot.getSelection && plot.getSelection()) { crosshair.x = -1; // hide the crosshair while selecting return; } var offset = plot.offset(); crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width())); crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height())); plot.triggerRedrawOverlay(); } plot.hooks.bindEvents.push(function (plot, eventHolder) { if (!plot.getOptions().crosshair.mode) return; eventHolder.mouseout(onMouseOut); eventHolder.mousemove(onMouseMove); }); plot.hooks.drawOverlay.push(function (plot, ctx) { var c = plot.getOptions().crosshair; if (!c.mode) return; var plotOffset = plot.getPlotOffset(); ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); if (crosshair.x != -1) { ctx.strokeStyle = c.color; ctx.lineWidth = c.lineWidth; ctx.lineJoin = "round"; ctx.beginPath(); if (c.mode.indexOf("x") != -1) { ctx.moveTo(crosshair.x, 0); ctx.lineTo(crosshair.x, plot.height()); } if (c.mode.indexOf("y") != -1) { ctx.moveTo(0, crosshair.y); ctx.lineTo(plot.width(), crosshair.y); } ctx.stroke(); } ctx.restore(); }); plot.hooks.shutdown.push(function (plot, eventHolder) { eventHolder.unbind("mouseout", onMouseOut); eventHolder.unbind("mousemove", onMouseMove); }); } $.plot.plugins.push({ init: init, options: options, name: 'crosshair', version: '1.0' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.fillbetween.js ================================================ /* Flot plugin for computing bottoms for filled line and bar charts. The case: you've got two series that you want to fill the area between. In Flot terms, you need to use one as the fill bottom of the other. You can specify the bottom of each data point as the third coordinate manually, or you can use this plugin to compute it for you. In order to name the other series, you need to give it an id, like this var dataset = [ { data: [ ... ], id: "foo" } , // use default bottom { data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom ]; $.plot($("#placeholder"), dataset, { line: { show: true, fill: true }}); As a convenience, if the id given is a number that doesn't appear as an id in the series, it is interpreted as the index in the array instead (so fillBetween: 0 can also mean the first series). Internally, the plugin modifies the datapoints in each series. For line series, extra data points might be inserted through interpolation. Note that at points where the bottom line is not defined (due to a null point or start/end of line), the current line will show a gap too. The algorithm comes from the jquery.flot.stack.js plugin, possibly some code could be shared. */ (function ($) { var options = { series: { fillBetween: null } // or number }; function init(plot) { function findBottomSeries(s, allseries) { var i; for (i = 0; i < allseries.length; ++i) { if (allseries[i].id == s.fillBetween) return allseries[i]; } if (typeof s.fillBetween == "number") { i = s.fillBetween; if (i < 0 || i >= allseries.length) return null; return allseries[i]; } return null; } function computeFillBottoms(plot, s, datapoints) { if (s.fillBetween == null) return; var other = findBottomSeries(s, plot.getData()); if (!other) return; var ps = datapoints.pointsize, points = datapoints.points, otherps = other.datapoints.pointsize, otherpoints = other.datapoints.points, newpoints = [], px, py, intery, qx, qy, bottom, withlines = s.lines.show, withbottom = ps > 2 && datapoints.format[2].y, withsteps = withlines && s.lines.steps, fromgap = true, i = 0, j = 0, l; while (true) { if (i >= points.length) break; l = newpoints.length; if (points[i] == null) { // copy gaps for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); i += ps; } else if (j >= otherpoints.length) { // for lines, we can't use the rest of the points if (!withlines) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); } i += ps; } else if (otherpoints[j] == null) { // oops, got a gap for (m = 0; m < ps; ++m) newpoints.push(null); fromgap = true; j += otherps; } else { // cases where we actually got two points px = points[i]; py = points[i + 1]; qx = otherpoints[j]; qy = otherpoints[j + 1]; bottom = 0; if (px == qx) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); //newpoints[l + 1] += qy; bottom = qy; i += ps; j += otherps; } else if (px > qx) { // we got past point below, might need to // insert interpolated extra point if (withlines && i > 0 && points[i - ps] != null) { intery = py + (points[i - ps + 1] - py) * (qx - px) / (points[i - ps] - px); newpoints.push(qx); newpoints.push(intery) for (m = 2; m < ps; ++m) newpoints.push(points[i + m]); bottom = qy; } j += otherps; } else { // px < qx if (fromgap && withlines) { // if we come from a gap, we just skip this point i += ps; continue; } for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); // we might be able to interpolate a point below, // this can give us a better y if (withlines && j > 0 && otherpoints[j - otherps] != null) bottom = qy + (otherpoints[j - otherps + 1] - qy) * (px - qx) / (otherpoints[j - otherps] - qx); //newpoints[l + 1] += bottom; i += ps; } fromgap = false; if (l != newpoints.length && withbottom) newpoints[l + 2] = bottom; } // maintain the line steps invariant if (withsteps && l != newpoints.length && l > 0 && newpoints[l] != null && newpoints[l] != newpoints[l - ps] && newpoints[l + 1] != newpoints[l - ps + 1]) { for (m = 0; m < ps; ++m) newpoints[l + ps + m] = newpoints[l + m]; newpoints[l + 1] = newpoints[l - ps + 1]; } } datapoints.points = newpoints; } plot.hooks.processDatapoints.push(computeFillBottoms); } $.plot.plugins.push({ init: init, options: options, name: 'fillbetween', version: '1.0' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.image.js ================================================ /* Flot plugin for plotting images, e.g. useful for putting ticks on a prerendered complex visualization. The data syntax is [[image, x1, y1, x2, y2], ...] where (x1, y1) and (x2, y2) are where you intend the two opposite corners of the image to end up in the plot. Image must be a fully loaded Javascript image (you can make one with new Image()). If the image is not complete, it's skipped when plotting. There are two helpers included for retrieving images. The easiest work the way that you put in URLs instead of images in the data (like ["myimage.png", 0, 0, 10, 10]), then call $.plot.image.loadData(data, options, callback) where data and options are the same as you pass in to $.plot. This loads the images, replaces the URLs in the data with the corresponding images and calls "callback" when all images are loaded (or failed loading). In the callback, you can then call $.plot with the data set. See the included example. A more low-level helper, $.plot.image.load(urls, callback) is also included. Given a list of URLs, it calls callback with an object mapping from URL to Image object when all images are loaded or have failed loading. Options for the plugin are series: { images: { show: boolean anchor: "corner" or "center" alpha: [0,1] } } which can be specified for a specific series $.plot($("#placeholder"), [{ data: [ ... ], images: { ... } ]) Note that because the data format is different from usual data points, you can't use images with anything else in a specific data series. Setting "anchor" to "center" causes the pixels in the image to be anchored at the corner pixel centers inside of at the pixel corners, effectively letting half a pixel stick out to each side in the plot. A possible future direction could be support for tiling for large images (like Google Maps). */ (function ($) { var options = { series: { images: { show: false, alpha: 1, anchor: "corner" // or "center" } } }; $.plot.image = {}; $.plot.image.loadDataImages = function (series, options, callback) { var urls = [], points = []; var defaultShow = options.series.images.show; $.each(series, function (i, s) { if (!(defaultShow || s.images.show)) return; if (s.data) s = s.data; $.each(s, function (i, p) { if (typeof p[0] == "string") { urls.push(p[0]); points.push(p); } }); }); $.plot.image.load(urls, function (loadedImages) { $.each(points, function (i, p) { var url = p[0]; if (loadedImages[url]) p[0] = loadedImages[url]; }); callback(); }); } $.plot.image.load = function (urls, callback) { var missing = urls.length, loaded = {}; if (missing == 0) callback({}); $.each(urls, function (i, url) { var handler = function () { --missing; loaded[url] = this; if (missing == 0) callback(loaded); }; $('').load(handler).error(handler).attr('src', url); }); } function drawSeries(plot, ctx, series) { var plotOffset = plot.getPlotOffset(); if (!series.images || !series.images.show) return; var points = series.datapoints.points, ps = series.datapoints.pointsize; for (var i = 0; i < points.length; i += ps) { var img = points[i], x1 = points[i + 1], y1 = points[i + 2], x2 = points[i + 3], y2 = points[i + 4], xaxis = series.xaxis, yaxis = series.yaxis, tmp; // actually we should check img.complete, but it // appears to be a somewhat unreliable indicator in // IE6 (false even after load event) if (!img || img.width <= 0 || img.height <= 0) continue; if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; } // if the anchor is at the center of the pixel, expand the // image by 1/2 pixel in each direction if (series.images.anchor == "center") { tmp = 0.5 * (x2-x1) / (img.width - 1); x1 -= tmp; x2 += tmp; tmp = 0.5 * (y2-y1) / (img.height - 1); y1 -= tmp; y2 += tmp; } // clip if (x1 == x2 || y1 == y2 || x1 >= xaxis.max || x2 <= xaxis.min || y1 >= yaxis.max || y2 <= yaxis.min) continue; var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height; if (x1 < xaxis.min) { sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1); x1 = xaxis.min; } if (x2 > xaxis.max) { sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1); x2 = xaxis.max; } if (y1 < yaxis.min) { sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1); y1 = yaxis.min; } if (y2 > yaxis.max) { sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1); y2 = yaxis.max; } x1 = xaxis.p2c(x1); x2 = xaxis.p2c(x2); y1 = yaxis.p2c(y1); y2 = yaxis.p2c(y2); // the transformation may have swapped us if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; } tmp = ctx.globalAlpha; ctx.globalAlpha *= series.images.alpha; ctx.drawImage(img, sx1, sy1, sx2 - sx1, sy2 - sy1, x1 + plotOffset.left, y1 + plotOffset.top, x2 - x1, y2 - y1); ctx.globalAlpha = tmp; } } function processRawData(plot, series, data, datapoints) { if (!series.images.show) return; // format is Image, x1, y1, x2, y2 (opposite corners) datapoints.format = [ { required: true }, { x: true, number: true, required: true }, { y: true, number: true, required: true }, { x: true, number: true, required: true }, { y: true, number: true, required: true } ]; } function init(plot) { plot.hooks.processRawData.push(processRawData); plot.hooks.drawSeries.push(drawSeries); } $.plot.plugins.push({ init: init, options: options, name: 'image', version: '1.1' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.js ================================================ /*! Javascript plotting library for jQuery, v. 0.7. * * Released under the MIT license by IOLA, December 2007. * */ // first an inline dependency, jquery.colorhelpers.js, we inline it here // for convenience /* Plugin for jQuery for working with colors. * * Version 1.1. * * Inspiration from jQuery color animation plugin by John Resig. * * Released under the MIT license by Ole Laursen, October 2009. * * Examples: * * $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() * var c = $.color.extract($("#mydiv"), 'background-color'); * console.log(c.r, c.g, c.b, c.a); * $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" * * Note that .scale() and .add() return the same modified object * instead of making a new one. * * V. 1.1: Fix error handling so e.g. parsing an empty string does * produce a color rather than just crashing. */ (function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H=1){return"rgb("+[G.r,G.g,G.b].join(",")+")"}else{return"rgba("+[G.r,G.g,G.b,G.a].join(",")+")"}};G.normalize=function(){function H(J,K,I){return KI?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=""&&E!="transparent"){break}D=D.parent()}while(!B.nodeName(D.get(0),"body"));if(E=="rgba(0, 0, 0, 0)"){E="transparent"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D=="transparent"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={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]}})(jQuery); // the actual Flot code (function($) { function Plot(placeholder, data_, options_, plugins) { // data is on the form: // [ series1, series2 ... ] // where series is either just the data as [ [x1, y1], [x2, y2], ... ] // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... } var series = [], options = { // the color theme used for graphs colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"], legend: { show: true, noColumns: 1, // number of colums in legend table labelFormatter: null, // fn: string -> string labelBoxBorderColor: "#ccc", // border color for the little label boxes container: null, // container (as jQuery object) to put legend in, null means default on top of graph position: "ne", // position of default legend container within plot margin: 5, // distance from grid edge to default legend container within plot backgroundColor: null, // null means auto-detect backgroundOpacity: 0.85 // set to 0 to avoid background }, xaxis: { show: null, // null = auto-detect, true = always, false = never position: "bottom", // or "top" mode: null, // null or "time" color: null, // base color, labels, ticks tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)" transform: null, // null or f: number -> number to transform axis inverseTransform: null, // if transform is set, this should be the inverse function min: null, // min. value to show, null means set automatically max: null, // max. value to show, null means set automatically autoscaleMargin: null, // margin in % to add if auto-setting min/max ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks tickFormatter: null, // fn: number -> string labelWidth: null, // size of tick labels in pixels labelHeight: null, reserveSpace: null, // whether to reserve space even if axis isn't shown tickLength: null, // size in pixels of ticks, or "full" for whole line alignTicksWithAxis: null, // axis number or null for no sync // mode specific options tickDecimals: null, // no. of decimals, null means auto tickSize: null, // number or [number, "unit"] minTickSize: null, // number or [number, "unit"] monthNames: null, // list of names of months timeformat: null, // format string to use twelveHourClock: false // 12 or 24 time in time mode }, yaxis: { autoscaleMargin: 0.02, position: "left" // or "right" }, xaxes: [], yaxes: [], series: { points: { show: false, radius: 3, lineWidth: 2, // in pixels fill: true, fillColor: "#ffffff", symbol: "circle" // or callback }, lines: { // we don't put in show: false so we can see // whether lines were actively disabled lineWidth: 2, // in pixels fill: false, fillColor: null, steps: false }, bars: { show: false, lineWidth: 2, // in pixels barWidth: 1, // in units of the x axis fill: true, fillColor: null, align: "left", // or "center" horizontal: false }, shadowSize: 3 }, grid: { show: true, aboveData: false, color: "#545454", // primary color used for outline and labels backgroundColor: null, // null for transparent, else color borderColor: null, // set if different from the grid color tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)" labelMargin: 5, // in pixels axisMargin: 8, // in pixels borderWidth: 2, // in pixels minBorderMargin: null, // in pixels, null means taken from points radius markings: null, // array of ranges or fn: axes -> array of ranges markingsColor: "#f4f4f4", markingsLineWidth: 2, // interactive stuff clickable: false, hoverable: false, autoHighlight: true, // highlight in case mouse is near mouseActiveRadius: 10 // how far the mouse can be away to activate an item }, hooks: {} }, canvas = null, // the canvas for the plot itself overlay = null, // canvas for interactive stuff on top of plot eventHolder = null, // jQuery object that events should be bound to ctx = null, octx = null, xaxes = [], yaxes = [], plotOffset = { left: 0, right: 0, top: 0, bottom: 0}, canvasWidth = 0, canvasHeight = 0, plotWidth = 0, plotHeight = 0, hooks = { processOptions: [], processRawData: [], processDatapoints: [], drawSeries: [], draw: [], bindEvents: [], drawOverlay: [], shutdown: [] }, plot = this; // public functions plot.setData = setData; plot.setupGrid = setupGrid; plot.draw = draw; plot.getPlaceholder = function() { return placeholder; }; plot.getCanvas = function() { return canvas; }; plot.getPlotOffset = function() { return plotOffset; }; plot.width = function () { return plotWidth; }; plot.height = function () { return plotHeight; }; plot.offset = function () { var o = eventHolder.offset(); o.left += plotOffset.left; o.top += plotOffset.top; return o; }; plot.getData = function () { return series; }; plot.getAxes = function () { var res = {}, i; $.each(xaxes.concat(yaxes), function (_, axis) { if (axis) res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis; }); return res; }; plot.getXAxes = function () { return xaxes; }; plot.getYAxes = function () { return yaxes; }; plot.c2p = canvasToAxisCoords; plot.p2c = axisToCanvasCoords; plot.getOptions = function () { return options; }; plot.highlight = highlight; plot.unhighlight = unhighlight; plot.triggerRedrawOverlay = triggerRedrawOverlay; plot.pointOffset = function(point) { return { left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left), top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top) }; }; plot.shutdown = shutdown; plot.resize = function () { getCanvasDimensions(); resizeCanvas(canvas); resizeCanvas(overlay); }; // public attributes plot.hooks = hooks; // initialize initPlugins(plot); parseOptions(options_); setupCanvases(); setData(data_); setupGrid(); draw(); bindEvents(); function executeHooks(hook, args) { args = [plot].concat(args); for (var i = 0; i < hook.length; ++i) hook[i].apply(this, args); } function initPlugins() { for (var i = 0; i < plugins.length; ++i) { var p = plugins[i]; p.init(plot); if (p.options) $.extend(true, options, p.options); } } function parseOptions(opts) { var i; $.extend(true, options, opts); if (options.xaxis.color == null) options.xaxis.color = options.grid.color; if (options.yaxis.color == null) options.yaxis.color = options.grid.color; if (options.xaxis.tickColor == null) // backwards-compatibility options.xaxis.tickColor = options.grid.tickColor; if (options.yaxis.tickColor == null) // backwards-compatibility options.yaxis.tickColor = options.grid.tickColor; if (options.grid.borderColor == null) options.grid.borderColor = options.grid.color; if (options.grid.tickColor == null) options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString(); // fill in defaults in axes, copy at least always the // first as the rest of the code assumes it'll be there for (i = 0; i < Math.max(1, options.xaxes.length); ++i) options.xaxes[i] = $.extend(true, {}, options.xaxis, options.xaxes[i]); for (i = 0; i < Math.max(1, options.yaxes.length); ++i) options.yaxes[i] = $.extend(true, {}, options.yaxis, options.yaxes[i]); // backwards compatibility, to be removed in future if (options.xaxis.noTicks && options.xaxis.ticks == null) options.xaxis.ticks = options.xaxis.noTicks; if (options.yaxis.noTicks && options.yaxis.ticks == null) options.yaxis.ticks = options.yaxis.noTicks; if (options.x2axis) { options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis); options.xaxes[1].position = "top"; } if (options.y2axis) { options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis); options.yaxes[1].position = "right"; } if (options.grid.coloredAreas) options.grid.markings = options.grid.coloredAreas; if (options.grid.coloredAreasColor) options.grid.markingsColor = options.grid.coloredAreasColor; if (options.lines) $.extend(true, options.series.lines, options.lines); if (options.points) $.extend(true, options.series.points, options.points); if (options.bars) $.extend(true, options.series.bars, options.bars); if (options.shadowSize != null) options.series.shadowSize = options.shadowSize; // save options on axes for future reference for (i = 0; i < options.xaxes.length; ++i) getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i]; for (i = 0; i < options.yaxes.length; ++i) getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i]; // add hooks from options for (var n in hooks) if (options.hooks[n] && options.hooks[n].length) hooks[n] = hooks[n].concat(options.hooks[n]); executeHooks(hooks.processOptions, [options]); } function setData(d) { series = parseData(d); fillInSeriesOptions(); processData(); } function parseData(d) { var res = []; for (var i = 0; i < d.length; ++i) { var s = $.extend(true, {}, options.series); if (d[i].data != null) { s.data = d[i].data; // move the data instead of deep-copy delete d[i].data; $.extend(true, s, d[i]); d[i].data = s.data; } else s.data = d[i]; res.push(s); } return res; } function axisNumber(obj, coord) { var a = obj[coord + "axis"]; if (typeof a == "object") // if we got a real axis, extract number a = a.n; if (typeof a != "number") a = 1; // default to first axis return a; } function allAxes() { // return flat array without annoying null entries return $.grep(xaxes.concat(yaxes), function (a) { return a; }); } function canvasToAxisCoords(pos) { // return an object with x/y corresponding to all used axes var res = {}, i, axis; for (i = 0; i < xaxes.length; ++i) { axis = xaxes[i]; if (axis && axis.used) res["x" + axis.n] = axis.c2p(pos.left); } for (i = 0; i < yaxes.length; ++i) { axis = yaxes[i]; if (axis && axis.used) res["y" + axis.n] = axis.c2p(pos.top); } if (res.x1 !== undefined) res.x = res.x1; if (res.y1 !== undefined) res.y = res.y1; return res; } function axisToCanvasCoords(pos) { // get canvas coords from the first pair of x/y found in pos var res = {}, i, axis, key; for (i = 0; i < xaxes.length; ++i) { axis = xaxes[i]; if (axis && axis.used) { key = "x" + axis.n; if (pos[key] == null && axis.n == 1) key = "x"; if (pos[key] != null) { res.left = axis.p2c(pos[key]); break; } } } for (i = 0; i < yaxes.length; ++i) { axis = yaxes[i]; if (axis && axis.used) { key = "y" + axis.n; if (pos[key] == null && axis.n == 1) key = "y"; if (pos[key] != null) { res.top = axis.p2c(pos[key]); break; } } } return res; } function getOrCreateAxis(axes, number) { if (!axes[number - 1]) axes[number - 1] = { n: number, // save the number for future reference direction: axes == xaxes ? "x" : "y", options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis) }; return axes[number - 1]; } function fillInSeriesOptions() { var i; // collect what we already got of colors var neededColors = series.length, usedColors = [], assignedColors = []; for (i = 0; i < series.length; ++i) { var sc = series[i].color; if (sc != null) { --neededColors; if (typeof sc == "number") assignedColors.push(sc); else usedColors.push($.color.parse(series[i].color)); } } // we might need to generate more colors if higher indices // are assigned for (i = 0; i < assignedColors.length; ++i) { neededColors = Math.max(neededColors, assignedColors[i] + 1); } // produce colors as needed var colors = [], variation = 0; i = 0; while (colors.length < neededColors) { var c; if (options.colors.length == i) // check degenerate case c = $.color.make(100, 100, 100); else c = $.color.parse(options.colors[i]); // vary color if needed var sign = variation % 2 == 1 ? -1 : 1; c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2) // FIXME: if we're getting to close to something else, // we should probably skip this one colors.push(c); ++i; if (i >= options.colors.length) { i = 0; ++variation; } } // fill in the options var colori = 0, s; for (i = 0; i < series.length; ++i) { s = series[i]; // assign colors if (s.color == null) { s.color = colors[colori].toString(); ++colori; } else if (typeof s.color == "number") s.color = colors[s.color].toString(); // turn on lines automatically in case nothing is set if (s.lines.show == null) { var v, show = true; for (v in s) if (s[v] && s[v].show) { show = false; break; } if (show) s.lines.show = true; } // setup axes s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x")); s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y")); } } function processData() { var topSentry = Number.POSITIVE_INFINITY, bottomSentry = Number.NEGATIVE_INFINITY, fakeInfinity = Number.MAX_VALUE, i, j, k, m, length, s, points, ps, x, y, axis, val, f, p; function updateAxis(axis, min, max) { if (min < axis.datamin && min != -fakeInfinity) axis.datamin = min; if (max > axis.datamax && max != fakeInfinity) axis.datamax = max; } $.each(allAxes(), function (_, axis) { // init axis axis.datamin = topSentry; axis.datamax = bottomSentry; axis.used = false; }); for (i = 0; i < series.length; ++i) { s = series[i]; s.datapoints = { points: [] }; executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]); } // first pass: clean and copy data for (i = 0; i < series.length; ++i) { s = series[i]; var data = s.data, format = s.datapoints.format; if (!format) { format = []; // find out how to copy format.push({ x: true, number: true, required: true }); format.push({ y: true, number: true, required: true }); if (s.bars.show || (s.lines.show && s.lines.fill)) { format.push({ y: true, number: true, required: false, defaultValue: 0 }); if (s.bars.horizontal) { delete format[format.length - 1].y; format[format.length - 1].x = true; } } s.datapoints.format = format; } if (s.datapoints.pointsize != null) continue; // already filled in s.datapoints.pointsize = format.length; ps = s.datapoints.pointsize; points = s.datapoints.points; insertSteps = s.lines.show && s.lines.steps; s.xaxis.used = s.yaxis.used = true; for (j = k = 0; j < data.length; ++j, k += ps) { p = data[j]; var nullify = p == null; if (!nullify) { for (m = 0; m < ps; ++m) { val = p[m]; f = format[m]; if (f) { if (f.number && val != null) { val = +val; // convert to number if (isNaN(val)) val = null; else if (val == Infinity) val = fakeInfinity; else if (val == -Infinity) val = -fakeInfinity; } if (val == null) { if (f.required) nullify = true; if (f.defaultValue != null) val = f.defaultValue; } } points[k + m] = val; } } if (nullify) { for (m = 0; m < ps; ++m) { val = points[k + m]; if (val != null) { f = format[m]; // extract min/max info if (f.x) updateAxis(s.xaxis, val, val); if (f.y) updateAxis(s.yaxis, val, val); } points[k + m] = null; } } else { // a little bit of line specific stuff that // perhaps shouldn't be here, but lacking // better means... if (insertSteps && k > 0 && points[k - ps] != null && points[k - ps] != points[k] && points[k - ps + 1] != points[k + 1]) { // copy the point to make room for a middle point for (m = 0; m < ps; ++m) points[k + ps + m] = points[k + m]; // middle point has same y points[k + 1] = points[k - ps + 1]; // we've added a point, better reflect that k += ps; } } } } // give the hooks a chance to run for (i = 0; i < series.length; ++i) { s = series[i]; executeHooks(hooks.processDatapoints, [ s, s.datapoints]); } // second pass: find datamax/datamin for auto-scaling for (i = 0; i < series.length; ++i) { s = series[i]; points = s.datapoints.points, ps = s.datapoints.pointsize; var xmin = topSentry, ymin = topSentry, xmax = bottomSentry, ymax = bottomSentry; for (j = 0; j < points.length; j += ps) { if (points[j] == null) continue; for (m = 0; m < ps; ++m) { val = points[j + m]; f = format[m]; if (!f || val == fakeInfinity || val == -fakeInfinity) continue; if (f.x) { if (val < xmin) xmin = val; if (val > xmax) xmax = val; } if (f.y) { if (val < ymin) ymin = val; if (val > ymax) ymax = val; } } } if (s.bars.show) { // make sure we got room for the bar on the dancing floor var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2; if (s.bars.horizontal) { ymin += delta; ymax += delta + s.bars.barWidth; } else { xmin += delta; xmax += delta + s.bars.barWidth; } } updateAxis(s.xaxis, xmin, xmax); updateAxis(s.yaxis, ymin, ymax); } $.each(allAxes(), function (_, axis) { if (axis.datamin == topSentry) axis.datamin = null; if (axis.datamax == bottomSentry) axis.datamax = null; }); } function makeCanvas(skipPositioning, cls) { var c = document.createElement('canvas'); c.className = cls; c.width = canvasWidth; c.height = canvasHeight; if (!skipPositioning) $(c).css({ position: 'absolute', left: 0, top: 0 }); $(c).appendTo(placeholder); if (!c.getContext) // excanvas hack c = window.G_vmlCanvasManager.initElement(c); // used for resetting in case we get replotted c.getContext("2d").save(); return c; } function getCanvasDimensions() { canvasWidth = placeholder.width(); canvasHeight = placeholder.height(); if (canvasWidth <= 0 || canvasHeight <= 0) throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight; } function resizeCanvas(c) { // resizing should reset the state (excanvas seems to be // buggy though) if (c.width != canvasWidth) c.width = canvasWidth; if (c.height != canvasHeight) c.height = canvasHeight; // so try to get back to the initial state (even if it's // gone now, this should be safe according to the spec) var cctx = c.getContext("2d"); cctx.restore(); // and save again cctx.save(); } function setupCanvases() { var reused, existingCanvas = placeholder.children("canvas.base"), existingOverlay = placeholder.children("canvas.overlay"); if (existingCanvas.length == 0 || existingOverlay == 0) { // init everything placeholder.html(""); // make sure placeholder is clear placeholder.css({ padding: 0 }); // padding messes up the positioning if (placeholder.css("position") == 'static') placeholder.css("position", "relative"); // for positioning labels and overlay getCanvasDimensions(); canvas = makeCanvas(true, "base"); overlay = makeCanvas(false, "overlay"); // overlay canvas for interactive features reused = false; } else { // reuse existing elements canvas = existingCanvas.get(0); overlay = existingOverlay.get(0); reused = true; } ctx = canvas.getContext("2d"); octx = overlay.getContext("2d"); // we include the canvas in the event holder too, because IE 7 // sometimes has trouble with the stacking order eventHolder = $([overlay, canvas]); if (reused) { // run shutdown in the old plot object placeholder.data("plot").shutdown(); // reset reused canvases plot.resize(); // make sure overlay pixels are cleared (canvas is cleared when we redraw) octx.clearRect(0, 0, canvasWidth, canvasHeight); // then whack any remaining obvious garbage left eventHolder.unbind(); placeholder.children().not([canvas, overlay]).remove(); } // save in case we get replotted placeholder.data("plot", plot); } function bindEvents() { // bind events if (options.grid.hoverable) { eventHolder.mousemove(onMouseMove); eventHolder.mouseleave(onMouseLeave); } if (options.grid.clickable) eventHolder.click(onClick); executeHooks(hooks.bindEvents, [eventHolder]); } function shutdown() { if (redrawTimeout) clearTimeout(redrawTimeout); eventHolder.unbind("mousemove", onMouseMove); eventHolder.unbind("mouseleave", onMouseLeave); eventHolder.unbind("click", onClick); executeHooks(hooks.shutdown, [eventHolder]); } function setTransformationHelpers(axis) { // set helper functions on the axis, assumes plot area // has been computed already function identity(x) { return x; } var s, m, t = axis.options.transform || identity, it = axis.options.inverseTransform; // precompute how much the axis is scaling a point // in canvas space if (axis.direction == "x") { s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min)); m = Math.min(t(axis.max), t(axis.min)); } else { s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min)); s = -s; m = Math.max(t(axis.max), t(axis.min)); } // data point to canvas coordinate if (t == identity) // slight optimization axis.p2c = function (p) { return (p - m) * s; }; else axis.p2c = function (p) { return (t(p) - m) * s; }; // canvas coordinate to data point if (!it) axis.c2p = function (c) { return m + c / s; }; else axis.c2p = function (c) { return it(m + c / s); }; } function measureTickLabels(axis) { var opts = axis.options, i, ticks = axis.ticks || [], labels = [], l, w = opts.labelWidth, h = opts.labelHeight, dummyDiv; function makeDummyDiv(labels, width) { return $('
        ' + '
        ' + labels.join("") + '
        ') .appendTo(placeholder); } if (axis.direction == "x") { // to avoid measuring the widths of the labels (it's slow), we // construct fixed-size boxes and put the labels inside // them, we don't need the exact figures and the // fixed-size box content is easy to center if (w == null) w = Math.floor(canvasWidth / (ticks.length > 0 ? ticks.length : 1)); // measure x label heights if (h == null) { labels = []; for (i = 0; i < ticks.length; ++i) { l = ticks[i].label; if (l) labels.push('
        ' + l + '
        '); } if (labels.length > 0) { // stick them all in the same div and measure // collective height labels.push('
        '); dummyDiv = makeDummyDiv(labels, "width:10000px;"); h = dummyDiv.height(); dummyDiv.remove(); } } } else if (w == null || h == null) { // calculate y label dimensions for (i = 0; i < ticks.length; ++i) { l = ticks[i].label; if (l) labels.push('
        ' + l + '
        '); } if (labels.length > 0) { dummyDiv = makeDummyDiv(labels, ""); if (w == null) w = dummyDiv.children().width(); if (h == null) h = dummyDiv.find("div.tickLabel").height(); dummyDiv.remove(); } } if (w == null) w = 0; if (h == null) h = 0; axis.labelWidth = w; axis.labelHeight = h; } function allocateAxisBoxFirstPhase(axis) { // find the bounding box of the axis by looking at label // widths/heights and ticks, make room by diminishing the // plotOffset var lw = axis.labelWidth, lh = axis.labelHeight, pos = axis.options.position, tickLength = axis.options.tickLength, axismargin = options.grid.axisMargin, padding = options.grid.labelMargin, all = axis.direction == "x" ? xaxes : yaxes, index; // determine axis margin var samePosition = $.grep(all, function (a) { return a && a.options.position == pos && a.reserveSpace; }); if ($.inArray(axis, samePosition) == samePosition.length - 1) axismargin = 0; // outermost // determine tick length - if we're innermost, we can use "full" if (tickLength == null) tickLength = "full"; var sameDirection = $.grep(all, function (a) { return a && a.reserveSpace; }); var innermost = $.inArray(axis, sameDirection) == 0; if (!innermost && tickLength == "full") tickLength = 5; if (!isNaN(+tickLength)) padding += +tickLength; // compute box if (axis.direction == "x") { lh += padding; if (pos == "bottom") { plotOffset.bottom += lh + axismargin; axis.box = { top: canvasHeight - plotOffset.bottom, height: lh }; } else { axis.box = { top: plotOffset.top + axismargin, height: lh }; plotOffset.top += lh + axismargin; } } else { lw += padding; if (pos == "left") { axis.box = { left: plotOffset.left + axismargin, width: lw }; plotOffset.left += lw + axismargin; } else { plotOffset.right += lw + axismargin; axis.box = { left: canvasWidth - plotOffset.right, width: lw }; } } // save for future reference axis.position = pos; axis.tickLength = tickLength; axis.box.padding = padding; axis.innermost = innermost; } function allocateAxisBoxSecondPhase(axis) { // set remaining bounding box coordinates if (axis.direction == "x") { axis.box.left = plotOffset.left; axis.box.width = plotWidth; } else { axis.box.top = plotOffset.top; axis.box.height = plotHeight; } } function setupGrid() { var i, axes = allAxes(); // first calculate the plot and axis box dimensions $.each(axes, function (_, axis) { axis.show = axis.options.show; if (axis.show == null) axis.show = axis.used; // by default an axis is visible if it's got data axis.reserveSpace = axis.show || axis.options.reserveSpace; setRange(axis); }); allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; }); plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0; if (options.grid.show) { $.each(allocatedAxes, function (_, axis) { // make the ticks setupTickGeneration(axis); setTicks(axis); snapRangeToTicks(axis, axis.ticks); // find labelWidth/Height for axis measureTickLabels(axis); }); // with all dimensions in house, we can compute the // axis boxes, start from the outside (reverse order) for (i = allocatedAxes.length - 1; i >= 0; --i) allocateAxisBoxFirstPhase(allocatedAxes[i]); // make sure we've got enough space for things that // might stick out var minMargin = options.grid.minBorderMargin; if (minMargin == null) { minMargin = 0; for (i = 0; i < series.length; ++i) minMargin = Math.max(minMargin, series[i].points.radius + series[i].points.lineWidth/2); } for (var a in plotOffset) { plotOffset[a] += options.grid.borderWidth; plotOffset[a] = Math.max(minMargin, plotOffset[a]); } } plotWidth = canvasWidth - plotOffset.left - plotOffset.right; plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top; // now we got the proper plotWidth/Height, we can compute the scaling $.each(axes, function (_, axis) { setTransformationHelpers(axis); }); if (options.grid.show) { $.each(allocatedAxes, function (_, axis) { allocateAxisBoxSecondPhase(axis); }); insertAxisLabels(); } insertLegend(); } function setRange(axis) { var opts = axis.options, min = +(opts.min != null ? opts.min : axis.datamin), max = +(opts.max != null ? opts.max : axis.datamax), delta = max - min; if (delta == 0.0) { // degenerate case var widen = max == 0 ? 1 : 0.01; if (opts.min == null) min -= widen; // always widen max if we couldn't widen min to ensure we // don't fall into min == max which doesn't work if (opts.max == null || opts.min != null) max += widen; } else { // consider autoscaling var margin = opts.autoscaleMargin; if (margin != null) { if (opts.min == null) { min -= delta * margin; // make sure we don't go below zero if all values // are positive if (min < 0 && axis.datamin != null && axis.datamin >= 0) min = 0; } if (opts.max == null) { max += delta * margin; if (max > 0 && axis.datamax != null && axis.datamax <= 0) max = 0; } } } axis.min = min; axis.max = max; } function setupTickGeneration(axis) { var opts = axis.options; // estimate number of ticks var noTicks; if (typeof opts.ticks == "number" && opts.ticks > 0) noTicks = opts.ticks; else // heuristic based on the model a*sqrt(x) fitted to // some data points that seemed reasonable noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight); var delta = (axis.max - axis.min) / noTicks, size, generator, unit, formatter, i, magn, norm; if (opts.mode == "time") { // pretty handling of time // map of app. size of time units in milliseconds var timeUnitSize = { "second": 1000, "minute": 60 * 1000, "hour": 60 * 60 * 1000, "day": 24 * 60 * 60 * 1000, "month": 30 * 24 * 60 * 60 * 1000, "year": 365.2425 * 24 * 60 * 60 * 1000 }; // the allowed tick sizes, after 1 year we use // an integer algorithm var spec = [ [1, "second"], [2, "second"], [5, "second"], [10, "second"], [30, "second"], [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], [30, "minute"], [1, "hour"], [2, "hour"], [4, "hour"], [8, "hour"], [12, "hour"], [1, "day"], [2, "day"], [3, "day"], [0.25, "month"], [0.5, "month"], [1, "month"], [2, "month"], [3, "month"], [6, "month"], [1, "year"] ]; var minSize = 0; if (opts.minTickSize != null) { if (typeof opts.tickSize == "number") minSize = opts.tickSize; else minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]]; } for (var i = 0; i < spec.length - 1; ++i) if (delta < (spec[i][0] * timeUnitSize[spec[i][1]] + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) break; size = spec[i][0]; unit = spec[i][1]; // special-case the possibility of several years if (unit == "year") { magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10)); norm = (delta / timeUnitSize.year) / magn; if (norm < 1.5) size = 1; else if (norm < 3) size = 2; else if (norm < 7.5) size = 5; else size = 10; size *= magn; } axis.tickSize = opts.tickSize || [size, unit]; generator = function(axis) { var ticks = [], tickSize = axis.tickSize[0], unit = axis.tickSize[1], d = new Date(axis.min); var step = tickSize * timeUnitSize[unit]; if (unit == "second") d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize)); if (unit == "minute") d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize)); if (unit == "hour") d.setUTCHours(floorInBase(d.getUTCHours(), tickSize)); if (unit == "month") d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize)); if (unit == "year") d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize)); // reset smaller components d.setUTCMilliseconds(0); if (step >= timeUnitSize.minute) d.setUTCSeconds(0); if (step >= timeUnitSize.hour) d.setUTCMinutes(0); if (step >= timeUnitSize.day) d.setUTCHours(0); if (step >= timeUnitSize.day * 4) d.setUTCDate(1); if (step >= timeUnitSize.year) d.setUTCMonth(0); var carry = 0, v = Number.NaN, prev; do { prev = v; v = d.getTime(); ticks.push(v); if (unit == "month") { if (tickSize < 1) { // a bit complicated - we'll divide the month // up but we need to take care of fractions // so we don't end up in the middle of a day d.setUTCDate(1); var start = d.getTime(); d.setUTCMonth(d.getUTCMonth() + 1); var end = d.getTime(); d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); carry = d.getUTCHours(); d.setUTCHours(0); } else d.setUTCMonth(d.getUTCMonth() + tickSize); } else if (unit == "year") { d.setUTCFullYear(d.getUTCFullYear() + tickSize); } else d.setTime(v + step); } while (v < axis.max && v != prev); return ticks; }; formatter = function (v, axis) { var d = new Date(v); // first check global format if (opts.timeformat != null) return $.plot.formatDate(d, opts.timeformat, opts.monthNames); var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; var span = axis.max - axis.min; var suffix = (opts.twelveHourClock) ? " %p" : ""; if (t < timeUnitSize.minute) fmt = "%h:%M:%S" + suffix; else if (t < timeUnitSize.day) { if (span < 2 * timeUnitSize.day) fmt = "%h:%M" + suffix; else fmt = "%b %d %h:%M" + suffix; } else if (t < timeUnitSize.month) fmt = "%b %d"; else if (t < timeUnitSize.year) { if (span < timeUnitSize.year) fmt = "%b"; else fmt = "%b %y"; } else fmt = "%y"; return $.plot.formatDate(d, fmt, opts.monthNames); }; } else { // pretty rounding of base-10 numbers var maxDec = opts.tickDecimals; var dec = -Math.floor(Math.log(delta) / Math.LN10); if (maxDec != null && dec > maxDec) dec = maxDec; magn = Math.pow(10, -dec); norm = delta / magn; // norm is between 1.0 and 10.0 if (norm < 1.5) size = 1; else if (norm < 3) { size = 2; // special case for 2.5, requires an extra decimal if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) { size = 2.5; ++dec; } } else if (norm < 7.5) size = 5; else size = 10; size *= magn; if (opts.minTickSize != null && size < opts.minTickSize) size = opts.minTickSize; axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec); axis.tickSize = opts.tickSize || size; generator = function (axis) { var ticks = []; // spew out all possible ticks var start = floorInBase(axis.min, axis.tickSize), i = 0, v = Number.NaN, prev; do { prev = v; v = start + i * axis.tickSize; ticks.push(v); ++i; } while (v < axis.max && v != prev); return ticks; }; formatter = function (v, axis) { return v.toFixed(axis.tickDecimals); }; } if (opts.alignTicksWithAxis != null) { var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1]; if (otherAxis && otherAxis.used && otherAxis != axis) { // consider snapping min/max to outermost nice ticks var niceTicks = generator(axis); if (niceTicks.length > 0) { if (opts.min == null) axis.min = Math.min(axis.min, niceTicks[0]); if (opts.max == null && niceTicks.length > 1) axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]); } generator = function (axis) { // copy ticks, scaled to this axis var ticks = [], v, i; for (i = 0; i < otherAxis.ticks.length; ++i) { v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min); v = axis.min + v * (axis.max - axis.min); ticks.push(v); } return ticks; }; // we might need an extra decimal since forced // ticks don't necessarily fit naturally if (axis.mode != "time" && opts.tickDecimals == null) { var extraDec = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1), ts = generator(axis); // only proceed if the tick interval rounded // with an extra decimal doesn't give us a // zero at end if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec)))) axis.tickDecimals = extraDec; } } } axis.tickGenerator = generator; if ($.isFunction(opts.tickFormatter)) axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); }; else axis.tickFormatter = formatter; } function setTicks(axis) { var oticks = axis.options.ticks, ticks = []; if (oticks == null || (typeof oticks == "number" && oticks > 0)) ticks = axis.tickGenerator(axis); else if (oticks) { if ($.isFunction(oticks)) // generate the ticks ticks = oticks({ min: axis.min, max: axis.max }); else ticks = oticks; } // clean up/labelify the supplied ticks, copy them over var i, v; axis.ticks = []; for (i = 0; i < ticks.length; ++i) { var label = null; var t = ticks[i]; if (typeof t == "object") { v = +t[0]; if (t.length > 1) label = t[1]; } else v = +t; if (label == null) label = axis.tickFormatter(v, axis); if (!isNaN(v)) axis.ticks.push({ v: v, label: label }); } } function snapRangeToTicks(axis, ticks) { if (axis.options.autoscaleMargin && ticks.length > 0) { // snap to ticks if (axis.options.min == null) axis.min = Math.min(axis.min, ticks[0].v); if (axis.options.max == null && ticks.length > 1) axis.max = Math.max(axis.max, ticks[ticks.length - 1].v); } } function draw() { ctx.clearRect(0, 0, canvasWidth, canvasHeight); var grid = options.grid; // draw background, if any if (grid.show && grid.backgroundColor) drawBackground(); if (grid.show && !grid.aboveData) drawGrid(); for (var i = 0; i < series.length; ++i) { executeHooks(hooks.drawSeries, [ctx, series[i]]); drawSeries(series[i]); } executeHooks(hooks.draw, [ctx]); if (grid.show && grid.aboveData) drawGrid(); } function extractRange(ranges, coord) { var axis, from, to, key, axes = allAxes(); for (i = 0; i < axes.length; ++i) { axis = axes[i]; if (axis.direction == coord) { key = coord + axis.n + "axis"; if (!ranges[key] && axis.n == 1) key = coord + "axis"; // support x1axis as xaxis if (ranges[key]) { from = ranges[key].from; to = ranges[key].to; break; } } } // backwards-compat stuff - to be removed in future if (!ranges[key]) { axis = coord == "x" ? xaxes[0] : yaxes[0]; from = ranges[coord + "1"]; to = ranges[coord + "2"]; } // auto-reverse as an added bonus if (from != null && to != null && from > to) { var tmp = from; from = to; to = tmp; } return { from: from, to: to, axis: axis }; } function drawBackground() { ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)"); ctx.fillRect(0, 0, plotWidth, plotHeight); ctx.restore(); } function drawGrid() { var i; ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); // draw markings var markings = options.grid.markings; if (markings) { if ($.isFunction(markings)) { var axes = plot.getAxes(); // xmin etc. is backwards compatibility, to be // removed in the future axes.xmin = axes.xaxis.min; axes.xmax = axes.xaxis.max; axes.ymin = axes.yaxis.min; axes.ymax = axes.yaxis.max; markings = markings(axes); } for (i = 0; i < markings.length; ++i) { var m = markings[i], xrange = extractRange(m, "x"), yrange = extractRange(m, "y"); // fill in missing if (xrange.from == null) xrange.from = xrange.axis.min; if (xrange.to == null) xrange.to = xrange.axis.max; if (yrange.from == null) yrange.from = yrange.axis.min; if (yrange.to == null) yrange.to = yrange.axis.max; // clip if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max || yrange.to < yrange.axis.min || yrange.from > yrange.axis.max) continue; xrange.from = Math.max(xrange.from, xrange.axis.min); xrange.to = Math.min(xrange.to, xrange.axis.max); yrange.from = Math.max(yrange.from, yrange.axis.min); yrange.to = Math.min(yrange.to, yrange.axis.max); if (xrange.from == xrange.to && yrange.from == yrange.to) continue; // then draw xrange.from = xrange.axis.p2c(xrange.from); xrange.to = xrange.axis.p2c(xrange.to); yrange.from = yrange.axis.p2c(yrange.from); yrange.to = yrange.axis.p2c(yrange.to); if (xrange.from == xrange.to || yrange.from == yrange.to) { // draw line ctx.beginPath(); ctx.strokeStyle = m.color || options.grid.markingsColor; ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth; ctx.moveTo(xrange.from, yrange.from); ctx.lineTo(xrange.to, yrange.to); ctx.stroke(); } else { // fill area ctx.fillStyle = m.color || options.grid.markingsColor; ctx.fillRect(xrange.from, yrange.to, xrange.to - xrange.from, yrange.from - yrange.to); } } } // draw the ticks var axes = allAxes(), bw = options.grid.borderWidth; for (var j = 0; j < axes.length; ++j) { var axis = axes[j], box = axis.box, t = axis.tickLength, x, y, xoff, yoff; if (!axis.show || axis.ticks.length == 0) continue ctx.strokeStyle = axis.options.tickColor || $.color.parse(axis.options.color).scale('a', 0.22).toString(); ctx.lineWidth = 1; // find the edges if (axis.direction == "x") { x = 0; if (t == "full") y = (axis.position == "top" ? 0 : plotHeight); else y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0); } else { y = 0; if (t == "full") x = (axis.position == "left" ? 0 : plotWidth); else x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0); } // draw tick bar if (!axis.innermost) { ctx.beginPath(); xoff = yoff = 0; if (axis.direction == "x") xoff = plotWidth; else yoff = plotHeight; if (ctx.lineWidth == 1) { x = Math.floor(x) + 0.5; y = Math.floor(y) + 0.5; } ctx.moveTo(x, y); ctx.lineTo(x + xoff, y + yoff); ctx.stroke(); } // draw ticks ctx.beginPath(); for (i = 0; i < axis.ticks.length; ++i) { var v = axis.ticks[i].v; xoff = yoff = 0; if (v < axis.min || v > axis.max // skip those lying on the axes if we got a border || (t == "full" && bw > 0 && (v == axis.min || v == axis.max))) continue; if (axis.direction == "x") { x = axis.p2c(v); yoff = t == "full" ? -plotHeight : t; if (axis.position == "top") yoff = -yoff; } else { y = axis.p2c(v); xoff = t == "full" ? -plotWidth : t; if (axis.position == "left") xoff = -xoff; } if (ctx.lineWidth == 1) { if (axis.direction == "x") x = Math.floor(x) + 0.5; else y = Math.floor(y) + 0.5; } ctx.moveTo(x, y); ctx.lineTo(x + xoff, y + yoff); } ctx.stroke(); } // draw border if (bw) { ctx.lineWidth = bw; ctx.strokeStyle = options.grid.borderColor; ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw); } ctx.restore(); } function insertAxisLabels() { placeholder.find(".tickLabels").remove(); var html = ['
        ']; var axes = allAxes(); for (var j = 0; j < axes.length; ++j) { var axis = axes[j], box = axis.box; if (!axis.show) continue; //debug: html.push('
        ') html.push('
        '); for (var i = 0; i < axis.ticks.length; ++i) { var tick = axis.ticks[i]; if (!tick.label || tick.v < axis.min || tick.v > axis.max) continue; var pos = {}, align; if (axis.direction == "x") { align = "center"; pos.left = Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2); if (axis.position == "bottom") pos.top = box.top + box.padding; else pos.bottom = canvasHeight - (box.top + box.height - box.padding); } else { pos.top = Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2); if (axis.position == "left") { pos.right = canvasWidth - (box.left + box.width - box.padding) align = "right"; } else { pos.left = box.left + box.padding; align = "left"; } } pos.width = axis.labelWidth; var style = ["position:absolute", "text-align:" + align ]; for (var a in pos) style.push(a + ":" + pos[a] + "px") html.push('
        ' + tick.label + '
        '); } html.push('
        '); } html.push('
        '); placeholder.append(html.join("")); } function drawSeries(series) { if (series.lines.show) drawSeriesLines(series); if (series.bars.show) drawSeriesBars(series); if (series.points.show) drawSeriesPoints(series); } function drawSeriesLines(series) { function plotLine(datapoints, xoffset, yoffset, axisx, axisy) { var points = datapoints.points, ps = datapoints.pointsize, prevx = null, prevy = null; ctx.beginPath(); for (var i = ps; i < points.length; i += ps) { var x1 = points[i - ps], y1 = points[i - ps + 1], x2 = points[i], y2 = points[i + 1]; if (x1 == null || x2 == null) continue; // clip with ymin if (y1 <= y2 && y1 < axisy.min) { if (y2 < axisy.min) continue; // line segment is outside // compute new intersection point x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; y1 = axisy.min; } else if (y2 <= y1 && y2 < axisy.min) { if (y1 < axisy.min) continue; x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; y2 = axisy.min; } // clip with ymax if (y1 >= y2 && y1 > axisy.max) { if (y2 > axisy.max) continue; x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; y1 = axisy.max; } else if (y2 >= y1 && y2 > axisy.max) { if (y1 > axisy.max) continue; x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; y2 = axisy.max; } // clip with xmin if (x1 <= x2 && x1 < axisx.min) { if (x2 < axisx.min) continue; y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; x1 = axisx.min; } else if (x2 <= x1 && x2 < axisx.min) { if (x1 < axisx.min) continue; y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; x2 = axisx.min; } // clip with xmax if (x1 >= x2 && x1 > axisx.max) { if (x2 > axisx.max) continue; y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; x1 = axisx.max; } else if (x2 >= x1 && x2 > axisx.max) { if (x1 > axisx.max) continue; y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; x2 = axisx.max; } if (x1 != prevx || y1 != prevy) ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset); prevx = x2; prevy = y2; ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset); } ctx.stroke(); } function plotLineArea(datapoints, axisx, axisy) { var points = datapoints.points, ps = datapoints.pointsize, bottom = Math.min(Math.max(0, axisy.min), axisy.max), i = 0, top, areaOpen = false, ypos = 1, segmentStart = 0, segmentEnd = 0; // we process each segment in two turns, first forward // direction to sketch out top, then once we hit the // end we go backwards to sketch the bottom while (true) { if (ps > 0 && i > points.length + ps) break; i += ps; // ps is negative if going backwards var x1 = points[i - ps], y1 = points[i - ps + ypos], x2 = points[i], y2 = points[i + ypos]; if (areaOpen) { if (ps > 0 && x1 != null && x2 == null) { // at turning point segmentEnd = i; ps = -ps; ypos = 2; continue; } if (ps < 0 && i == segmentStart + ps) { // done with the reverse sweep ctx.fill(); areaOpen = false; ps = -ps; ypos = 1; i = segmentStart = segmentEnd + ps; continue; } } if (x1 == null || x2 == null) continue; // clip x values // clip with xmin if (x1 <= x2 && x1 < axisx.min) { if (x2 < axisx.min) continue; y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; x1 = axisx.min; } else if (x2 <= x1 && x2 < axisx.min) { if (x1 < axisx.min) continue; y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1; x2 = axisx.min; } // clip with xmax if (x1 >= x2 && x1 > axisx.max) { if (x2 > axisx.max) continue; y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; x1 = axisx.max; } else if (x2 >= x1 && x2 > axisx.max) { if (x1 > axisx.max) continue; y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1; x2 = axisx.max; } if (!areaOpen) { // open area ctx.beginPath(); ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom)); areaOpen = true; } // now first check the case where both is outside if (y1 >= axisy.max && y2 >= axisy.max) { ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max)); ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max)); continue; } else if (y1 <= axisy.min && y2 <= axisy.min) { ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min)); ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min)); continue; } // else it's a bit more complicated, there might // be a flat maxed out rectangle first, then a // triangular cutout or reverse; to find these // keep track of the current x values var x1old = x1, x2old = x2; // clip the y values, without shortcutting, we // go through all cases in turn // clip with ymin if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) { x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; y1 = axisy.min; } else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) { x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1; y2 = axisy.min; } // clip with ymax if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) { x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; y1 = axisy.max; } else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) { x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1; y2 = axisy.max; } // if the x value was changed we got a rectangle // to fill if (x1 != x1old) { ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1)); // it goes to (x1, y1), but we fill that below } // fill triangular section, this sometimes result // in redundant points if (x1, y1) hasn't changed // from previous line to, but we just ignore that ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1)); ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); // fill the other rectangle if it's there if (x2 != x2old) { ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2)); ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2)); } } } ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); ctx.lineJoin = "round"; var lw = series.lines.lineWidth, sw = series.shadowSize; // FIXME: consider another form of shadow when filling is turned on if (lw > 0 && sw > 0) { // draw shadow as a thick and thin line with transparency ctx.lineWidth = sw; ctx.strokeStyle = "rgba(0,0,0,0.1)"; // position shadow at angle from the mid of line var angle = Math.PI/18; plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis); ctx.lineWidth = sw/2; plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis); } ctx.lineWidth = lw; ctx.strokeStyle = series.color; var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight); if (fillStyle) { ctx.fillStyle = fillStyle; plotLineArea(series.datapoints, series.xaxis, series.yaxis); } if (lw > 0) plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis); ctx.restore(); } function drawSeriesPoints(series) { function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) { var points = datapoints.points, ps = datapoints.pointsize; for (var i = 0; i < points.length; i += ps) { var x = points[i], y = points[i + 1]; if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) continue; ctx.beginPath(); x = axisx.p2c(x); y = axisy.p2c(y) + offset; if (symbol == "circle") ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false); else symbol(ctx, x, y, radius, shadow); ctx.closePath(); if (fillStyle) { ctx.fillStyle = fillStyle; ctx.fill(); } ctx.stroke(); } } ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); var lw = series.points.lineWidth, sw = series.shadowSize, radius = series.points.radius, symbol = series.points.symbol; if (lw > 0 && sw > 0) { // draw shadow in two steps var w = sw / 2; ctx.lineWidth = w; ctx.strokeStyle = "rgba(0,0,0,0.1)"; plotPoints(series.datapoints, radius, null, w + w/2, true, series.xaxis, series.yaxis, symbol); ctx.strokeStyle = "rgba(0,0,0,0.2)"; plotPoints(series.datapoints, radius, null, w/2, true, series.xaxis, series.yaxis, symbol); } ctx.lineWidth = lw; ctx.strokeStyle = series.color; plotPoints(series.datapoints, radius, getFillStyle(series.points, series.color), 0, false, series.xaxis, series.yaxis, symbol); ctx.restore(); } function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) { var left, right, bottom, top, drawLeft, drawRight, drawTop, drawBottom, tmp; // in horizontal mode, we start the bar from the left // instead of from the bottom so it appears to be // horizontal rather than vertical if (horizontal) { drawBottom = drawRight = drawTop = true; drawLeft = false; left = b; right = x; top = y + barLeft; bottom = y + barRight; // account for negative bars if (right < left) { tmp = right; right = left; left = tmp; drawLeft = true; drawRight = false; } } else { drawLeft = drawRight = drawTop = true; drawBottom = false; left = x + barLeft; right = x + barRight; bottom = b; top = y; // account for negative bars if (top < bottom) { tmp = top; top = bottom; bottom = tmp; drawBottom = true; drawTop = false; } } // clip if (right < axisx.min || left > axisx.max || top < axisy.min || bottom > axisy.max) return; if (left < axisx.min) { left = axisx.min; drawLeft = false; } if (right > axisx.max) { right = axisx.max; drawRight = false; } if (bottom < axisy.min) { bottom = axisy.min; drawBottom = false; } if (top > axisy.max) { top = axisy.max; drawTop = false; } left = axisx.p2c(left); bottom = axisy.p2c(bottom); right = axisx.p2c(right); top = axisy.p2c(top); // fill the bar if (fillStyleCallback) { c.beginPath(); c.moveTo(left, bottom); c.lineTo(left, top); c.lineTo(right, top); c.lineTo(right, bottom); c.fillStyle = fillStyleCallback(bottom, top); c.fill(); } // draw outline if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) { c.beginPath(); // FIXME: inline moveTo is buggy with excanvas c.moveTo(left, bottom + offset); if (drawLeft) c.lineTo(left, top + offset); else c.moveTo(left, top + offset); if (drawTop) c.lineTo(right, top + offset); else c.moveTo(right, top + offset); if (drawRight) c.lineTo(right, bottom + offset); else c.moveTo(right, bottom + offset); if (drawBottom) c.lineTo(left, bottom + offset); else c.moveTo(left, bottom + offset); c.stroke(); } } function drawSeriesBars(series) { function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) { var points = datapoints.points, ps = datapoints.pointsize; for (var i = 0; i < points.length; i += ps) { if (points[i] == null) continue; drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth); } } ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); // FIXME: figure out a way to add shadows (for instance along the right edge) ctx.lineWidth = series.bars.lineWidth; ctx.strokeStyle = series.color; var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null; plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis); ctx.restore(); } function getFillStyle(filloptions, seriesColor, bottom, top) { var fill = filloptions.fill; if (!fill) return null; if (filloptions.fillColor) return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor); var c = $.color.parse(seriesColor); c.a = typeof fill == "number" ? fill : 0.4; c.normalize(); return c.toString(); } function insertLegend() { placeholder.find(".legend").remove(); if (!options.legend.show) return; var fragments = [], rowStarted = false, lf = options.legend.labelFormatter, s, label; for (var i = 0; i < series.length; ++i) { s = series[i]; label = s.label; if (!label) continue; if (i % options.legend.noColumns == 0) { if (rowStarted) fragments.push(''); fragments.push(''); rowStarted = true; } if (lf) label = lf(label, s); fragments.push( '
        ' + '' + label + ''); } if (rowStarted) fragments.push(''); if (fragments.length == 0) return; var table = '' + fragments.join("") + '
        '; if (options.legend.container != null) $(options.legend.container).html(table); else { var pos = "", p = options.legend.position, m = options.legend.margin; if (m[0] == null) m = [m, m]; if (p.charAt(0) == "n") pos += 'top:' + (m[1] + plotOffset.top) + 'px;'; else if (p.charAt(0) == "s") pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;'; if (p.charAt(1) == "e") pos += 'right:' + (m[0] + plotOffset.right) + 'px;'; else if (p.charAt(1) == "w") pos += 'left:' + (m[0] + plotOffset.left) + 'px;'; var legend = $('
        ' + table.replace('style="', 'style="position:absolute;' + pos +';') + '
        ').appendTo(placeholder); if (options.legend.backgroundOpacity != 0.0) { // put in the transparent background // separately to avoid blended labels and // label boxes var c = options.legend.backgroundColor; if (c == null) { c = options.grid.backgroundColor; if (c && typeof c == "string") c = $.color.parse(c); else c = $.color.extract(legend, 'background-color'); c.a = 1; c = c.toString(); } var div = legend.children(); $('
        ').prependTo(legend).css('opacity', options.legend.backgroundOpacity); } } } // interactive features var highlights = [], redrawTimeout = null; // returns the data item the mouse is over, or null if none is found function findNearbyItem(mouseX, mouseY, seriesFilter) { var maxDistance = options.grid.mouseActiveRadius, smallestDistance = maxDistance * maxDistance + 1, item = null, foundPoint = false, i, j; for (i = series.length - 1; i >= 0; --i) { if (!seriesFilter(series[i])) continue; var s = series[i], axisx = s.xaxis, axisy = s.yaxis, points = s.datapoints.points, ps = s.datapoints.pointsize, mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster my = axisy.c2p(mouseY), maxx = maxDistance / axisx.scale, maxy = maxDistance / axisy.scale; // with inverse transforms, we can't use the maxx/maxy // optimization, sadly if (axisx.options.inverseTransform) maxx = Number.MAX_VALUE; if (axisy.options.inverseTransform) maxy = Number.MAX_VALUE; if (s.lines.show || s.points.show) { for (j = 0; j < points.length; j += ps) { var x = points[j], y = points[j + 1]; if (x == null) continue; // For points and lines, the cursor must be within a // certain distance to the data point if (x - mx > maxx || x - mx < -maxx || y - my > maxy || y - my < -maxy) continue; // We have to calculate distances in pixels, not in // data units, because the scales of the axes may be different var dx = Math.abs(axisx.p2c(x) - mouseX), dy = Math.abs(axisy.p2c(y) - mouseY), dist = dx * dx + dy * dy; // we save the sqrt // use <= to ensure last point takes precedence // (last generally means on top of) if (dist < smallestDistance) { smallestDistance = dist; item = [i, j / ps]; } } } if (s.bars.show && !item) { // no other point can be nearby var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2, barRight = barLeft + s.bars.barWidth; for (j = 0; j < points.length; j += ps) { var x = points[j], y = points[j + 1], b = points[j + 2]; if (x == null) continue; // for a bar graph, the cursor must be inside the bar if (series[i].bars.horizontal ? (mx <= Math.max(b, x) && mx >= Math.min(b, x) && my >= y + barLeft && my <= y + barRight) : (mx >= x + barLeft && mx <= x + barRight && my >= Math.min(b, y) && my <= Math.max(b, y))) item = [i, j / ps]; } } } if (item) { i = item[0]; j = item[1]; ps = series[i].datapoints.pointsize; return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps), dataIndex: j, series: series[i], seriesIndex: i }; } return null; } function onMouseMove(e) { if (options.grid.hoverable) triggerClickHoverEvent("plothover", e, function (s) { return s["hoverable"] != false; }); } function onMouseLeave(e) { if (options.grid.hoverable) triggerClickHoverEvent("plothover", e, function (s) { return false; }); } function onClick(e) { triggerClickHoverEvent("plotclick", e, function (s) { return s["clickable"] != false; }); } // trigger click or hover event (they send the same parameters // so we share their code) function triggerClickHoverEvent(eventname, event, seriesFilter) { var offset = eventHolder.offset(), canvasX = event.pageX - offset.left - plotOffset.left, canvasY = event.pageY - offset.top - plotOffset.top, pos = canvasToAxisCoords({ left: canvasX, top: canvasY }); pos.pageX = event.pageX; pos.pageY = event.pageY; var item = findNearbyItem(canvasX, canvasY, seriesFilter); if (item) { // fill in mouse pos for any listeners out there item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left); item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top); } if (options.grid.autoHighlight) { // clear auto-highlights for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.auto == eventname && !(item && h.series == item.series && h.point[0] == item.datapoint[0] && h.point[1] == item.datapoint[1])) unhighlight(h.series, h.point); } if (item) highlight(item.series, item.datapoint, eventname); } placeholder.trigger(eventname, [ pos, item ]); } function triggerRedrawOverlay() { if (!redrawTimeout) redrawTimeout = setTimeout(drawOverlay, 30); } function drawOverlay() { redrawTimeout = null; // draw highlights octx.save(); octx.clearRect(0, 0, canvasWidth, canvasHeight); octx.translate(plotOffset.left, plotOffset.top); var i, hi; for (i = 0; i < highlights.length; ++i) { hi = highlights[i]; if (hi.series.bars.show) drawBarHighlight(hi.series, hi.point); else drawPointHighlight(hi.series, hi.point); } octx.restore(); executeHooks(hooks.drawOverlay, [octx]); } function highlight(s, point, auto) { if (typeof s == "number") s = series[s]; if (typeof point == "number") { var ps = s.datapoints.pointsize; point = s.datapoints.points.slice(ps * point, ps * (point + 1)); } var i = indexOfHighlight(s, point); if (i == -1) { highlights.push({ series: s, point: point, auto: auto }); triggerRedrawOverlay(); } else if (!auto) highlights[i].auto = false; } function unhighlight(s, point) { if (s == null && point == null) { highlights = []; triggerRedrawOverlay(); } if (typeof s == "number") s = series[s]; if (typeof point == "number") point = s.data[point]; var i = indexOfHighlight(s, point); if (i != -1) { highlights.splice(i, 1); triggerRedrawOverlay(); } } function indexOfHighlight(s, p) { for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.series == s && h.point[0] == p[0] && h.point[1] == p[1]) return i; } return -1; } function drawPointHighlight(series, point) { var x = point[0], y = point[1], axisx = series.xaxis, axisy = series.yaxis; if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) return; var pointRadius = series.points.radius + series.points.lineWidth / 2; octx.lineWidth = pointRadius; octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); var radius = 1.5 * pointRadius, x = axisx.p2c(x), y = axisy.p2c(y); octx.beginPath(); if (series.points.symbol == "circle") octx.arc(x, y, radius, 0, 2 * Math.PI, false); else series.points.symbol(octx, x, y, radius, false); octx.closePath(); octx.stroke(); } function drawBarHighlight(series, point) { octx.lineWidth = series.bars.lineWidth; octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString(); var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString(); var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth); } function getColorOrGradient(spec, bottom, top, defaultColor) { if (typeof spec == "string") return spec; else { // assume this is a gradient spec; IE currently only // supports a simple vertical gradient properly, so that's // what we support too var gradient = ctx.createLinearGradient(0, top, 0, bottom); for (var i = 0, l = spec.colors.length; i < l; ++i) { var c = spec.colors[i]; if (typeof c != "string") { var co = $.color.parse(defaultColor); if (c.brightness != null) co = co.scale('rgb', c.brightness) if (c.opacity != null) co.a *= c.opacity; c = co.toString(); } gradient.addColorStop(i / (l - 1), c); } return gradient; } } } $.plot = function(placeholder, data, options) { //var t0 = new Date(); var plot = new Plot($(placeholder), data, options, $.plot.plugins); //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime())); return plot; }; $.plot.version = "0.7"; $.plot.plugins = []; // returns a string with the date d formatted according to fmt $.plot.formatDate = function(d, fmt, monthNames) { var leftPad = function(n) { n = "" + n; return n.length == 1 ? "0" + n : n; }; var r = []; var escape = false, padNext = false; var hours = d.getUTCHours(); var isAM = hours < 12; if (monthNames == null) monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; if (fmt.search(/%p|%P/) != -1) { if (hours > 12) { hours = hours - 12; } else if (hours == 0) { hours = 12; } } for (var i = 0; i < fmt.length; ++i) { var c = fmt.charAt(i); if (escape) { switch (c) { case 'h': c = "" + hours; break; case 'H': c = leftPad(hours); break; case 'M': c = leftPad(d.getUTCMinutes()); break; case 'S': c = leftPad(d.getUTCSeconds()); break; case 'd': c = "" + d.getUTCDate(); break; case 'm': c = "" + (d.getUTCMonth() + 1); break; case 'y': c = "" + d.getUTCFullYear(); break; case 'b': c = "" + monthNames[d.getUTCMonth()]; break; case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; case '0': c = ""; padNext = true; break; } if (c && padNext) { c = leftPad(c); padNext = false; } r.push(c); if (!padNext) escape = false; } else { if (c == "%") escape = true; else r.push(c); } } return r.join(""); }; // round to nearby lower multiple of base function floorInBase(n, base) { return base * Math.floor(n / base); } })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.navigate.js ================================================ /* Flot plugin for adding panning and zooming capabilities to a plot. The default behaviour is double click and scrollwheel up/down to zoom in, drag to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and plot.pan(offset) so you easily can add custom controls. It also fires a "plotpan" and "plotzoom" event when something happens, useful for synchronizing plots. Options: zoom: { interactive: false trigger: "dblclick" // or "click" for single click amount: 1.5 // 2 = 200% (zoom in), 0.5 = 50% (zoom out) } pan: { interactive: false cursor: "move" // CSS mouse cursor value used when dragging, e.g. "pointer" frameRate: 20 } xaxis, yaxis, x2axis, y2axis: { zoomRange: null // or [number, number] (min range, max range) or false panRange: null // or [number, number] (min, max) or false } "interactive" enables the built-in drag/click behaviour. If you enable interactive for pan, then you'll have a basic plot that supports moving around; the same for zoom. "amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to the current viewport. "cursor" is a standard CSS mouse cursor string used for visual feedback to the user when dragging. "frameRate" specifies the maximum number of times per second the plot will update itself while the user is panning around on it (set to null to disable intermediate pans, the plot will then not update until the mouse button is released). "zoomRange" is the interval in which zooming can happen, e.g. with zoomRange: [1, 100] the zoom will never scale the axis so that the difference between min and max is smaller than 1 or larger than 100. You can set either end to null to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis will be disabled. "panRange" confines the panning to stay within a range, e.g. with panRange: [-10, 20] panning stops at -10 in one end and at 20 in the other. Either can be null, e.g. [-10, null]. If you set panRange to false, panning on that axis will be disabled. Example API usage: plot = $.plot(...); // zoom default amount in on the pixel (10, 20) plot.zoom({ center: { left: 10, top: 20 } }); // zoom out again plot.zoomOut({ center: { left: 10, top: 20 } }); // zoom 200% in on the pixel (10, 20) plot.zoom({ amount: 2, center: { left: 10, top: 20 } }); // pan 100 pixels to the left and 20 down plot.pan({ left: -100, top: 20 }) Here, "center" specifies where the center of the zooming should happen. Note that this is defined in pixel space, not the space of the data points (you can use the p2c helpers on the axes in Flot to help you convert between these). "amount" is the amount to zoom the viewport relative to the current range, so 1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You can set the default in the options. */ // First two dependencies, jquery.event.drag.js and // jquery.mousewheel.js, we put them inline here to save people the // effort of downloading them. /* jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com) Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt */ (function(E){E.fn.drag=function(L,K,J){if(K){this.bind("dragstart",L)}if(J){this.bind("dragend",J)}return !L?this.trigger("drag"):this.bind("drag",K?K:L)};var A=E.event,B=A.special,F=B.drag={not:":input",distance:0,which:1,dragging:false,setup:function(J){J=E.extend({distance:F.distance,which:F.which,not:F.not},J||{});J.distance=I(J.distance);A.add(this,"mousedown",H,J);if(this.attachEvent){this.attachEvent("ondragstart",D)}},teardown:function(){A.remove(this,"mousedown",H);if(this===F.dragging){F.dragging=F.proxy=false}G(this,true);if(this.detachEvent){this.detachEvent("ondragstart",D)}}};B.dragstart=B.dragend={setup:function(){},teardown:function(){}};function H(L){var K=this,J,M=L.data||{};if(M.elem){K=L.dragTarget=M.elem;L.dragProxy=F.proxy||K;L.cursorOffsetX=M.pageX-M.left;L.cursorOffsetY=M.pageY-M.top;L.offsetX=L.pageX-L.cursorOffsetX;L.offsetY=L.pageY-L.cursorOffsetY}else{if(F.dragging||(M.which>0&&L.which!=M.which)||E(L.target).is(M.not)){return }}switch(L.type){case"mousedown":E.extend(M,E(K).offset(),{elem:K,target:L.target,pageX:L.pageX,pageY:L.pageY});A.add(document,"mousemove mouseup",H,M);G(K,false);F.dragging=null;return false;case !F.dragging&&"mousemove":if(I(L.pageX-M.pageX)+I(L.pageY-M.pageY) max) { // make sure min < max var tmp = min; min = max; max = tmp; } var range = max - min; if (zr && ((zr[0] != null && range < zr[0]) || (zr[1] != null && range > zr[1]))) return; opts.min = min; opts.max = max; }); plot.setupGrid(); plot.draw(); if (!args.preventEvent) plot.getPlaceholder().trigger("plotzoom", [ plot ]); } plot.pan = function (args) { var delta = { x: +args.left, y: +args.top }; if (isNaN(delta.x)) delta.x = 0; if (isNaN(delta.y)) delta.y = 0; $.each(plot.getAxes(), function (_, axis) { var opts = axis.options, min, max, d = delta[axis.direction]; min = axis.c2p(axis.p2c(axis.min) + d), max = axis.c2p(axis.p2c(axis.max) + d); var pr = opts.panRange; if (pr === false) // no panning on this axis return; if (pr) { // check whether we hit the wall if (pr[0] != null && pr[0] > min) { d = pr[0] - min; min += d; max += d; } if (pr[1] != null && pr[1] < max) { d = pr[1] - max; min += d; max += d; } } opts.min = min; opts.max = max; }); plot.setupGrid(); plot.draw(); if (!args.preventEvent) plot.getPlaceholder().trigger("plotpan", [ plot ]); } function shutdown(plot, eventHolder) { eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick); eventHolder.unbind("mousewheel", onMouseWheel); eventHolder.unbind("dragstart", onDragStart); eventHolder.unbind("drag", onDrag); eventHolder.unbind("dragend", onDragEnd); if (panTimeout) clearTimeout(panTimeout); } plot.hooks.bindEvents.push(bindEvents); plot.hooks.shutdown.push(shutdown); } $.plot.plugins.push({ init: init, options: options, name: 'navigate', version: '1.3' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.orderBars.js ================================================ /* * Flot plugin to order bars side by side. * * Released under the MIT license by Benjamin BUFFET, 20-Sep-2010. * * This plugin is an alpha version. * * To activate the plugin you must specify the parameter "order" for the specific serie : * * $.plot($("#placeholder"), [{ data: [ ... ], bars :{ order = null or integer }]) * * If 2 series have the same order param, they are ordered by the position in the array; * * The plugin adjust the point by adding a value depanding of the barwidth * Exemple for 3 series (barwidth : 0.1) : * * first bar décalage : -0.15 * second bar décalage : -0.05 * third bar décalage : 0.05 * */ (function($){ function init(plot){ var orderedBarSeries; var nbOfBarsToOrder; var borderWidth; var borderWidthInXabsWidth; var pixelInXWidthEquivalent = 1; var isHorizontal = false; /* * This method add shift to x values */ function reOrderBars(plot, serie, datapoints){ var shiftedPoints = null; if(serieNeedToBeReordered(serie)){ checkIfGraphIsHorizontal(serie); calculPixel2XWidthConvert(plot); retrieveBarSeries(plot); calculBorderAndBarWidth(serie); if(nbOfBarsToOrder >= 2){ var position = findPosition(serie); var decallage = 0; var centerBarShift = calculCenterBarShift(); if (isBarAtLeftOfCenter(position)){ decallage = -1*(sumWidth(orderedBarSeries,position-1,Math.floor(nbOfBarsToOrder / 2)-1)) - centerBarShift; }else{ decallage = sumWidth(orderedBarSeries,Math.ceil(nbOfBarsToOrder / 2),position-2) + centerBarShift + borderWidthInXabsWidth*2; } shiftedPoints = shiftPoints(datapoints,serie,decallage); datapoints.points = shiftedPoints; } } return shiftedPoints; } function serieNeedToBeReordered(serie){ return serie.bars != null && serie.bars.show && serie.bars.order != null; } function calculPixel2XWidthConvert(plot){ var gridDimSize = isHorizontal ? plot.getPlaceholder().innerHeight() : plot.getPlaceholder().innerWidth(); var minMaxValues = isHorizontal ? getAxeMinMaxValues(plot.getData(),1) : getAxeMinMaxValues(plot.getData(),0); var AxeSize = minMaxValues[1] - minMaxValues[0]; pixelInXWidthEquivalent = AxeSize / gridDimSize; } function getAxeMinMaxValues(series,AxeIdx){ var minMaxValues = new Array(); for(var i = 0; i < series.length; i++){ minMaxValues[0] = series[i].data[0][AxeIdx]; minMaxValues[1] = series[i].data[series[i].data.length - 1][AxeIdx]; } return minMaxValues; } function retrieveBarSeries(plot){ orderedBarSeries = findOthersBarsToReOrders(plot.getData()); nbOfBarsToOrder = orderedBarSeries.length; } function findOthersBarsToReOrders(series){ var retSeries = new Array(); for(var i = 0; i < series.length; i++){ if(series[i].bars.order != null && series[i].bars.show){ retSeries.push(series[i]); } } return retSeries.sort(sortByOrder); } function sortByOrder(serie1,serie2){ var x = serie1.bars.order; var y = serie2.bars.order; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } function calculBorderAndBarWidth(serie){ borderWidth = serie.bars.lineWidth ? serie.bars.lineWidth : 2; borderWidthInXabsWidth = borderWidth * pixelInXWidthEquivalent; } function checkIfGraphIsHorizontal(serie){ if(serie.bars.horizontal){ isHorizontal = true; } } function findPosition(serie){ var pos = 0 for (var i = 0; i < orderedBarSeries.length; ++i) { if (serie == orderedBarSeries[i]){ pos = i; break; } } return pos+1; } function calculCenterBarShift(){ var width = 0; if(nbOfBarsToOrder%2 != 0) width = (orderedBarSeries[Math.ceil(nbOfBarsToOrder / 2)].bars.barWidth)/2; return width; } function isBarAtLeftOfCenter(position){ return position <= Math.ceil(nbOfBarsToOrder / 2); } function sumWidth(series,start,end){ var totalWidth = 0; for(var i = start; i <= end; i++){ totalWidth += series[i].bars.barWidth+borderWidthInXabsWidth*2; } return totalWidth; } function shiftPoints(datapoints,serie,dx){ var ps = datapoints.pointsize; var points = datapoints.points; var j = 0; for(var i = isHorizontal ? 1 : 0;i < points.length; i += ps){ points[i] += dx; //Adding the new x value in the serie to be abble to display the right tooltip value, //using the index 3 to not overide the third index. serie.data[j][3] = points[i]; j++; } return points; } plot.hooks.processDatapoints.push(reOrderBars); } var options = { series : { bars: {order: null} // or number/string } }; $.plot.plugins.push({ init: init, options: options, name: "orderBars", version: "0.2" }); })(jQuery) ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.pie.js ================================================ /* Flot plugin for rendering pie charts. The plugin assumes the data is coming is as a single data value for each series, and each of those values is a positive value or zero (negative numbers don't make any sense and will cause strange effects). The data values do NOT need to be passed in as percentage values because it internally calculates the total and percentages. * Created by Brian Medendorp, June 2009 * Updated November 2009 with contributions from: btburnett3, Anthony Aragues and Xavi Ivars * Changes: 2009-10-22: lineJoin set to round 2009-10-23: IE full circle fix, donut 2009-11-11: Added basic hover from btburnett3 - does not work in IE, and center is off in Chrome and Opera 2009-11-17: Added IE hover capability submitted by Anthony Aragues 2009-11-18: Added bug fix submitted by Xavi Ivars (issues with arrays when other JS libraries are included as well) Available options are: series: { pie: { show: true/false radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto' innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show) offset: { top: integer value to move the pie up or down left: integer value to move the pie left or right, or 'auto' }, stroke: { color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF') width: integer pixel width of the stroke }, label: { show: true/false, or 'auto' formatter: a user-defined function that modifies the text/style of the label text radius: 0-1 for percentage of fullsize, or a specified pixel length background: { color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000') opacity: 0-1 }, threshold: 0-1 for the percentage value at which to hide labels (if they're too small) }, combine: { threshold: 0-1 for the percentage value at which to combine slices (if they're too small) color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined label: any text value of what the combined slice should be labeled } highlight: { opacity: 0-1 } } } More detail and specific examples can be found in the included HTML file. */ (function ($) { function init(plot) // this is the "body" of the plugin { var canvas = null; var target = null; var maxRadius = null; var centerLeft = null; var centerTop = null; var total = 0; var redraw = true; var redrawAttempts = 10; var shrink = 0.95; var legendWidth = 0; var processed = false; var raw = false; // interactive variables var highlights = []; // add hook to determine if pie plugin in enabled, and then perform necessary operations plot.hooks.processOptions.push(checkPieEnabled); plot.hooks.bindEvents.push(bindEvents); // check to see if the pie plugin is enabled function checkPieEnabled(plot, options) { if (options.series.pie.show) { //disable grid options.grid.show = false; // set labels.show if (options.series.pie.label.show=='auto') if (options.legend.show) options.series.pie.label.show = false; else options.series.pie.label.show = true; // set radius if (options.series.pie.radius=='auto') if (options.series.pie.label.show) options.series.pie.radius = 3/4; else options.series.pie.radius = 1; // ensure sane tilt if (options.series.pie.tilt>1) options.series.pie.tilt=1; if (options.series.pie.tilt<0) options.series.pie.tilt=0; // add processData hook to do transformations on the data plot.hooks.processDatapoints.push(processDatapoints); plot.hooks.drawOverlay.push(drawOverlay); // add draw hook plot.hooks.draw.push(draw); } } // bind hoverable events function bindEvents(plot, eventHolder) { var options = plot.getOptions(); if (options.series.pie.show && options.grid.hoverable) eventHolder.unbind('mousemove').mousemove(onMouseMove); if (options.series.pie.show && options.grid.clickable) eventHolder.unbind('click').click(onClick); } // debugging function that prints out an object function alertObject(obj) { var msg = ''; function traverse(obj, depth) { if (!depth) depth = 0; for (var i = 0; i < obj.length; ++i) { for (var j=0; jcanvas.width-maxRadius) centerLeft = canvas.width-maxRadius; } function fixData(data) { for (var i = 0; i < data.length; ++i) { if (typeof(data[i].data)=='number') data[i].data = [[1,data[i].data]]; else if (typeof(data[i].data)=='undefined' || typeof(data[i].data[0])=='undefined') { if (typeof(data[i].data)!='undefined' && typeof(data[i].data.label)!='undefined') data[i].label = data[i].data.label; // fix weirdness coming from flot data[i].data = [[1,0]]; } } return data; } function combine(data) { data = fixData(data); calcTotal(data); var combined = 0; var numCombined = 0; var color = options.series.pie.combine.color; var newdata = []; for (var i = 0; i < data.length; ++i) { // make sure its a number data[i].data[0][1] = parseFloat(data[i].data[0][1]); if (!data[i].data[0][1]) data[i].data[0][1] = 0; if (data[i].data[0][1]/total<=options.series.pie.combine.threshold) { combined += data[i].data[0][1]; numCombined++; if (!color) color = data[i].color; } else { newdata.push({ data: [[1,data[i].data[0][1]]], color: data[i].color, label: data[i].label, angle: (data[i].data[0][1]*(Math.PI*2))/total, percent: (data[i].data[0][1]/total*100) }); } } if (numCombined>0) newdata.push({ data: [[1,combined]], color: color, label: options.series.pie.combine.label, angle: (combined*(Math.PI*2))/total, percent: (combined/total*100) }); return newdata; } function draw(plot, newCtx) { if (!target) return; // if no series were passed ctx = newCtx; setupPie(); var slices = plot.getData(); var attempts = 0; redraw = true; while (redraw && attempts0) maxRadius *= shrink; attempts += 1; clear(); if (options.series.pie.tilt<=0.8) drawShadow(); drawPie(); } if (attempts >= redrawAttempts) { clear(); target.prepend('
        Could not draw pie with labels contained inside canvas
        '); } if ( plot.setSeries && plot.insertLegend ) { plot.setSeries(slices); plot.insertLegend(); } // we're actually done at this point, just defining internal functions at this point function clear() { ctx.clearRect(0,0,canvas.width,canvas.height); target.children().filter('.pieLabel, .pieLabelBackground').remove(); } function drawShadow() { var shadowLeft = 5; var shadowTop = 15; var edge = 10; var alpha = 0.02; // set radius if (options.series.pie.radius>1) var radius = options.series.pie.radius; else var radius = maxRadius * options.series.pie.radius; if (radius>=(canvas.width/2)-shadowLeft || radius*options.series.pie.tilt>=(canvas.height/2)-shadowTop || radius<=edge) return; // shadow would be outside canvas, so don't draw it ctx.save(); ctx.translate(shadowLeft,shadowTop); ctx.globalAlpha = alpha; ctx.fillStyle = '#000'; // center and rotate to starting position ctx.translate(centerLeft,centerTop); ctx.scale(1, options.series.pie.tilt); //radius -= edge; for (var i=1; i<=edge; i++) { ctx.beginPath(); ctx.arc(0,0,radius,0,Math.PI*2,false); ctx.fill(); radius -= i; } ctx.restore(); } function drawPie() { startAngle = Math.PI*options.series.pie.startAngle; // set radius if (options.series.pie.radius>1) var radius = options.series.pie.radius; else var radius = maxRadius * options.series.pie.radius; // center and rotate to starting position ctx.save(); ctx.translate(centerLeft,centerTop); ctx.scale(1, options.series.pie.tilt); //ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera // draw slices ctx.save(); var currentAngle = startAngle; for (var i = 0; i < slices.length; ++i) { slices[i].startAngle = currentAngle; drawSlice(slices[i].angle, slices[i].color, true); } ctx.restore(); // draw slice outlines ctx.save(); ctx.lineWidth = options.series.pie.stroke.width; currentAngle = startAngle; for (var i = 0; i < slices.length; ++i) drawSlice(slices[i].angle, options.series.pie.stroke.color, false); ctx.restore(); // draw donut hole drawDonutHole(ctx); // draw labels if (options.series.pie.label.show) drawLabels(); // restore to original state ctx.restore(); function drawSlice(angle, color, fill) { if (angle<=0) return; if (fill) ctx.fillStyle = color; else { ctx.strokeStyle = color; ctx.lineJoin = 'round'; } ctx.beginPath(); if (Math.abs(angle - Math.PI*2) > 0.000000001) ctx.moveTo(0,0); // Center of the pie else if ($.browser.msie) angle -= 0.0001; //ctx.arc(0,0,radius,0,angle,false); // This doesn't work properly in Opera ctx.arc(0,0,radius,currentAngle,currentAngle+angle,false); ctx.closePath(); //ctx.rotate(angle); // This doesn't work properly in Opera currentAngle += angle; if (fill) ctx.fill(); else ctx.stroke(); } function drawLabels() { var currentAngle = startAngle; // set radius if (options.series.pie.label.radius>1) var radius = options.series.pie.label.radius; else var radius = maxRadius * options.series.pie.label.radius; for (var i = 0; i < slices.length; ++i) { if (slices[i].percent >= options.series.pie.label.threshold*100) drawLabel(slices[i], currentAngle, i); currentAngle += slices[i].angle; } function drawLabel(slice, startAngle, index) { if (slice.data[0][1]==0) return; // format label text var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter; if (lf) text = lf(slice.label, slice); else text = slice.label; if (plf) text = plf(text, slice); var halfAngle = ((startAngle+slice.angle) + startAngle)/2; var x = centerLeft + Math.round(Math.cos(halfAngle) * radius); var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt; var html = '' + text + ""; target.append(html); var label = target.children('#pieLabel'+index); var labelTop = (y - label.height()/2); var labelLeft = (x - label.width()/2); label.css('top', labelTop); label.css('left', labelLeft); // check to make sure that the label is not outside the canvas if (0-labelTop>0 || 0-labelLeft>0 || canvas.height-(labelTop+label.height())<0 || canvas.width-(labelLeft+label.width())<0) redraw = true; if (options.series.pie.label.background.opacity != 0) { // put in the transparent background separately to avoid blended labels and label boxes var c = options.series.pie.label.background.color; if (c == null) { c = slice.color; } var pos = 'top:'+labelTop+'px;left:'+labelLeft+'px;'; $('
        ').insertBefore(label).css('opacity', options.series.pie.label.background.opacity); } } // end individual label function } // end drawLabels function } // end drawPie function } // end draw function // Placed here because it needs to be accessed from multiple locations function drawDonutHole(layer) { // draw donut hole if(options.series.pie.innerRadius > 0) { // subtract the center layer.save(); innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius; layer.globalCompositeOperation = 'destination-out'; // this does not work with excanvas, but it will fall back to using the stroke color layer.beginPath(); layer.fillStyle = options.series.pie.stroke.color; layer.arc(0,0,innerRadius,0,Math.PI*2,false); layer.fill(); layer.closePath(); layer.restore(); // add inner stroke layer.save(); layer.beginPath(); layer.strokeStyle = options.series.pie.stroke.color; layer.arc(0,0,innerRadius,0,Math.PI*2,false); layer.stroke(); layer.closePath(); layer.restore(); // TODO: add extra shadow inside hole (with a mask) if the pie is tilted. } } //-- Additional Interactive related functions -- function isPointInPoly(poly, pt) { for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) ((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1])) && (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0]) && (c = !c); return c; } function findNearbySlice(mouseX, mouseY) { var slices = plot.getData(), options = plot.getOptions(), radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; for (var i = 0; i < slices.length; ++i) { var s = slices[i]; if(s.pie.show) { ctx.save(); ctx.beginPath(); ctx.moveTo(0,0); // Center of the pie //ctx.scale(1, options.series.pie.tilt); // this actually seems to break everything when here. ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle,false); ctx.closePath(); x = mouseX-centerLeft; y = mouseY-centerTop; if(ctx.isPointInPath) { if (ctx.isPointInPath(mouseX-centerLeft, mouseY-centerTop)) { //alert('found slice!'); ctx.restore(); return {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i}; } } else { // excanvas for IE doesn;t support isPointInPath, this is a workaround. p1X = (radius * Math.cos(s.startAngle)); p1Y = (radius * Math.sin(s.startAngle)); p2X = (radius * Math.cos(s.startAngle+(s.angle/4))); p2Y = (radius * Math.sin(s.startAngle+(s.angle/4))); p3X = (radius * Math.cos(s.startAngle+(s.angle/2))); p3Y = (radius * Math.sin(s.startAngle+(s.angle/2))); p4X = (radius * Math.cos(s.startAngle+(s.angle/1.5))); p4Y = (radius * Math.sin(s.startAngle+(s.angle/1.5))); p5X = (radius * Math.cos(s.startAngle+s.angle)); p5Y = (radius * Math.sin(s.startAngle+s.angle)); arrPoly = [[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]]; arrPoint = [x,y]; // TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt? if(isPointInPoly(arrPoly, arrPoint)) { ctx.restore(); return {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i}; } } ctx.restore(); } } return null; } function onMouseMove(e) { triggerClickHoverEvent('plothover', e); } function onClick(e) { triggerClickHoverEvent('plotclick', e); } // trigger click or hover event (they send the same parameters so we share their code) function triggerClickHoverEvent(eventname, e) { var offset = plot.offset(), canvasX = parseInt(e.pageX - offset.left), canvasY = parseInt(e.pageY - offset.top), item = findNearbySlice(canvasX, canvasY); if (options.grid.autoHighlight) { // clear auto-highlights for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.auto == eventname && !(item && h.series == item.series)) unhighlight(h.series); } } // highlight the slice if (item) highlight(item.series, eventname); // trigger any hover bind events var pos = { pageX: e.pageX, pageY: e.pageY }; target.trigger(eventname, [ pos, item ]); } function highlight(s, auto) { if (typeof s == "number") s = series[s]; var i = indexOfHighlight(s); if (i == -1) { highlights.push({ series: s, auto: auto }); plot.triggerRedrawOverlay(); } else if (!auto) highlights[i].auto = false; } function unhighlight(s) { if (s == null) { highlights = []; plot.triggerRedrawOverlay(); } if (typeof s == "number") s = series[s]; var i = indexOfHighlight(s); if (i != -1) { highlights.splice(i, 1); plot.triggerRedrawOverlay(); } } function indexOfHighlight(s) { for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.series == s) return i; } return -1; } function drawOverlay(plot, octx) { //alert(options.series.pie.radius); var options = plot.getOptions(); //alert(options.series.pie.radius); var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; octx.save(); octx.translate(centerLeft, centerTop); octx.scale(1, options.series.pie.tilt); for (i = 0; i < highlights.length; ++i) drawHighlight(highlights[i].series); drawDonutHole(octx); octx.restore(); function drawHighlight(series) { if (series.angle < 0) return; //octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString(); octx.fillStyle = "rgba(255, 255, 255, "+options.series.pie.highlight.opacity+")"; // this is temporary until we have access to parseColor octx.beginPath(); if (Math.abs(series.angle - Math.PI*2) > 0.000000001) octx.moveTo(0,0); // Center of the pie octx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle,false); octx.closePath(); octx.fill(); } } } // end init (plugin body) // define pie specific options and their default values var options = { series: { pie: { show: false, radius: 'auto', // actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value) innerRadius:0, /* for donut */ startAngle: 3/2, tilt: 1, offset: { top: 0, left: 'auto' }, stroke: { color: '#FFF', width: 1 }, label: { show: 'auto', formatter: function(label, slice){ return '
        '+label+'
        '+Math.round(slice.percent)+'%
        '; }, // formatter function radius: 1, // radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value) background: { color: null, opacity: 0 }, threshold: 0 // percentage at which to hide the label (i.e. the slice is too narrow) }, combine: { threshold: -1, // percentage at which to combine little slices into one larger slice color: null, // color to give the new slice (auto-generated if null) label: 'Other' // label to give the new slice }, highlight: { //color: '#FFF', // will add this functionality once parseColor is available opacity: 0.5 } } } }; $.plot.plugins.push({ init: init, options: options, name: "pie", version: "1.0" }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.resize.js ================================================ /* Flot plugin for automatically redrawing plots when the placeholder size changes, e.g. on window resizes. It works by listening for changes on the placeholder div (through the jQuery resize event plugin) - if the size changes, it will redraw the plot. There are no options. If you need to disable the plugin for some plots, you can just fix the size of their placeholders. */ /* Inline dependency: * jQuery resize event - v1.1 - 3/14/2010 * http://benalman.com/projects/jquery-resize-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this); (function ($) { var options = { }; // no options function init(plot) { function onResize() { var placeholder = plot.getPlaceholder(); // somebody might have hidden us and we can't plot // when we don't have the dimensions if (placeholder.width() == 0 || placeholder.height() == 0) return; plot.resize(); plot.setupGrid(); plot.draw(); } function bindEvents(plot, eventHolder) { plot.getPlaceholder().resize(onResize); } function shutdown(plot, eventHolder) { plot.getPlaceholder().unbind("resize", onResize); } plot.hooks.bindEvents.push(bindEvents); plot.hooks.shutdown.push(shutdown); } $.plot.plugins.push({ init: init, options: options, name: 'resize', version: '1.0' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.selection.js ================================================ /* Flot plugin for selecting regions. The plugin defines the following options: selection: { mode: null or "x" or "y" or "xy", color: color } Selection support is enabled by setting the mode to one of "x", "y" or "xy". In "x" mode, the user will only be able to specify the x range, similarly for "y" mode. For "xy", the selection becomes a rectangle where both ranges can be specified. "color" is color of the selection (if you need to change the color later on, you can get to it with plot.getOptions().selection.color). When selection support is enabled, a "plotselected" event will be emitted on the DOM element you passed into the plot function. The event handler gets a parameter with the ranges selected on the axes, like this: placeholder.bind("plotselected", function(event, ranges) { alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) // similar for yaxis - with multiple axes, the extra ones are in // x2axis, x3axis, ... }); The "plotselected" event is only fired when the user has finished making the selection. A "plotselecting" event is fired during the process with the same parameters as the "plotselected" event, in case you want to know what's happening while it's happening, A "plotunselected" event with no arguments is emitted when the user clicks the mouse to remove the selection. The plugin allso adds the following methods to the plot object: - setSelection(ranges, preventEvent) Set the selection rectangle. The passed in ranges is on the same form as returned in the "plotselected" event. If the selection mode is "x", you should put in either an xaxis range, if the mode is "y" you need to put in an yaxis range and both xaxis and yaxis if the selection mode is "xy", like this: setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); setSelection will trigger the "plotselected" event when called. If you don't want that to happen, e.g. if you're inside a "plotselected" handler, pass true as the second parameter. If you are using multiple axes, you can specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of xaxis, the plugin picks the first one it sees. - clearSelection(preventEvent) Clear the selection rectangle. Pass in true to avoid getting a "plotunselected" event. - getSelection() Returns the current selection in the same format as the "plotselected" event. If there's currently no selection, the function returns null. */ (function ($) { function init(plot) { var selection = { first: { x: -1, y: -1}, second: { x: -1, y: -1}, show: false, active: false }; // FIXME: The drag handling implemented here should be // abstracted out, there's some similar code from a library in // the navigation plugin, this should be massaged a bit to fit // the Flot cases here better and reused. Doing this would // make this plugin much slimmer. var savedhandlers = {}; var mouseUpHandler = null; function onMouseMove(e) { if (selection.active) { updateSelection(e); plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]); } } function onMouseDown(e) { if (e.which != 1) // only accept left-click return; // cancel out any text selections document.body.focus(); // prevent text selection and drag in old-school browsers if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) { savedhandlers.onselectstart = document.onselectstart; document.onselectstart = function () { return false; }; } if (document.ondrag !== undefined && savedhandlers.ondrag == null) { savedhandlers.ondrag = document.ondrag; document.ondrag = function () { return false; }; } setSelectionPos(selection.first, e); selection.active = true; // this is a bit silly, but we have to use a closure to be // able to whack the same handler again mouseUpHandler = function (e) { onMouseUp(e); }; $(document).one("mouseup", mouseUpHandler); } function onMouseUp(e) { mouseUpHandler = null; // revert drag stuff for old-school browsers if (document.onselectstart !== undefined) document.onselectstart = savedhandlers.onselectstart; if (document.ondrag !== undefined) document.ondrag = savedhandlers.ondrag; // no more dragging selection.active = false; updateSelection(e); if (selectionIsSane()) triggerSelectedEvent(); else { // this counts as a clear plot.getPlaceholder().trigger("plotunselected", [ ]); plot.getPlaceholder().trigger("plotselecting", [ null ]); } return false; } function getSelection() { if (!selectionIsSane()) return null; var r = {}, c1 = selection.first, c2 = selection.second; $.each(plot.getAxes(), function (name, axis) { if (axis.used) { var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) }; } }); return r; } function triggerSelectedEvent() { var r = getSelection(); plot.getPlaceholder().trigger("plotselected", [ r ]); // backwards-compat stuff, to be removed in future if (r.xaxis && r.yaxis) plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]); } function clamp(min, value, max) { return value < min ? min: (value > max ? max: value); } function setSelectionPos(pos, e) { var o = plot.getOptions(); var offset = plot.getPlaceholder().offset(); var plotOffset = plot.getPlotOffset(); pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); if (o.selection.mode == "y") pos.x = pos == selection.first ? 0 : plot.width(); if (o.selection.mode == "x") pos.y = pos == selection.first ? 0 : plot.height(); } function updateSelection(pos) { if (pos.pageX == null) return; setSelectionPos(selection.second, pos); if (selectionIsSane()) { selection.show = true; plot.triggerRedrawOverlay(); } else clearSelection(true); } function clearSelection(preventEvent) { if (selection.show) { selection.show = false; plot.triggerRedrawOverlay(); if (!preventEvent) plot.getPlaceholder().trigger("plotunselected", [ ]); } } // function taken from markings support in Flot function extractRange(ranges, coord) { var axis, from, to, key, axes = plot.getAxes(); for (var k in axes) { axis = axes[k]; if (axis.direction == coord) { key = coord + axis.n + "axis"; if (!ranges[key] && axis.n == 1) key = coord + "axis"; // support x1axis as xaxis if (ranges[key]) { from = ranges[key].from; to = ranges[key].to; break; } } } // backwards-compat stuff - to be removed in future if (!ranges[key]) { axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0]; from = ranges[coord + "1"]; to = ranges[coord + "2"]; } // auto-reverse as an added bonus if (from != null && to != null && from > to) { var tmp = from; from = to; to = tmp; } return { from: from, to: to, axis: axis }; } function setSelection(ranges, preventEvent) { var axis, range, o = plot.getOptions(); if (o.selection.mode == "y") { selection.first.x = 0; selection.second.x = plot.width(); } else { range = extractRange(ranges, "x"); selection.first.x = range.axis.p2c(range.from); selection.second.x = range.axis.p2c(range.to); } if (o.selection.mode == "x") { selection.first.y = 0; selection.second.y = plot.height(); } else { range = extractRange(ranges, "y"); selection.first.y = range.axis.p2c(range.from); selection.second.y = range.axis.p2c(range.to); } selection.show = true; plot.triggerRedrawOverlay(); if (!preventEvent && selectionIsSane()) triggerSelectedEvent(); } function selectionIsSane() { var minSize = 5; return Math.abs(selection.second.x - selection.first.x) >= minSize && Math.abs(selection.second.y - selection.first.y) >= minSize; } plot.clearSelection = clearSelection; plot.setSelection = setSelection; plot.getSelection = getSelection; plot.hooks.bindEvents.push(function(plot, eventHolder) { var o = plot.getOptions(); if (o.selection.mode != null) { eventHolder.mousemove(onMouseMove); eventHolder.mousedown(onMouseDown); } }); plot.hooks.drawOverlay.push(function (plot, ctx) { // draw selection if (selection.show && selectionIsSane()) { var plotOffset = plot.getPlotOffset(); var o = plot.getOptions(); ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); var c = $.color.parse(o.selection.color); ctx.strokeStyle = c.scale('a', 0.8).toString(); ctx.lineWidth = 1; ctx.lineJoin = "round"; ctx.fillStyle = c.scale('a', 0.4).toString(); var x = Math.min(selection.first.x, selection.second.x), y = Math.min(selection.first.y, selection.second.y), w = Math.abs(selection.second.x - selection.first.x), h = Math.abs(selection.second.y - selection.first.y); ctx.fillRect(x, y, w, h); ctx.strokeRect(x, y, w, h); ctx.restore(); } }); plot.hooks.shutdown.push(function (plot, eventHolder) { eventHolder.unbind("mousemove", onMouseMove); eventHolder.unbind("mousedown", onMouseDown); if (mouseUpHandler) $(document).unbind("mouseup", mouseUpHandler); }); } $.plot.plugins.push({ init: init, options: { selection: { mode: null, // one of null, "x", "y" or "xy" color: "#e8cfac" } }, name: 'selection', version: '1.1' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.stack.js ================================================ /* Flot plugin for stacking data sets, i.e. putting them on top of each other, for accumulative graphs. The plugin assumes the data is sorted on x (or y if stacking horizontally). For line charts, it is assumed that if a line has an undefined gap (from a null point), then the line above it should have the same gap - insert zeros instead of "null" if you want another behaviour. This also holds for the start and end of the chart. Note that stacking a mix of positive and negative values in most instances doesn't make sense (so it looks weird). Two or more series are stacked when their "stack" attribute is set to the same key (which can be any number or string or just "true"). To specify the default stack, you can set series: { stack: null or true or key (number/string) } or specify it for a specific series $.plot($("#placeholder"), [{ data: [ ... ], stack: true }]) The stacking order is determined by the order of the data series in the array (later series end up on top of the previous). Internally, the plugin modifies the datapoints in each series, adding an offset to the y value. For line series, extra data points are inserted through interpolation. If there's a second y value, it's also adjusted (e.g for bar charts or filled areas). */ (function ($) { var options = { series: { stack: null } // or number/string }; function init(plot) { function findMatchingSeries(s, allseries) { var res = null for (var i = 0; i < allseries.length; ++i) { if (s == allseries[i]) break; if (allseries[i].stack == s.stack) res = allseries[i]; } return res; } function stackData(plot, s, datapoints) { if (s.stack == null) return; var other = findMatchingSeries(s, plot.getData()); if (!other) return; var ps = datapoints.pointsize, points = datapoints.points, otherps = other.datapoints.pointsize, otherpoints = other.datapoints.points, newpoints = [], px, py, intery, qx, qy, bottom, withlines = s.lines.show, horizontal = s.bars.horizontal, withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y), withsteps = withlines && s.lines.steps, fromgap = true, keyOffset = horizontal ? 1 : 0, accumulateOffset = horizontal ? 0 : 1, i = 0, j = 0, l; while (true) { if (i >= points.length) break; l = newpoints.length; if (points[i] == null) { // copy gaps for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); i += ps; } else if (j >= otherpoints.length) { // for lines, we can't use the rest of the points if (!withlines) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); } i += ps; } else if (otherpoints[j] == null) { // oops, got a gap for (m = 0; m < ps; ++m) newpoints.push(null); fromgap = true; j += otherps; } else { // cases where we actually got two points px = points[i + keyOffset]; py = points[i + accumulateOffset]; qx = otherpoints[j + keyOffset]; qy = otherpoints[j + accumulateOffset]; bottom = 0; if (px == qx) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); newpoints[l + accumulateOffset] += qy; bottom = qy; i += ps; j += otherps; } else if (px > qx) { // we got past point below, might need to // insert interpolated extra point if (withlines && i > 0 && points[i - ps] != null) { intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px); newpoints.push(qx); newpoints.push(intery + qy); for (m = 2; m < ps; ++m) newpoints.push(points[i + m]); bottom = qy; } j += otherps; } else { // px < qx if (fromgap && withlines) { // if we come from a gap, we just skip this point i += ps; continue; } for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); // we might be able to interpolate a point below, // this can give us a better y if (withlines && j > 0 && otherpoints[j - otherps] != null) bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx); newpoints[l + accumulateOffset] += bottom; i += ps; } fromgap = false; if (l != newpoints.length && withbottom) newpoints[l + 2] += bottom; } // maintain the line steps invariant if (withsteps && l != newpoints.length && l > 0 && newpoints[l] != null && newpoints[l] != newpoints[l - ps] && newpoints[l + 1] != newpoints[l - ps + 1]) { for (m = 0; m < ps; ++m) newpoints[l + ps + m] = newpoints[l + m]; newpoints[l + 1] = newpoints[l - ps + 1]; } } datapoints.points = newpoints; } plot.hooks.processDatapoints.push(stackData); } $.plot.plugins.push({ init: init, options: options, name: 'stack', version: '1.2' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.symbol.js ================================================ /* Flot plugin that adds some extra symbols for plotting points. The symbols are accessed as strings through the standard symbol choice: series: { points: { symbol: "square" // or "diamond", "triangle", "cross" } } */ (function ($) { function processRawData(plot, series, datapoints) { // we normalize the area of each symbol so it is approximately the // same as a circle of the given radius var handlers = { square: function (ctx, x, y, radius, shadow) { // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 var size = radius * Math.sqrt(Math.PI) / 2; ctx.rect(x - size, y - size, size + size, size + size); }, diamond: function (ctx, x, y, radius, shadow) { // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) var size = radius * Math.sqrt(Math.PI / 2); ctx.moveTo(x - size, y); ctx.lineTo(x, y - size); ctx.lineTo(x + size, y); ctx.lineTo(x, y + size); ctx.lineTo(x - size, y); }, triangle: function (ctx, x, y, radius, shadow) { // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); var height = size * Math.sin(Math.PI / 3); ctx.moveTo(x - size/2, y + height/2); ctx.lineTo(x + size/2, y + height/2); if (!shadow) { ctx.lineTo(x, y - height/2); ctx.lineTo(x - size/2, y + height/2); } }, cross: function (ctx, x, y, radius, shadow) { // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 var size = radius * Math.sqrt(Math.PI) / 2; ctx.moveTo(x - size, y - size); ctx.lineTo(x + size, y + size); ctx.moveTo(x - size, y + size); ctx.lineTo(x + size, y - size); } } var s = series.points.symbol; if (handlers[s]) series.points.symbol = handlers[s]; } function init(plot) { plot.hooks.processDatapoints.push(processRawData); } $.plot.plugins.push({ init: init, name: 'symbols', version: '1.0' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.threshold.js ================================================ /* Flot plugin for thresholding data. Controlled through the option "threshold" in either the global series options series: { threshold: { below: number color: colorspec } } or in a specific series $.plot($("#placeholder"), [{ data: [ ... ], threshold: { ... }}]) The data points below "below" are drawn with the specified color. This makes it easy to mark points below 0, e.g. for budget data. Internally, the plugin works by splitting the data into two series, above and below the threshold. The extra series below the threshold will have its label cleared and the special "originSeries" attribute set to the original series. You may need to check for this in hover events. */ (function ($) { var options = { series: { threshold: null } // or { below: number, color: color spec} }; function init(plot) { function thresholdData(plot, s, datapoints) { if (!s.threshold) return; var ps = datapoints.pointsize, i, x, y, p, prevp, thresholded = $.extend({}, s); // note: shallow copy thresholded.datapoints = { points: [], pointsize: ps }; thresholded.label = null; thresholded.color = s.threshold.color; thresholded.threshold = null; thresholded.originSeries = s; thresholded.data = []; var below = s.threshold.below, origpoints = datapoints.points, addCrossingPoints = s.lines.show; threspoints = []; newpoints = []; for (i = 0; i < origpoints.length; i += ps) { x = origpoints[i] y = origpoints[i + 1]; prevp = p; if (y < below) p = threspoints; else p = newpoints; if (addCrossingPoints && prevp != p && x != null && i > 0 && origpoints[i - ps] != null) { var interx = (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]) * (below - y) + x; prevp.push(interx); prevp.push(below); for (m = 2; m < ps; ++m) prevp.push(origpoints[i + m]); p.push(null); // start new segment p.push(null); for (m = 2; m < ps; ++m) p.push(origpoints[i + m]); p.push(interx); p.push(below); for (m = 2; m < ps; ++m) p.push(origpoints[i + m]); } p.push(x); p.push(y); } datapoints.points = newpoints; thresholded.datapoints.points = threspoints; if (thresholded.datapoints.points.length > 0) plot.getData().push(thresholded); // FIXME: there are probably some edge cases left in bars } plot.hooks.processDatapoints.push(thresholdData); } $.plot.plugins.push({ init: init, options: options, name: 'threshold', version: '1.0' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.flot.tooltip.js ================================================ /* * jquery.flot.tooltip * * desc: create tooltip with values of hovered point on the graph, support many series, time mode, stacking and pie charts you can set custom tip content (also with use of HTML tags) and precision of values * version: 0.4.4 * author: Krzysztof Urbas @krzysu [myviews.pl] with help of @ismyrnow * website: https://github.com/krzysu/flot.tooltip * * released under MIT License, 2012 */ (function ($) { var options = { tooltip: false, //boolean tooltipOpts: { content: "%s | X: %x | Y: %y.2", //%s -> series label, %x -> X value, %y -> Y value, %x.2 -> precision of X value, %p -> percent dateFormat: "%y-%0m-%0d", shifts: { x: 10, y: 20 }, defaultTheme: true } }; var init = function(plot) { var tipPosition = {x: 0, y: 0}; var opts = plot.getOptions(); var updateTooltipPosition = function(pos) { tipPosition.x = pos.x; tipPosition.y = pos.y; }; var onMouseMove = function(e) { var pos = {x: 0, y: 0}; pos.x = e.pageX; pos.y = e.pageY; updateTooltipPosition(pos); }; var timestampToDate = function(tmst) { var theDate = new Date(tmst); return $.plot.formatDate(theDate, opts.tooltipOpts.dateFormat); }; plot.hooks.bindEvents.push(function (plot, eventHolder) { var to = opts.tooltipOpts; var placeholder = plot.getPlaceholder(); var $tip; if (opts.tooltip === false) return; if( $('#flotTip').length > 0 ){ $tip = $('#flotTip'); } else { $tip = $('
        ').attr('id', 'flotTip'); $tip.appendTo('body').hide().css({position: 'absolute'}); if(to.defaultTheme) { $tip.css({ 'background': '#fff', 'z-index': '100', 'padding': '0.4em 0.6em', 'border-radius': '0.5em', 'font-size': '0.8em', 'border': '1px solid #111' }); } } $(placeholder).bind("plothover", function (event, pos, item) { if (item) { var tipText; if(opts.xaxis.mode === "time" || opts.xaxes[0].mode === "time") { tipText = stringFormat(to.content, item, timestampToDate); } else { tipText = stringFormat(to.content, item); } $tip.html( tipText ).css({left: tipPosition.x + to.shifts.x, top: tipPosition.y + to.shifts.y}).show(); } else { $tip.hide().html(''); } }); eventHolder.mousemove(onMouseMove); }); var stringFormat = function(content, item, fnct) { var percentPattern = /%p\.{0,1}(\d{0,})/; var seriesPattern = /%s/; var xPattern = /%x\.{0,1}(\d{0,})/; var yPattern = /%y\.{0,1}(\d{0,})/; //percent match if( typeof (item.series.percent) !== 'undefined' ) { content = adjustValPrecision(percentPattern, content, item.series.percent); } //series match if( typeof(item.series.label) !== 'undefined' ) { content = content.replace(seriesPattern, item.series.label); } // xVal match if( typeof(fnct) === 'function' ) { content = content.replace(xPattern, fnct(item.series.data[item.dataIndex][0]) ); } else if( typeof item.series.data[item.dataIndex][0] === 'number' ) { content = adjustValPrecision(xPattern, content, item.series.data[item.dataIndex][0]); } // yVal match if( typeof item.series.data[item.dataIndex][1] === 'number' ) { content = adjustValPrecision(yPattern, content, item.series.data[item.dataIndex][1]); } return content; }; var adjustValPrecision = function(pattern, content, value) { var precision; if( content.match(pattern) !== 'null' ) { if(RegExp.$1 !== '') { precision = RegExp.$1; value = value.toFixed(precision) } content = content.replace(pattern, value); } return content; }; } $.plot.plugins.push({ init: init, options: options, name: 'tooltip', version: '0.4.4' }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/charts/flot/jquery.js ================================================ /*! * jQuery JavaScript Library v1.5.1 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Wed Feb 23 13:55:29 2011 -0500 */ (function( window, undefined ) { // Use the correct document accordingly with window argument (sandbox) var document = window.document; var jQuery = (function() { // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings // (both of which we optimize for) quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, // Used for trimming whitespace trimLeft = /^\s+/, trimRight = /\s+$/, // Check for digits rdigit = /\d/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, // Useragent RegExp rwebkit = /(webkit)[ \/]([\w.]+)/, ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, // For matching the engine and version of the browser browserMatch, // Has the ready events already been bound? readyBound = false, // The deferred used on DOM ready readyList, // Promise methods promiseMethods = "then done fail isResolved isRejected promise".split( " " ), // The ready event handler DOMContentLoaded, // Save a reference to some core methods toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, trim = String.prototype.trim, indexOf = Array.prototype.indexOf, // [[Class]] -> type pairs class2type = {}; jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), or $(undefined) if ( !selector ) { return this; } // Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; } // The body element only exists once, optimize finding it if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; this.selector = "body"; this.length = 1; return this; } // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; doc = (context ? context.ownerDocument || context : document); // If a single string is passed in and it's a single tag // just do a createElement and skip the rest ret = rsingleTag.exec( selector ); if ( ret ) { if ( jQuery.isPlainObject( context ) ) { selector = [ document.createElement( ret[1] ) ]; jQuery.fn.attr.call( selector, context, true ); } else { selector = [ doc.createElement( ret[1] ) ]; } } else { ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; } return jQuery.merge( this, selector ); // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return (context || rootjQuery).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if (selector.selector !== undefined) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.5.1", // The default length of a jQuery object is 0 length: 0, // The number of elements contained in the matched element set size: function() { return this.length; }, toArray: function() { return slice.call( this, 0 ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = this.constructor(); if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); } else { jQuery.merge( ret, elems ); } // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) { ret.selector = this.selector + (this.selector ? " " : "") + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; } // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Attach the listeners jQuery.bindReady(); // Add the callback readyList.done( fn ); return this; }, eq: function( i ) { return i === -1 ? this.slice( i ) : this.slice( i, +i + 1 ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ), "slice", slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Handle when the DOM is ready ready: function( wait ) { // A third-party is pushing the ready event forwards if ( wait === true ) { jQuery.readyWait--; } // Make sure that the DOM is not already loaded if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( "ready" ).unbind( "ready" ); } } }, bindReady: function() { if ( readyBound ) { return; } readyBound = true; // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout( jQuery.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, // A crude way of determining if an object is a window isWindow: function( obj ) { return obj && typeof obj === "object" && "setInterval" in obj; }, isNaN: function( obj ) { return obj == null || !rdigit.test( obj ) || isNaN( obj ); }, type: function( obj ) { return obj == null ? String( obj ) : class2type[ toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }, error: function( msg ) { throw msg; }, parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; } // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test(data.replace(rvalidescape, "@") .replace(rvalidtokens, "]") .replace(rvalidbraces, "")) ) { // Try to use the native JSON parser first return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); } else { jQuery.error( "Invalid JSON: " + data ); } }, // Cross-browser xml parsing // (xml & tmp used internally) parseXML: function( data , xml , tmp ) { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } tmp = xml.documentElement; if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evalulates a script in a global context globalEval: function( data ) { if ( data && rnotwhite.test(data) ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement, script = document.createElement( "script" ); if ( jQuery.support.scriptEval() ) { script.appendChild( document.createTextNode( data ) ); } else { script.text = data; } // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction(object); if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } return object; }, // Use native String.trim function wherever possible trim: trim ? function( text ) { return text == null ? "" : trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); }, // results is for internal usage only makeArray: function( array, results ) { var ret = results || []; if ( array != null ) { // The window, strings (and functions) also have 'length' // The extra typeof function check is to prevent crashes // in Safari 2 (See: #3039) // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 var type = jQuery.type(array); if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); } } return ret; }, inArray: function( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } } return -1; }, merge: function( first, second ) { var i = first.length, j = 0; if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var ret = [], retVal; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var ret = [], value; // Go through the array, translating each of the items to their // new value (or values). for ( var i = 0, length = elems.length; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Flatten any nested arrays return ret.concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, proxy: function( fn, proxy, thisObject ) { if ( arguments.length === 2 ) { if ( typeof proxy === "string" ) { thisObject = fn; fn = thisObject[ proxy ]; proxy = undefined; } else if ( proxy && !jQuery.isFunction( proxy ) ) { thisObject = proxy; proxy = undefined; } } if ( !proxy && fn ) { proxy = function() { return fn.apply( thisObject || this, arguments ); }; } // Set the guid of unique handler to the same of original handler, so it can be removed if ( fn ) { proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; } // So proxy can be declared as an argument return proxy; }, // Mutifunctional method to get and set values to a collection // The value/s can be optionally by executed if its a function access: function( elems, key, value, exec, fn, pass ) { var length = elems.length; // Setting many attributes if ( typeof key === "object" ) { for ( var k in key ) { jQuery.access( elems, k, key[k], exec, fn, value ); } return elems; } // Setting one attribute if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = !pass && exec && jQuery.isFunction(value); for ( var i = 0; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); } return elems; } // Getting an attribute return length ? fn( elems[0], key ) : undefined; }, now: function() { return (new Date()).getTime(); }, // Create a simple deferred (one callbacks list) _Deferred: function() { var // callbacks list callbacks = [], // stored [ context , args ] fired, // to avoid firing when already doing so firing, // flag to know if the deferred has been cancelled cancelled, // the deferred itself deferred = { // done( f1, f2, ...) done: function() { if ( !cancelled ) { var args = arguments, i, length, elem, type, _fired; if ( fired ) { _fired = fired; fired = 0; } for ( i = 0, length = args.length; i < length; i++ ) { elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { deferred.done.apply( deferred, elem ); } else if ( type === "function" ) { callbacks.push( elem ); } } if ( _fired ) { deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); } } return this; }, // resolve with given context and args resolveWith: function( context, args ) { if ( !cancelled && !fired && !firing ) { firing = 1; try { while( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); } } // We have to add a catch block for // IE prior to 8 or else the finally // block will never get executed catch (e) { throw e; } finally { fired = [ context, args ]; firing = 0; } } return this; }, // resolve with this as context and given arguments resolve: function() { deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments ); return this; }, // Has this deferred been resolved? isResolved: function() { return !!( firing || fired ); }, // Cancel cancel: function() { cancelled = 1; callbacks = []; return this; } }; return deferred; }, // Full fledged deferred (two callbacks list) Deferred: function( func ) { var deferred = jQuery._Deferred(), failDeferred = jQuery._Deferred(), promise; // Add errorDeferred methods, then and promise jQuery.extend( deferred, { then: function( doneCallbacks, failCallbacks ) { deferred.done( doneCallbacks ).fail( failCallbacks ); return this; }, fail: failDeferred.done, rejectWith: failDeferred.resolveWith, reject: failDeferred.resolve, isRejected: failDeferred.isResolved, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { if ( obj == null ) { if ( promise ) { return promise; } promise = obj = {}; } var i = promiseMethods.length; while( i-- ) { obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; } return obj; } } ); // Make sure only one callback list will be used deferred.done( failDeferred.cancel ).fail( deferred.cancel ); // Unexpose cancel delete deferred.cancel; // Call given func if any if ( func ) { func.call( deferred, deferred ); } return deferred; }, // Deferred helper when: function( object ) { var lastIndex = arguments.length, deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred(), promise = deferred.promise(); if ( lastIndex > 1 ) { var array = slice.call( arguments, 0 ), count = lastIndex, iCallback = function( index ) { return function( value ) { array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; if ( !( --count ) ) { deferred.resolveWith( promise, array ); } }; }; while( ( lastIndex-- ) ) { object = array[ lastIndex ]; if ( object && jQuery.isFunction( object.promise ) ) { object.promise().then( iCallback(lastIndex), deferred.reject ); } else { --count; } } if ( !count ) { deferred.resolveWith( promise, array ); } } else if ( deferred !== object ) { deferred.resolve( object ); } return promise; }, // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase(); var match = rwebkit.exec( ua ) || ropera.exec( ua ) || rmsie.exec( ua ) || ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || []; return { browser: match[1] || "", version: match[2] || "0" }; }, sub: function() { function jQuerySubclass( selector, context ) { return new jQuerySubclass.fn.init( selector, context ); } jQuery.extend( true, jQuerySubclass, this ); jQuerySubclass.superclass = this; jQuerySubclass.fn = jQuerySubclass.prototype = this(); jQuerySubclass.fn.constructor = jQuerySubclass; jQuerySubclass.subclass = this.subclass; jQuerySubclass.fn.init = function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) { context = jQuerySubclass(context); } return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); }; jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; var rootjQuerySubclass = jQuerySubclass(document); return jQuerySubclass; }, browser: {} }); // Create readyList deferred readyList = jQuery._Deferred(); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; jQuery.browser.version = browserMatch.version; } // Deprecated, use jQuery.browser.webkit instead if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; } if ( indexOf ) { jQuery.inArray = function( elem, array ) { return indexOf.call( array, elem ); }; } // IE doesn't match non-breaking spaces with \s if ( rnotwhite.test( "\xA0" ) ) { trimLeft = /^[\s\xA0]+/; trimRight = /[\s\xA0]+$/; } // All jQuery objects should point back to these rootjQuery = jQuery(document); // Cleanup functions for the document ready method if ( document.addEventListener ) { DOMContentLoaded = function() { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); jQuery.ready(); }; } else if ( document.attachEvent ) { DOMContentLoaded = function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); jQuery.ready(); } }; } // The DOM ready check for Internet Explorer function doScrollCheck() { if ( jQuery.isReady ) { return; } try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch(e) { setTimeout( doScrollCheck, 1 ); return; } // and execute any waiting functions jQuery.ready(); } // Expose jQuery to the global object return jQuery; })(); (function() { jQuery.support = {}; var div = document.createElement("div"); div.style.display = "none"; div.innerHTML = "
        a"; var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0], select = document.createElement("select"), opt = select.appendChild( document.createElement("option") ), input = div.getElementsByTagName("input")[0]; // Can't get basic test support if ( !all || !all.length || !a ) { return; } jQuery.support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType === 3, // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.55$/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn: input.value === "on", // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Will be defined later deleteExpando: true, optDisabled: false, checkClone: false, noCloneEvent: true, noCloneChecked: true, boxModel: null, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableHiddenOffsets: true }; input.checked = true; jQuery.support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as diabled) select.disabled = true; jQuery.support.optDisabled = !opt.disabled; var _scriptEval = null; jQuery.support.scriptEval = function() { if ( _scriptEval === null ) { var root = document.documentElement, script = document.createElement("script"), id = "script" + jQuery.now(); try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); } catch(e) {} root.insertBefore( script, root.firstChild ); // Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) if ( window[ id ] ) { _scriptEval = true; delete window[ id ]; } else { _scriptEval = false; } root.removeChild( script ); // release memory in IE root = script = id = null; } return _scriptEval; }; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch(e) { jQuery.support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent("onclick", function click() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; div.detachEvent("onclick", click); }); div.cloneNode(true).fireEvent("onclick"); } div = document.createElement("div"); div.innerHTML = ""; var fragment = document.createDocumentFragment(); fragment.appendChild( div.firstChild ); // WebKit doesn't clone checked state correctly in fragments jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; // Figure out if the W3C box model works as expected // document.body must exist before we can do this jQuery(function() { var div = document.createElement("div"), body = document.getElementsByTagName("body")[0]; // Frameset documents with no body should not run this code if ( !body ) { return; } div.style.width = div.style.paddingLeft = "1px"; body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; if ( "zoom" in div.style ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) div.style.display = "inline"; div.style.zoom = 1; jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display = ""; div.innerHTML = "
        "; jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; } div.innerHTML = "
        t
        "; var tds = div.getElementsByTagName("td"); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; tds[0].style.display = ""; tds[1].style.display = "none"; // Check if empty table cells still have offsetWidth/Height // (IE < 8 fail this test) jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; div.innerHTML = ""; body.removeChild( div ).style.display = "none"; div = tds = null; }); // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ var eventSupported = function( eventName ) { var el = document.createElement("div"); eventName = "on" + eventName; // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( !el.attachEvent ) { return true; } var isSupported = (eventName in el); if ( !isSupported ) { el.setAttribute(eventName, "return;"); isSupported = typeof el[eventName] === "function"; } el = null; return isSupported; }; jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.changeBubbles = eventSupported("change"); // release memory in IE div = all = a = null; })(); var rbrace = /^(?:\{.*\}|\[.*\])$/; jQuery.extend({ cache: {}, // Please use with caution uuid: 0, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem[ jQuery.expando ] = id = ++jQuery.uuid; } else { id = jQuery.expando; } } if ( !cache[ id ] ) { cache[ id ] = {}; // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery // metadata on plain JS objects when the object is serialized using // JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); } else { cache[ id ] = jQuery.extend(cache[ id ], name); } } thisCache = cache[ id ]; // Internal jQuery data is stored in a separate object inside the object's data // cache in order to avoid key collisions between internal data and user-defined // data if ( pvt ) { if ( !thisCache[ internalKey ] ) { thisCache[ internalKey ] = {}; } thisCache = thisCache[ internalKey ]; } if ( data !== undefined ) { thisCache[ name ] = data; } // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should // not attempt to inspect the internal events object using jQuery.data, as this // internal data object is undocumented and subject to change. if ( name === "events" && !thisCache[name] ) { return thisCache[ internalKey ] && thisCache[ internalKey ].events; } return getByName ? thisCache[ name ] : thisCache; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var internalKey = jQuery.expando, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, // See jQuery.data for more information id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; if ( thisCache ) { delete thisCache[ name ]; // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !isEmptyDataObject(thisCache) ) { return; } } } // See jQuery.data for more information if ( pvt ) { delete cache[ id ][ internalKey ]; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject(cache[ id ]) ) { return; } } var internalCache = cache[ id ][ internalKey ]; // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care if ( jQuery.support.deleteExpando || cache != window ) { delete cache[ id ]; } else { cache[ id ] = null; } // We destroyed the entire user cache at once because it's faster than // iterating through each key, but we need to continue to persist internal // data if it existed if ( internalCache ) { cache[ id ] = {}; // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery // metadata on plain JS objects when the object is serialized using // JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } cache[ id ][ internalKey ] = internalCache; // Otherwise, we need to eliminate the expando on the node to avoid // false lookups in the cache for entries that no longer exist } else if ( isNode ) { // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( jQuery.support.deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); } else { elem[ jQuery.expando ] = null; } } }, // For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { if ( elem.nodeName ) { var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; if ( match ) { return !(match === true || elem.getAttribute("classid") !== match); } } return true; } }); jQuery.fn.extend({ data: function( key, value ) { var data = null; if ( typeof key === "undefined" ) { if ( this.length ) { data = jQuery.data( this[0] ); if ( this[0].nodeType === 1 ) { var attr = this[0].attributes, name; for ( var i = 0, l = attr.length; i < l; i++ ) { name = attr[i].name; if ( name.indexOf( "data-" ) === 0 ) { name = name.substr( 5 ); dataAttr( this[0], name, data[ name ] ); } } } } return data; } else if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } var parts = key.split("."); parts[1] = parts[1] ? "." + parts[1] : ""; if ( value === undefined ) { data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); // Try to fetch any internally stored data first if ( data === undefined && this.length ) { data = jQuery.data( this[0], key ); data = dataAttr( this[0], key, data ); } return data === undefined && parts[1] ? this.data( parts[0] ) : data; } else { return this.each(function() { var $this = jQuery( this ), args = [ parts[0], value ]; $this.triggerHandler( "setData" + parts[1] + "!", args ); jQuery.data( this, key, value ); $this.triggerHandler( "changeData" + parts[1] + "!", args ); }); } }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { data = elem.getAttribute( "data-" + key ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : !jQuery.isNaN( data ) ? parseFloat( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON // property to be considered empty objects; this property always exists in // order to make sure JSON.stringify does not expose internal metadata function isEmptyDataObject( obj ) { for ( var name in obj ) { if ( name !== "toJSON" ) { return false; } } return true; } jQuery.extend({ queue: function( elem, type, data ) { if ( !elem ) { return; } type = (type || "fx") + "queue"; var q = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( !data ) { return q || []; } if ( !q || jQuery.isArray(data) ) { q = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { q.push( data ); } return q; }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), fn = queue.shift(); // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift("inprogress"); } fn.call(elem, function() { jQuery.dequeue(elem, type); }); } if ( !queue.length ) { jQuery.removeData( elem, type + "queue", true ); } } }); jQuery.fn.extend({ queue: function( type, data ) { if ( typeof type !== "string" ) { data = type; type = "fx"; } if ( data === undefined ) { return jQuery.queue( this[0], type ); } return this.each(function( i ) { var queue = jQuery.queue( this, type, data ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; type = type || "fx"; return this.queue( type, function() { var elem = this; setTimeout(function() { jQuery.dequeue( elem, type ); }, time ); }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); } }); var rclass = /[\n\t\r]/g, rspaces = /\s+/, rreturn = /\r/g, rspecialurl = /^(?:href|src|style)$/, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rradiocheck = /^(?:radio|checkbox)$/i; jQuery.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" }; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, name, value, true, jQuery.attr ); }, removeAttr: function( name, fn ) { return this.each(function(){ jQuery.attr( this, name, "" ); if ( this.nodeType === 1 ) { this.removeAttribute( name ); } }); }, addClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.addClass( value.call(this, i, self.attr("class")) ); }); } if ( value && typeof value === "string" ) { var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; if ( elem.nodeType === 1 ) { if ( !elem.className ) { elem.className = value; } else { var className = " " + elem.className + " ", setClass = elem.className; for ( var c = 0, cl = classNames.length; c < cl; c++ ) { if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { setClass += " " + classNames[c]; } } elem.className = jQuery.trim( setClass ); } } } } return this; }, removeClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.removeClass( value.call(this, i, self.attr("class")) ); }); } if ( (value && typeof value === "string") || value === undefined ) { var classNames = (value || "").split( rspaces ); for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i]; if ( elem.nodeType === 1 && elem.className ) { if ( value ) { var className = (" " + elem.className + " ").replace(rclass, " "); for ( var c = 0, cl = classNames.length; c < cl; c++ ) { className = className.replace(" " + classNames[c] + " ", " "); } elem.className = jQuery.trim( className ); } else { elem.className = ""; } } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function(i) { var self = jQuery(this); self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), state = stateVal, classNames = value.split( rspaces ); while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); } } else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // toggle whole className this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } return false; }, val: function( value ) { if ( !arguments.length ) { var elem = this[0]; if ( elem ) { if ( jQuery.nodeName( elem, "option" ) ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val = elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type === "select-one"; // Nothing was selected if ( index < 0 ) { return null; } // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; // Don't return options that are disabled or in a disabled optgroup if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { // Get the specific value for the option value = jQuery(option).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } // Fixes Bug #2551 -- select.val() broken in IE after form.reset() if ( one && !values.length && options.length ) { return jQuery( options[ index ] ).val(); } return values; } // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { return elem.getAttribute("value") === null ? "on" : elem.value; } // Everything else, we just grab the value return (elem.value || "").replace(rreturn, ""); } return undefined; } var isFunction = jQuery.isFunction(value); return this.each(function(i) { var self = jQuery(this), val = value; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call(this, i, self.val()); } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray(val) ) { val = jQuery.map(val, function (value) { return value == null ? "" : value + ""; }); } if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { this.checked = jQuery.inArray( self.val(), val ) >= 0; } else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(val); jQuery( "option", this ).each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; }); if ( !values.length ) { this.selectedIndex = -1; } } else { this.value = val; } }); } }); jQuery.extend({ attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true }, attr: function( elem, name, value, pass ) { // don't get/set attributes on text, comment and attribute nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { return undefined; } if ( pass && name in jQuery.attrFn ) { return jQuery(elem)[name](value); } var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined; // Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name; // Only do all the following if this is a node (faster for style) if ( elem.nodeType === 1 ) { // These attributes require special treatment var special = rspecialurl.test( name ); // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( name === "selected" && !jQuery.support.optSelected ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } } // If applicable, access the attribute via the DOM 0 way // 'in' checks fail in Blackberry 4.7 #6931 if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { if ( set ) { // We can't allow the type property to be changed (since it causes problems in IE) if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( "type property can't be changed" ); } if ( value === null ) { if ( elem.nodeType === 1 ) { elem.removeAttribute( name ); } } else { elem[ name ] = value; } } // browsers index elements by id/name on forms, give priority to attributes. if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { return elem.getAttributeNode( name ).nodeValue; } // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ if ( name === "tabIndex" ) { var attributeNode = elem.getAttributeNode( "tabIndex" ); return attributeNode && attributeNode.specified ? attributeNode.value : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } return elem[ name ]; } if ( !jQuery.support.style && notxml && name === "style" ) { if ( set ) { elem.style.cssText = "" + value; } return elem.style.cssText; } if ( set ) { // convert the value to a string (all browsers do this but IE) see #1070 elem.setAttribute( name, "" + value ); } // Ensure that missing attributes return undefined // Blackberry 4.7 returns "" from getAttribute #6938 if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { return undefined; } var attr = !jQuery.support.hrefNormalized && notxml && special ? // Some attributes require a special call on IE elem.getAttribute( name, 2 ) : elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return attr === null ? undefined : attr; } // Handle everything which isn't a DOM element node if ( set ) { elem[ name ] = value; } return elem[ name ]; } }); var rnamespaces = /\.(.*)$/, rformElems = /^(?:textarea|input|select)$/i, rperiod = /\./g, rspace = / /g, rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { return nm.replace(rescape, "\\$&"); }; /* * A number of helper functions used for managing events. * Many of the ideas behind this code originated from * Dean Edwards' addEvent library. */ jQuery.event = { // Bind an event to an element // Original by Dean Edwards add: function( elem, types, handler, data ) { if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // TODO :: Use a try/catch until it's safe to pull this out (likely 1.6) // Minor release fix for bug #8018 try { // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { elem = window; } } catch ( e ) {} if ( handler === false ) { handler = returnFalse; } else if ( !handler ) { // Fixes bug #7229. Fix recommended by jdalton return; } var handleObjIn, handleObj; if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; } // Make sure that the function being executed has a unique ID if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure var elemData = jQuery._data( elem ); // If no elemData is found then we must be trying to bind to one of the // banned noData elements if ( !elemData ) { return; } var events = elemData.events, eventHandle = elemData.handle; if ( !events ) { elemData.events = events = {}; } if ( !eventHandle ) { elemData.handle = eventHandle = function() { // Handle the second event of a trigger and when // an event is called after a page has unloaded return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined; }; } // Add elem as a property of the handle function // This is to prevent a memory leak with non-native events in IE. eventHandle.elem = elem; // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = types.split(" "); var type, i = 0, namespaces; while ( (type = types[ i++ ]) ) { handleObj = handleObjIn ? jQuery.extend({}, handleObjIn) : { handler: handler, data: data }; // Namespaced event handlers if ( type.indexOf(".") > -1 ) { namespaces = type.split("."); type = namespaces.shift(); handleObj.namespace = namespaces.slice(0).sort().join("."); } else { namespaces = []; handleObj.namespace = ""; } handleObj.type = type; if ( !handleObj.guid ) { handleObj.guid = handler.guid; } // Get the current list of functions bound to this event var handlers = events[ type ], special = jQuery.event.special[ type ] || {}; // Init the event handler queue if ( !handlers ) { handlers = events[ type ] = []; // Check for a special event handler // Only use addEventListener/attachEvent if the special // events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add the function to the element's handler list handlers.push( handleObj ); // Keep track of which events have been used, for global triggering jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, global: {}, // Detach an event or set of events from an element remove: function( elem, types, handler, pos ) { // don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } if ( handler === false ) { handler = returnFalse; } var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ), events = elemData && elemData.events; if ( !elemData || !events ) { return; } // types is actually an event object here if ( types && types.type ) { handler = types.handler; types = types.type; } // Unbind all events for the element if ( !types || typeof types === "string" && types.charAt(0) === "." ) { types = types || ""; for ( type in events ) { jQuery.event.remove( elem, type + types ); } return; } // Handle multiple events separated by a space // jQuery(...).unbind("mouseover mouseout", fn); types = types.split(" "); while ( (type = types[ i++ ]) ) { origType = type; handleObj = null; all = type.indexOf(".") < 0; namespaces = []; if ( !all ) { // Namespaced event handlers namespaces = type.split("."); type = namespaces.shift(); namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); } eventType = events[ type ]; if ( !eventType ) { continue; } if ( !handler ) { for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( all || namespace.test( handleObj.namespace ) ) { jQuery.event.remove( elem, origType, handleObj.handler, j ); eventType.splice( j--, 1 ); } } continue; } special = jQuery.event.special[ type ] || {}; for ( j = pos || 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( handler.guid === handleObj.guid ) { // remove the given handler for the given type if ( all || namespace.test( handleObj.namespace ) ) { if ( pos == null ) { eventType.splice( j--, 1 ); } if ( special.remove ) { special.remove.call( elem, handleObj ); } } if ( pos != null ) { break; } } } // remove generic event handler if no more handlers exist if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } ret = null; delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { var handle = elemData.handle; if ( handle ) { handle.elem = null; } delete elemData.events; delete elemData.handle; if ( jQuery.isEmptyObject( elemData ) ) { jQuery.removeData( elem, undefined, true ); } } }, // bubbling is internal trigger: function( event, data, elem /*, bubbling */ ) { // Event object or event type var type = event.type || event, bubbling = arguments[3]; if ( !bubbling ) { event = typeof event === "object" ? // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal jQuery.extend( jQuery.Event(type), event ) : // Just the event type (string) jQuery.Event(type); if ( type.indexOf("!") >= 0 ) { event.type = type = type.slice(0, -1); event.exclusive = true; } // Handle a global trigger if ( !elem ) { // Don't bubble custom events when global (to avoid too much overhead) event.stopPropagation(); // Only trigger if we've ever bound an event for it if ( jQuery.event.global[ type ] ) { // XXX This code smells terrible. event.js should not be directly // inspecting the data cache jQuery.each( jQuery.cache, function() { // internalKey variable is just used to make it easier to find // and potentially change this stuff later; currently it just // points to jQuery.expando var internalKey = jQuery.expando, internalCache = this[ internalKey ]; if ( internalCache && internalCache.events && internalCache.events[ type ] ) { jQuery.event.trigger( event, data, internalCache.handle.elem ); } }); } } // Handle triggering a single element // don't do events on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { return undefined; } // Clean up in case it is reused event.result = undefined; event.target = elem; // Clone the incoming data, if any data = jQuery.makeArray( data ); data.unshift( event ); } event.currentTarget = elem; // Trigger the event, it is assumed that "handle" is a function var handle = jQuery._data( elem, "handle" ); if ( handle ) { handle.apply( elem, data ); } var parent = elem.parentNode || elem.ownerDocument; // Trigger an inline bound script try { if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { event.result = false; event.preventDefault(); } } // prevent IE from throwing an error for some elements with some event types, see #3533 } catch (inlineError) {} if ( !event.isPropagationStopped() && parent ) { jQuery.event.trigger( event, data, parent, true ); } else if ( !event.isDefaultPrevented() ) { var old, target = event.target, targetType = type.replace( rnamespaces, "" ), isClick = jQuery.nodeName( target, "a" ) && targetType === "click", special = jQuery.event.special[ targetType ] || {}; if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { try { if ( target[ targetType ] ) { // Make sure that we don't accidentally re-trigger the onFOO events old = target[ "on" + targetType ]; if ( old ) { target[ "on" + targetType ] = null; } jQuery.event.triggered = true; target[ targetType ](); } // prevent IE from throwing an error for some elements with some event types, see #3533 } catch (triggerError) {} if ( old ) { target[ "on" + targetType ] = old; } jQuery.event.triggered = false; } } }, handle: function( event ) { var all, handlers, namespaces, namespace_re, events, namespace_sort = [], args = jQuery.makeArray( arguments ); event = args[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; // Namespaced event handlers all = event.type.indexOf(".") < 0 && !event.exclusive; if ( !all ) { namespaces = event.type.split("."); event.type = namespaces.shift(); namespace_sort = namespaces.slice(0).sort(); namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); } event.namespace = event.namespace || namespace_sort.join("."); events = jQuery._data(this, "events"); handlers = (events || {})[ event.type ]; if ( events && handlers ) { // Clone the handlers to prevent manipulation handlers = handlers.slice(0); for ( var j = 0, l = handlers.length; j < l; j++ ) { var handleObj = handlers[ j ]; // Filter the functions by class if ( all || namespace_re.test( handleObj.namespace ) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj; var ret = handleObj.handler.apply( this, args ); if ( ret !== undefined ) { event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } if ( event.isImmediatePropagationStopped() ) { break; } } } } return event.result; }, props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // store a copy of the original event object // and "clone" to set read-only properties var originalEvent = event; event = jQuery.Event( originalEvent ); for ( var i = this.props.length, prop; i; ) { prop = this.props[ --i ]; event[ prop ] = originalEvent[ prop ]; } // Fix target property, if necessary if ( !event.target ) { // Fixes #1925 where srcElement might not be defined either event.target = event.srcElement || document; } // check if target is a textnode (safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Add relatedTarget, if necessary if ( !event.relatedTarget && event.fromElement ) { event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; } // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } // Add which for key events if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { event.which = event.charCode != null ? event.charCode : event.keyCode; } // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) if ( !event.metaKey && event.ctrlKey ) { event.metaKey = event.ctrlKey; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && event.button !== undefined ) { event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); } return event; }, // Deprecated, use jQuery.guid instead guid: 1E8, // Deprecated, use jQuery.proxy instead proxy: jQuery.proxy, special: { ready: { // Make sure the ready event is setup setup: jQuery.bindReady, teardown: jQuery.noop }, live: { add: function( handleObj ) { jQuery.event.add( this, liveConvert( handleObj.origType, handleObj.selector ), jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); }, remove: function( handleObj ) { jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); } }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( "on" + type, handle ); } }; jQuery.Event = function( src ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { return new jQuery.Event( src ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; function returnFalse() { return false; } function returnTrue() { return true; } // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); // otherwise set the returnValue property of the original event to false (IE) } else { e.returnValue = false; } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if stopPropagation exists run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse }; // Checks if an event happened on an element within another element // Used in jQuery.event.special.mouseenter and mouseleave handlers var withinElement = function( event ) { // Check if mouse(over|out) are still within the same parent element var parent = event.relatedTarget; // Firefox sometimes assigns relatedTarget a XUL element // which we cannot access the parentNode property of try { // Chrome does something similar, the parentNode property // can be accessed but is null. if ( parent !== document && !parent.parentNode ) { return; } // Traverse up the tree while ( parent && parent !== this ) { parent = parent.parentNode; } if ( parent !== this ) { // set the correct event type event.type = event.data; // handle event if we actually just moused on to a non sub-element jQuery.event.handle.apply( this, arguments ); } // assuming we've left the element since we most likely mousedover a xul element } catch(e) { } }, // In case of event delegation, we only need to rename the event.type, // liveHandler will take care of the rest. delegate = function( event ) { event.type = event.data; jQuery.event.handle.apply( this, arguments ); }; // Create mouseenter and mouseleave events jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { setup: function( data ) { jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); }, teardown: function( data ) { jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); } }; }); // submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function( data, namespaces ) { if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { var elem = e.target, type = elem.type; if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { trigger( "submit", this, arguments ); } }); jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, type = elem.type; if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { trigger( "submit", this, arguments ); } }); } else { return false; } }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialSubmit" ); } }; } // change delegation, happens here so we have bind. if ( !jQuery.support.changeBubbles ) { var changeFilters, getVal = function( elem ) { var type = elem.type, val = elem.value; if ( type === "radio" || type === "checkbox" ) { val = elem.checked; } else if ( type === "select-multiple" ) { val = elem.selectedIndex > -1 ? jQuery.map( elem.options, function( elem ) { return elem.selected; }).join("-") : ""; } else if ( elem.nodeName.toLowerCase() === "select" ) { val = elem.selectedIndex; } return val; }, testChange = function testChange( e ) { var elem = e.target, data, val; if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { return; } data = jQuery._data( elem, "_change_data" ); val = getVal(elem); // the current data will be also retrieved by beforeactivate if ( e.type !== "focusout" || elem.type !== "radio" ) { jQuery._data( elem, "_change_data", val ); } if ( data === undefined || val === data ) { return; } if ( data != null || val ) { e.type = "change"; e.liveFired = undefined; jQuery.event.trigger( e, arguments[1], elem ); } }; jQuery.event.special.change = { filters: { focusout: testChange, beforedeactivate: testChange, click: function( e ) { var elem = e.target, type = elem.type; if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { testChange.call( this, e ); } }, // Change has to be called before submit // Keydown will be called before keypress, which is used in submit-event delegation keydown: function( e ) { var elem = e.target, type = elem.type; if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || type === "select-multiple" ) { testChange.call( this, e ); } }, // Beforeactivate happens also before the previous element is blurred // with this event you can't trigger a change event, but you can store // information beforeactivate: function( e ) { var elem = e.target; jQuery._data( elem, "_change_data", getVal(elem) ); } }, setup: function( data, namespaces ) { if ( this.type === "file" ) { return false; } for ( var type in changeFilters ) { jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); } return rformElems.test( this.nodeName ); }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialChange" ); return rformElems.test( this.nodeName ); } }; changeFilters = jQuery.event.special.change.filters; // Handle when the input is .focus()'d changeFilters.focus = changeFilters.beforeactivate; } function trigger( type, elem, args ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. // Don't pass args or remember liveFired; they apply to the donor event. var event = jQuery.extend( {}, args[ 0 ] ); event.type = type; event.originalEvent = {}; event.liveFired = undefined; jQuery.event.handle.call( elem, event ); if ( event.isDefaultPrevented() ) { args[ 0 ].preventDefault(); } } // Create "bubbling" focus and blur events if ( document.addEventListener ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.event.special[ fix ] = { setup: function() { this.addEventListener( orig, handler, true ); }, teardown: function() { this.removeEventListener( orig, handler, true ); } }; function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; return jQuery.event.handle.call( this, e ); } }); } jQuery.each(["bind", "one"], function( i, name ) { jQuery.fn[ name ] = function( type, data, fn ) { // Handle object literals if ( typeof type === "object" ) { for ( var key in type ) { this[ name ](key, data, type[key], fn); } return this; } if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; } var handler = name === "one" ? jQuery.proxy( fn, function( event ) { jQuery( this ).unbind( event, handler ); return fn.apply( this, arguments ); }) : fn; if ( type === "unload" && name !== "one" ) { this.one( type, data, fn ); } else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.add( this[i], type, handler, data ); } } return this; }; }); jQuery.fn.extend({ unbind: function( type, fn ) { // Handle object literals if ( typeof type === "object" && !type.preventDefault ) { for ( var key in type ) { this.unbind(key, type[key]); } } else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.remove( this[i], type, fn ); } } return this; }, delegate: function( selector, types, data, fn ) { return this.live( types, data, fn, selector ); }, undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { return this.unbind( "live" ); } else { return this.die( types, null, fn, selector ); } }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if ( this[0] ) { var event = jQuery.Event( type ); event.preventDefault(); event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); return event.result; } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, i = 1; // link all the functions, so any of them can unbind this click handler while ( i < args.length ) { jQuery.proxy( fn, args[ i++ ] ); } return this.click( jQuery.proxy( fn, function( event ) { // Figure out which function to execute var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); // Make sure that clicks stop event.preventDefault(); // and execute the function return args[ lastToggle ].apply( this, arguments ) || false; })); }, hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } }); var liveMap = { focus: "focusin", blur: "focusout", mouseenter: "mouseover", mouseleave: "mouseout" }; jQuery.each(["live", "die"], function( i, name ) { jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); if ( typeof types === "object" && !types.preventDefault ) { for ( var key in types ) { context[ name ]( key, data, types[key], selector ); } return this; } if ( jQuery.isFunction( data ) ) { fn = data; data = undefined; } types = (types || "").split(" "); while ( (type = types[ i++ ]) != null ) { match = rnamespaces.exec( type ); namespaces = ""; if ( match ) { namespaces = match[0]; type = type.replace( rnamespaces, "" ); } if ( type === "hover" ) { types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); continue; } preType = type; if ( type === "focus" || type === "blur" ) { types.push( liveMap[ type ] + namespaces ); type = type + namespaces; } else { type = (liveMap[ type ] || type) + namespaces; } if ( name === "live" ) { // bind live handler for ( var j = 0, l = context.length; j < l; j++ ) { jQuery.event.add( context[j], "live." + liveConvert( type, selector ), { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); } } else { // unbind live handler context.unbind( "live." + liveConvert( type, selector ), fn ); } } return this; }; }); function liveHandler( event ) { var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, elems = [], selectors = [], events = jQuery._data( this, "events" ); // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { return; } if ( event.namespace ) { namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); } event.liveFired = this; var live = events.live.slice(0); for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { selectors.push( handleObj.selector ); } else { live.splice( j--, 1 ); } } match = jQuery( event.target ).closest( selectors, event.currentTarget ); for ( i = 0, l = match.length; i < l; i++ ) { close = match[i]; for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { elem = close.elem; related = null; // Those two events require additional checking if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { event.type = handleObj.preType; related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; } if ( !related || related !== elem ) { elems.push({ elem: elem, handleObj: handleObj, level: close.level }); } } } } for ( i = 0, l = elems.length; i < l; i++ ) { match = elems[i]; if ( maxLevel && match.level > maxLevel ) { break; } event.currentTarget = match.elem; event.data = match.handleObj.data; event.handleObj = match.handleObj; ret = match.handleObj.origHandler.apply( match.elem, arguments ); if ( ret === false || event.isPropagationStopped() ) { maxLevel = match.level; if ( ret === false ) { stop = false; } if ( event.isImmediatePropagationStopped() ) { break; } } } return stop; } function liveConvert( type, selector ) { return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); } jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.bind( name, data, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } }); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, done = 0, toString = Object.prototype.toString, hasDuplicate = false, baseHasDuplicate = true, rBackslash = /\\/g, rNonWord = /\W/; // Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. [0, 0].sort(function() { baseHasDuplicate = false; return 0; }); var Sizzle = function( selector, context, results, seed ) { results = results || []; context = context || document; var origContext = context; if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } if ( !selector || typeof selector !== "string" ) { return results; } var m, set, checkSet, extra, ret, cur, pop, i, prune = true, contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); m = chunker.exec( soFar ); if ( m ) { soFar = m[3]; parts.push( m[1] ); if ( m[2] ) { extra = m[3]; break; } } } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context ); } else { set = Expr.relative[ parts[0] ] ? [ context ] : Sizzle( parts.shift(), context ); while ( parts.length ) { selector = parts.shift(); if ( Expr.relative[ selector ] ) { selector += parts.shift(); } set = posProcess( selector, set ); } } } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { ret = Sizzle.find( parts.shift(), context, contextXML ); context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; } if ( context ) { ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; if ( parts.length > 0 ) { checkSet = makeArray( set ); } else { prune = false; } while ( parts.length ) { cur = parts.pop(); pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; } else { pop = parts.pop(); } if ( pop == null ) { pop = context; } Expr.relative[ cur ]( checkSet, pop, contextXML ); } } else { checkSet = parts = []; } } if ( !checkSet ) { checkSet = set; } if ( !checkSet ) { Sizzle.error( cur || selector ); } if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); } else if ( context && context.nodeType === 1 ) { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { results.push( set[i] ); } } } else { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } } else { makeArray( checkSet, results ); } if ( extra ) { Sizzle( extra, origContext, results, seed ); Sizzle.uniqueSort( results ); } return results; }; Sizzle.uniqueSort = function( results ) { if ( sortOrder ) { hasDuplicate = baseHasDuplicate; results.sort( sortOrder ); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[ i - 1 ] ) { results.splice( i--, 1 ); } } } } return results; }; Sizzle.matches = function( expr, set ) { return Sizzle( expr, null, null, set ); }; Sizzle.matchesSelector = function( node, expr ) { return Sizzle( expr, null, null, [node] ).length > 0; }; Sizzle.find = function( expr, context, isXML ) { var set; if ( !expr ) { return []; } for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var match, type = Expr.order[i]; if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace( rBackslash, "" ); set = Expr.find[ type ]( match, context, isXML ); if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; } } } } if ( !set ) { set = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( "*" ) : []; } return { set: set, expr: expr }; }; Sizzle.filter = function( expr, set, inplace, not ) { var match, anyFound, old = expr, result = [], curLoop = set, isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); while ( expr && set.length ) { for ( var type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { var found, item, filter = Expr.filter[ type ], left = match[1]; anyFound = false; match.splice(1,1); if ( left.substr( left.length - 1 ) === "\\" ) { continue; } if ( curLoop === result ) { result = []; } if ( Expr.preFilter[ type ] ) { match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); if ( !match ) { anyFound = found = true; } else if ( match === true ) { continue; } } if ( match ) { for ( var i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); var pass = not ^ !!found; if ( inplace && found != null ) { if ( pass ) { anyFound = true; } else { curLoop[i] = false; } } else if ( pass ) { result.push( item ); anyFound = true; } } } } if ( found !== undefined ) { if ( !inplace ) { curLoop = result; } expr = expr.replace( Expr.match[ type ], "" ); if ( !anyFound ) { return []; } break; } } } // Improper expression if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); } else { break; } } old = expr; } return curLoop; }; Sizzle.error = function( msg ) { throw "Syntax error, unrecognized expression: " + msg; }; var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], match: { ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function( elem ) { return elem.getAttribute( "href" ); }, type: function( elem ) { return elem.getAttribute( "type" ); } }, relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", isTag = isPartStr && !rNonWord.test( part ), isPartStrNotTag = isPartStr && !isTag; if ( isTag ) { part = part.toLowerCase(); } for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { if ( (elem = checkSet[i]) ) { while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part; } } if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, ">": function( checkSet, part ) { var elem, isPartStr = typeof part === "string", i = 0, l = checkSet.length; if ( isPartStr && !rNonWord.test( part ) ) { part = part.toLowerCase(); for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } } else { for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part; } } if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, "": function(checkSet, part, isXML){ var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); }, "~": function( checkSet, part, isXML ) { var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); } }, find: { ID: function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }, NAME: function( match, context ) { if ( typeof context.getElementsByName !== "undefined" ) { var ret = [], results = context.getElementsByName( match[1] ); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { ret.push( results[i] ); } } return ret.length === 0 ? null : ret; } }, TAG: function( match, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( match[1] ); } } }, preFilter: { CLASS: function( match, curLoop, inplace, result, not, isXML ) { match = " " + match[1].replace( rBackslash, "" ) + " "; if ( isXML ) { return match; } for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { if ( !inplace ) { result.push( elem ); } } else if ( inplace ) { curLoop[i] = false; } } } return false; }, ID: function( match ) { return match[1].replace( rBackslash, "" ); }, TAG: function( match, curLoop ) { return match[1].replace( rBackslash, "" ).toLowerCase(); }, CHILD: function( match ) { if ( match[1] === "nth" ) { if ( !match[2] ) { Sizzle.error( match[0] ); } match[2] = match[2].replace(/^\+|\s*/g, ''); // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); // calculate the numbers (first)n+(last) including if they are negative match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; } else if ( match[2] ) { Sizzle.error( match[0] ); } // TODO: Move to normal caching system match[0] = done++; return match; }, ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1] = match[1].replace( rBackslash, "" ); if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } // Handle if an un-quoted value was used match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; } return match; }, PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } return match; }, POS: function( match ) { match.unshift( true ); return match; } }, filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; }, disabled: function( elem ) { return elem.disabled === true; }, checked: function( elem ) { return elem.checked === true; }, selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, parent: function( elem ) { return !!elem.firstChild; }, empty: function( elem ) { return !elem.firstChild; }, has: function( elem, i, match ) { return !!Sizzle( match[3], elem ).length; }, header: function( elem ) { return (/h\d/i).test( elem.nodeName ); }, text: function( elem ) { // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return "text" === elem.getAttribute( 'type' ); }, radio: function( elem ) { return "radio" === elem.type; }, checkbox: function( elem ) { return "checkbox" === elem.type; }, file: function( elem ) { return "file" === elem.type; }, password: function( elem ) { return "password" === elem.type; }, submit: function( elem ) { return "submit" === elem.type; }, image: function( elem ) { return "image" === elem.type; }, reset: function( elem ) { return "reset" === elem.type; }, button: function( elem ) { return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; }, input: function( elem ) { return (/input|select|textarea|button/i).test( elem.nodeName ); } }, setFilters: { first: function( elem, i ) { return i === 0; }, last: function( elem, i, match, array ) { return i === array.length - 1; }, even: function( elem, i ) { return i % 2 === 0; }, odd: function( elem, i ) { return i % 2 === 1; }, lt: function( elem, i, match ) { return i < match[3] - 0; }, gt: function( elem, i, match ) { return i > match[3] - 0; }, nth: function( elem, i, match ) { return match[3] - 0 === i; }, eq: function( elem, i, match ) { return match[3] - 0 === i; } }, filter: { PSEUDO: function( elem, match, i, array ) { var name = match[1], filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; } else if ( name === "not" ) { var not = match[3]; for ( var j = 0, l = not.length; j < l; j++ ) { if ( not[j] === elem ) { return false; } } return true; } else { Sizzle.error( name ); } }, CHILD: function( elem, match ) { var type = match[1], node = elem; switch ( type ) { case "only": case "first": while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } if ( type === "first" ) { return true; } node = elem; case "last": while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } return true; case "nth": var first = match[2], last = match[3]; if ( first === 1 && last === 0 ) { return true; } var doneName = match[0], parent = elem.parentNode; if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } parent.sizcache = doneName; } var diff = elem.nodeIndex - last; if ( first === 0 ) { return diff === 0; } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, ID: function( elem, match ) { return elem.nodeType === 1 && elem.getAttribute("id") === match; }, TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, ATTR: function( elem, match ) { var name = match[1], result = Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : elem.getAttribute( name ), value = result + "", type = match[2], check = match[4]; return result == null ? type === "!=" : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false; }, POS: function( elem, match, i, array ) { var name = match[2], filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } } } }; var origPOS = Expr.match.POS, fescape = function(all, num){ return "\\" + (num - 0 + 1); }; for ( var type in Expr.match ) { Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); if ( results ) { results.push.apply( results, array ); return results; } return array; }; // Perform a simple check to determine if the browser is capable of // converting a NodeList to an array using builtin methods. // Also verifies that the returned array holds DOM nodes // (which is not the case in the Blackberry browser) try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; // Provide a fallback method if it does not work } catch( e ) { makeArray = function( array, results ) { var i = 0, ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length === "number" ) { for ( var l = array.length; i < l; i++ ) { ret.push( array[i] ); } } else { for ( ; array[i]; i++ ) { ret.push( array[i] ); } } } return ret; }; } var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; return 0; } if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { return a.compareDocumentPosition ? -1 : 1; } return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; } else { sortOrder = function( a, b ) { var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup; // The nodes are identical, we can exit early if ( a === b ) { hasDuplicate = true; return 0; // If the nodes are siblings (or identical) we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected } else if ( !aup ) { return -1; } else if ( !bup ) { return 1; } // Otherwise they're somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison while ( cur ) { ap.unshift( cur ); cur = cur.parentNode; } cur = bup; while ( cur ) { bp.unshift( cur ); cur = cur.parentNode; } al = ap.length; bl = bp.length; // Start walking down the tree looking for a discrepancy for ( var i = 0; i < al && i < bl; i++ ) { if ( ap[i] !== bp[i] ) { return siblingCheck( ap[i], bp[i] ); } } // We ended someplace up the tree so do a sibling check return i === al ? siblingCheck( a, bp[i], -1 ) : siblingCheck( ap[i], b, 1 ); }; siblingCheck = function( a, b, ret ) { if ( a === b ) { return ret; } var cur = a.nextSibling; while ( cur ) { if ( cur === b ) { return -1; } cur = cur.nextSibling; } return 1; }; } // Utility function for retreiving the text value of an array of DOM nodes Sizzle.getText = function( elems ) { var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; // Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue; // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += Sizzle.getText( elem.childNodes ); } } return ret; }; // Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), id = "script" + (new Date()).getTime(), root = document.documentElement; form.innerHTML = ""; // Inject it into the root element, check its status, and remove it quickly root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { Expr.find.ID = function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; } }; Expr.filter.ID = function( elem, match ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form ); // release memory in IE root = form = null; })(); (function(){ // Check to see if the browser returns only elements // when doing getElementsByTagName("*") // Create a fake element var div = document.createElement("div"); div.appendChild( document.createComment("") ); // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { Expr.find.TAG = function( match, context ) { var results = context.getElementsByTagName( match[1] ); // Filter out possible comments if ( match[1] === "*" ) { var tmp = []; for ( var i = 0; results[i]; i++ ) { if ( results[i].nodeType === 1 ) { tmp.push( results[i] ); } } results = tmp; } return results; }; } // Check to see if an attribute returns normalized href attributes div.innerHTML = ""; if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { Expr.attrHandle.href = function( elem ) { return elem.getAttribute( "href", 2 ); }; } // release memory in IE div = null; })(); if ( document.querySelectorAll ) { (function(){ var oldSizzle = Sizzle, div = document.createElement("div"), id = "__sizzle__"; div.innerHTML = "

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

        jQuery Color Picker: Farbtastic

        jQuery.js is not present. You must install jQuery in this folder for the demo to work.

        More info on Acko.net.

        Created by Steven Wittens.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/farbtastic/demo2.html ================================================ Farbtastic

        jQuery Color Picker: Farbtastic

        jQuery.js is not present. You must install jQuery in this folder for the demo to work.

        More info on Acko.net.

        Created by Steven Wittens.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/farbtastic/farbtastic.css ================================================ /** * Farbtastic Color Picker 1.2 * © 2008 Steven Wittens * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ .farbtastic { position: relative; margin: 0 auto; } .farbtastic * { position: absolute; cursor: crosshair; } .farbtastic, .farbtastic .wheel { width: 195px; height: 195px; } .farbtastic .color, .farbtastic .overlay { top: 47px; left: 47px; width: 101px; height: 101px; } .farbtastic .wheel { background: url(wheel.png) no-repeat; width: 195px; height: 195px; } .farbtastic .overlay { background: url(mask.png) no-repeat; } .farbtastic .marker { width: 17px; height: 17px; margin: -8px 0 0 -8px; overflow: hidden; background: url(marker.png) no-repeat; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/farbtastic/farbtastic.js ================================================ /** * Farbtastic Color Picker 1.2 * © 2008 Steven Wittens * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ jQuery.fn.farbtastic = function (callback) { $.farbtastic(this, callback); return this; }; jQuery.farbtastic = function (container, callback) { var container = $(container).get(0); return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback)); } jQuery._farbtastic = function (container, callback) { // Store farbtastic object var fb = this; // Insert markup $(container).html('
        '); var e = $('.farbtastic', container); fb.wheel = $('.wheel', container).get(0); // Dimensions fb.radius = 84; fb.square = 100; fb.width = 194; // Fix background PNGs in IE6 if (navigator.appVersion.match(/MSIE [0-6]\./)) { $('*', e).each(function () { if (this.currentStyle.backgroundImage != 'none') { var image = this.currentStyle.backgroundImage; image = this.currentStyle.backgroundImage.substring(5, image.length - 2); $(this).css({ 'backgroundImage': 'none', 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" }); } }); } /** * Link to the given element(s) or callback. */ fb.linkTo = function (callback) { // Unbind previous nodes if (typeof fb.callback == 'object') { $(fb.callback).unbind('keyup', fb.updateValue); } // Reset color fb.color = null; // Bind callback or elements if (typeof callback == 'function') { fb.callback = callback; } else if (typeof callback == 'object' || typeof callback == 'string') { fb.callback = $(callback); fb.callback.bind('keyup', fb.updateValue); if (fb.callback.get(0).value) { fb.setColor(fb.callback.get(0).value); } } return this; } fb.updateValue = function (event) { if (this.value && this.value != fb.color) { fb.setColor(this.value); } } /** * Change color with HTML syntax #123456 */ fb.setColor = function (color) { var unpack = fb.unpack(color); if (fb.color != color && unpack) { fb.color = color; fb.rgb = unpack; fb.hsl = fb.RGBToHSL(fb.rgb); fb.updateDisplay(); } return this; } /** * Change color with HSL triplet [0..1, 0..1, 0..1] */ fb.setHSL = function (hsl) { fb.hsl = hsl; fb.rgb = fb.HSLToRGB(hsl); fb.color = fb.pack(fb.rgb); fb.updateDisplay(); return this; } ///////////////////////////////////////////////////// /** * Retrieve the coordinates of the given event relative to the center * of the widget. */ fb.widgetCoords = function (event) { var x, y; var el = event.target || event.srcElement; var reference = fb.wheel; if (typeof event.offsetX != 'undefined') { // Use offset coordinates and find common offsetParent var pos = { x: event.offsetX, y: event.offsetY }; // Send the coordinates upwards through the offsetParent chain. var e = el; while (e) { e.mouseX = pos.x; e.mouseY = pos.y; pos.x += e.offsetLeft; pos.y += e.offsetTop; e = e.offsetParent; } // Look for the coordinates starting from the wheel widget. var e = reference; var offset = { x: 0, y: 0 } while (e) { if (typeof e.mouseX != 'undefined') { x = e.mouseX - offset.x; y = e.mouseY - offset.y; break; } offset.x += e.offsetLeft; offset.y += e.offsetTop; e = e.offsetParent; } // Reset stored coordinates e = el; while (e) { e.mouseX = undefined; e.mouseY = undefined; e = e.offsetParent; } } else { // Use absolute coordinates var pos = fb.absolutePosition(reference); x = (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x; y = (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y; } // Subtract distance to middle return { x: x - fb.width / 2, y: y - fb.width / 2 }; } /** * Mousedown handler */ fb.mousedown = function (event) { // Capture mouse if (!document.dragging) { $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup); document.dragging = true; } // Check which area is being dragged var pos = fb.widgetCoords(event); fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; // Process fb.mousemove(event); return false; } /** * Mousemove handler */ fb.mousemove = function (event) { // Get coordinates relative to color picker center var pos = fb.widgetCoords(event); // Set new HSL parameters if (fb.circleDrag) { var hue = Math.atan2(pos.x, -pos.y) / 6.28; if (hue < 0) hue += 1; fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); } else { var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); fb.setHSL([fb.hsl[0], sat, lum]); } return false; } /** * Mouseup handler */ fb.mouseup = function () { // Uncapture mouse $(document).unbind('mousemove', fb.mousemove); $(document).unbind('mouseup', fb.mouseup); document.dragging = false; } /** * Update the markers and styles */ fb.updateDisplay = function () { // Markers var angle = fb.hsl[0] * 6.28; $('.h-marker', e).css({ left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px', top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px' }); $('.sl-marker', e).css({ left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px', top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px' }); // Saturation/Luminance gradient $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]))); // Linked elements or callback if (typeof fb.callback == 'object') { // Set background/foreground color $(fb.callback).css({ backgroundColor: fb.color, color: fb.hsl[2] > 0.5 ? '#000' : '#fff' }); // Change linked value $(fb.callback).each(function() { if (this.value && this.value != fb.color) { this.value = fb.color; } }); } else if (typeof fb.callback == 'function') { fb.callback.call(fb, fb.color); } } /** * Get absolute position of element */ fb.absolutePosition = function (el) { var r = { x: el.offsetLeft, y: el.offsetTop }; // Resolve relative to offsetParent if (el.offsetParent) { var tmp = fb.absolutePosition(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; }; /* Various color utility functions */ fb.pack = function (rgb) { var r = Math.round(rgb[0] * 255); var g = Math.round(rgb[1] * 255); var b = Math.round(rgb[2] * 255); return '#' + (r < 16 ? '0' : '') + r.toString(16) + (g < 16 ? '0' : '') + g.toString(16) + (b < 16 ? '0' : '') + b.toString(16); } fb.unpack = function (color) { if (color.length == 7) { return [parseInt('0x' + color.substring(1, 3)) / 255, parseInt('0x' + color.substring(3, 5)) / 255, parseInt('0x' + color.substring(5, 7)) / 255]; } else if (color.length == 4) { return [parseInt('0x' + color.substring(1, 2)) / 15, parseInt('0x' + color.substring(2, 3)) / 15, parseInt('0x' + color.substring(3, 4)) / 15]; } } fb.HSLToRGB = function (hsl) { var m1, m2, r, g, b; var h = hsl[0], s = hsl[1], l = hsl[2]; m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; m1 = l * 2 - m2; return [this.hueToRGB(m1, m2, h+0.33333), this.hueToRGB(m1, m2, h), this.hueToRGB(m1, m2, h-0.33333)]; } fb.hueToRGB = function (m1, m2, h) { h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; if (h * 2 < 1) return m2; if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; return m1; } fb.RGBToHSL = function (rgb) { var min, max, delta, h, s, l; var r = rgb[0], g = rgb[1], b = rgb[2]; min = Math.min(r, Math.min(g, b)); max = Math.max(r, Math.max(g, b)); delta = max - min; l = (min + max) / 2; s = 0; if (l > 0 && l < 1) { s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); } h = 0; if (delta > 0) { if (max == r && max != g) h += (g - b) / delta; if (max == g && max != b) h += (2 + (b - r) / delta); if (max == b && max != r) h += (4 + (r - g) / delta); h /= 6; } return [h, s, l]; } // Install mousedown handler (the others are set on the document on-demand) $('*', e).mousedown(fb.mousedown); // Init color fb.setColor('#000000'); // Set linked elements/callback if (callback) { fb.linkTo(callback); } } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/jquery-miniColors/component.json ================================================ { "name" : "jquery-miniColors", "version" : "2.0 beta", "description" : "jQuery MiniColors Plugin", "homepage" : "", "main" : [ "./jquery.miniColors.js", "./jquery.miniColors.css" ], "dependencies" : { "jquery" : ">= 1.7.x" }, "keywords" : [ ], "author" : { "name" : "Cory LaViska", "web" : "http://www.abeautifulsite.net/" }, "license": [ "http://www.opensource.org/licenses/mit-license.php", "http://opensource.org/licenses/gpl-2.0.php" ] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/jquery-miniColors/index.html ================================================ jQuery MiniColors

        jQuery MiniColors 2.0 beta

        A project by Cory LaViska of A Beautiful Site.

        MiniColors is a tiny color picker built on jQuery. It's easy to use and works well on touch-enabled devices. Completely re-written for 2.0.

        The MiniColors API was completely overhauled in 2.0. You will need to change your code if you are upgrading from a previous version!

        Download

        You can download the source on GitHub. Help contribute to this project by posting bug reports, feature requests, and code improvements!

        Usage

        The plugin will automatically initialize all inputs of type minicolors:

        <input type="minicolors" />

        This results in the default color picker:

        To set an initial value, use the value attribute:

        <input type="minicolors" value="#00cc00" />

        This results in the default color picker with a preset value:

        You can obtain the selected value any time by grabbing the original input element's value.

        Options

        Options are set for each control using one or more of the HTML5 data- attributes mentioned below.

        Slider Variations

        MiniColors has four slider variations. Set the data-slider attribute to use them. Valid options are hue (default), saturation, brightness, and wheel.

        <input type="minicolors" data-slider="saturation" />

        Default Values

        Use the data-default attribute to force a default hex value. Try clearing the box—it will revert to its default value. Note that the default value does not have to be the same as the initial value (set with the value attribute).

        <input type="minicolors" data-default="#ffffff" />

        No Text Field

        Turn the color picker into a stand-alone color swatch by setting data-textfield to false:

        <input type="minicolors" data-textfield="false" />

        Opacity Slider

        Enable the opacity slider by adding the data-opacity attribute:

        <input type="minicolors" data-opacity=".75" />

        To obtain the opacity value, grab the data-opacity attribute of your input element. Keep in mind that this value will not submit along with other form data, so it's best to use the change callback to update a hidden element in your form if you need it to be submitted.

        Inline Controls

        Force the color picker to appear inline by setting data-control to inline:

        <input type="minicolors" data-control="inline" />

        Dropdown Position

        Change the position of the dropdown panel by setting the data-position attribute. Valid options are top, left, and top left.

        <input type="minicolors" data-position="top" />

        Swatch Position

        Force the color swatch to appear on the left by setting data-swatch-position to left:

        <input type="minicolors" data-swatch-position="left" />

        Classes & Styles

        Use data-class and data-style to apply classes and styles to the parent element of the resulting control:

        <input type="minicolors" data-class="my-class" data-style="margin: 20px;" />

        Utility Functions

        $.minicolors.init()

        Call this function to initialize controls that are created dynamically. You do not need to specify a selector when calling this function. Example:

        $.minicolors.remove(input)

        Call this function to remove a control from the DOM. (You can also remove any of the control's parent elements with the same effect.)

        $.minicolors.refresh()

        Call this function if you programmatically change the value of one or more controls.

        $.minicolors.show(input)

        Show the control attached to the specified input element. Only one control may be shown at once. (Doesn't apply to inline controls.)

        $.minicolors.hide()

        Hides any control that may be showing. (Doesn't apply to inline controls.)

        $.minicolors.rgbObject(input)

        Returns an object with r, g, b, and a properties. The a property will only be present if opacity is enabled on the specified control.

        $.minicolors.rgbString(input)

        Returns an RGB or RGBA string suitable for use in your CSS. If opacity is enabled on the specified control, an RGBA string will be returned. Otherwise an RGB string will be returned.

        Callbacks

        change

        Attach your change callback to the original input element. You can access the value and opacity of the control using the value and data-opacity attributes, respectively.

        To convert a control's hex value to RGB or RGBA, use the $.minicolors.rgbObject() or $.minicolors.rgbString() utility functions.

        Settings

        Adjust plugin defaults by setting $.minicolors.settings.settingName, where settingName is one of the following:

        animationSpeed & animationEasing

        The animation speed and easing effect to use when making a color selection. Defaults to 100 (milliseconds) and swing, respectively. Set animationSpeed to 0 to disabled animation.

        defaultSlider

        Sets the slider variation for all controls that don't specify it through data-slider. Default value is hue.

        letterCase

        Forces the hex color's letter case to uppercase or lowercase. Possible values are lowercase (default) and uppercase.

        hideSpeed & showSpeed

        The hide/show speed for dropdown controls. Default is 100 (milliseconds).

        Styling Tips

        If you change the input element's height or width via CSS, you'll also need to adjust certain style properties in .minicolors-swatch, .minicolors-panel, .minicolors-position-top, and .minicolors-position-left.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/jquery-miniColors/jquery.miniColors.css ================================================ .minicolors { position: relative; display: inline-block; z-index: 1; } .minicolors-focus { z-index: 2; } .minicolors INPUT { margin-right: 3px; border: solid 1px #CCC; font: 14px sans-serif; width: 65px; height: 16px; vertical-align: middle; border-radius: 0; box-shadow: inset 0 2px 4px rgba(0, 0, 0, .04); outline: none; padding: 2px; margin-right: -1px; } .minicolors-swatch-left INPUT { margin-left: -1px; margin-right: auto; } .minicolors-focus INPUT, .minicolors-focus .minicolors-swatch { border-color: #999; } .minicolors-hidden { position: absolute; left: -9999em; } .minicolors-swatch { position: relative; width: 20px; height: 20px; background: url(jquery.minicolors.png) -80px 0; border: solid 1px #CCC; display: inline-block; vertical-align: middle; } .minicolors-swatch SPAN { position: absolute; width: 100%; height: 100%; background: none; box-shadow: inset 0 9px 0 rgba(255, 255, 255, .1); display: inline-block; } /* Panel */ .minicolors-panel { position: absolute; top: 26px; left: 0; width: 173px; height: 152px; background: white; border: solid 1px #CCC; box-shadow: 0 0 20px rgba(0, 0, 0, .2); display: none; } .minicolors-position-top .minicolors-panel { top: -156px; } .minicolors-position-left .minicolors-panel { left: -83px; } .minicolors-position-left.minicolors-with-opacity .minicolors-panel { left: -104px; } .minicolors-with-opacity .minicolors-panel { width: 194px; } .minicolors .minicolors-grid { position: absolute; top: 1px; left: 1px; width: 150px; height: 150px; background: url(jquery.minicolors.png) -120px 0; cursor: crosshair; } .minicolors .minicolors-grid-inner { position: absolute; top: 0; left: 0; width: 150px; height: 150px; background: none; } .minicolors-slider-saturation .minicolors-grid { background-position: -420px 0; } .minicolors-slider-saturation .minicolors-grid-inner { background: url(jquery.minicolors.png) -270px 0; } .minicolors-slider-brightness .minicolors-grid { background-position: -570px 0; } .minicolors-slider-brightness .minicolors-grid-inner { background: black; } .minicolors-slider-wheel .minicolors-grid { background-position: -720px 0; } .minicolors-slider, .minicolors-opacity-slider { position: absolute; top: 1px; left: 152px; width: 20px; height: 150px; background: white url(jquery.minicolors.png) 0 0; cursor: crosshair; } .minicolors-slider-saturation .minicolors-slider { background-position: -60px 0; } .minicolors-slider-brightness .minicolors-slider { background-position: -20px 0; } .minicolors-slider-wheel .minicolors-slider { background-position: -20px 0; } .minicolors-opacity-slider { left: 173px; background-position: -40px 0; display: none; } .minicolors-with-opacity .minicolors-opacity-slider { display: block; } /* Pickers */ .minicolors-grid .minicolors-picker { position: absolute; top: 70px; left: 70px; width: 10px; height: 10px; border: solid 1px black; border-radius: 10px; margin-top: -6px; margin-left: -6px; background: none; } .minicolors-grid .minicolors-picker SPAN { position: absolute; top: 0; left: 0; width: 6px; height: 6px; border-radius: 6px; border: solid 2px white; } .minicolors-picker { position: absolute; top: 0; left: 0; width: 18px; height: 2px; background: white; border: solid 1px black; margin-top: -2px; } /* Inline controls */ .minicolors-inline INPUT, .minicolors-inline .minicolors-swatch { display: none; } .minicolors-inline .minicolors-panel { position: relative; top: auto; left: auto; display: inline-block; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/jquery-miniColors/jquery.miniColors.js ================================================ /* * jQuery MiniColors: A tiny color picker built on jQuery * * Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/) * * Dual-licensed under the MIT and GPL Version 2 licenses * */ if(jQuery) (function($) { // The minicolors object (public methods and settings) $.minicolors = { // Default settings settings: { defaultSlider: 'hue', letterCase: 'lowercase', hideSpeed: 100, showSpeed: 100, animationSpeed: 100, animationEasing: 'swing' }, // Initialized all controls of type=minicolors init: function() { $('INPUT[data-type=minicolors]').each( function() { init( $(this) ); }); }, // Remove the specified control from the DOM remove: function(input) { $(input).each( function() { remove($(this)); }); }, // Refresh the controls refresh: function() { $('INPUT[data-type=minicolors]').each( function() { refresh($(this)); }); }, // Shows the specified control show: function(input) { show( $(input).eq(0) ); }, // Hides all controls hide: function() { hide(); }, // Utility to convert a hex string to RGB(A) object rgbObject: function(input) { var hex = parseHex($(input).val(), true), rgb = hex2rgb(hex), opacity = input.attr('data-opacity'); if( !rgb ) return null; if( opacity !== undefined ) $.extend(rgb, { a: parseFloat(opacity) }); return rgb; }, // Utility to convert a hex string to an RGB(A) string rgbString: function(input) { var hex = parseHex($(input).val(), true), rgb = hex2rgb(hex), opacity = input.attr('data-opacity'); if( !rgb ) return null; if( opacity === undefined ) { return 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')'; } else { return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')'; } } }; // Initialize all input[type=minicolors] elements function init(input) { var minicolors = $(''), sliderType = input.attr('data-slider') || $.minicolors.settings.defaultSlider; if( input.data('initialized') ) return; // The wrapper minicolors .attr('class', input.attr('data-class')) .attr('style', input.attr('data-style')) .toggleClass('minicolors-swatch-left', input.attr('data-swatch-position') === 'left' ) .toggleClass('minicolors-with-opacity', input.attr('data-opacity') !== undefined ); // Custom positioning if( input.attr('data-position') !== undefined ) { $.each(input.attr('data-position').split(' '), function() { minicolors.addClass('minicolors-position-' + this); }); } // The input input .data('initialized', true) .attr('data-default', input.attr('data-default') || '') .attr('data-slider', sliderType) .prop('size', 7) .prop('maxlength', 7) .wrap(minicolors) .after( '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' ); // Prevent text selection in IE input.parent().find('.minicolors-panel').on('selectstart', function() { return false; }).end(); // Detect swatch position if( input.attr('data-swatch-position') === 'left' ) { // Left input.before(''); } else { // Right input.after(''); } // Disable textfield if( input.attr('data-textfield') === 'false' ) input.addClass('minicolors-hidden'); // Inline controls if( input.attr('data-control') === 'inline' ) input.parent().addClass('minicolors-inline'); updateFromInput(input); } // Refresh the specified control function refresh(input) { updateFromInput(input); } // Removes the specified control function remove(input) { var minicolors = input.parent(); if( input.data('initialized') && minicolors.hasClass('minicolors') ) { minicolors.remove(); } } // Shows the specified dropdown panel function show(input) { var minicolors = input.parent(), panel = minicolors.find('.minicolors-panel'); // Do nothing if uninitialized, disabled, or already open if( !input.data('initialized') || input.prop('disabled') || minicolors.hasClass('minicolors-focus') ) return; hide(); minicolors.addClass('minicolors-focus'); panel .stop(true, true) .fadeIn($.minicolors.settings.showSpeed); } // Hides all dropdown panels function hide() { $('.minicolors:not(.minicolors-inline)').each( function() { var minicolors = $(this), input = minicolors.find('INPUT'); minicolors.find('.minicolors-panel').fadeOut($.minicolors.settings.hideSpeed, function() { minicolors.removeClass('minicolors-focus'); }); }); } // Moves the selected picker function move(target, event, animate) { var input = target.parents('.minicolors').find('INPUT'), picker = target.find('[class$=-picker]'), offsetX = target.offset().left, offsetY = target.offset().top, x = Math.round(event.pageX - offsetX), y = Math.round(event.pageY - offsetY), duration = animate ? $.minicolors.settings.animationSpeed : 0, wx, wy, r, phi; // Touch support if( event.originalEvent.changedTouches ) { x = event.originalEvent.changedTouches[0].pageX - offsetX; y = event.originalEvent.changedTouches[0].pageY - offsetY; } // Constrain picker to its container if( x < 0 ) x = 0; if( y < 0 ) y = 0; if( x > target.width() ) x = target.width(); if( y > target.height() ) y = target.height(); // Constrain color wheel values to the wheel if( target.parent().is('.minicolors-slider-wheel') && picker.parent().is('.minicolors-grid') ) { wx = 75 - x; wy = 75 - y; r = Math.sqrt(wx * wx + wy * wy); phi = Math.atan2(wy, wx); if( phi < 0 ) phi += Math.PI * 2; if( r > 75 ) { r = 75; x = 75 - (75 * Math.cos(phi)); y = 75 - (75 * Math.sin(phi)); } x = Math.round(x); y = Math.round(y); } // Move the picker if( target.is('.minicolors-grid') ) { picker .stop(true) .animate({ top: y + 'px', left: x + 'px' }, duration, $.minicolors.settings.animationEasing, function() { updateFromControl(input); }); } else { picker .stop(true) .animate({ top: y + 'px' }, duration, $.minicolors.settings.animationEasing, function() { updateFromControl(input); }); } } // Sets the input based on the color picker values function updateFromControl(input) { function getCoords(picker, container) { var left, top; if( !picker.length || !container ) return null; left = picker.offset().left; top = picker.offset().top; return { x: left - container.offset().left + (picker.outerWidth() / 2), y: top - container.offset().top + (picker.outerHeight() / 2) }; } var hue, saturation, brightness, opacity, rgb, hex, x, y, r, phi, // Helpful references minicolors = input.parent(), panel = minicolors.find('.minicolors-panel'), swatch = minicolors.find('.minicolors-swatch'), hasOpacity = input.attr('data-opacity') !== undefined, sliderType = input.attr('data-slider'), // Panel objects grid = minicolors.find('.minicolors-grid'), slider = minicolors.find('.minicolors-slider'), opacitySlider = minicolors.find('.minicolors-opacity-slider'), // Picker objects gridPicker = grid.find('[class$=-picker]'), sliderPicker = slider.find('[class$=-picker]'), opacityPicker = opacitySlider.find('[class$=-picker]'), // Picker positions gridPos = getCoords(gridPicker, grid), sliderPos = getCoords(sliderPicker, slider), opacityPos = getCoords(opacityPicker, opacitySlider); // Determine HSB values switch(sliderType) { case 'wheel': // Calculate hue, saturation, and brightness x = (grid.width() / 2) - gridPos.x; y = (grid.height() / 2) - gridPos.y; r = Math.sqrt(x * x + y * y); phi = Math.atan2(y, x); if( phi < 0 ) phi += Math.PI * 2; if( r > 75 ) { r = 75; gridPos.x = 69 - (75 * Math.cos(phi)); gridPos.y = 69 - (75 * Math.sin(phi)); } saturation = keepWithin(r / 0.75, 0, 100); hue = keepWithin(phi * 180 / Math.PI, 0, 360); brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); hex = hsb2hex({ h: hue, s: saturation, b: brightness }); // Update UI slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); break; case 'saturation': // Calculate hue, saturation, and brightness hue = keepWithin(parseInt(gridPos.x * (360 / grid.width())), 0, 360); saturation = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); hex = hsb2hex({ h: hue, s: saturation, b: brightness }); // Update UI slider.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: brightness })); minicolors.find('.minicolors-grid-inner').css('opacity', saturation / 100); break; case 'brightness': // Calculate hue, saturation, and brightness hue = keepWithin(parseInt(gridPos.x * (360 / grid.width())), 0, 360); saturation = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100); hex = hsb2hex({ h: hue, s: saturation, b: brightness }); // Update UI slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 })); minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (brightness / 100)); break; default: // Calculate hue, saturation, and brightness hue = keepWithin(360 - parseInt(sliderPos.y * (360 / slider.height())), 0, 360); saturation = keepWithin(Math.floor(gridPos.x * (100 / grid.width())), 0, 100); brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100); hex = hsb2hex({ h: hue, s: saturation, b: brightness }); // Update UI grid.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: 100 })); break; } // Determine opacity if( hasOpacity ) { opacity = parseFloat(1 - (opacityPos.y / opacitySlider.height())).toFixed(2); } else { opacity = 1; } // Update input control input.val(hex); if( hasOpacity ) input.attr('data-opacity', opacity); // Set swatch color swatch.find('SPAN').css({ backgroundColor: hex, opacity: opacity }); // Fire change event if( hex + opacity !== input.data('last-change') ) { input .data('last-change', hex + opacity) .trigger('change', input); } } // Sets the color picker values from the input function updateFromInput(input, preserveInputValue) { var hex, hsb, opacity, x, y, r, phi, // Helpful references minicolors = input.parent(), swatch = minicolors.find('.minicolors-swatch'), hasOpacity = input.attr('data-opacity') !== undefined, sliderType = input.attr('data-slider'), // Panel objects grid = minicolors.find('.minicolors-grid'), slider = minicolors.find('.minicolors-slider'), opacitySlider = minicolors.find('.minicolors-opacity-slider'), // Picker objects gridPicker = grid.find('[class$=-picker]'), sliderPicker = slider.find('[class$=-picker]'), opacityPicker = opacitySlider.find('[class$=-picker]'); // Determine hex/HSB values hex = convertCase(parseHex(input.val(), true)); if( !hex ) hex = convertCase(parseHex(input.attr('data-default'), true)); hsb = hex2hsb(hex); // Update input value if( !preserveInputValue ) input.val(hex); // Determine opacity value if( hasOpacity ) { opacity = input.attr('data-opacity') === '' ? 1 : keepWithin(parseFloat(input.attr('data-opacity')).toFixed(2), 0, 1); input.attr('data-opacity', opacity); swatch.find('SPAN').css('opacity', opacity); // Set opacity picker position y = keepWithin(opacitySlider.height() - (opacitySlider.height() * opacity), 0, opacitySlider.height()); opacityPicker.css('top', y + 'px'); } // Update swatch swatch.find('SPAN').css('backgroundColor', hex); // Determine picker locations switch(sliderType) { case 'wheel': // Set grid position r = keepWithin(Math.ceil(hsb.s * 0.75), 0, grid.height() / 2); phi = hsb.h * Math.PI / 180; x = keepWithin(75 - Math.cos(phi) * r, 0, grid.width()); y = keepWithin(75 - Math.sin(phi) * r, 0, grid.height()); gridPicker.css({ top: y + 'px', left: x + 'px' }); // Set slider position y = 150 - (hsb.b / (100 / grid.height())); if( hex === '' ) y = 0; sliderPicker.css('top', y + 'px'); // Update panel color slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); break; case 'saturation': // Set grid position x = keepWithin((5 * hsb.h) / 12, 0, 150); y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); gridPicker.css({ top: y + 'px', left: x + 'px' }); // Set slider position y = keepWithin(slider.height() - (hsb.s * (slider.height() / 100)), 0, slider.height()); sliderPicker.css('top', y + 'px'); // Update UI slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: hsb.b })); minicolors.find('.minicolors-grid-inner').css('opacity', hsb.s / 100); break; case 'brightness': // Set grid position x = keepWithin((5 * hsb.h) / 12, 0, 150); y = keepWithin(grid.height() - Math.ceil(hsb.s / (100 / grid.height())), 0, grid.height()); gridPicker.css({ top: y + 'px', left: x + 'px' }); // Set slider position y = keepWithin(slider.height() - (hsb.b * (slider.height() / 100)), 0, slider.height()); sliderPicker.css('top', y + 'px'); // Update UI slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 })); minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (hsb.b / 100)); break; default: // Set grid position x = keepWithin(Math.ceil(hsb.s / (100 / grid.width())), 0, grid.width()); y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height()); gridPicker.css({ top: y + 'px', left: x + 'px' }); // Set slider position y = keepWithin(slider.height() - (hsb.h / (360 / slider.height())), 0, slider.height()); sliderPicker.css('top', y + 'px'); // Update panel color grid.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: 100 })); break; } } // Converts to the letter case specified in $.minicolors.settings.letterCase function convertCase(string) { return $.minicolors.settings.letterCase === 'uppercase' ? string.toUpperCase() : string.toLowerCase(); } // Parses a string and returns a valid hex string when possible function parseHex(string, expand) { string = string.replace(/[^A-F0-9]/ig, ''); if( string.length !== 3 && string.length !== 6 ) return ''; if( string.length === 3 && expand ) { string = string[0] + string[0] + string[1] + string[1] + string[2] + string[2]; } return '#' + string; } // Keeps value within min and max function keepWithin(value, min, max) { if( value < min ) value = min; if( value > max ) value = max; return value; } // Converts an HSB object to an RGB object function hsb2rgb(hsb) { var rgb = {}; var h = Math.round(hsb.h); var s = Math.round(hsb.s * 255 / 100); var v = Math.round(hsb.b * 255 / 100); if(s === 0) { rgb.r = rgb.g = rgb.b = v; } else { var t1 = v; var t2 = (255 - s) * v / 255; var t3 = (t1 - t2) * (h % 60) / 60; if( h === 360 ) h = 0; if( h < 60 ) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; } else if( h < 120 ) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; } else if( h < 180 ) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; } else if( h < 240 ) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; } else if( h < 300 ) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; } else if( h < 360 ) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; } else { rgb.r = 0; rgb.g = 0; rgb.b = 0; } } return { r: Math.round(rgb.r), g: Math.round(rgb.g), b: Math.round(rgb.b) }; } // Converts an RGB object to a hex string function rgb2hex(rgb) { var hex = [ rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16) ]; $.each(hex, function(nr, val) { if (val.length === 1) hex[nr] = '0' + val; }); return '#' + hex.join(''); } // Converts an HSB object to a hex string function hsb2hex(hsb) { return rgb2hex(hsb2rgb(hsb)); } // Converts a hex string to an HSB object function hex2hsb(hex) { var hsb = rgb2hsb(hex2rgb(hex)); if( hsb.s === 0 ) hsb.h = 360; return hsb; } // Converts an RGB object to an HSB object function rgb2hsb(rgb) { var hsb = { h: 0, s: 0, b: 0 }; var min = Math.min(rgb.r, rgb.g, rgb.b); var max = Math.max(rgb.r, rgb.g, rgb.b); var delta = max - min; hsb.b = max; hsb.s = max !== 0 ? 255 * delta / max : 0; if( hsb.s !== 0 ) { if( rgb.r === max ) { hsb.h = (rgb.g - rgb.b) / delta; } else if( rgb.g === max ) { hsb.h = 2 + (rgb.b - rgb.r) / delta; } else { hsb.h = 4 + (rgb.r - rgb.g) / delta; } } else { hsb.h = -1; } hsb.h *= 60; if( hsb.h < 0 ) { hsb.h += 360; } hsb.s *= 100/255; hsb.b *= 100/255; return hsb; } // Converts a hex string to an RGB object function hex2rgb(hex) { hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); return { r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF) }; } // A bit of magic... $(window).on('load', function() { // Auto-initialize $.minicolors.init(); $(document) // Hide on clicks outside of the control .on('mousedown touchstart', function(event) { if( !$(event.target).parents().add(event.target).hasClass('minicolors') ) { hide(); } }) // Start moving .on('mousedown touchstart', '.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider', function(event) { var target = $(this); event.preventDefault(); $(document).data('minicolors-target', target); move(target, event, true); }) // Move pickers .on('mousemove touchmove', function(event) { var target = $(document).data('minicolors-target'); if( target ) move(target, event); }) // Stop moving .on('mouseup touchend', function() { $(this).removeData('minicolors-target'); }) // Toggle panel when swatch is clicked .on('mousedown touchstart', '.minicolors-swatch', function(event) { var input = $(this).parent().find('INPUT'), minicolors = input.parent(); if( minicolors.hasClass('minicolors-focus') ) { hide(input); } else { show(input); } }) // Show on focus .on('focus', 'INPUT[data-type=minicolors]', function(event) { var input = $(this); if( !input.data('initialized') ) return; show(input); }) // Fix hex and hide on blur .on('blur', 'INPUT[data-type=minicolors]', function(event) { var input = $(this); if( !input.data('initialized') ) return; input.val( convertCase(parseHex(input.val() !== '' ? input.val() : convertCase(parseHex(input.attr('data-default'), true)), true)) ); hide(input); }) // Handle keypresses .on('keydown', 'INPUT[data-type=minicolors]', function(event) { var input = $(this); if( !input.data('initialized') ) return; switch(event.keyCode) { case 9: // tab hide(); break; case 27: // esc hide(); input.blur(); break; } }) // Update on keyup .on('keyup', 'INPUT[data-type=minicolors]', function(event) { var input = $(this); if( !input.data('initialized') ) return; updateFromInput(input, true); }) // Update on paste .on('paste', 'INPUT[data-type=minicolors]', function(event) { var input = $(this); if( !input.data('initialized') ) return; setTimeout( function() { updateFromInput(input, true); }, 1); }); }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/color/jquery-miniColors/readme.md ================================================ # jQuery MiniColors: A tiny color picker built on jQuery _Copyright Cory LaViska for A Beautiful Site, LLC. (http://www.abeautifulsite.net/)_ _Dual-licensed under the MIT and GPL Version 2 licenses_ ## Demo & Documentation http://labs.abeautifulsite.net/jquery-miniColors/ ## Quick Start ```html ``` To create a color picker: ```html ``` Refer to `index.html` for complete documentation and examples. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] 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. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/README.md ================================================ # Project : bootstrap-datetimepicker ====================================== [![Build Status](https://travis-ci.org/smalot/bootstrap-datetimepicker.png?branch=master)](https://travis-ci.org/smalot/bootstrap-datetimepicker) [Homepage](http://www.malot.fr/bootstrap-datetimepicker/) [Demo page](http://www.malot.fr/bootstrap-datetimepicker/demo.php) # Project forked This project is a fork of [bootstrap-datepicker project](https://github.com/eternicode/bootstrap-datepicker). # Home As 'bootstrap-datetimepicker' is restricted to the date scope (day, month, year), this project aims to support too the time picking (hour, minutes). # Screenshots ## Decade year view ![Datetimepicker decade year view](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_decade.png) This view allows to select the day in the selected month. ## Year view ![Datetimepicker year view](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_year.png) This view allows to select the month in the selected year. ## Month view ![Datetimepicker month view](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_month.png) This view allows to select the year in a range of 10 years. ## Day view ![Datetimepicker day view](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_day.png) This view allows to select the hour in the selected day. ## Hour view ![Datetimepicker hour view](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_hour.png) This view allows to select the preset of minutes in the selected hour. The range of 5 minutes (by default) has been selected to restrict buttons quantity to an acceptable value, but it can be overrided by the minuteStep property. ## Day view - meridian ![Datetimepicker day view meridian](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_day_meridian.png) Meridian is supported in both the day and hour views. To use it, just enable the showMeridian property. ## Hour view - meridian ![Datetimepicker hour view meridian](https://raw.github.com/smalot/bootstrap-datetimepicker/master/screenshot/standard_hour_meridian.png) # Example Attached to a field with the format specified via options: ```html ``` ```javascript $('#datetimepicker').datetimepicker({ format: 'yyyy-mm-dd hh:ii' }); ``` Attached to a field with the format specified via markup: ```html ``` ```javascript $('#datetimepicker').datetimepicker(); ``` As component: ```html
        ``` ```javascript $('#datetimepicker').datetimepicker(); ``` As inline datetimepicker: ```html
        ``` ```javascript $('#datetimepicker').datetimepicker(); ``` # Using bootstrap-datetimepicker.js Call the datetimepicker via javascript: ```javascript $('.datetimepicker').datetimepicker() ``` ## Dependencies Requires bootstrap's dropdown component (`dropdowns.less`) for some styles, and bootstrap's sprites (`sprites.less` and associated images) for arrows. A standalone .css file (including necessary dropdown styles and alternative, text-based arrows) can be generated by running `build/build_standalone.less` through the `lessc` compiler: ```bash $ lessc build/build_standalone.less datetimepicker.css ``` ## Options All options that take a "Date" can handle a `Date` object; a String formatted according to the given `format`; or a timedelta relative to today, eg '-1d', '+6m +1y', etc, where valid units are 'd' (day), 'w' (week), 'm' (month), and 'y' (year). You can also specify an ISO-8601 valid datetime, despite of the given `format` : * yyyy-mm-dd * yyyy-mm-dd hh:ii * yyyy-mm-ddThh:ii * yyyy-mm-dd hh:ii:ss * yyyy-mm-ddThh:ii:ssZ ### format String. Default: 'mm/dd/yyyy' The date format, combination of p, P, h, hh, i, ii, s, ss, d, dd, m, mm, M, MM, yy, yyyy. * p : meridian in lower case ('am' or 'pm') - according to locale file * P : meridian in upper case ('AM' or 'PM') - according to locale file * s : seconds without leading zeros * ss : seconds, 2 digits with leading zeros * i : minutes without leading zeros * ii : minutes, 2 digits with leading zeros * h : hour without leading zeros - 24-hour format * hh : hour, 2 digits with leading zeros - 24-hour format * H : hour without leading zeros - 12-hour format * HH : hour, 2 digits with leading zeros - 12-hour format * d : day of the month without leading zeros * dd : day of the month, 2 digits with leading zeros * m : numeric representation of month without leading zeros * mm : numeric representation of the month, 2 digits with leading zeros * M : short textual representation of a month, three letters * MM : full textual representation of a month, such as January or March * yy : two digit representation of a year * yyyy : full numeric representation of a year, 4 digits ### weekStart Integer. Default: 0 Day of the week start. 0 (Sunday) to 6 (Saturday) ### startDate Date. Default: Beginning of time The earliest date that may be selected; all earlier dates will be disabled. ### endDate Date. Default: End of time The latest date that may be selected; all later dates will be disabled. ### daysOfWeekDisabled String, Array. Default: '', [] Days of the week that should be disabled. Values are 0 (Sunday) to 6 (Saturday). Multiple values should be comma-separated. Example: disable weekends: `'0,6'` or `[0,6]`. ### autoclose Boolean. Default: false Whether or not to close the datetimepicker immediately when a date is selected. ### startView Number, String. Default: 2, 'month' The view that the datetimepicker should show when it is opened. Accepts values of : * 0 or 'hour' for the hour view * 1 or 'day' for the day view * 2 or 'month' for month view (the default) * 3 or 'year' for the 12-month overview * 4 or 'decade' for the 10-year overview. Useful for date-of-birth datetimepickers. ### minView Number, String. Default: 0, 'hour' The lowest view that the datetimepicker should show. ### maxView Number, String. Default: 4, 'decade' The highest view that the datetimepicker should show. ### todayBtn Boolean, "linked". Default: false If true or "linked", displays a "Today" button at the bottom of the datetimepicker to select the current date. If true, the "Today" button will only move the current date into view; if "linked", the current date will also be selected. ### todayHighlight Boolean. Default: false If true, highlights the current date. ### keyboardNavigation Boolean. Default: true Whether or not to allow date navigation by arrow keys. ### language String. Default: 'en' The two-letter code of the language to use for month and day names. These will also be used as the input's value (and subsequently sent to the server in the case of form submissions). Currently ships with English ('en'), German ('de'), Brazilian ('br'), and Spanish ('es') translations, but others can be added (see I18N below). If an unknown language code is given, English will be used. ### forceParse Boolean. Default: true Whether or not to force parsing of the input value when the picker is closed. That is, when an invalid date is left in the input field by the user, the picker will forcibly parse that value, and set the input's value to the new, valid date, conforming to the given `format`. ### minuteStep Number. Default: 5 The increment used to build the hour view. A button is created for each minuteStep minutes. ### pickerReferer : deprecated String. Default: 'default' The referer element to place the picker for the component implementation. If you want to place the picker just under the input field, just specify input. ### pickerPosition String. Default: 'bottom-right' (other supported value : 'bottom-left') This option allows to place the picker just under the input field for the component implementation instead of the default position which is at the bottom right of the button. ### viewSelect Number or String. Default: same as minView (supported values are: 'decade', 'year', 'month', 'day', 'hour') With this option you can select the view from which the date will be selected. By default it's the last one, however you can choose the first one, so at each click the date will be updated. ### showMeridian Boolean. Default: false This option will enable meridian views for day and hour views. ### initialDate Date or String. Default: new Date() You can initialize the viewer with a date. By default it's now, so you can specify yesterday or today at midnight ... ## Markup Format as component. ```html
        ``` Format as component with reset button to clear the input field. ```html
        ``` ## Methods ### .datetimepicker(options) Initializes an datetimepicker. ### remove Arguments: None Remove the datetimepicker. Removes attached events, internal attached objects, and added HTML elements. $('#datetimepicker').datetimepicker('remove'); ### show Arguments: None Show the datetimepicker. ```javascript $('#datetimepicker').datetimepicker('show'); ``` ### hide Arguments: None Hide the datetimepicker. ```javascript $('#datetimepicker').datetimepicker('hide'); ``` ### update Arguments: None Update the datetimepicker with the current input value. ```javascript $('#datetimepicker').datetimepicker('update'); ``` ### setStartDate Arguments: * startDate (String) Sets a new lower date limit on the datetimepicker. ```javascript $('#datetimepicker').datetimepicker('setStartDate', '2012-01-01'); ``` Omit startDate (or provide an otherwise falsey value) to unset the limit. ```javascript $('#datetimepicker').datetimepicker('setStartDate'); $('#datetimepicker').datetimepicker('setStartDate', null); ``` ### setEndDate Arguments: * endDate (String) Sets a new upper date limit on the datetimepicker. ```javascript $('#datetimepicker').datetimepicker('setEndDate', '2012-12-31'); ``` Omit endDate (or provide an otherwise falsey value) to unset the limit. ```javascript $('#datetimepicker').datetimepicker('setEndDate'); $('#datetimepicker').datetimepicker('setEndDate', null); ``` ### setDaysOfWeekDisabled Arguments: * daysOfWeekDisabled (String|Array) Sets the days of week that should be disabled. ```javascript $('#datetimepicker').datetimepicker('setDaysOfWeekDisabled', [0,6]); ``` Omit daysOfWeekDisabled (or provide an otherwise falsey value) to unset the disabled days. ```javascript $('#datetimepicker').datetimepicker('setDaysOfWeekDisabled'); $('#datetimepicker').datetimepicker('setDaysOfWeekDisabled', null); ``` ## Events Datetimepicker class exposes a few events for manipulating the dates. ### show Fired when the date picker is displayed. ### hide Fired when the date picker is hidden. ### changeDate Fired when the date is changed. ```javascript $('#date-end') .datetimepicker() .on('changeDate', function(ev){ if (ev.date.valueOf() < date-start-display.valueOf()){ .... } }); ``` ### changeYear Fired when the *view* year is changed from decade view. ### changeMonth Fired when the *view* month is changed from year view. ### outOfRange Fired when you pick a date before the *startDate* or after the *endDate* or when you specify a date via the method *setDate* or *setUTCDate*.. ## Keyboard support The datetimepicker includes some keyboard navigation: ### up, down, left, right arrow keys By themselves, left/right will move backward/forward one day, up/down will move back/forward one week. With the shift key, up/left will move backward one month, down/right will move forward one month. With the ctrl key, up/left will move backward one year, down/right will move forward oone year. Shift+ctrl behaves the same as ctrl -- that is, it does not change both month and year simultaneously, only the year. ### escape The escape key can be used to hide and re-show the datetimepicker; this is necessary if the user wants to manually edit the value. ### enter When the picker is visible, enter will simply hide it. When the picker is not visible, enter will have normal effects -- submitting the current form, etc. ## I18N The plugin supports i18n for the month and weekday names and the `weekStart` option. The default is English ('en'); other available translations are avilable in the `js/locales/` directory, simply include your desired locale after the plugin. To add more languages, simply add a key to `$.fn.datetimepicker.dates`, before calling `.datetimepicker()`. Example: ```javascript $.fn.datetimepicker.dates['en'] = { days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], today: "Today" }; ``` Right-to-left languages may also include `rtl: true` to make the calendar display appropriately. If your browser (or those of your users) is displaying characters wrong, chances are the browser is loading the javascript file with a non-unicode encoding. Simply add `charset="UTF-8"` to your `script` tag: ```html ``` ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/css/datetimepicker.css ================================================ /*! * Datetimepicker for Bootstrap * * Copyright 2012 Stefan Petre * Improvements by Andrew Rowls * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * */ .datetimepicker { padding: 4px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; direction: ltr; /*.dow { border-top: 1px solid #ddd !important; }*/ } .datetimepicker-inline { width: 220px; } .datetimepicker.datetimepicker-rtl { direction: rtl; } .datetimepicker.datetimepicker-rtl table tr td span { float: right; } .datetimepicker-dropdown, .datetimepicker-dropdown-left { top: 0; left: 0; } .datetimepicker-dropdown:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .datetimepicker-dropdown:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .datetimepicker-dropdown-left:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; right: 6px; } .datetimepicker-dropdown-left:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; right: 7px; } .datetimepicker > div { display: none; } .datetimepicker.minutes div.datetimepicker-minutes { display: block; } .datetimepicker.hours div.datetimepicker-hours { display: block; } .datetimepicker.days div.datetimepicker-days { display: block; } .datetimepicker.months div.datetimepicker-months { display: block; } .datetimepicker.years div.datetimepicker-years { display: block; } .datetimepicker table { margin: 0; } .datetimepicker td, .datetimepicker th { text-align: center; width: 20px; height: 20px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border: none; } .table-striped .datetimepicker table tr td, .table-striped .datetimepicker table tr th { background-color: transparent; } .datetimepicker table tr td.minute:hover { background: #eeeeee; cursor: pointer; } .datetimepicker table tr td.hour:hover { background: #eeeeee; cursor: pointer; } .datetimepicker table tr td.day:hover { background: #eeeeee; cursor: pointer; } .datetimepicker table tr td.old, .datetimepicker table tr td.new { color: #999999; } .datetimepicker table tr td.disabled, .datetimepicker table tr td.disabled:hover { background: none; color: #999999; cursor: default; } .datetimepicker table tr td.today, .datetimepicker table tr td.today:hover, .datetimepicker table tr td.today.disabled, .datetimepicker table tr td.today.disabled:hover { background-color: #fde19a; background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); background-image: linear-gradient(top, #fdd49a, #fdf59a); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); border-color: #fdf59a #fdf59a #fbed50; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .datetimepicker table tr td.today:hover, .datetimepicker table tr td.today:hover:hover, .datetimepicker table tr td.today.disabled:hover, .datetimepicker table tr td.today.disabled:hover:hover, .datetimepicker table tr td.today:active, .datetimepicker table tr td.today:hover:active, .datetimepicker table tr td.today.disabled:active, .datetimepicker table tr td.today.disabled:hover:active, .datetimepicker table tr td.today.active, .datetimepicker table tr td.today:hover.active, .datetimepicker table tr td.today.disabled.active, .datetimepicker table tr td.today.disabled:hover.active, .datetimepicker table tr td.today.disabled, .datetimepicker table tr td.today:hover.disabled, .datetimepicker table tr td.today.disabled.disabled, .datetimepicker table tr td.today.disabled:hover.disabled, .datetimepicker table tr td.today[disabled], .datetimepicker table tr td.today:hover[disabled], .datetimepicker table tr td.today.disabled[disabled], .datetimepicker table tr td.today.disabled:hover[disabled] { background-color: #fdf59a; } .datetimepicker table tr td.today:active, .datetimepicker table tr td.today:hover:active, .datetimepicker table tr td.today.disabled:active, .datetimepicker table tr td.today.disabled:hover:active, .datetimepicker table tr td.today.active, .datetimepicker table tr td.today:hover.active, .datetimepicker table tr td.today.disabled.active, .datetimepicker table tr td.today.disabled:hover.active { background-color: #fbf069 \9; } .datetimepicker table tr td.active, .datetimepicker table tr td.active:hover, .datetimepicker table tr td.active.disabled, .datetimepicker table tr td.active.disabled:hover { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datetimepicker table tr td.active:hover, .datetimepicker table tr td.active:hover:hover, .datetimepicker table tr td.active.disabled:hover, .datetimepicker table tr td.active.disabled:hover:hover, .datetimepicker table tr td.active:active, .datetimepicker table tr td.active:hover:active, .datetimepicker table tr td.active.disabled:active, .datetimepicker table tr td.active.disabled:hover:active, .datetimepicker table tr td.active.active, .datetimepicker table tr td.active:hover.active, .datetimepicker table tr td.active.disabled.active, .datetimepicker table tr td.active.disabled:hover.active, .datetimepicker table tr td.active.disabled, .datetimepicker table tr td.active:hover.disabled, .datetimepicker table tr td.active.disabled.disabled, .datetimepicker table tr td.active.disabled:hover.disabled, .datetimepicker table tr td.active[disabled], .datetimepicker table tr td.active:hover[disabled], .datetimepicker table tr td.active.disabled[disabled], .datetimepicker table tr td.active.disabled:hover[disabled] { background-color: #0044cc; } .datetimepicker table tr td.active:active, .datetimepicker table tr td.active:hover:active, .datetimepicker table tr td.active.disabled:active, .datetimepicker table tr td.active.disabled:hover:active, .datetimepicker table tr td.active.active, .datetimepicker table tr td.active:hover.active, .datetimepicker table tr td.active.disabled.active, .datetimepicker table tr td.active.disabled:hover.active { background-color: #003399 \9; } .datetimepicker table tr td span { display: block; width: 23%; height: 54px; line-height: 54px; float: left; margin: 1%; cursor: pointer; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .datetimepicker .datetimepicker-hours span { height: 26px; line-height: 26px; } .datetimepicker .datetimepicker-hours table tr td span.hour_am, .datetimepicker .datetimepicker-hours table tr td span.hour_pm { width: 14.6%; } .datetimepicker .datetimepicker-hours fieldset legend, .datetimepicker .datetimepicker-minutes fieldset legend { margin-bottom: inherit; line-height: 30px; } .datetimepicker .datetimepicker-minutes span { height: 26px; line-height: 26px; } .datetimepicker table tr td span:hover { background: #eeeeee; } .datetimepicker table tr td span.disabled, .datetimepicker table tr td span.disabled:hover { background: none; color: #999999; cursor: default; } .datetimepicker table tr td span.active, .datetimepicker table tr td span.active:hover, .datetimepicker table tr td span.active.disabled, .datetimepicker table tr td span.active.disabled:hover { background-color: #006dcc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -ms-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(top, #0088cc, #0044cc); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .datetimepicker table tr td span.active:hover, .datetimepicker table tr td span.active:hover:hover, .datetimepicker table tr td span.active.disabled:hover, .datetimepicker table tr td span.active.disabled:hover:hover, .datetimepicker table tr td span.active:active, .datetimepicker table tr td span.active:hover:active, .datetimepicker table tr td span.active.disabled:active, .datetimepicker table tr td span.active.disabled:hover:active, .datetimepicker table tr td span.active.active, .datetimepicker table tr td span.active:hover.active, .datetimepicker table tr td span.active.disabled.active, .datetimepicker table tr td span.active.disabled:hover.active, .datetimepicker table tr td span.active.disabled, .datetimepicker table tr td span.active:hover.disabled, .datetimepicker table tr td span.active.disabled.disabled, .datetimepicker table tr td span.active.disabled:hover.disabled, .datetimepicker table tr td span.active[disabled], .datetimepicker table tr td span.active:hover[disabled], .datetimepicker table tr td span.active.disabled[disabled], .datetimepicker table tr td span.active.disabled:hover[disabled] { background-color: #0044cc; } .datetimepicker table tr td span.active:active, .datetimepicker table tr td span.active:hover:active, .datetimepicker table tr td span.active.disabled:active, .datetimepicker table tr td span.active.disabled:hover:active, .datetimepicker table tr td span.active.active, .datetimepicker table tr td span.active:hover.active, .datetimepicker table tr td span.active.disabled.active, .datetimepicker table tr td span.active.disabled:hover.active { background-color: #003399 \9; } .datetimepicker table tr td span.old { color: #999999; } .datetimepicker th.switch { width: 145px; } .datetimepicker thead tr:first-child th, .datetimepicker tfoot tr:first-child th { cursor: pointer; } .datetimepicker thead tr:first-child th:hover, .datetimepicker tfoot tr:first-child th:hover { background: #eeeeee; } .input-append.date .add-on i, .input-prepend.date .add-on i { cursor: pointer; width: 14px; height: 14px; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js ================================================ /* ========================================================= * bootstrap-datetimepicker.js * ========================================================= * Copyright 2012 Stefan Petre * Improvements by Andrew Rowls * Improvements by Sébastien Malot * Project URL : http://www.malot.fr/bootstrap-datetimepicker * * 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( $ ) { function UTCDate(){ return new Date(Date.UTC.apply(Date, arguments)); } function UTCToday(){ var today = new Date(); return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate(), today.getUTCHours(), today.getUTCMinutes(), today.getUTCSeconds(), 0); } // Picker object var Datetimepicker = function(element, options) { var that = this; this.element = $(element); this.language = options.language || this.element.data('date-language') || "en"; this.language = this.language in dates ? this.language : "en"; this.isRTL = dates[this.language].rtl || false; this.formatType = options.formatType || this.element.data('format-type') || 'standard'; this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType); this.isInline = false; this.isVisible = false; this.isInput = this.element.is('input'); this.component = this.element.is('.date') ? this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar').parent() : false; this.componentReset = this.element.is('.date') ? this.element.find('.add-on .icon-remove').parent() : false; this.hasInput = this.component && this.element.find('input').length; if (this.component && this.component.length === 0) { this.component = false; } this.linkField = options.linkField || this.element.data('link-field') || false; this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType); this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5; this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right'; this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false; this.initialDate = options.initialDate || new Date(); this._attachEvents(); this.minView = 0; if ('minView' in options) { this.minView = options.minView; } else if ('minView' in this.element.data()) { this.minView = this.element.data('min-view'); } this.minView = DPGlobal.convertViewMode(this.minView); this.maxView = DPGlobal.modes.length-1; if ('maxView' in options) { this.maxView = options.maxView; } else if ('maxView' in this.element.data()) { this.maxView = this.element.data('max-view'); } this.maxView = DPGlobal.convertViewMode(this.maxView); this.startViewMode = 2; if ('startView' in options) { this.startViewMode = options.startView; } else if ('startView' in this.element.data()) { this.startViewMode = this.element.data('start-view'); } this.startViewMode = DPGlobal.convertViewMode(this.startViewMode); this.viewMode = this.startViewMode; this.viewSelect = this.minView; if ('viewSelect' in options) { this.viewSelect = options.viewSelect; } else if ('viewSelect' in this.element.data()) { this.viewSelect = this.element.data('view-select'); } this.viewSelect = DPGlobal.convertViewMode(this.viewSelect); this.forceParse = true; if ('forceParse' in options) { this.forceParse = options.forceParse; } else if ('dateForceParse' in this.element.data()) { this.forceParse = this.element.data('date-force-parse'); } this.picker = $(DPGlobal.template) .appendTo(this.isInline ? this.element : 'body') .on({ click: $.proxy(this.click, this), mousedown: $.proxy(this.mousedown, this) }); if (this.isInline) { this.picker.addClass('datetimepicker-inline'); } else { if (this.component && this.pickerPosition == 'bottom-left') { this.picker.addClass('datetimepicker-dropdown-left dropdown-menu'); } else { this.picker.addClass('datetimepicker-dropdown dropdown-menu'); } } if (this.isRTL){ this.picker.addClass('datetimepicker-rtl'); this.picker.find('.prev i, .next i') .toggleClass('icon-arrow-left icon-arrow-right'); } $(document).on('mousedown', function (e) { // Clicked outside the datetimepicker, hide it if ($(e.target).closest('.datetimepicker').length === 0) { that.hide(); } }); this.autoclose = false; if ('autoclose' in options) { this.autoclose = options.autoclose; } else if ('dateAutoclose' in this.element.data()) { this.autoclose = this.element.data('date-autoclose'); } this.keyboardNavigation = true; if ('keyboardNavigation' in options) { this.keyboardNavigation = options.keyboardNavigation; } else if ('dateKeyboardNavigation' in this.element.data()) { this.keyboardNavigation = this.element.data('date-keyboard-navigation'); } this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false); this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false); this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7); this.weekEnd = ((this.weekStart + 6) % 7); this.startDate = -Infinity; this.endDate = Infinity; this.daysOfWeekDisabled = []; this.setStartDate(options.startDate || this.element.data('date-startdate')); this.setEndDate(options.endDate || this.element.data('date-enddate')); this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled')); this.fillDow(); this.fillMonths(); this.update(); this.showMode(); if(this.isInline) { this.show(); } }; Datetimepicker.prototype = { constructor: Datetimepicker, _events: [], _attachEvents: function(){ this._detachEvents(); if (this.isInput) { // single input this._events = [ [this.element, { focus: $.proxy(this.show, this), keyup: $.proxy(this.update, this), keydown: $.proxy(this.keydown, this) }] ]; } else if (this.component && this.hasInput){ // component: input + button this._events = [ // For components that are not readonly, allow keyboard nav [this.element.find('input'), { focus: $.proxy(this.show, this), keyup: $.proxy(this.update, this), keydown: $.proxy(this.keydown, this) }], [this.component, { click: $.proxy(this.show, this) }] ]; if (this.componentReset) { this._events.push([ this.componentReset, {click: $.proxy(this.reset, this)} ]); } } else if (this.element.is('div')) { // inline datetimepicker this.isInline = true; } else { this._events = [ [this.element, { click: $.proxy(this.show, this) }] ]; } for (var i=0, el, ev; i= this.startDate && d <= this.endDate) { this.date = d; this.setValue(); this.viewDate = this.date; this.fill(); } else { this.element.trigger({ type: 'outOfRange', date: d, startDate: this.startDate, endDate: this.endDate }); } }, setValue: function() { var formatted = this.getFormattedDate(); if (!this.isInput) { if (this.component){ this.element.find('input').prop('value', formatted); } this.element.data('date', formatted); } else { this.element.prop('value', formatted); } if (this.linkField) { $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat)); } }, getFormattedDate: function(format) { if(format == undefined) format = this.format; return DPGlobal.formatDate(this.date, format, this.language, this.formatType); }, setStartDate: function(startDate){ this.startDate = startDate || -Infinity; if (this.startDate !== -Infinity) { this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType); } this.update(); this.updateNavArrows(); }, setEndDate: function(endDate){ this.endDate = endDate || Infinity; if (this.endDate !== Infinity) { this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType); } this.update(); this.updateNavArrows(); }, setDaysOfWeekDisabled: function(daysOfWeekDisabled){ this.daysOfWeekDisabled = daysOfWeekDisabled || []; if (!$.isArray(this.daysOfWeekDisabled)) { this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/); } this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) { return parseInt(d, 10); }); this.update(); this.updateNavArrows(); }, place: function(){ if(this.isInline) return; var zIndex = parseInt(this.element.parents().filter(function() { return $(this).css('z-index') != 'auto'; }).first().css('z-index'))+10; var offset, left; if (this.component) { offset = this.component.offset(); left = offset.left; if (this.pickerPosition == 'bottom-left') { left += this.component.outerWidth() - this.picker.outerWidth(); } } else { offset = this.element.offset(); left = offset.left; } this.picker.css({ top: offset.top + this.height, left: left, zIndex: zIndex }); }, update: function(){ var date, fromArgs = false; if(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) { date = arguments[0]; fromArgs = true; } else { date = this.isInput ? this.element.prop('value') : this.element.data('date') || this.element.find('input').prop('value') || this.initialDate; } if (!date) { date = new Date(); fromArgs = false; } this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType); if (fromArgs) this.setValue(); if (this.date < this.startDate) { this.viewDate = new Date(this.startDate); } else if (this.date > this.endDate) { this.viewDate = new Date(this.endDate); } else { this.viewDate = new Date(this.date); } this.fill(); }, fillDow: function(){ var dowCnt = this.weekStart, html = ''; while (dowCnt < this.weekStart + 7) { html += ''+dates[this.language].daysMin[(dowCnt++)%7]+''; } html += ''; this.picker.find('.datetimepicker-days thead').append(html); }, fillMonths: function(){ var html = '', i = 0; while (i < 12) { html += ''+dates[this.language].monthsShort[i++]+''; } this.picker.find('.datetimepicker-months td').html(html); }, fill: function() { if (this.date == null || this.viewDate == null) { return; } var d = new Date(this.viewDate), year = d.getUTCFullYear(), month = d.getUTCMonth(), dayMonth = d.getUTCDate(), hours = d.getUTCHours(), minutes = d.getUTCMinutes(), startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity, endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() : Infinity, currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), today = new Date(); this.picker.find('.datetimepicker-days thead th:eq(1)') .text(dates[this.language].months[month]+' '+year); this.picker.find('.datetimepicker-hours thead th:eq(1)') .text(dayMonth+' '+dates[this.language].months[month]+' '+year); this.picker.find('.datetimepicker-minutes thead th:eq(1)') .text(dayMonth+' '+dates[this.language].months[month]+' '+year); this.picker.find('tfoot th.today') .text(dates[this.language].today) .toggle(this.todayBtn !== false); this.updateNavArrows(); this.fillMonths(); /*var prevMonth = UTCDate(year, month, 0,0,0,0,0); prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/ var prevMonth = UTCDate(year, month-1, 28,0,0,0,0), day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); prevMonth.setUTCDate(day); prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7)%7); var nextMonth = new Date(prevMonth); nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); nextMonth = nextMonth.valueOf(); var html = []; var clsName; while(prevMonth.valueOf() < nextMonth) { if (prevMonth.getUTCDay() == this.weekStart) { html.push(''); } clsName = ''; if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) { clsName += ' old'; } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) { clsName += ' new'; } // Compare internal UTC date with local today, not UTC today if (this.todayHighlight && prevMonth.getUTCFullYear() == today.getFullYear() && prevMonth.getUTCMonth() == today.getMonth() && prevMonth.getUTCDate() == today.getDate()) { clsName += ' today'; } if (prevMonth.valueOf() == currentDate) { clsName += ' active'; } if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate || $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1) { clsName += ' disabled'; } html.push(''+prevMonth.getUTCDate() + ''); if (prevMonth.getUTCDay() == this.weekEnd) { html.push(''); } prevMonth.setUTCDate(prevMonth.getUTCDate()+1); } this.picker.find('.datetimepicker-days tbody').empty().append(html.join('')); html = []; var txt = '', meridian = '', meridianOld = ''; for (var i=0;i<24;i++) { var actual = UTCDate(year, month, dayMonth, i); clsName = ''; // We want the previous hour for the startDate if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) { clsName += ' disabled'; } else if (hours == i) { clsName += ' active'; } if (this.showMeridian && dates[this.language].meridiem.length == 2) { meridian = (i<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]); if (meridian != meridianOld) { if (meridianOld != '') { html.push(''); } html.push('
        '+meridian.toUpperCase()+''); } meridianOld = meridian; txt = (i%12?i%12:12); html.push(''+txt+''); if (i == 23) { html.push('
        '); } } else { txt = i+':00'; html.push(''+txt+''); } } this.picker.find('.datetimepicker-hours td').html(html.join('')); html = []; txt = '', meridian = '', meridianOld = ''; for(var i=0;i<60;i+=this.minuteStep) { var actual = UTCDate(year, month, dayMonth, hours, i, 0); clsName = ''; if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) { clsName += ' disabled'; } else if (Math.floor(minutes/this.minuteStep) == Math.floor(i/this.minuteStep)) { clsName += ' active'; } if (this.showMeridian && dates[this.language].meridiem.length == 2) { meridian = (hours<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]); if (meridian != meridianOld) { if (meridianOld != '') { html.push(''); } html.push('
        '+meridian.toUpperCase()+''); } meridianOld = meridian; txt = (hours%12?hours%12:12); //html.push(''+txt+''); html.push(''+txt+':'+(i<10?'0'+i:i)+''); if (i == 59) { html.push('
        '); } } else { txt = i+':00'; //html.push(''+txt+''); html.push(''+hours+':'+(i<10?'0'+i:i)+''); } } this.picker.find('.datetimepicker-minutes td').html(html.join('')); var currentYear = this.date.getUTCFullYear(); var months = this.picker.find('.datetimepicker-months') .find('th:eq(1)') .text(year) .end() .find('span').removeClass('active'); if (currentYear == year) { months.eq(this.date.getUTCMonth()).addClass('active'); } if (year < startYear || year > endYear) { months.addClass('disabled'); } if (year == startYear) { months.slice(0, startMonth).addClass('disabled'); } if (year == endYear) { months.slice(endMonth+1).addClass('disabled'); } html = ''; year = parseInt(year/10, 10) * 10; var yearCont = this.picker.find('.datetimepicker-years') .find('th:eq(1)') .text(year + '-' + (year + 9)) .end() .find('td'); year -= 1; for (var i = -1; i < 11; i++) { html += ''+year+''; year += 1; } yearCont.html(html); }, updateNavArrows: function() { var d = new Date(this.viewDate), year = d.getUTCFullYear(), month = d.getUTCMonth(), day = d.getUTCDate(), hour = d.getUTCHours(); switch (this.viewMode) { case 0: if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth() && day <= this.startDate.getUTCDate() && hour <= this.startDate.getUTCHours()) { this.picker.find('.prev').css({visibility: 'hidden'}); } else { this.picker.find('.prev').css({visibility: 'visible'}); } if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth() && day >= this.endDate.getUTCDate() && hour >= this.endDate.getUTCHours()) { this.picker.find('.next').css({visibility: 'hidden'}); } else { this.picker.find('.next').css({visibility: 'visible'}); } break; case 1: if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth() && day <= this.startDate.getUTCDate()) { this.picker.find('.prev').css({visibility: 'hidden'}); } else { this.picker.find('.prev').css({visibility: 'visible'}); } if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth() && day >= this.endDate.getUTCDate()) { this.picker.find('.next').css({visibility: 'hidden'}); } else { this.picker.find('.next').css({visibility: 'visible'}); } break; case 2: if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() && month <= this.startDate.getUTCMonth()) { this.picker.find('.prev').css({visibility: 'hidden'}); } else { this.picker.find('.prev').css({visibility: 'visible'}); } if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() && month >= this.endDate.getUTCMonth()) { this.picker.find('.next').css({visibility: 'hidden'}); } else { this.picker.find('.next').css({visibility: 'visible'}); } break; case 3: case 4: if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) { this.picker.find('.prev').css({visibility: 'hidden'}); } else { this.picker.find('.prev').css({visibility: 'visible'}); } if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) { this.picker.find('.next').css({visibility: 'hidden'}); } else { this.picker.find('.next').css({visibility: 'visible'}); } break; } }, click: function(e) { e.stopPropagation(); e.preventDefault(); var target = $(e.target).closest('span, td, th, legend'); if (target.length == 1) { if (target.is('.disabled')) { this.element.trigger({ type: 'outOfRange', date: this.viewDate, startDate: this.startDate, endDate: this.endDate }); return; } switch(target[0].nodeName.toLowerCase()) { case 'th': switch(target[0].className) { case 'switch': this.showMode(1); break; case 'prev': case 'next': var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1); switch(this.viewMode){ case 0: this.viewDate = this.moveHour(this.viewDate, dir); break; case 1: this.viewDate = this.moveDate(this.viewDate, dir); break; case 2: this.viewDate = this.moveMonth(this.viewDate, dir); break; case 3: case 4: this.viewDate = this.moveYear(this.viewDate, dir); break; } this.fill(); break; case 'today': var date = new Date(); date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0); this.viewMode = this.startViewMode; this.showMode(0); this._setDate(date); this.fill(); if (this.autoclose) { this.hide(); } break; } break; case 'span': if (!target.is('.disabled')) { var year = this.viewDate.getUTCFullYear(), month = this.viewDate.getUTCMonth(), day = this.viewDate.getUTCDate(), hours = this.viewDate.getUTCHours(), minutes = this.viewDate.getUTCMinutes(), seconds = this.viewDate.getUTCSeconds(); if (target.is('.month')) { this.viewDate.setUTCDate(1); month = target.parent().find('span').index(target); day = this.viewDate.getUTCDate(); this.viewDate.setUTCMonth(month); this.element.trigger({ type: 'changeMonth', date: this.viewDate }); if (this.viewSelect >= 3) { this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); } } else if (target.is('.year')) { this.viewDate.setUTCDate(1); year = parseInt(target.text(), 10) || 0; this.viewDate.setUTCFullYear(year); this.element.trigger({ type: 'changeYear', date: this.viewDate }); if (this.viewSelect >= 4) { this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); } } else if (target.is('.hour')){ hours = parseInt(target.text(), 10) || 0; if (target.hasClass('hour_am') || target.hasClass('hour_pm')) { if (hours == 12 && target.hasClass('hour_am')) { hours = 0; } else if (hours != 12 && target.hasClass('hour_pm')) { hours += 12; } } this.viewDate.setUTCHours(hours); this.element.trigger({ type: 'changeHour', date: this.viewDate }); if (this.viewSelect >= 1) { this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); } } else if (target.is('.minute')){ minutes = parseInt(target.text().substr(target.text().indexOf(':')+1), 10) || 0; this.viewDate.setUTCMinutes(minutes); this.element.trigger({ type: 'changeMinute', date: this.viewDate }); if (this.viewSelect >= 0) { this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); } } if (this.viewMode != 0) { var oldViewMode = this.viewMode; this.showMode(-1); this.fill(); if (oldViewMode == this.viewMode && this.autoclose) { this.hide(); } } else { this.fill(); if (this.autoclose) { this.hide(); } } } break; case 'td': if (target.is('.day') && !target.is('.disabled')){ var day = parseInt(target.text(), 10) || 1; var year = this.viewDate.getUTCFullYear(), month = this.viewDate.getUTCMonth(), hours = this.viewDate.getUTCHours(), minutes = this.viewDate.getUTCMinutes(), seconds = this.viewDate.getUTCSeconds(); if (target.is('.old')) { if (month === 0) { month = 11; year -= 1; } else { month -= 1; } } else if (target.is('.new')) { if (month == 11) { month = 0; year += 1; } else { month += 1; } } this.viewDate.setUTCDate(day); this.viewDate.setUTCMonth(month); this.viewDate.setUTCFullYear(year); this.element.trigger({ type: 'changeDay', date: this.viewDate }); if (this.viewSelect >= 2) { this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); } } var oldViewMode = this.viewMode; this.showMode(-1); this.fill(); if (oldViewMode == this.viewMode && this.autoclose) { this.hide(); } break; } } }, _setDate: function(date, which){ if (!which || which == 'date') this.date = date; if (!which || which == 'view') this.viewDate = date; this.fill(); this.element.trigger({ type: 'changeDate', date: this.date }); this.setValue(); var element; if (this.isInput) { element = this.element; } else if (this.component){ element = this.element.find('input'); } if (element) { element.change(); if (this.autoclose && (!which || which == 'date')) { //this.hide(); } } }, moveMinute: function(date, dir){ if (!dir) return date; var new_date = new Date(date.valueOf()); //dir = dir > 0 ? 1 : -1; new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep)); return new_date; }, moveHour: function(date, dir){ if (!dir) return date; var new_date = new Date(date.valueOf()); //dir = dir > 0 ? 1 : -1; new_date.setUTCHours(new_date.getUTCHours() + dir); return new_date; }, moveDate: function(date, dir){ if (!dir) return date; var new_date = new Date(date.valueOf()); //dir = dir > 0 ? 1 : -1; new_date.setUTCDate(new_date.getUTCDate() + dir); return new_date; }, moveMonth: function(date, dir){ if (!dir) return date; var new_date = new Date(date.valueOf()), day = new_date.getUTCDate(), month = new_date.getUTCMonth(), mag = Math.abs(dir), new_month, test; dir = dir > 0 ? 1 : -1; if (mag == 1){ test = dir == -1 // If going back one month, make sure month is not current month // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) ? function(){ return new_date.getUTCMonth() == month; } // If going forward one month, make sure month is as expected // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) : function(){ return new_date.getUTCMonth() != new_month; }; new_month = month + dir; new_date.setUTCMonth(new_month); // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 if (new_month < 0 || new_month > 11) new_month = (new_month + 12) % 12; } else { // For magnitudes >1, move one month at a time... for (var i=0; i= this.startDate && date <= this.endDate; }, keydown: function(e){ if (this.picker.is(':not(:visible)')){ if (e.keyCode == 27) // allow escape to hide and re-show picker this.show(); return; } var dateChanged = false, dir, day, month, newDate, newViewDate; switch(e.keyCode){ case 27: // escape this.hide(); e.preventDefault(); break; case 37: // left case 39: // right if (!this.keyboardNavigation) break; dir = e.keyCode == 37 ? -1 : 1; viewMode = this.viewMode; if (e.ctrlKey) { viewMode += 2; } else if (e.shiftKey) { viewMode += 1; } if (viewMode == 4) { newDate = this.moveYear(this.date, dir); newViewDate = this.moveYear(this.viewDate, dir); } else if (viewMode == 3) { newDate = this.moveMonth(this.date, dir); newViewDate = this.moveMonth(this.viewDate, dir); } else if (viewMode == 2) { newDate = this.moveDate(this.date, dir); newViewDate = this.moveDate(this.viewDate, dir); } else if (viewMode == 1) { newDate = this.moveHour(this.date, dir); newViewDate = this.moveHour(this.viewDate, dir); } else if (viewMode == 0) { newDate = this.moveMinute(this.date, dir); newViewDate = this.moveMinute(this.viewDate, dir); } if (this.dateWithinRange(newDate)){ this.date = newDate; this.viewDate = newViewDate; this.setValue(); this.update(); e.preventDefault(); dateChanged = true; } break; case 38: // up case 40: // down if (!this.keyboardNavigation) break; dir = e.keyCode == 38 ? -1 : 1; viewMode = this.viewMode; if (e.ctrlKey) { viewMode += 2; } else if (e.shiftKey) { viewMode += 1; } if (viewMode == 4) { newDate = this.moveYear(this.date, dir); newViewDate = this.moveYear(this.viewDate, dir); } else if (viewMode == 3) { newDate = this.moveMonth(this.date, dir); newViewDate = this.moveMonth(this.viewDate, dir); } else if (viewMode == 2) { newDate = this.moveDate(this.date, dir * 7); newViewDate = this.moveDate(this.viewDate, dir * 7); } else if (viewMode == 1) { if (this.showMeridian) { newDate = this.moveHour(this.date, dir * 6); newViewDate = this.moveHour(this.viewDate, dir * 6); } else { newDate = this.moveHour(this.date, dir * 4); newViewDate = this.moveHour(this.viewDate, dir * 4); } } else if (viewMode == 0) { newDate = this.moveMinute(this.date, dir * 4); newViewDate = this.moveMinute(this.viewDate, dir * 4); } if (this.dateWithinRange(newDate)){ this.date = newDate; this.viewDate = newViewDate; this.setValue(); this.update(); e.preventDefault(); dateChanged = true; } break; case 13: // enter if (this.viewMode != 0) { var oldViewMode = this.viewMode; this.showMode(-1); this.fill(); if (oldViewMode == this.viewMode && this.autoclose) { this.hide(); } } else { this.fill(); if (this.autoclose) { this.hide(); } } e.preventDefault(); break; case 9: // tab this.hide(); break; } if (dateChanged){ this.element.trigger({ type: 'changeDate', date: this.date }); var element; if (this.isInput) { element = this.element; } else if (this.component){ element = this.element.find('input'); } if (element) { element.change(); } } }, showMode: function(dir) { if (dir) { var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir)); if (newViewMode >= this.minView && newViewMode <= this.maxView) { this.viewMode = newViewMode; } } /* vitalets: fixing bug of very special conditions: jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover. Method show() does not set display css correctly and datetimepicker is not shown. Changed to .css('display', 'block') solve the problem. See https://github.com/vitalets/x-editable/issues/37 In jquery 1.7.2+ everything works fine. */ //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block'); this.updateNavArrows(); }, reset: function(e) { this._setDate(null, 'date'); } }; $.fn.datetimepicker = function ( option ) { var args = Array.apply(null, arguments); args.shift(); return this.each(function () { var $this = $(this), data = $this.data('datetimepicker'), options = typeof option == 'object' && option; if (!data) { $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults,options)))); } if (typeof option == 'string' && typeof data[option] == 'function') { data[option].apply(data, args); } }); }; $.fn.datetimepicker.defaults = { }; $.fn.datetimepicker.Constructor = Datetimepicker; var dates = $.fn.datetimepicker.dates = { en: { days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], meridiem: ["am", "pm"], suffix: ["st", "nd", "rd", "th"], today: "Today" } }; var DPGlobal = { modes: [ { clsName: 'minutes', navFnc: 'Hours', navStep: 1 }, { clsName: 'hours', navFnc: 'Date', navStep: 1 }, { clsName: 'days', navFnc: 'Month', navStep: 1 }, { clsName: 'months', navFnc: 'FullYear', navStep: 1 }, { clsName: 'years', navFnc: 'FullYear', navStep: 10 }], isLeapYear: function (year) { return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) }, getDaysInMonth: function (year, month) { return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] }, getDefaultFormat: function (type, field) { if (type == "standard") { if (field == 'input') return 'yyyy-mm-dd hh:ii'; else return 'yyyy-mm-dd hh:ii:ss'; } else if (type == "php") { if (field == 'input') return 'Y-m-d H:i'; else return 'Y-m-d H:i:s'; } else { throw new Error("Invalid format type."); } }, validParts: function (type) { if (type == "standard") { return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g; } else if (type == "php") { return /[dDjlNwzFmMnStyYaABgGhHis]/g; } else { throw new Error("Invalid format type."); } }, nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, parseFormat: function(format, type){ // IE treats \0 as a string end in inputs (truncating the value), // so it's a bad format delimiter, anyway var separators = format.replace(this.validParts(type), '\0').split('\0'), parts = format.match(this.validParts(type)); if (!separators || !separators.length || !parts || parts.length == 0){ throw new Error("Invalid date format."); } return {separators: separators, parts: parts}; }, parseDate: function(date, format, language, type) { if (date instanceof Date) { var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000); dateUTC.setMilliseconds(0); return dateUTC; } if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) { format = this.parseFormat('yyyy-mm-dd', type); } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) { format = this.parseFormat('yyyy-mm-dd hh:ii', type); } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) { format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type); } if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) { var part_re = /([-+]\d+)([dmwy])/, parts = date.match(/([-+]\d+)([dmwy])/g), part, dir; date = new Date(); for (var i=0; i 6 N: (date.getUTCDay()==0?7:date.getUTCDay()), // 1 -> 7 S: (date.getUTCDate()%10<=dates[language].suffix.length?dates[language].suffix[date.getUTCDate()%10-1]:''), // hour a: (dates[language].meridiem.length==2?dates[language].meridiem[date.getUTCHours()<12?0:1]:''), g: (date.getUTCHours()%12==0?12:date.getUTCHours()%12), G: date.getUTCHours(), // minute i: date.getUTCMinutes(), // second s: date.getUTCSeconds() }; val.m = (val.n < 10 ? '0' : '') + val.n; val.d = (val.j < 10 ? '0' : '') + val.j; val.A = val.a.toString().toUpperCase(); val.h = (val.g < 10 ? '0' : '') + val.g; val.H = (val.G < 10 ? '0' : '') + val.G; val.i = (val.i < 10 ? '0' : '') + val.i; val.s = (val.s < 10 ? '0' : '') + val.s; } else { throw new Error("Invalid format type."); } var date = [], seps = $.extend([], format.separators); for (var i=0, cnt = format.parts.length; i < cnt; i++) { if (seps.length) date.push(seps.shift()) date.push(val[format.parts[i]]); } return date.join(''); }, convertViewMode: function(viewMode){ switch (viewMode) { case 4: case 'decade': viewMode = 4; break; case 3: case 'year': viewMode = 3; break; case 2: case 'month': viewMode = 2; break; case 1: case 'day': viewMode = 1; break; case 0: case 'hour': viewMode = 0; break; } return viewMode; }, headTemplate: ''+ ''+ ''+ ''+ ''+ ''+ '', contTemplate: '', footTemplate: '' }; DPGlobal.template = '
        '+ '
        '+ ''+ DPGlobal.headTemplate+ DPGlobal.contTemplate+ DPGlobal.footTemplate+ '
        '+ '
        '+ '
        '+ ''+ DPGlobal.headTemplate+ DPGlobal.contTemplate+ DPGlobal.footTemplate+ '
        '+ '
        '+ '
        '+ ''+ DPGlobal.headTemplate+ ''+ DPGlobal.footTemplate+ '
        '+ '
        '+ '
        '+ ''+ DPGlobal.headTemplate+ DPGlobal.contTemplate+ DPGlobal.footTemplate+ '
        '+ '
        '+ '
        '+ ''+ DPGlobal.headTemplate+ DPGlobal.contTemplate+ DPGlobal.footTemplate+ '
        '+ '
        '+ '
        '; $.fn.datetimepicker.DPGlobal = DPGlobal; }( window.jQuery ); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.bg.js ================================================ /** * Bulgarian translation for bootstrap-datetimepicker * Apostol Apostolov */ ;(function($){ $.fn.datetimepicker.dates['bg'] = { days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], today: "днес", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ca.js ================================================ /** * Catalan translation for bootstrap-datetimepicker * J. Garcia */ ;(function($){ $.fn.datetimepicker.dates['ca'] = { days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], today: "Avui", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.cs.js ================================================ /** * Czech translation for bootstrap-datetimepicker * Matěj Koubík * Fixes by Michal Remiš */ ;(function($){ $.fn.datetimepicker.dates['cs'] = { days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], today: "Dnes", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.da.js ================================================ /** * Danish translation for bootstrap-datetimepicker * Christian Pedersen */ ;(function($){ $.fn.datetimepicker.dates['da'] = { days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], today: "I Dag", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.de.js ================================================ /** * German translation for bootstrap-datetimepicker * Sam Zurcher */ ;(function($){ $.fn.datetimepicker.dates['de'] = { days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], today: "Heute", suffix: [], meridiem: [], weekStart: 1, format: "dd.mm.yyyy" }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.el.js ================================================ /** * Greek translation for bootstrap-datetimepicker */ ;(function($){ $.fn.datetimepicker.dates['el'] = { days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], today: "Σήμερα", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.es.js ================================================ /** * Spanish translation for bootstrap-datetimepicker * Bruno Bonamin */ ;(function($){ $.fn.datetimepicker.dates['es'] = { days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], today: "Hoy", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fi.js ================================================ /** * Finnish translation for bootstrap-datetimepicker * Jaakko Salonen */ ;(function($){ $.fn.datetimepicker.dates['fi'] = { days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], today: "tänään", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fr.js ================================================ /** * French translation for bootstrap-datetimepicker * Nico Mollet */ ;(function($){ $.fn.datetimepicker.dates['fr'] = { days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"], today: "Aujourd'hui", suffix: [], meridiem: ["am", "pm"], weekStart: 1, format: "dd/mm/yyyy" }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.he.js ================================================ /** * Hebrew translation for bootstrap-datetimepicker * Sagie Maoz */ ;(function($){ $.fn.datetimepicker.dates['he'] = { days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], today: "היום", suffix: [], meridiem: [], rtl: true }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.hr.js ================================================ /** * Croatian localisation */ ;(function($){ $.fn.datetimepicker.dates['hr'] = { days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"], daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"], daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"], today: "Danas", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.hu.js ================================================ /** * Hungarian translation for bootstrap-datetimepicker * darevish */ ;(function($){ $.fn.datetimepicker.dates['hu'] = { days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo", "V"], months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], today: "Ma", suffix: [], meridiem: [], weekStart: 1 }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.id.js ================================================ /** * Bahasa translation for bootstrap-datetimepicker * Azwar Akbar */ ;(function($){ $.fn.datetimepicker.dates['id'] = { days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.is.js ================================================ /** * Icelandic translation for bootstrap-datetimepicker * Hinrik Örn Sigurðsson */ ;(function($){ $.fn.datetimepicker.dates['is'] = { days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], today: "Í Dag", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.it.js ================================================ /** * Italian translation for bootstrap-datetimepicker * Enrico Rubboli */ ;(function($){ $.fn.datetimepicker.dates['it'] = { days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"], daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], today: "Oggi", suffix: [], meridiem: [], weekStart: 1, format: "dd.mm.yyyy" }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ja.js ================================================ /** * Japanese translation for bootstrap-datetimepicker * Norio Suzuki */ ;(function($){ $.fn.datetimepicker.dates['ja'] = { days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.kr.js ================================================ /** * Korean translation for bootstrap-datetimepicker * Gu Youn */ ;(function($){ $.fn.datetimepicker.dates['kr'] = { days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lt.js ================================================ /** * Lithuanian translation for bootstrap-datetimepicker * Šarūnas Gliebus */ ;(function($){ $.fn.datetimepicker.dates['lt'] = { days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], today: "Šiandien", suffix: [], meridiem: [], weekStart: 1 }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lv.js ================================================ /** * Latvian translation for bootstrap-datetimepicker * Artis Avotins */ ;(function($){ $.fn.datetimepicker.dates['lv'] = { days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"], months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."], today: "Šodien", suffix: [], meridiem: [], weekStart: 1 }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ms.js ================================================ /** * Malay translation for bootstrap-datetimepicker * Ateman Faiz */ ;(function($){ $.fn.datetimepicker.dates['ms'] = { days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], today: "Hari Ini", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.nb.js ================================================ /** * Norwegian (bokmål) translation for bootstrap-datetimepicker * Fredrik Sundmyhr */ ;(function($){ $.fn.datetimepicker.dates['nb'] = { days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], today: "I Dag", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.nl.js ================================================ /** * Dutch translation for bootstrap-datetimepicker * Reinier Goltstein */ ;(function($){ $.fn.datetimepicker.dates['nl'] = { days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], today: "Vandaag", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pl.js ================================================ /** * Polish translation for bootstrap-datetimepicker * Robert */ ;(function($){ $.fn.datetimepicker.dates['pl'] = { days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], today: "Dzisiaj", suffix: [], meridiem: [], weekStart: 1 }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pt-BR.js ================================================ /** * Brazilian translation for bootstrap-datetimepicker * Cauan Cabral */ ;(function($){ $.fn.datetimepicker.dates['pt-BR'] = { days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], today: "Hoje", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pt.js ================================================ /** * Portuguese translation for bootstrap-datetimepicker * Original code: Cauan Cabral * Tiago Melo */ ;(function($){ $.fn.datetimepicker.dates['pt'] = { days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ro.js ================================================ /** * Romanian translation for bootstrap-datetimepicker * Cristian Vasile */ ;(function($){ $.fn.datetimepicker.dates['ro'] = { days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], today: "Astăzi", suffix: [], meridiem: [], weekStart: 1 }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.rs-latin.js ================================================ /** * Serbian latin translation for bootstrap-datetimepicker * Bojan Milosavlević */ ;(function($){ $.fn.datetimepicker.dates['rs'] = { days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], today: "Danas", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.rs.js ================================================ /** * Serbian cyrillic translation for bootstrap-datetimepicker * Bojan Milosavlević */ ;(function($){ $.fn.datetimepicker.dates['rs'] = { days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], today: "Данас", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ru.js ================================================ /** * Russian translation for bootstrap-datetimepicker * Victor Taranenko */ ;(function($){ $.fn.datetimepicker.dates['ru'] = { days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], today: "Сегодня", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sk.js ================================================ /** * Slovak translation for bootstrap-datetimepicker * Marek Lichtner * Fixes by Michal Remiš */ ;(function($){ $.fn.datetimepicker.dates["sk"] = { days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], today: "Dnes", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sl.js ================================================ /** * Slovene translation for bootstrap-datetimepicker * Gregor Rudolf */ ;(function($){ $.fn.datetimepicker.dates['sl'] = { days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], today: "Danes", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sv.js ================================================ /** * Swedish translation for bootstrap-datetimepicker * Patrik Ragnarsson */ ;(function($){ $.fn.datetimepicker.dates['sv'] = { days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], today: "I Dag", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sw.js ================================================ /** * Swahili translation for bootstrap-datetimepicker * Edwin Mugendi * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku */ ;(function($){ $.fn.datetimepicker.dates['sw'] = { days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], today: "Leo", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.th.js ================================================ /** * Thai translation for bootstrap-datetimepicker * Suchau Jiraprapot */ ;(function($){ $.fn.datetimepicker.dates['th'] = { days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], today: "วันนี้", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.tr.js ================================================ /** * Turkish translation for bootstrap-datetimepicker * Serkan Algur */ ;(function($){ $.fn.datetimepicker.dates['tr'] = { days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], today: "Bugün", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.uk.js ================================================ /** * Ukrainian translation for bootstrap-datetimepicker * Andrey Vityuk */ ;(function($){ $.fn.datetimepicker.dates['uk'] = { days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"], daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], today: "Сьогодні", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js ================================================ /** * Simplified Chinese translation for bootstrap-datetimepicker * Yuan Cheung */ ;(function($){ $.fn.datetimepicker.dates['zh-CN'] = { days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], today: "今日", suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-TW.js ================================================ /** * Traditional Chinese translation for bootstrap-datetimepicker * Rung-Sheng Jang */ ;(function($){ $.fn.datetimepicker.dates['zh-TW'] = { days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], suffix: [], meridiem: [] }; }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/.bowerrc ================================================ { "directory" : "spec/js/libs/" } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/.gitignore ================================================ *.swp _site node_modules _SpecRunner.html spec/js/libs ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/.travis.yml ================================================ language: node_js node_js: - "0.8" ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/LICENSE ================================================ The MIT license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/README.md ================================================ Timepicker for Twitter Bootstrap 2.x [![Build Status](https://secure.travis-ci.org/jdewit/bootstrap-timepicker.png)](http://travis-ci.org/jdewit/bootstrap-timepicker) ------------------------------------ A simple timepicker component for Twitter Bootstrap. Demos & Documentation ===================== View demos & documentation. Support ======= If you make money using this timepicker, please consider supporting its development. Click here to support bootstrap-timepicker! Contributing ============ 1. Install NodeJS and Node Package Manager. 2. Install packages ``` bash npm install ``` 3. Use Bower to get the dev dependencies. ``` bash $ bower install ``` 4. Use Grunt to run tests, compress assets, etc. ``` bash $ grunt test // run jshint and jasmine tests $ grunt watch // run jsHint and Jasmine tests whenever a file is changed $ grunt compile // minify the js and css files ``` - Please make it easy on me by covering any new features or issues with Jasmine tests. - If your changes need documentation, please take the time to update the docs. Acknowledgements ================ Thanks to everyone who have given feedback and submitted pull requests. A list of all the contributors can be found here. Special thanks to @eternicode and his Twitter Datepicker for inspiration. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/css/bootstrap-timepicker.css ================================================ /*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ .bootstrap-timepicker { position: relative; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu { left: auto; right: 0; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before { left: auto; right: 12px; } .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after { left: auto; right: 13px; } .bootstrap-timepicker .add-on { cursor: pointer; } .bootstrap-timepicker .add-on i { display: inline-block; width: 16px; height: 16px; } .bootstrap-timepicker-widget.dropdown-menu { padding: 2px 3px 2px 2px; } .bootstrap-timepicker-widget.dropdown-menu.open { display: inline-block; } .bootstrap-timepicker-widget.dropdown-menu:before { border-bottom: 7px solid rgba(0, 0, 0, 0.2); border-left: 7px solid transparent; border-right: 7px solid transparent; content: ""; display: inline-block; left: 9px; position: absolute; top: -7px; } .bootstrap-timepicker-widget.dropdown-menu:after { border-bottom: 6px solid #FFFFFF; border-left: 6px solid transparent; border-right: 6px solid transparent; content: ""; display: inline-block; left: 10px; position: absolute; top: -6px; } .bootstrap-timepicker-widget a.btn, .bootstrap-timepicker-widget input { border-radius: 4px; } .bootstrap-timepicker-widget table { width: 100%; margin: 0; } .bootstrap-timepicker-widget table td { text-align: center; height: 30px; margin: 0; padding: 2px; } .bootstrap-timepicker-widget table td:not(.separator) { min-width: 30px; } .bootstrap-timepicker-widget table td span { width: 100%; } .bootstrap-timepicker-widget table td a { border: 1px transparent solid; width: 100%; display: inline-block; margin: 0; padding: 8px 0; outline: 0; color: #333; } .bootstrap-timepicker-widget table td a:hover { text-decoration: none; background-color: #eee; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border-color: #ddd; } .bootstrap-timepicker-widget table td a i { margin-top: 2px; } .bootstrap-timepicker-widget table td input { width: 25px; margin: 0; text-align: center; } .bootstrap-timepicker-widget .modal-content { padding: 4px; } @media (min-width: 767px) { .bootstrap-timepicker-widget.modal { width: 200px; margin-left: -100px; } } @media (max-width: 767px) { .bootstrap-timepicker { width: 100%; } .bootstrap-timepicker .dropdown-menu { width: 100%; } } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/js/bootstrap-timepicker.js ================================================ /*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ (function($, window, document, undefined) { 'use strict'; // TIMEPICKER PUBLIC CLASS DEFINITION var Timepicker = function(element, options) { this.widget = ''; this.$element = $(element); this.defaultTime = options.defaultTime; this.disableFocus = options.disableFocus; this.isOpen = options.isOpen; this.minuteStep = options.minuteStep; this.modalBackdrop = options.modalBackdrop; this.secondStep = options.secondStep; this.showInputs = options.showInputs; this.showMeridian = options.showMeridian; this.showSeconds = options.showSeconds; this.template = options.template; this.appendWidgetTo = options.appendWidgetTo; this._init(); }; Timepicker.prototype = { constructor: Timepicker, _init: function() { var self = this; if (this.$element.parent().hasClass('input-append') || this.$element.parent().hasClass('input-prepend')) { this.$element.parent('.input-append, .input-prepend').find('.add-on').on({ 'click.timepicker': $.proxy(this.showWidget, this) }); this.$element.on({ 'focus.timepicker': $.proxy(this.highlightUnit, this), 'click.timepicker': $.proxy(this.highlightUnit, this), 'keydown.timepicker': $.proxy(this.elementKeydown, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } else { if (this.template) { this.$element.on({ 'focus.timepicker': $.proxy(this.showWidget, this), 'click.timepicker': $.proxy(this.showWidget, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } else { this.$element.on({ 'focus.timepicker': $.proxy(this.highlightUnit, this), 'click.timepicker': $.proxy(this.highlightUnit, this), 'keydown.timepicker': $.proxy(this.elementKeydown, this), 'blur.timepicker': $.proxy(this.blurElement, this) }); } } if (this.template !== false) { this.$widget = $(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on('click', $.proxy(this.widgetClick, this)); } else { this.$widget = false; } if (this.showInputs && this.$widget !== false) { this.$widget.find('input').each(function() { $(this).on({ 'click.timepicker': function() { $(this).select(); }, 'keydown.timepicker': $.proxy(self.widgetKeydown, self) }); }); } this.setDefaultTime(this.defaultTime); }, blurElement: function() { this.highlightedUnit = undefined; this.updateFromElementVal(); }, decrementHour: function() { if (this.showMeridian) { if (this.hour === 1) { this.hour = 12; } else if (this.hour === 12) { this.hour--; return this.toggleMeridian(); } else if (this.hour === 0) { this.hour = 11; return this.toggleMeridian(); } else { this.hour--; } } else { if (this.hour === 0) { this.hour = 23; } else { this.hour--; } } this.update(); }, decrementMinute: function(step) { var newVal; if (step) { newVal = this.minute - step; } else { newVal = this.minute - this.minuteStep; } if (newVal < 0) { this.decrementHour(); this.minute = newVal + 60; } else { this.minute = newVal; } this.update(); }, decrementSecond: function() { var newVal = this.second - this.secondStep; if (newVal < 0) { this.decrementMinute(true); this.second = newVal + 60; } else { this.second = newVal; } this.update(); }, elementKeydown: function(e) { switch (e.keyCode) { case 9: //tab this.updateFromElementVal(); switch (this.highlightedUnit) { case 'hour': e.preventDefault(); this.highlightNextUnit(); break; case 'minute': if (this.showMeridian || this.showSeconds) { e.preventDefault(); this.highlightNextUnit(); } break; case 'second': if (this.showMeridian) { e.preventDefault(); this.highlightNextUnit(); } break; } break; case 27: // escape this.updateFromElementVal(); break; case 37: // left arrow e.preventDefault(); this.highlightPrevUnit(); this.updateFromElementVal(); break; case 38: // up arrow e.preventDefault(); switch (this.highlightedUnit) { case 'hour': this.incrementHour(); this.highlightHour(); break; case 'minute': this.incrementMinute(); this.highlightMinute(); break; case 'second': this.incrementSecond(); this.highlightSecond(); break; case 'meridian': this.toggleMeridian(); this.highlightMeridian(); break; } break; case 39: // right arrow e.preventDefault(); this.updateFromElementVal(); this.highlightNextUnit(); break; case 40: // down arrow e.preventDefault(); switch (this.highlightedUnit) { case 'hour': this.decrementHour(); this.highlightHour(); break; case 'minute': this.decrementMinute(); this.highlightMinute(); break; case 'second': this.decrementSecond(); this.highlightSecond(); break; case 'meridian': this.toggleMeridian(); this.highlightMeridian(); break; } break; } }, formatTime: function(hour, minute, second, meridian) { hour = hour < 10 ? '0' + hour : hour; minute = minute < 10 ? '0' + minute : minute; second = second < 10 ? '0' + second : second; return hour + ':' + minute + (this.showSeconds ? ':' + second : '') + (this.showMeridian ? ' ' + meridian : ''); }, getCursorPosition: function() { var input = this.$element.get(0); if ('selectionStart' in input) {// Standard-compliant browsers return input.selectionStart; } else if (document.selection) {// IE fix input.focus(); var sel = document.selection.createRange(), selLen = document.selection.createRange().text.length; sel.moveStart('character', - input.value.length); return sel.text.length - selLen; } }, getTemplate: function() { var template, hourTemplate, minuteTemplate, secondTemplate, meridianTemplate, templateContent; if (this.showInputs) { hourTemplate = ''; minuteTemplate = ''; secondTemplate = ''; meridianTemplate = ''; } else { hourTemplate = ''; minuteTemplate = ''; secondTemplate = ''; meridianTemplate = ''; } templateContent = ''+ ''+ ''+ ''+ ''+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ ''+ ' '+ ''+ ' '+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ ''+ ''+ ''+ ''+ (this.showSeconds ? ''+ '' : '') + (this.showMeridian ? ''+ '' : '') + ''+ '
           
        '+ hourTemplate +':'+ minuteTemplate +':'+ secondTemplate +' '+ meridianTemplate +'
          
        '; switch(this.template) { case 'modal': template = ''; break; case 'dropdown': template = ''; break; } return template; }, getTime: function() { return this.formatTime(this.hour, this.minute, this.second, this.meridian); }, hideWidget: function() { if (this.isOpen === false) { return; } if (this.showInputs) { this.updateFromWidgetInputs(); } this.$element.trigger({ 'type': 'hide.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); if (this.template === 'modal' && this.$widget.modal) { this.$widget.modal('hide'); } else { this.$widget.removeClass('open'); } $(document).off('mousedown.timepicker'); this.isOpen = false; }, highlightUnit: function() { this.position = this.getCursorPosition(); if (this.position >= 0 && this.position <= 2) { this.highlightHour(); } else if (this.position >= 3 && this.position <= 5) { this.highlightMinute(); } else if (this.position >= 6 && this.position <= 8) { if (this.showSeconds) { this.highlightSecond(); } else { this.highlightMeridian(); } } else if (this.position >= 9 && this.position <= 11) { this.highlightMeridian(); } }, highlightNextUnit: function() { switch (this.highlightedUnit) { case 'hour': this.highlightMinute(); break; case 'minute': if (this.showSeconds) { this.highlightSecond(); } else if (this.showMeridian){ this.highlightMeridian(); } else { this.highlightHour(); } break; case 'second': if (this.showMeridian) { this.highlightMeridian(); } else { this.highlightHour(); } break; case 'meridian': this.highlightHour(); break; } }, highlightPrevUnit: function() { switch (this.highlightedUnit) { case 'hour': this.highlightMeridian(); break; case 'minute': this.highlightHour(); break; case 'second': this.highlightMinute(); break; case 'meridian': if (this.showSeconds) { this.highlightSecond(); } else { this.highlightMinute(); } break; } }, highlightHour: function() { var $element = this.$element.get(0); this.highlightedUnit = 'hour'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(0,2); }, 0); } }, highlightMinute: function() { var $element = this.$element.get(0); this.highlightedUnit = 'minute'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(3,5); }, 0); } }, highlightSecond: function() { var $element = this.$element.get(0); this.highlightedUnit = 'second'; if ($element.setSelectionRange) { setTimeout(function() { $element.setSelectionRange(6,8); }, 0); } }, highlightMeridian: function() { var $element = this.$element.get(0); this.highlightedUnit = 'meridian'; if ($element.setSelectionRange) { if (this.showSeconds) { setTimeout(function() { $element.setSelectionRange(9,11); }, 0); } else { setTimeout(function() { $element.setSelectionRange(6,8); }, 0); } } }, incrementHour: function() { if (this.showMeridian) { if (this.hour === 11) { this.hour++; return this.toggleMeridian(); } else if (this.hour === 12) { this.hour = 0; } } if (this.hour === 23) { this.hour = 0; return; } this.hour++; this.update(); }, incrementMinute: function(step) { var newVal; if (step) { newVal = this.minute + step; } else { newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep); } if (newVal > 59) { this.incrementHour(); this.minute = newVal - 60; } else { this.minute = newVal; } this.update(); }, incrementSecond: function() { var newVal = this.second + this.secondStep - (this.second % this.secondStep); if (newVal > 59) { this.incrementMinute(true); this.second = newVal - 60; } else { this.second = newVal; } this.update(); }, remove: function() { $('document').off('.timepicker'); if (this.$widget) { this.$widget.remove(); } delete this.$element.data().timepicker; }, setDefaultTime: function(defaultTime){ if (!this.$element.val()) { if (defaultTime === 'current') { var dTime = new Date(), hours = dTime.getHours(), minutes = Math.floor(dTime.getMinutes() / this.minuteStep) * this.minuteStep, seconds = Math.floor(dTime.getSeconds() / this.secondStep) * this.secondStep, meridian = 'AM'; if (this.showMeridian) { if (hours === 0) { hours = 12; } else if (hours >= 12) { if (hours > 12) { hours = hours - 12; } meridian = 'PM'; } else { meridian = 'AM'; } } this.hour = hours; this.minute = minutes; this.second = seconds; this.meridian = meridian; this.update(); } else if (defaultTime === false) { this.hour = 0; this.minute = 0; this.second = 0; this.meridian = 'AM'; } else { this.setTime(defaultTime); } } else { this.updateFromElementVal(); } }, setTime: function(time) { var arr, timeArray; if (this.showMeridian) { arr = time.split(' '); timeArray = arr[0].split(':'); this.meridian = arr[1]; } else { timeArray = time.split(':'); } this.hour = parseInt(timeArray[0], 10); this.minute = parseInt(timeArray[1], 10); this.second = parseInt(timeArray[2], 10); if (isNaN(this.hour)) { this.hour = 0; } if (isNaN(this.minute)) { this.minute = 0; } if (this.showMeridian) { if (this.hour > 12) { this.hour = 12; } else if (this.hour < 1) { this.hour = 12; } if (this.meridian === 'am' || this.meridian === 'a') { this.meridian = 'AM'; } else if (this.meridian === 'pm' || this.meridian === 'p') { this.meridian = 'PM'; } if (this.meridian !== 'AM' && this.meridian !== 'PM') { this.meridian = 'AM'; } } else { if (this.hour >= 24) { this.hour = 23; } else if (this.hour < 0) { this.hour = 0; } } if (this.minute < 0) { this.minute = 0; } else if (this.minute >= 60) { this.minute = 59; } if (this.showSeconds) { if (isNaN(this.second)) { this.second = 0; } else if (this.second < 0) { this.second = 0; } else if (this.second >= 60) { this.second = 59; } } this.update(); }, showWidget: function() { if (this.isOpen) { return; } if (this.$element.is(':disabled')) { return; } var self = this; $(document).on('mousedown.timepicker', function (e) { // Clicked outside the timepicker, hide it if ($(e.target).closest('.bootstrap-timepicker-widget').length === 0) { self.hideWidget(); } }); this.$element.trigger({ 'type': 'show.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); if (this.disableFocus) { this.$element.blur(); } this.updateFromElementVal(); if (this.template === 'modal' && this.$widget.modal) { this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this)); } else { if (this.isOpen === false) { this.$widget.addClass('open'); } } this.isOpen = true; }, toggleMeridian: function() { this.meridian = this.meridian === 'AM' ? 'PM' : 'AM'; this.update(); }, update: function() { this.$element.trigger({ 'type': 'changeTime.timepicker', 'time': { 'value': this.getTime(), 'hours': this.hour, 'minutes': this.minute, 'seconds': this.second, 'meridian': this.meridian } }); this.updateElement(); this.updateWidget(); }, updateElement: function() { this.$element.val(this.getTime()).change(); }, updateFromElementVal: function() { var val = this.$element.val(); if (val) { this.setTime(val); } }, updateWidget: function() { if (this.$widget === false) { return; } var hour = this.hour < 10 ? '0' + this.hour : this.hour, minute = this.minute < 10 ? '0' + this.minute : this.minute, second = this.second < 10 ? '0' + this.second : this.second; if (this.showInputs) { this.$widget.find('input.bootstrap-timepicker-hour').val(hour); this.$widget.find('input.bootstrap-timepicker-minute').val(minute); if (this.showSeconds) { this.$widget.find('input.bootstrap-timepicker-second').val(second); } if (this.showMeridian) { this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian); } } else { this.$widget.find('span.bootstrap-timepicker-hour').text(hour); this.$widget.find('span.bootstrap-timepicker-minute').text(minute); if (this.showSeconds) { this.$widget.find('span.bootstrap-timepicker-second').text(second); } if (this.showMeridian) { this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian); } } }, updateFromWidgetInputs: function() { if (this.$widget === false) { return; } var time = $('input.bootstrap-timepicker-hour', this.$widget).val() + ':' + $('input.bootstrap-timepicker-minute', this.$widget).val() + (this.showSeconds ? ':' + $('input.bootstrap-timepicker-second', this.$widget).val() : '') + (this.showMeridian ? ' ' + $('input.bootstrap-timepicker-meridian', this.$widget).val() : ''); this.setTime(time); }, widgetClick: function(e) { e.stopPropagation(); e.preventDefault(); var action = $(e.target).closest('a').data('action'); if (action) { this[action](); } }, widgetKeydown: function(e) { var $input = $(e.target).closest('input'), name = $input.attr('name'); switch (e.keyCode) { case 9: //tab if (this.showMeridian) { if (name === 'meridian') { return this.hideWidget(); } } else { if (this.showSeconds) { if (name === 'second') { return this.hideWidget(); } } else { if (name === 'minute') { return this.hideWidget(); } } } this.updateFromWidgetInputs(); break; case 27: // escape this.hideWidget(); break; case 38: // up arrow e.preventDefault(); switch (name) { case 'hour': this.incrementHour(); break; case 'minute': this.incrementMinute(); break; case 'second': this.incrementSecond(); break; case 'meridian': this.toggleMeridian(); break; } break; case 40: // down arrow e.preventDefault(); switch (name) { case 'hour': this.decrementHour(); break; case 'minute': this.decrementMinute(); break; case 'second': this.decrementSecond(); break; case 'meridian': this.toggleMeridian(); break; } break; } } }; //TIMEPICKER PLUGIN DEFINITION $.fn.timepicker = function(option) { var args = Array.apply(null, arguments); args.shift(); return this.each(function() { var $this = $(this), data = $this.data('timepicker'), options = typeof option === 'object' && option; if (!data) { $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data())))); } if (typeof option === 'string') { data[option].apply(data, args); } }); }; $.fn.timepicker.defaults = { defaultTime: 'current', disableFocus: false, isOpen: false, minuteStep: 15, modalBackdrop: false, secondStep: 15, showSeconds: false, showInputs: true, showMeridian: true, template: 'dropdown', appendWidgetTo: '.bootstrap-timepicker' }; $.fn.timepicker.Constructor = Timepicker; })(jQuery, window, document); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/less/timepicker.less ================================================ /*! * Timepicker Component for Twitter Bootstrap * * Copyright 2013 Joris de Wit * * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ .bootstrap-timepicker { position: relative; &.pull-right { .bootstrap-timepicker-widget { &.dropdown-menu { left: auto; right: 0; &:before { left: auto; right: 12px; } &:after { left: auto; right: 13px; } } } } .add-on { cursor: pointer; i { display: inline-block; width: 16px; height: 16px; } } } .bootstrap-timepicker-widget { &.dropdown-menu { padding: 2px 3px 2px 2px; &.open { display: inline-block; } &:before { border-bottom: 7px solid rgba(0, 0, 0, 0.2); border-left: 7px solid transparent; border-right: 7px solid transparent; content: ""; display: inline-block; left: 9px; position: absolute; top: -7px; } &:after { border-bottom: 6px solid #FFFFFF; border-left: 6px solid transparent; border-right: 6px solid transparent; content: ""; display: inline-block; left: 10px; position: absolute; top: -6px; } } a.btn, input { border-radius: 4px; } table { width: 100%; margin: 0; td { text-align: center; height: 30px; margin: 0; padding: 2px; &:not(.separator) { min-width: 30px; } span { width: 100%; } a { border: 1px transparent solid; width: 100%; display: inline-block; margin: 0; padding: 8px 0; outline: 0; color: #333; &:hover { text-decoration: none; background-color: #eee; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border-color: #ddd; } i { margin-top: 2px; } } input { width: 25px; margin: 0; text-align: center; } } } } .bootstrap-timepicker-widget .modal-content { padding: 4px; } @media (min-width: 767px) { .bootstrap-timepicker-widget.modal { width: 200px; margin-left: -100px; } } @media (max-width: 767px) { .bootstrap-timepicker { width: 100%; .dropdown-menu { width: 100%; } } } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/KeyboardEventsSpec.js ================================================ describe('Keyboard events feature', function() { 'use strict'; var $input1, $input2, $input3, $timepicker1, $timepicker2, $timepicker3, tp1, tp2, tp3; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ defaultTime: '23:15:20', showMeridian: false, showSeconds: true, template: false }); tp3 = $timepicker3.data('timepicker'); }); afterEach(function () { $input1.data('timepicker').remove(); $input2.data('timepicker').remove(); $input3.data('timepicker').remove(); $input1.remove(); $input2.remove(); $input3.remove(); }); it('should be able to control element by the arrow keys', function() { tp1.setTime('11:30 AM'); tp1.update(); $input1.trigger('focus'); if (tp1.highlightedUnit !== 'hour') { tp1.highlightHour(); } expect(tp1.highlightedUnit).toBe('hour', 'hour should be highlighted by default'); // hours $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('12:30 PM', '1'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '2'); expect(tp1.highlightedUnit).toBe('hour', 'hour should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 39 //right }); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted'); //minutes $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('11:45 AM', '3'); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted 1'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '4'); expect(tp1.highlightedUnit).toBe('minute', 'minute should be highlighted 2'); $input1.trigger({ 'type': 'keydown', 'keyCode': 39 //right }); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); //meridian $input1.trigger({ 'type': 'keydown', 'keyCode': 38 //up }); expect(tp1.getTime()).toBe('11:30 PM', '5'); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:30 AM', '6'); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('minute', 'minutes should be highlighted'); // minutes $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('11:15 AM', '7'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('hour', 'hours should be highlighted'); // hours $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('10:15 AM', '8'); $input1.trigger({ 'type': 'keydown', 'keyCode': 37 //left }); expect(tp1.highlightedUnit).toBe('meridian', 'meridian should be highlighted'); // meridian $input1.trigger({ 'type': 'keydown', 'keyCode': 40 //down }); expect(tp1.getTime()).toBe('10:15 PM', '9'); }); it('should be able to change time via widget inputs in a dropdown', function() { var $hourInput = tp1.$widget.find('input.bootstrap-timepicker-hour'), $minuteInput = tp1.$widget.find('input.bootstrap-timepicker-minute'), $meridianInput = tp1.$widget.find('input.bootstrap-timepicker-meridian'), eventCount = 0, time; tp1.setTime('9:30 AM'); tp1.update(); $input1.parents('div').find('.add-on').click(); $input1.timepicker().on('changeTime.timepicker', function(e) { eventCount++; time = e.time.value; }); expect(tp1.isOpen).toBe(true); $hourInput.trigger('focus'); $hourInput.autotype('{{back}}{{back}}11{{tab}}'); expect(tp1.hour).toBe(11); expect(eventCount).toBe(1, 'incorrect update events thrown'); expect(time).toBe('11:30 AM'); $minuteInput.autotype('{{back}}{{back}}45{{tab}}'); expect(tp1.minute).toBe(45); expect(eventCount).toBe(2, 'incorrect update events thrown'); expect(time).toBe('11:45 AM'); $meridianInput.autotype('{{back}}{{back}}pm{{tab}}'); expect(tp1.meridian).toBe('PM'); expect(eventCount).toBe(3, 'incorrect update events thrown'); expect(time).toBe('11:45 PM'); }); it('should still be empty if input is empty', function() { $input1.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{tab}}'); expect($input1.val()).toBe(''); }); it('should allow time to be changed via widget inputs in a modal', function() { //tp2.setTime('9:30 AM'); //tp2.update(); //$input2.parents('div').find('.add-on').click(); //var $hourInput = $('body').find('input.bootstrap-timepicker-hour'), //$minuteInput = $('body').find('input.bootstrap-timepicker-minute'), //$secondInput = $('body').find('input.bootstrap-timepicker-second'), //$meridianInput = $('body').find('input.bootstrap-timepicker-meridian'); //$hourInput.autotype('{{back}}{{back}}2'); //$hourInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:30:00 AM'); //$minuteInput.autotype('{{back}}{{back}}0'); //$minuteInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:00 AM'); //$secondInput.autotype('{{back}}{{back}}30'); //$secondInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:30 AM'); //$meridianInput.autotype('{{back}}{{back}}p'); //$meridianInput.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp2.getTime()).toBe('02:00:30 PM'); }); it('should be 12:00 AM if 00:00 AM is entered', function() { //$input1.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}0:0 AM'); //$input1.trigger({ //'type': 'keydown', //'keyCode': 9 //tab //}); //expect(tp1.getTime()).toBe('12:00 AM'); }); it('should validate input', function() { //var $hourInput = tp1.$widget.find('input.bootstrap-timepicker-hour'), //$minuteInput = tp1.$widget.find('input.bootstrap-timepicker-minute'), //$meridianInput = tp1.$widget.find('input.bootstrap-timepicker-meridian'), //$input3 = tp3.$element; //tp1.setTime('11:30 AM'); //tp1.update(); //$hourInput.autotype('{{back}}{{back}}13'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:30 AM'); //$minuteInput.autotype('{{back}}{{back}}60'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 AM'); //$meridianInput.autotype('{{back}}{{back}}dk'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 AM'); //$meridianInput.autotype('{{back}}{{back}}p'); //tp1.updateFromWidgetInputs(); //expect(tp1.getTime()).toBe('12:59 PM'); //$input3.autotype('{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}{{back}}25:60:60'); //tp3.updateFromElementVal(); //expect(tp3.getTime()).toBe('23:59:59'); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/MouseEventsSpec.js ================================================ describe('Mouse events feature', function() { 'use strict'; var $input1, $input2, $input3, $input4, $timepicker1, $timepicker2, $timepicker3, $timepicker4, tp1, tp2, tp3, tp4; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ defaultTime: '23:15:20', showMeridian: false, showSeconds: true }); tp3 = $timepicker3.data('timepicker'); $input4 = $('#timepicker4'); $timepicker4 = $input4.timepicker({ minuteStep: 5, showInputs: false, showMeridian: true, template: 'modal', disableFocus: true }); tp4 = $timepicker4.data('timepicker'); }); afterEach(function () { $input1.data('timepicker').remove(); $input2.data('timepicker').remove(); $input3.data('timepicker').remove(); $input4.data('timepicker').remove(); $input1.remove(); $input2.remove(); $input3.remove(); $input4.remove(); }); it('should be shown and trigger show events on input click', function() { var showEvents = 0; $input1.on('show.timepicker', function() { showEvents++; }); $input1.parents('div').find('.add-on').trigger('click'); expect(tp1.isOpen).toBe(true); expect(showEvents).toBe(1); }); it('should be hidden and trigger hide events on click outside of widget', function() { var hideEvents = 0, time; $input1.val('11:30 AM'); $input1.on('hide.timepicker', function(e) { hideEvents++; time = e.time.value; }); $input1.parents('div').find('.add-on').trigger('click'); expect(tp1.isOpen).toBe(true); tp1.$widget.find('.bootstrap-timepicker-hour').trigger('mousedown'); $('body').trigger('mousedown'); expect(tp1.isOpen).toBe(false, 'widget is still open'); expect(hideEvents).toBe(1, 'hide event was not thrown once'); expect(time).toBe('11:30 AM'); }); it('should increment hour on button click', function() { tp1.setTime('11:30 AM'); tp1.update(); tp1.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(tp1.getTime()).toBe('12:30 PM'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(tp2.getTime()).toBe('01:00:00 AM'); }); it('should decrement hour on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp1.$widget.find('a[data-action="decrementHour"]').trigger('click'); expect(tp1.getTime()).toBe('11:30 AM', 'meridian isnt toggling'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); tp2.$widget.find('a[data-action="incrementHour"]').trigger('click'); tp2.$widget.find('a[data-action="decrementHour"]').trigger('click'); expect(tp2.getTime()).toBe('01:00:00 AM'); }); it('should increment minute on button click', function() { tp1.setTime('11:30 AM'); tp1.update(); tp4.setTime('11:30 AM'); tp4.update(); tp1.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(tp1.getTime()).toBe('11:45 AM'); tp2.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('00:30:00 AM'); $input4.trigger('click'); tp4.$widget.find('a[data-action="incrementMinute"]').trigger('click'); tp4.$widget.find('a[data-action="decrementHour"]').trigger('click'); $input4.closest('modal').find('.btn-primary').trigger('click'); expect(tp4.getTime()).toBe('10:35 AM'); expect($input4.val()).toBe('10:35 AM'); }); it('should decrement minute on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp4.setTime('11:30 AM'); tp4.update(); tp1.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp1.getTime()).toBe('12:15 PM'); tp4.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp4.getTime()).toBe('11:25 AM'); }); it('should be 11:30:00 PM if minute is decremented on empty input', function() { tp2.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:00 PM'); }); it('should increment second on button click', function() { tp2.setTime('11:30:15 AM'); tp2.update(); tp2.$widget.find('a[data-action="incrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:30 AM'); }); it('should decrement second on button click', function() { tp2.setTime('12:30:15 PM'); tp2.update(); }); it('should be 11:30:00 PM if minute is decremented on empty input', function() { tp2.$widget.find('a[data-action="decrementMinute"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:00 PM'); }); it('should increment second on button click', function() { tp2.setTime('11:30:15 AM'); tp2.update(); tp2.$widget.find('a[data-action="incrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('11:30:30 AM'); }); it('should decrement second on button click', function() { tp2.setTime('12:30:15 PM'); tp2.update(); tp2.$widget.find('a[data-action="decrementSecond"]').trigger('click'); expect(tp2.getTime()).toBe('12:29:45 PM'); }); it('should toggle meridian on button click', function() { tp1.setTime('12:30 PM'); tp1.update(); tp1.$widget.find('a[data-action="toggleMeridian"]').first().trigger('click'); expect(tp1.getTime()).toBe('12:30 AM'); tp1.$widget.find('a[data-action="toggleMeridian"]').last().trigger('click'); expect(tp1.getTime()).toBe('12:30 PM'); }); it('should trigger changeTime event if time is changed', function() { var eventCount = 0, time; $input1.timepicker().on('changeTime.timepicker', function(e) { eventCount++; time = e.time.value; }); tp1.setTime('11:30 AM'); expect(eventCount).toBe(1); expect(time).toBe('11:30 AM'); tp1.$widget.find('a[data-action="incrementHour"]').trigger('click'); expect(eventCount).toBe(2); expect(tp1.getTime()).toBe('12:30 PM'); expect(time).toBe('12:30 PM'); tp1.$widget.find('a[data-action="incrementMinute"]').trigger('click'); expect(eventCount).toBe(3); expect(tp1.getTime()).toBe('12:45 PM'); }); it('should highlight widget inputs on click', function() { //TODO; //tp1.setTime('11:55 AM'); //tp1.update(); //$input1.parents('.bootstrap-timepicker').find('.add-on').trigger('click'); //expect(tp1.isOpen).toBe(true); //expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).toBe('11'); //tp1.$widget.find('.bootstrap-timepicker-hour').trigger('click'); //var hour1 = window.getSelection().toString(); ////var range = window.getSelection().getRangeAt(0); ////var hour1 = range.extractContents(); //expect(hour1).toBe('11', 'hour input not being highlighted'); //tp1.$widget.find('.bootstrap-timepicker-minute').trigger('click'); //var minute1 = window.getSelection().toString(); //expect(minute1).toBe('55', 'minute input not being highlighted'); //tp1.$widget.find('.bootstrap-timepicker-meridian').trigger('click'); //var meridian1 = window.getSelection().toString(); //expect(meridian1).toBe('AM', 'meridian input not being highlighted'); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/TimepickerSpec.js ================================================ describe('Timepicker feature', function() { 'use strict'; var $input1, $input2, $input3, $timepicker1, $timepicker2, $timepicker3, tp1, tp2, tp3; beforeEach(function () { loadFixtures('timepicker.html'); $input1 = $('#timepicker1'); $timepicker1 = $input1.timepicker(); tp1 = $timepicker1.data('timepicker'); $input2 = $('#timepicker2'); $timepicker2 = $input2.timepicker({ template: 'modal', showSeconds: true, minuteStep: 30, secondStep: 30, defaultTime: false }); tp2 = $timepicker2.data('timepicker'); $input3 = $('#timepicker3'); $timepicker3 = $input3.timepicker({ showMeridian: false, showSeconds: true, defaultTime: '13:25:15' }); tp3 = $timepicker3.data('timepicker'); }); afterEach(function () { if ($input1.data('timepicker') !== undefined) { $input1.data('timepicker').remove(); } if ($input2.data('timepicker') !== undefined) { $input2.data('timepicker').remove(); } if ($input3.data('timepicker') !== undefined) { $input3.data('timepicker').remove(); } $input1.remove(); $input2.remove(); $input3.remove(); }); it('should be available on the jquery object', function() { expect($.fn.timepicker).toBeDefined(); }); it('should be chainable', function() { expect($timepicker1).toBe($input1); }); it('should have sensible defaults', function() { expect(tp1.defaultTime).toBeTruthy(); expect(tp1.minuteStep).toBe(15); expect(tp1.secondStep).toBe(15); expect(tp1.disableFocus).toBe(false); expect(tp1.showSeconds).toBe(false); expect(tp1.showInputs).toBe(true); expect(tp1.showMeridian).toBe(true); expect(tp1.template).toBe('dropdown'); expect(tp1.modalBackdrop).toBe(false); expect(tp1.modalBackdrop).toBe(false); expect(tp1.isOpen).toBe(false); }); it('should allow user to configure defaults', function() { expect(tp2.template).toBe('modal'); expect(tp2.minuteStep).toBe(30); }); it('should be configurable with data attributes', function() { $('body').append('
        12) { hour = hour - 12; } expect(tp1.hour).toBe(hour); expect(tp1.minute).toBe(minute); }); it('should not override time with current time if value is already set', function() { $('body').append('
        '); var $customInput = $('#timepickerCustomInput').timepicker(), tpCustom = $customInput.data('timepicker'); expect($customInput.val()).toBe('12:15 AM'); tpCustom.remove(); $('#timepickerCustom').remove(); }); it('should have no value if defaultTime is set to false', function() { expect($input2.val()).toBe(''); }); it('should be able to set default time with config option', function() { expect(tp3.getTime()).toBe('13:25:15'); }); it('should update the element and widget with the setTime method', function() { tp2.setTime('09:15:20 AM'); expect(tp2.hour).toBe(9); expect(tp2.minute).toBe(15); expect(tp2.second).toBe(20); expect(tp2.meridian).toBe('AM'); expect($input2.val()).toBe('09:15:20 AM'); expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).toBe('09'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).toBe('15'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).toBe('20'); expect(tp2.$widget.find('.bootstrap-timepicker-meridian').val()).toBe('AM'); }); it('should be able to format time values into a string', function() { expect(tp2.formatTime(3, 15, 45, 'PM')).toBe('03:15:45 PM'); }); it('should be able get & set the pickers time', function() { tp3.setTime('23:15:20'); expect(tp3.getTime()).toBe('23:15:20'); }); it('should update picker on blur', function() { $input1.val('10:25 AM'); expect(tp1.getTime()).not.toBe('10:25 AM'); $input1.trigger('blur'); expect(tp1.getTime()).toBe('10:25 AM'); }); it('should update element with updateElement method', function() { tp1.hour = 10; tp1.minute = 30; tp1.meridian = 'PM'; tp1.updateElement(); expect($input1.val()).toBe('10:30 PM'); }); it('should update widget with updateWidget method', function() { tp2.hour = 10; tp2.minute = 30; tp2.second = 15; expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).not.toBe('10'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).not.toBe('30'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).not.toBe('15'); tp2.updateWidget(); expect(tp2.$widget.find('.bootstrap-timepicker-hour').val()).toBe('10'); expect(tp2.$widget.find('.bootstrap-timepicker-minute').val()).toBe('30'); expect(tp2.$widget.find('.bootstrap-timepicker-second').val()).toBe('15'); }); it('should update picker with updateFromElementVal method', function() { tp1.hour = 12; tp1.minute = 12; tp1.meridian = 'PM'; tp1.update(); $input1.val('10:30 AM'); expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).not.toBe('10'); expect(tp1.$widget.find('.bootstrap-timepicker-minute').val()).not.toBe('30'); expect(tp1.$widget.find('.bootstrap-timepicker-meridian').val()).not.toBe('AM'); expect(tp1.hour).not.toBe(10); expect(tp1.minute).not.toBe(30); expect(tp1.meridian).not.toBe('AM'); tp1.updateFromElementVal(); expect(tp1.$widget.find('.bootstrap-timepicker-hour').val()).toBe('10'); expect(tp1.$widget.find('.bootstrap-timepicker-minute').val()).toBe('30'); expect(tp1.$widget.find('.bootstrap-timepicker-meridian').val()).toBe('AM'); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(30); expect(tp1.meridian).toBe('AM'); }); it('should update picker with updateFromWidgetInputs method', function() { tp1.hour = 12; tp1.minute = 12; tp1.meridian = 'PM'; tp1.update(); tp1.$widget.find('.bootstrap-timepicker-hour').val(10); tp1.$widget.find('.bootstrap-timepicker-minute').val(30); tp1.$widget.find('.bootstrap-timepicker-meridian').val('AM'); expect(tp1.hour).not.toBe(10); expect(tp1.minute).not.toBe(30); expect(tp1.meridian).not.toBe('AM'); expect($input1.val()).not.toBe('10:30 AM'); tp1.updateFromWidgetInputs(); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(30); expect(tp1.meridian).toBe('AM'); expect($input1.val()).toBe('10:30 AM'); }); it('should increment hours with incrementHour method', function() { tp1.hour = 9; tp1.incrementHour(); expect(tp1.hour).toBe(10); }); it('should decrement hours with decrementHour method', function() { tp1.hour = 9; tp1.decrementHour(); expect(tp1.hour).toBe(8); }); it('should toggle meridian if hour goes past 12', function() { $input1.val('11:00 AM'); tp1.updateFromElementVal(); tp1.incrementHour(); expect(tp1.hour).toBe(12); expect(tp1.minute).toBe(0); expect(tp1.meridian).toBe('PM'); }); it('should toggle meridian if hour goes below 1', function() { $input1.val('11:00 AM'); tp1.updateFromElementVal(); tp1.incrementHour(); expect(tp1.hour).toBe(12); expect(tp1.minute).toBe(0); expect(tp1.meridian).toBe('PM'); }); it('should set hour to 1 if hour increments on 12 for 12h clock', function() { $input1.val('11:15 PM'); tp1.updateFromElementVal(); tp1.incrementHour(); tp1.incrementHour(); expect(tp1.getTime()).toBe('01:15 AM'); }); it('should set hour to 0 if hour increments on 23 for 24h clock', function() { $input3.val('22:15:30'); tp3.updateFromElementVal(); tp3.incrementHour(); tp3.incrementHour(); expect(tp3.hour).toBe(0); expect(tp3.minute).toBe(15); expect(tp3.second).toBe(30); }); it('should increment minutes with incrementMinute method', function() { tp1.minute = 10; tp1.incrementMinute(); expect(tp1.minute).toBe(15); tp2.minute = 0; tp2.incrementMinute(); expect(tp2.minute).toBe(30); }); it('should decrement minutes with decrementMinute method', function() { tp1.hour = 11; tp1.minute = 0; tp1.decrementMinute(); expect(tp1.hour).toBe(10); expect(tp1.minute).toBe(45); tp2.hour = 11; tp2.minute = 0; tp2.decrementMinute(); expect(tp2.hour).toBe(10); expect(tp2.minute).toBe(30); }); it('should increment hour if minutes increment past 59', function() { $input1.val('11:55 AM'); tp1.updateFromElementVal(); tp1.incrementMinute(); tp1.update(); expect(tp1.getTime()).toBe('12:00 PM'); }); it('should toggle meridian with toggleMeridian method', function() { tp1.meridian = 'PM'; tp1.toggleMeridian(); expect(tp1.meridian).toBe('AM'); }); it('should increment seconds with incrementSecond method', function() { tp1.second = 0; tp1.incrementSecond(); expect(tp1.second).toBe(15); tp2.second = 0; tp2.incrementSecond(); expect(tp2.second).toBe(30); }); it('should decrement seconds with decrementSecond method', function() { tp2.hour = 11; tp2.minute = 0; tp2.second = 0; tp2.decrementSecond(); expect(tp2.minute).toBe(59); expect(tp2.second).toBe(30); }); it('should increment minute by 1 if seconds increment past 59', function() { $input2.val('11:55:30 AM'); tp2.updateFromElementVal(); tp2.incrementSecond(); tp2.update(); expect(tp2.getTime()).toBe('11:56:00 AM'); }); it('should not have any remaining events if remove is called', function() { var hideEvents = 0; $input1.on('hide.timepicker', function() { hideEvents++; }); $input1.parents('div').find('.add-on').trigger('click'); $('body').trigger('mousedown'); expect(hideEvents).toBe(1); tp1.remove(); tp2.remove(); tp3.remove(); $('body').trigger('click'); expect(hideEvents).toBe(1); }); it('should not have the widget in the DOM if remove method is called', function() { expect($('body')).toContain('.bootstrap-timepicker-widget'); tp1.remove(); tp2.remove(); tp3.remove(); expect($('body')).not.toContain('.bootstrap-timepicker-widget'); }); it('should be able to set time from a script', function() { $input1.timepicker('setTime', '12:35 PM'); tp1.update(); expect(tp1.getTime()).toBe('12:35 PM'); }); it('should be able to opened from script', function() { expect(tp1.isOpen).toBe(false); $input1.timepicker('showWidget'); expect(tp1.isOpen).toBe(true); }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/fixtures/timepicker.html ================================================
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/helpers/SpecHelper.js ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/bootstrap-timepicker/spec/js/helpers/jasmine-jquery.js ================================================ var readFixtures = function() { return jasmine.getFixtures().proxyCallTo_('read', arguments) } var preloadFixtures = function() { jasmine.getFixtures().proxyCallTo_('preload', arguments) } var loadFixtures = function() { jasmine.getFixtures().proxyCallTo_('load', arguments) } var appendLoadFixtures = function() { jasmine.getFixtures().proxyCallTo_('appendLoad', arguments) } var setFixtures = function(html) { jasmine.getFixtures().proxyCallTo_('set', arguments) } var appendSetFixtures = function() { jasmine.getFixtures().proxyCallTo_('appendSet', arguments) } var sandbox = function(attributes) { return jasmine.getFixtures().sandbox(attributes) } var spyOnEvent = function(selector, eventName) { return jasmine.JQuery.events.spyOn(selector, eventName) } var preloadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('preload', arguments) } var loadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('load', arguments) } var appendLoadStyleFixtures = function() { jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments) } var setStyleFixtures = function(html) { jasmine.getStyleFixtures().proxyCallTo_('set', arguments) } var appendSetStyleFixtures = function(html) { jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments) } var loadJSONFixtures = function() { return jasmine.getJSONFixtures().proxyCallTo_('load', arguments) } var getJSONFixture = function(url) { return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url] } jasmine.spiedEventsKey = function (selector, eventName) { return [$(selector).selector, eventName].toString() } jasmine.getFixtures = function() { return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures() } jasmine.getStyleFixtures = function() { return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures() } jasmine.Fixtures = function() { this.containerId = 'jasmine-fixtures' this.fixturesCache_ = {} this.fixturesPath = 'spec/js/fixtures' } jasmine.Fixtures.prototype.set = function(html) { this.cleanUp() this.createContainer_(html) } jasmine.Fixtures.prototype.appendSet= function(html) { this.addToContainer_(html) } jasmine.Fixtures.prototype.preload = function() { this.read.apply(this, arguments) } jasmine.Fixtures.prototype.load = function() { this.cleanUp() this.createContainer_(this.read.apply(this, arguments)) } jasmine.Fixtures.prototype.appendLoad = function() { this.addToContainer_(this.read.apply(this, arguments)) } jasmine.Fixtures.prototype.read = function() { var htmlChunks = [] var fixtureUrls = arguments for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) { htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex])) } return htmlChunks.join('') } jasmine.Fixtures.prototype.clearCache = function() { this.fixturesCache_ = {} } jasmine.Fixtures.prototype.cleanUp = function() { $('#' + this.containerId).remove() } jasmine.Fixtures.prototype.sandbox = function(attributes) { var attributesToSet = attributes || {} return $('
        ').attr(attributesToSet) } jasmine.Fixtures.prototype.createContainer_ = function(html) { var container if(html instanceof $) { container = $('
        ') container.html(html) } else { container = '
        ' + html + '
        ' } $(document.body).append(container) } jasmine.Fixtures.prototype.addToContainer_ = function(html){ var container = $(document.body).find('#'+this.containerId).append(html) if(!container.length){ this.createContainer_(html) } } jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) { if (typeof this.fixturesCache_[url] === 'undefined') { this.loadFixtureIntoCache_(url) } return this.fixturesCache_[url] } jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) { var url = this.makeFixtureUrl_(relativeUrl) var request = $.ajax({ type: "GET", url: url + "?" + new Date().getTime(), async: false }) this.fixturesCache_[relativeUrl] = request.responseText } jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){ return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl } jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) { return this[methodName].apply(this, passedArguments) } jasmine.StyleFixtures = function() { this.fixturesCache_ = {} this.fixturesNodes_ = [] this.fixturesPath = 'spec/javascripts/fixtures' } jasmine.StyleFixtures.prototype.set = function(css) { this.cleanUp() this.createStyle_(css) } jasmine.StyleFixtures.prototype.appendSet = function(css) { this.createStyle_(css) } jasmine.StyleFixtures.prototype.preload = function() { this.read_.apply(this, arguments) } jasmine.StyleFixtures.prototype.load = function() { this.cleanUp() this.createStyle_(this.read_.apply(this, arguments)) } jasmine.StyleFixtures.prototype.appendLoad = function() { this.createStyle_(this.read_.apply(this, arguments)) } jasmine.StyleFixtures.prototype.cleanUp = function() { while(this.fixturesNodes_.length) { this.fixturesNodes_.pop().remove() } } jasmine.StyleFixtures.prototype.createStyle_ = function(html) { var styleText = $('
        ').html(html).text(), style = $('') this.fixturesNodes_.push(style) $('head').append(style) } jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_ jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_ jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_ jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_ jasmine.getJSONFixtures = function() { return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures() } jasmine.JSONFixtures = function() { this.fixturesCache_ = {} this.fixturesPath = 'spec/javascripts/fixtures/json' } jasmine.JSONFixtures.prototype.load = function() { this.read.apply(this, arguments) return this.fixturesCache_ } jasmine.JSONFixtures.prototype.read = function() { var fixtureUrls = arguments for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) { this.getFixtureData_(fixtureUrls[urlIndex]) } return this.fixturesCache_ } jasmine.JSONFixtures.prototype.clearCache = function() { this.fixturesCache_ = {} } jasmine.JSONFixtures.prototype.getFixtureData_ = function(url) { this.loadFixtureIntoCache_(url) return this.fixturesCache_[url] } jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) { var self = this var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl $.ajax({ async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded cache: false, dataType: 'json', url: url, success: function(data) { self.fixturesCache_[relativeUrl] = data }, fail: function(jqXHR, status, errorThrown) { throw Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')') } }) } jasmine.JSONFixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) { return this[methodName].apply(this, passedArguments) } jasmine.JQuery = function() {} jasmine.JQuery.browserTagCaseIndependentHtml = function(html) { return $('
        ').append(html).html() } jasmine.JQuery.elementToString = function(element) { var domEl = $(element).get(0) if (domEl == undefined || domEl.cloneNode) return $('
        ').append($(element).clone()).html() else return element.toString() } jasmine.JQuery.matchersClass = {} !function(namespace) { var data = { spiedEvents: {}, handlers: [] } namespace.events = { spyOn: function(selector, eventName) { var handler = function(e) { data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = e } $(selector).bind(eventName, handler) data.handlers.push(handler) return { selector: selector, eventName: eventName, handler: handler, reset: function(){ delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] } } }, wasTriggered: function(selector, eventName) { return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) }, wasPrevented: function(selector, eventName) { var e; return (e = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) && e.isDefaultPrevented() }, cleanUp: function() { data.spiedEvents = {} data.handlers = [] } } }(jasmine.JQuery) !function(){ var jQueryMatchers = { toHaveClass: function(className) { return this.actual.hasClass(className) }, toHaveCss: function(css){ for (var prop in css){ if (this.actual.css(prop) !== css[prop]) return false } return true }, toBeVisible: function() { return this.actual.is(':visible') }, toBeHidden: function() { return this.actual.is(':hidden') }, toBeSelected: function() { return this.actual.is(':selected') }, toBeChecked: function() { return this.actual.is(':checked') }, toBeEmpty: function() { return this.actual.is(':empty') }, toExist: function() { return $(document).find(this.actual).length }, toHaveLength: function(length) { return this.actual.length === length }, toHaveAttr: function(attributeName, expectedAttributeValue) { return hasProperty(this.actual.attr(attributeName), expectedAttributeValue) }, toHaveProp: function(propertyName, expectedPropertyValue) { return hasProperty(this.actual.prop(propertyName), expectedPropertyValue) }, toHaveId: function(id) { return this.actual.attr('id') == id }, toHaveHtml: function(html) { return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html) }, toContainHtml: function(html){ var actualHtml = this.actual.html() var expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html) return (actualHtml.indexOf(expectedHtml) >= 0) }, toHaveText: function(text) { var trimmedText = $.trim(this.actual.text()) if (text && $.isFunction(text.test)) { return text.test(trimmedText) } else { return trimmedText == text } }, toHaveValue: function(value) { return this.actual.val() == value }, toHaveData: function(key, expectedValue) { return hasProperty(this.actual.data(key), expectedValue) }, toBe: function(selector) { return this.actual.is(selector) }, toContain: function(selector) { return this.actual.find(selector).length }, toBeDisabled: function(selector){ return this.actual.is(':disabled') }, toBeFocused: function(selector) { return this.actual[0] === this.actual[0].ownerDocument.activeElement }, toHandle: function(event) { var events = $._data(this.actual.get(0), "events") if(!events || !event || typeof event !== "string") { return false } var namespaces = event.split(".") var eventType = namespaces.shift() var sortedNamespaces = namespaces.slice(0).sort() var namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") if(events[eventType] && namespaces.length) { for(var i = 0; i < events[eventType].length; i++) { var namespace = events[eventType][i].namespace if(namespaceRegExp.test(namespace)) { return true } } } else { return events[eventType] && events[eventType].length > 0 } }, // tests the existence of a specific event binding + handler toHandleWith: function(eventName, eventHandler) { var stack = $._data(this.actual.get(0), "events")[eventName] for (var i = 0; i < stack.length; i++) { if (stack[i].handler == eventHandler) return true } return false } } var hasProperty = function(actualValue, expectedValue) { if (expectedValue === undefined) return actualValue !== undefined return actualValue == expectedValue } var bindMatcher = function(methodName) { var builtInMatcher = jasmine.Matchers.prototype[methodName] jasmine.JQuery.matchersClass[methodName] = function() { if (this.actual && (this.actual instanceof $ || jasmine.isDomNode(this.actual))) { this.actual = $(this.actual) var result = jQueryMatchers[methodName].apply(this, arguments) var element if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML") this.actual = jasmine.JQuery.elementToString(this.actual) return result } if (builtInMatcher) { return builtInMatcher.apply(this, arguments) } return false } } for(var methodName in jQueryMatchers) { bindMatcher(methodName) } }() beforeEach(function() { this.addMatchers(jasmine.JQuery.matchersClass) this.addMatchers({ toHaveBeenTriggeredOn: function(selector) { this.message = function() { return [ "Expected event " + this.actual + " to have been triggered on " + selector, "Expected event " + this.actual + " not to have been triggered on " + selector ] } return jasmine.JQuery.events.wasTriggered(selector, this.actual) } }) this.addMatchers({ toHaveBeenTriggered: function(){ var eventName = this.actual.eventName, selector = this.actual.selector this.message = function() { return [ "Expected event " + eventName + " to have been triggered on " + selector, "Expected event " + eventName + " not to have been triggered on " + selector ] } return jasmine.JQuery.events.wasTriggered(selector, eventName) } }) this.addMatchers({ toHaveBeenPreventedOn: function(selector) { this.message = function() { return [ "Expected event " + this.actual + " to have been prevented on " + selector, "Expected event " + this.actual + " not to have been prevented on " + selector ] } return jasmine.JQuery.events.wasPrevented(selector, this.actual) } }) this.addMatchers({ toHaveBeenPrevented: function() { var eventName = this.actual.eventName, selector = this.actual.selector this.message = function() { return [ "Expected event " + eventName + " to have been prevented on " + selector, "Expected event " + eventName + " not to have been prevented on " + selector ] } return jasmine.JQuery.events.wasPrevented(selector, eventName) } }) }) afterEach(function() { jasmine.getFixtures().cleanUp() jasmine.getStyleFixtures().cleanUp() jasmine.JQuery.events.cleanUp() }) ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/dropzone/css/basic.css ================================================ /* The MIT License */ .dropzone, .dropzone *, .dropzone-previews, .dropzone-previews * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .dropzone { position: relative; border: 1px solid rgba(0,0,0,0.08); background: rgba(0,0,0,0.02); padding: 1em; } .dropzone.clickable { cursor: pointer; } .dropzone.clickable .message { cursor: pointer; } .dropzone.clickable * { cursor: default; } .dropzone .message { opacity: 1; -ms-filter: none; filter: none; } .dropzone.drag-hover { border-color: rgba(0,0,0,0.15); background: rgba(0,0,0,0.04); } .dropzone.started .message { display: none; } .dropzone .preview, .dropzone-previews .preview { background: rgba(255,255,255,0.8); position: relative; display: inline-block; margin: 17px; vertical-align: top; border: 1px solid #acacac; padding: 6px 6px 6px 6px; } .dropzone .preview .details, .dropzone-previews .preview .details { width: 100px; height: 100px; position: relative; background: #ebebeb; padding: 5px; margin-bottom: 22px; } .dropzone .preview .details .filename, .dropzone-previews .preview .details .filename { overflow: hidden; height: 100%; } .dropzone .preview .details img, .dropzone-previews .preview .details img { position: absolute; top: 0; left: 0; width: 100px; height: 100px; } .dropzone .preview .details .size, .dropzone-previews .preview .details .size { position: absolute; bottom: -28px; left: 3px; height: 28px; line-height: 28px; } .dropzone .preview.error .error-mark, .dropzone-previews .preview.error .error-mark { display: block; } .dropzone .preview.success .success-mark, .dropzone-previews .preview.success .success-mark { display: block; } .dropzone .preview:hover .details img, .dropzone-previews .preview:hover .details img { display: none; } .dropzone .preview:hover .success-mark, .dropzone-previews .preview:hover .success-mark, .dropzone .preview:hover .error-mark, .dropzone-previews .preview:hover .error-mark { display: none; } .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark, .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark { display: none; position: absolute; width: 40px; height: 40px; font-size: 30px; text-align: center; right: -10px; top: -10px; } .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark { color: #8cc657; } .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark { color: #ee162d; } .dropzone .preview .progress, .dropzone-previews .preview .progress { position: absolute; top: 100px; left: 6px; right: 6px; height: 6px; background: #d7d7d7; display: none; } .dropzone .preview .progress .upload, .dropzone-previews .preview .progress .upload { position: absolute; top: 0; bottom: 0; left: 0; width: 0%; background-color: #8cc657; } .dropzone .preview.processing .progress, .dropzone-previews .preview.processing .progress { display: block; } .dropzone .preview .error-message, .dropzone-previews .preview .error-message { display: none; position: absolute; top: -5px; left: -20px; background: rgba(245,245,245,0.8); padding: 8px 10px; color: #800; min-width: 140px; max-width: 500px; z-index: 500; } .dropzone .preview:hover.error .error-message, .dropzone-previews .preview:hover.error .error-message { display: block; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/dropzone/css/dropzone.css ================================================ /* The MIT License */ .dropzone, .dropzone *, .dropzone-previews, .dropzone-previews * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .dropzone { position: relative; border: 1px solid rgba(0,0,0,0.08); background: rgba(0,0,0,0.02); padding: 1em; } .dropzone.clickable { cursor: pointer; } .dropzone.clickable .message { cursor: pointer; } .dropzone.clickable * { cursor: default; } .dropzone .message { opacity: 1; -ms-filter: none; filter: none; } .dropzone.drag-hover { border-color: rgba(0,0,0,0.15); background: rgba(0,0,0,0.04); } .dropzone.started .message { display: none; } .dropzone .preview, .dropzone-previews .preview { background: rgba(255,255,255,0.8); position: relative; display: inline-block; margin: 17px; vertical-align: top; border: 1px solid #acacac; padding: 6px 6px 6px 6px; } .dropzone .preview .details, .dropzone-previews .preview .details { width: 100px; height: 100px; position: relative; background: #ebebeb; padding: 5px; margin-bottom: 22px; } .dropzone .preview .details .filename, .dropzone-previews .preview .details .filename { overflow: hidden; height: 100%; } .dropzone .preview .details img, .dropzone-previews .preview .details img { position: absolute; top: 0; left: 0; width: 100px; height: 100px; } .dropzone .preview .details .size, .dropzone-previews .preview .details .size { position: absolute; bottom: -28px; left: 3px; height: 28px; line-height: 28px; } .dropzone .preview.error .error-mark, .dropzone-previews .preview.error .error-mark { display: block; } .dropzone .preview.success .success-mark, .dropzone-previews .preview.success .success-mark { display: block; } .dropzone .preview:hover .details img, .dropzone-previews .preview:hover .details img { display: none; } .dropzone .preview:hover .success-mark, .dropzone-previews .preview:hover .success-mark, .dropzone .preview:hover .error-mark, .dropzone-previews .preview:hover .error-mark { display: none; } .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark, .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark { display: none; position: absolute; width: 40px; height: 40px; font-size: 30px; text-align: center; right: -10px; top: -10px; } .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark { color: #8cc657; } .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark { color: #ee162d; } .dropzone .preview .progress, .dropzone-previews .preview .progress { position: absolute; top: 100px; left: 6px; right: 6px; height: 6px; background: #d7d7d7; display: none; } .dropzone .preview .progress .upload, .dropzone-previews .preview .progress .upload { position: absolute; top: 0; bottom: 0; left: 0; width: 0%; background-color: #8cc657; } .dropzone .preview.processing .progress, .dropzone-previews .preview.processing .progress { display: block; } .dropzone .preview .error-message, .dropzone-previews .preview .error-message { display: none; position: absolute; top: -5px; left: -20px; background: rgba(245,245,245,0.8); padding: 8px 10px; color: #800; min-width: 140px; max-width: 500px; z-index: 500; } .dropzone .preview:hover.error .error-message, .dropzone-previews .preview:hover.error .error-message { display: block; } .dropzone { border: 1px solid rgba(0,0,0,0.03); min-height: 360px; -webkit-border-radius: 3px; border-radius: 3px; background: rgba(0,0,0,0.03); padding: 23px; } .dropzone .default.message { opacity: 1; -ms-filter: none; filter: none; -webkit-transition: opacity 0.3s ease-in-out; -moz-transition: opacity 0.3s ease-in-out; -o-transition: opacity 0.3s ease-in-out; -ms-transition: opacity 0.3s ease-in-out; transition: opacity 0.3s ease-in-out; background-image: url("../images/spritemap.png"); background-repeat: no-repeat; background-position: 0 0; position: absolute; width: 428px; height: 123px; margin-left: -214px; margin-top: -61.5px; top: 50%; left: 50%; } @media all and (-webkit-min-device-pixel-ratio: 1.5) { .dropzone .default.message { background-image: url("../images/spritemap@2x.png"); -webkit-background-size: 428px 406px; -moz-background-size: 428px 406px; background-size: 428px 406px; } } .dropzone .default.message span { display: none; } .dropzone.square .default.message { background-position: 0 -123px; width: 268px; margin-left: -134px; height: 174px; margin-top: -87px; } .dropzone.drag-hover .message { opacity: 0.15; filter: alpha(opacity=15); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)"; } .dropzone.started .message { display: block; opacity: 0; filter: alpha(opacity=0); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; } .dropzone .preview, .dropzone-previews .preview { -webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16); box-shadow: 1px 1px 4px rgba(0,0,0,0.16); font-size: 14px; } .dropzone .preview .details img, .dropzone-previews .preview .details img { width: 100px; height: 100px; } .dropzone .preview.image-preview:hover .details img, .dropzone-previews .preview.image-preview:hover .details img { display: block; opacity: 0.1; filter: alpha(opacity=10); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; } .dropzone .preview.success .success-mark, .dropzone-previews .preview.success .success-mark { opacity: 1; -ms-filter: none; filter: none; } .dropzone .preview.error .error-mark, .dropzone-previews .preview.error .error-mark { opacity: 1; -ms-filter: none; filter: none; } .dropzone .preview.error .progress .upload, .dropzone-previews .preview.error .progress .upload { background: #ee1e2d; } .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark, .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark { display: block; opacity: 0; filter: alpha(opacity=0); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -webkit-transition: opacity 0.4s ease-in-out; -moz-transition: opacity 0.4s ease-in-out; -o-transition: opacity 0.4s ease-in-out; -ms-transition: opacity 0.4s ease-in-out; transition: opacity 0.4s ease-in-out; background-image: url("../images/spritemap.png"); background-repeat: no-repeat; } @media all and (-webkit-min-device-pixel-ratio: 1.5) { .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark, .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark { background-image: url("../images/spritemap@2x.png"); -webkit-background-size: 428px 406px; -moz-background-size: 428px 406px; background-size: 428px 406px; } } .dropzone .preview .error-mark span, .dropzone-previews .preview .error-mark span, .dropzone .preview .success-mark span, .dropzone-previews .preview .success-mark span { display: none; } .dropzone .preview .error-mark, .dropzone-previews .preview .error-mark { background-position: -268px -123px; } .dropzone .preview .success-mark, .dropzone-previews .preview .success-mark { background-position: -268px -163px; } .dropzone .preview .progress .upload, .dropzone-previews .preview .progress .upload { -webkit-animation: loading 0.4s linear infinite; -moz-animation: loading 0.4s linear infinite; -o-animation: loading 0.4s linear infinite; -ms-animation: loading 0.4s linear infinite; animation: loading 0.4s linear infinite; -webkit-transition: width 0.3s ease-in-out; -moz-transition: width 0.3s ease-in-out; -o-transition: width 0.3s ease-in-out; -ms-transition: width 0.3s ease-in-out; transition: width 0.3s ease-in-out; -webkit-border-radius: 2px; border-radius: 2px; position: absolute; top: 0; left: 0; width: 0%; height: 100%; background-image: url("../images/spritemap.png"); background-repeat: repeat-x; background-position: 0px -400px; } @media all and (-webkit-min-device-pixel-ratio: 1.5) { .dropzone .preview .progress .upload, .dropzone-previews .preview .progress .upload { background-image: url("../images/spritemap@2x.png"); -webkit-background-size: 428px 406px; -moz-background-size: 428px 406px; background-size: 428px 406px; } } .dropzone .preview.success .progress, .dropzone-previews .preview.success .progress { display: block; opacity: 0; filter: alpha(opacity=0); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -webkit-transition: opacity 0.4s ease-in-out; -moz-transition: opacity 0.4s ease-in-out; -o-transition: opacity 0.4s ease-in-out; -ms-transition: opacity 0.4s ease-in-out; transition: opacity 0.4s ease-in-out; } .dropzone .preview .error-message, .dropzone-previews .preview .error-message { display: block; opacity: 0; filter: alpha(opacity=0); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -webkit-transition: opacity 0.3s ease-in-out; -moz-transition: opacity 0.3s ease-in-out; -o-transition: opacity 0.3s ease-in-out; -ms-transition: opacity 0.3s ease-in-out; transition: opacity 0.3s ease-in-out; } .dropzone .preview:hover.error .error-message, .dropzone-previews .preview:hover.error .error-message { opacity: 1; -ms-filter: none; filter: none; } @-moz-keyframes loading { 0% { background-position: 0 -400px; } 100% { background-position: -7px -400px; } } @-webkit-keyframes loading { 0% { background-position: 0 -400px; } 100% { background-position: -7px -400px; } } @-o-keyframes loading { 0% { background-position: 0 -400px; } 100% { background-position: -7px -400px; } } @-ms-keyframes loading { 0% { background-position: 0 -400px; } 100% { background-position: -7px -400px; } } @keyframes loading { 0% { background-position: 0 -400px; } 100% { background-position: -7px -400px; } } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/dropzone/dropzone.js ================================================ ;(function(){ /** * hasOwnProperty. */ var has = Object.prototype.hasOwnProperty; /** * Require the given path. * * @param {String} path * @return {Object} exports * @api public */ function require(path, parent, orig) { var resolved = require.resolve(path); // lookup failed if (null == resolved) { orig = orig || path; parent = parent || 'root'; var err = new Error('Failed to require "' + orig + '" from "' + parent + '"'); err.path = orig; err.parent = parent; err.require = true; throw err; } var module = require.modules[resolved]; // perform real require() // by invoking the module's // registered function if (!module.exports) { module.exports = {}; module.client = module.component = true; module.call(this, module.exports, require.relative(resolved), module); } return module.exports; } /** * Registered modules. */ require.modules = {}; /** * Registered aliases. */ require.aliases = {}; /** * Resolve `path`. * * Lookup: * * - PATH/index.js * - PATH.js * - PATH * * @param {String} path * @return {String} path or null * @api private */ require.resolve = function(path) { if (path.charAt(0) === '/') path = path.slice(1); var index = path + '/index.js'; var paths = [ path, path + '.js', path + '.json', path + '/index.js', path + '/index.json' ]; for (var i = 0; i < paths.length; i++) { var path = paths[i]; if (has.call(require.modules, path)) return path; } if (has.call(require.aliases, index)) { return require.aliases[index]; } }; /** * Normalize `path` relative to the current path. * * @param {String} curr * @param {String} path * @return {String} * @api private */ require.normalize = function(curr, path) { var segs = []; if ('.' != path.charAt(0)) return path; curr = curr.split('/'); path = path.split('/'); for (var i = 0; i < path.length; ++i) { if ('..' == path[i]) { curr.pop(); } else if ('.' != path[i] && '' != path[i]) { segs.push(path[i]); } } return curr.concat(segs).join('/'); }; /** * Register module at `path` with callback `definition`. * * @param {String} path * @param {Function} definition * @api private */ require.register = function(path, definition) { require.modules[path] = definition; }; /** * Alias a module definition. * * @param {String} from * @param {String} to * @api private */ require.alias = function(from, to) { if (!has.call(require.modules, from)) { throw new Error('Failed to alias "' + from + '", it does not exist'); } require.aliases[to] = from; }; /** * Return a require function relative to the `parent` path. * * @param {String} parent * @return {Function} * @api private */ require.relative = function(parent) { var p = require.normalize(parent, '..'); /** * lastIndexOf helper. */ function lastIndexOf(arr, obj) { var i = arr.length; while (i--) { if (arr[i] === obj) return i; } return -1; } /** * The relative require() itself. */ function localRequire(path) { var resolved = localRequire.resolve(path); return require(resolved, parent, path); } /** * Resolve relative to the parent. */ localRequire.resolve = function(path) { var c = path.charAt(0); if ('/' == c) return path.slice(1); if ('.' == c) return require.normalize(p, path); // resolve deps by returning // the dep in the nearest "deps" // directory var segs = parent.split('/'); var i = lastIndexOf(segs, 'deps') + 1; if (!i) i = 0; path = segs.slice(0, i + 1).join('/') + '/deps/' + path; return path; }; /** * Check if module is defined at `path`. */ localRequire.exists = function(path) { return has.call(require.modules, localRequire.resolve(path)); }; return localRequire; }; require.register("component-emitter/index.js", function(exports, require, module){ /** * Expose `Emitter`. */ module.exports = Emitter; /** * Initialize a new `Emitter`. * * @api public */ function Emitter(obj) { if (obj) return mixin(obj); }; /** * Mixin the emitter properties. * * @param {Object} obj * @return {Object} * @api private */ function mixin(obj) { for (var key in Emitter.prototype) { obj[key] = Emitter.prototype[key]; } return obj; } /** * Listen on the given `event` with `fn`. * * @param {String} event * @param {Function} fn * @return {Emitter} * @api public */ Emitter.prototype.on = function(event, fn){ this._callbacks = this._callbacks || {}; (this._callbacks[event] = this._callbacks[event] || []) .push(fn); return this; }; /** * Adds an `event` listener that will be invoked a single * time then automatically removed. * * @param {String} event * @param {Function} fn * @return {Emitter} * @api public */ Emitter.prototype.once = function(event, fn){ var self = this; this._callbacks = this._callbacks || {}; function on() { self.off(event, on); fn.apply(this, arguments); } fn._off = on; this.on(event, on); return this; }; /** * Remove the given callback for `event` or all * registered callbacks. * * @param {String} event * @param {Function} fn * @return {Emitter} * @api public */ Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = function(event, fn){ this._callbacks = this._callbacks || {}; var callbacks = this._callbacks[event]; if (!callbacks) return this; // remove all handlers if (1 == arguments.length) { delete this._callbacks[event]; return this; } // remove specific handler var i = callbacks.indexOf(fn._off || fn); if (~i) callbacks.splice(i, 1); return this; }; /** * Emit `event` with the given args. * * @param {String} event * @param {Mixed} ... * @return {Emitter} */ Emitter.prototype.emit = function(event){ this._callbacks = this._callbacks || {}; var args = [].slice.call(arguments, 1) , callbacks = this._callbacks[event]; if (callbacks) { callbacks = callbacks.slice(0); for (var i = 0, len = callbacks.length; i < len; ++i) { callbacks[i].apply(this, args); } } return this; }; /** * Return array of callbacks for `event`. * * @param {String} event * @return {Array} * @api public */ Emitter.prototype.listeners = function(event){ this._callbacks = this._callbacks || {}; return this._callbacks[event] || []; }; /** * Check if this emitter has `event` handlers. * * @param {String} event * @return {Boolean} * @api public */ Emitter.prototype.hasListeners = function(event){ return !! this.listeners(event).length; }; }); require.register("dropzone/index.js", function(exports, require, module){ /** * Exposing dropzone */ module.exports = require("./lib/dropzone.js"); }); require.register("dropzone/lib/dropzone.js", function(exports, require, module){ /* # # More info at [www.dropzonejs.com](http://www.dropzonejs.com) # # Copyright (c) 2012, Matias Meno # # 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. # */ (function() { var Dropzone, Em, camelize, contentLoaded, createElement, noop, without, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, __slice = [].slice, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; Em = typeof Emitter !== "undefined" && Emitter !== null ? Emitter : require("emitter"); noop = function() {}; Dropzone = (function(_super) { __extends(Dropzone, _super); /* This is a list of all available events you can register on a dropzone object. You can register an event handler like this: dropzone.on("dragEnter", function() { }); */ Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "selectedfiles", "addedfile", "removedfile", "thumbnail", "error", "processingfile", "uploadprogress", "sending", "success", "complete", "reset"]; Dropzone.prototype.defaultOptions = { url: null, method: "post", parallelUploads: 2, maxFilesize: 256, paramName: "file", createImageThumbnails: true, maxThumbnailFilesize: 2, thumbnailWidth: 100, thumbnailHeight: 100, params: {}, clickable: true, enqueueForUpload: true, previewsContainer: null, dictDefaultMessage: "Drop files here to upload", dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", accept: function(file, done) { return done(); }, init: function() { return noop; }, fallback: function() { var child, messageElement, span, _i, _len, _ref; this.element.className = "" + this.element.className + " browser-not-supported"; _ref = this.element.getElementsByTagName("div"); for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; if (/(^| )message($| )/.test(child.className)) { messageElement = child; child.className = "message"; continue; } } if (!messageElement) { messageElement = createElement("
        "); this.element.appendChild(messageElement); } span = messageElement.getElementsByTagName("span")[0]; if (span) { span.textContent = this.options.dictFallbackMessage; } return this.element.appendChild(this.getFallbackForm()); }, /* Those functions register themselves to the events on init and handle all the user interface specific stuff. Overwriting them won't break the upload but can break the way it's displayed. You can overwrite them if you don't like the default behavior. If you just want to add an additional event handler, register it on the dropzone object and don't overwrite those options. */ drop: function(e) { return this.element.classList.remove("drag-hover"); }, dragstart: noop, dragend: function(e) { return this.element.classList.remove("drag-hover"); }, dragenter: function(e) { return this.element.classList.add("drag-hover"); }, dragover: function(e) { return this.element.classList.add("drag-hover"); }, dragleave: function(e) { return this.element.classList.remove("drag-hover"); }, selectedfiles: function(files) { if (this.element === this.previewsContainer) { return this.element.classList.add("started"); } }, reset: function() { return this.element.classList.remove("started"); }, addedfile: function(file) { file.previewTemplate = createElement(this.options.previewTemplate); this.previewsContainer.appendChild(file.previewTemplate); file.previewTemplate.querySelector(".filename span").textContent = file.name; return file.previewTemplate.querySelector(".details").appendChild(createElement("
        " + (this.filesize(file.size)) + "
        ")); }, removedfile: function(file) { return file.previewTemplate.parentNode.removeChild(file.previewTemplate); }, thumbnail: function(file, dataUrl) { file.previewTemplate.classList.remove("file-preview"); file.previewTemplate.classList.add("image-preview"); return file.previewTemplate.querySelector(".details").appendChild(createElement("\""")); }, error: function(file, message) { file.previewTemplate.classList.add("error"); return file.previewTemplate.querySelector(".error-message span").textContent = message; }, processingfile: function(file) { return file.previewTemplate.classList.add("processing"); }, uploadprogress: function(file, progress) { return file.previewTemplate.querySelector(".progress .upload").style.width = "" + progress + "%"; }, sending: noop, success: function(file) { return file.previewTemplate.classList.add("success"); }, complete: noop, previewTemplate: "
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        " }; function Dropzone(element, options) { var elementId, elementOptions, extend, fallback, _ref; this.element = element; this.version = Dropzone.version; this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, ""); if (typeof this.element === "string") { this.element = document.querySelector(this.element); } if (!(this.element && (this.element.nodeType != null))) { throw new Error("Invalid dropzone element."); } if (Dropzone.forElement(this.element)) { throw new Error("Dropzone already attached."); } Dropzone.instances.push(this); elementId = this.element.id; elementOptions = (_ref = (elementId ? Dropzone.options[camelize(elementId)] : void 0)) != null ? _ref : {}; extend = function() { var key, object, objects, target, val, _i, _len; target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : []; for (_i = 0, _len = objects.length; _i < _len; _i++) { object = objects[_i]; for (key in object) { val = object[key]; target[key] = val; } } return target; }; this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {}); if (this.options.url == null) { this.options.url = this.element.action; } if (!this.options.url) { throw new Error("No URL provided."); } this.options.method = this.options.method.toUpperCase(); if (!Dropzone.isBrowserSupported()) { return this.options.fallback.call(this); } if ((fallback = this.getExistingFallback()) && fallback.parentNode) { fallback.parentNode.removeChild(fallback); } if (this.options.previewsContainer) { if (typeof this.options.previewsContainer === "string") { this.previewsContainer = document.querySelector(this.options.previewsContainer); } else if (this.options.previewsContainer.nodeType != null) { this.previewsContainer = this.options.previewsContainer; } if (this.previewsContainer == null) { throw new Error("Invalid `previewsContainer` option provided. Please provide a CSS selector or a plain HTML element."); } } else { this.previewsContainer = this.element; } this.init(); } Dropzone.prototype.init = function() { var eventName, noPropagation, _i, _len, _ref, _ref1, _this = this; if (this.element.tagName === "form") { this.element.setAttribute("enctype", "multipart/form-data"); } if (this.element.classList.contains("dropzone") && !this.element.querySelector(".message")) { this.element.appendChild(createElement("
        " + this.options.dictDefaultMessage + "
        ")); } if (this.options.clickable) { this.hiddenFileInput = document.createElement("input"); this.hiddenFileInput.setAttribute("type", "file"); this.hiddenFileInput.setAttribute("multiple", "multiple"); this.hiddenFileInput.style.display = "none"; document.body.appendChild(this.hiddenFileInput); this.hiddenFileInput.addEventListener("change", function() { var files; files = _this.hiddenFileInput.files; if (files.length) { _this.emit("selectedfiles", files); return _this.handleFiles(files); } }); } this.files = []; this.filesQueue = []; this.filesProcessing = []; this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL; _ref1 = this.events; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { eventName = _ref1[_i]; this.on(eventName, this.options[eventName]); } noPropagation = function(e) { e.stopPropagation(); if (e.preventDefault) { return e.preventDefault(); } else { return e.returnValue = false; } }; this.listeners = { "dragstart": function(e) { return _this.emit("dragstart", e); }, "dragenter": function(e) { noPropagation(e); return _this.emit("dragenter", e); }, "dragover": function(e) { noPropagation(e); return _this.emit("dragover", e); }, "dragleave": function(e) { return _this.emit("dragleave", e); }, "drop": function(e) { noPropagation(e); _this.drop(e); return _this.emit("drop", e); }, "dragend": function(e) { return _this.emit("dragend", e); }, "click": function(evt) { if (!_this.options.clickable) { return; } if (evt.target === _this.element || evt.target === _this.element.querySelector(".message")) { return _this.hiddenFileInput.click(); } } }; this.enable(); return this.options.init.call(this); }; Dropzone.prototype.getFallbackForm = function() { var existingFallback, fields, fieldsString, form; if (existingFallback = this.getExistingFallback()) { return existingFallback; } fieldsString = "
        "; if (this.options.dictFallbackText) { fieldsString += "

        " + this.options.dictFallbackText + "

        "; } fieldsString += "
        "; fields = createElement(fieldsString); if (this.element.tagName !== "FORM") { form = createElement("
        "); form.appendChild(fields); } else { this.element.setAttribute("enctype", "multipart/form-data"); this.element.setAttribute("method", this.options.method); } return form != null ? form : fields; }; Dropzone.prototype.getExistingFallback = function() { var fallback, getFallback, tagName, _i, _len, _ref; getFallback = function(elements) { var el, _i, _len; for (_i = 0, _len = elements.length; _i < _len; _i++) { el = elements[_i]; if (/(^| )fallback($| )/.test(el.className)) { return el; } } }; _ref = ["div", "form"]; for (_i = 0, _len = _ref.length; _i < _len; _i++) { tagName = _ref[_i]; if (fallback = getFallback(this.element.getElementsByTagName("div"))) { return fallback; } } }; Dropzone.prototype.setupEventListeners = function() { var event, listener, _ref, _results; _ref = this.listeners; _results = []; for (event in _ref) { listener = _ref[event]; _results.push(this.element.addEventListener(event, listener, false)); } return _results; }; Dropzone.prototype.removeEventListeners = function() { var event, listener, _ref, _results; _ref = this.listeners; _results = []; for (event in _ref) { listener = _ref[event]; _results.push(this.element.removeEventListener(event, listener, false)); } return _results; }; Dropzone.prototype.disable = function() { if (this.options.clickable) { this.element.classList.remove("clickable"); } this.removeEventListeners(); this.filesProcessing = []; return this.filesQueue = []; }; Dropzone.prototype.enable = function() { if (this.options.clickable) { this.element.classList.add("clickable"); } return this.setupEventListeners(); }; Dropzone.prototype.filesize = function(size) { var string; if (size >= 100000000000) { size = size / 100000000000; string = "TB"; } else if (size >= 100000000) { size = size / 100000000; string = "GB"; } else if (size >= 100000) { size = size / 100000; string = "MB"; } else if (size >= 100) { size = size / 100; string = "KB"; } else { size = size * 10; string = "b"; } return "" + (Math.round(size) / 10) + " " + string; }; Dropzone.prototype.drop = function(e) { var files; if (!e.dataTransfer) { return; } files = e.dataTransfer.files; this.emit("selectedfiles", files); if (files.length) { return this.handleFiles(files); } }; Dropzone.prototype.handleFiles = function(files) { var file, _i, _len, _results; _results = []; for (_i = 0, _len = files.length; _i < _len; _i++) { file = files[_i]; _results.push(this.addFile(file)); } return _results; }; Dropzone.prototype.accept = function(file, done) { if (file.size > this.options.maxFilesize * 1024 * 1024) { return done("File is too big (" + (Math.round(file.size / 1024 / 10.24) / 100) + "MB). Max filesize: " + this.options.maxFilesize + "MB"); } else { return this.options.accept.call(this, file, done); } }; Dropzone.prototype.addFile = function(file) { var _this = this; this.files.push(file); this.emit("addedfile", file); if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) { this.createThumbnail(file); } return this.accept(file, function(error) { if (error) { return _this.errorProcessing(file, error); } else { if (_this.options.enqueueForUpload) { _this.filesQueue.push(file); return _this.processQueue(); } } }); }; Dropzone.prototype.removeFile = function(file) { if (file.processing) { throw new Error("Can't remove file currently processing"); } this.files = without(this.files, file); this.filesQueue = without(this.filesQueue, file); this.emit("removedfile", file); if (this.files.length === 0) { return this.emit("reset"); } }; Dropzone.prototype.removeAllFiles = function() { var file, _i, _len, _ref; _ref = this.files.slice(); for (_i = 0, _len = _ref.length; _i < _len; _i++) { file = _ref[_i]; if (__indexOf.call(this.filesProcessing, file) < 0) { this.removeFile(file); } } return null; }; Dropzone.prototype.createThumbnail = function(file) { var fileReader, _this = this; fileReader = new FileReader; fileReader.onload = function() { var img; img = new Image; img.onload = function() { var canvas, ctx, srcHeight, srcRatio, srcWidth, srcX, srcY, thumbnail, trgHeight, trgRatio, trgWidth, trgX, trgY; canvas = document.createElement("canvas"); ctx = canvas.getContext("2d"); srcX = 0; srcY = 0; srcWidth = img.width; srcHeight = img.height; canvas.width = _this.options.thumbnailWidth; canvas.height = _this.options.thumbnailHeight; trgX = 0; trgY = 0; trgWidth = canvas.width; trgHeight = canvas.height; srcRatio = img.width / img.height; trgRatio = canvas.width / canvas.height; if (img.height < canvas.height || img.width < canvas.width) { trgHeight = srcHeight; trgWidth = srcWidth; } else { if (srcRatio > trgRatio) { srcHeight = img.height; srcWidth = srcHeight * trgRatio; } else { srcWidth = img.width; srcHeight = srcWidth / trgRatio; } } srcX = (img.width - srcWidth) / 2; srcY = (img.height - srcHeight) / 2; trgY = (canvas.height - trgHeight) / 2; trgX = (canvas.width - trgWidth) / 2; ctx.drawImage(img, srcX, srcY, srcWidth, srcHeight, trgX, trgY, trgWidth, trgHeight); thumbnail = canvas.toDataURL("image/png"); return _this.emit("thumbnail", file, thumbnail); }; return img.src = fileReader.result; }; return fileReader.readAsDataURL(file); }; Dropzone.prototype.processQueue = function() { var i, parallelUploads, processingLength; parallelUploads = this.options.parallelUploads; processingLength = this.filesProcessing.length; i = processingLength; while (i < parallelUploads) { if (!this.filesQueue.length) { return; } this.processFile(this.filesQueue.shift()); i++; } }; Dropzone.prototype.processFile = function(file) { this.filesProcessing.push(file); file.processing = true; this.emit("processingfile", file); return this.uploadFile(file); }; Dropzone.prototype.uploadFile = function(file) { var formData, handleError, input, inputName, inputType, key, progressObj, value, xhr, _i, _len, _ref, _ref1, _ref2, _this = this; xhr = new XMLHttpRequest(); xhr.open(this.options.method, this.options.url, true); handleError = function() { return _this.errorProcessing(file, xhr.responseText || ("Server responded with " + xhr.status + " code.")); }; xhr.onload = function(e) { var response, _ref; if (!((200 <= (_ref = xhr.status) && _ref < 300))) { return handleError(); } else { _this.emit("uploadprogress", file, 100); response = xhr.responseText; if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) { response = JSON.parse(response); } return _this.finished(file, response, e); } }; xhr.onerror = function() { return handleError(); }; progressObj = (_ref = xhr.upload) != null ? _ref : xhr; progressObj.onprogress = function(e) { return _this.emit("uploadprogress", file, Math.max(0, Math.min(100, (e.loaded / e.total) * 100))); }; xhr.setRequestHeader("Accept", "application/json"); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xhr.setRequestHeader("X-File-Name", file.name); formData = new FormData(); if (this.options.params) { _ref1 = this.options.params; for (key in _ref1) { value = _ref1[key]; formData.append(key, value); } } if (this.element.tagName === "FORM") { _ref2 = this.element.querySelectorAll("input, textarea, select, button"); for (_i = 0, _len = _ref2.length; _i < _len; _i++) { input = _ref2[_i]; inputName = input.getAttribute("name"); inputType = input.getAttribute("type"); if (!inputType || inputType.toLowerCase() !== "checkbox" || input.checked) { formData.append(inputName, input.value); } } } this.emit("sending", file, xhr, formData); formData.append(this.options.paramName, file); return xhr.send(formData); }; Dropzone.prototype.finished = function(file, responseText, e) { this.filesProcessing = without(this.filesProcessing, file); file.processing = false; this.processQueue(); this.emit("success", file, responseText, e); this.emit("finished", file, responseText, e); return this.emit("complete", file); }; Dropzone.prototype.errorProcessing = function(file, message) { this.filesProcessing = without(this.filesProcessing, file); file.processing = false; this.processQueue(); this.emit("error", file, message); return this.emit("complete", file); }; return Dropzone; })(Em); Dropzone.version = "2.0.8"; Dropzone.options = {}; Dropzone.instances = []; Dropzone.forElement = function(element) { var instance, _i, _len, _ref; if (typeof element === "string") { element = document.querySelector(element); } _ref = Dropzone.instances; for (_i = 0, _len = _ref.length; _i < _len; _i++) { instance = _ref[_i]; if (instance.element === element) { return instance; } } return null; }; Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i]; Dropzone.isBrowserSupported = function() { var capableBrowser, regex, _i, _len, _ref; capableBrowser = true; if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) { if (!("classList" in document.createElement("a"))) { capableBrowser = false; } else { _ref = Dropzone.blacklistedBrowsers; for (_i = 0, _len = _ref.length; _i < _len; _i++) { regex = _ref[_i]; if (regex.test(navigator.userAgent)) { capableBrowser = false; continue; } } } } else { capableBrowser = false; } return capableBrowser; }; without = function(list, rejectedItem) { var item, _i, _len, _results; _results = []; for (_i = 0, _len = list.length; _i < _len; _i++) { item = list[_i]; if (item !== rejectedItem) { _results.push(item); } } return _results; }; camelize = function(str) { return str.replace(/[\-_](\w)/g, function(match) { return match[1].toUpperCase(); }); }; createElement = function(string) { var div; div = document.createElement("div"); div.innerHTML = string; return div.childNodes[0]; }; if (typeof jQuery !== "undefined" && jQuery !== null) { jQuery.fn.dropzone = function(options) { return this.each(function() { return new Dropzone(this, options); }); }; } if (typeof module !== "undefined" && module !== null) { module.exports = Dropzone; } else { window.Dropzone = Dropzone; } contentLoaded = function(win, fn) { var add, doc, done, init, poll, pre, rem, root, top; done = false; top = true; doc = win.document; root = doc.documentElement; add = (doc.addEventListener ? "addEventListener" : "attachEvent"); rem = (doc.addEventListener ? "removeEventListener" : "detachEvent"); pre = (doc.addEventListener ? "" : "on"); init = function(e) { if (e.type === "readystatechange" && doc.readyState !== "complete") { return; } (e.type === "load" ? win : doc)[rem](pre + e.type, init, false); if (!done && (done = true)) { return fn.call(win, e.type || e); } }; poll = function() { var e; try { root.doScroll("left"); } catch (_error) { e = _error; setTimeout(poll, 50); return; } return init("poll"); }; if (doc.readyState !== "complete") { if (doc.createEventObject && root.doScroll) { try { top = !win.frameElement; } catch (_error) {} if (top) { poll(); } } doc[add](pre + "DOMContentLoaded", init, false); doc[add](pre + "readystatechange", init, false); return win[add](pre + "load", init, false); } }; contentLoaded(window, function() { var checkElements, dropzone, dropzones, _i, _len, _results; if (false) { dropzones = document.querySelectorAll(".dropzone"); } else { dropzones = []; checkElements = function(elements) { var el, _i, _len, _results; _results = []; for (_i = 0, _len = elements.length; _i < _len; _i++) { el = elements[_i]; if (/(^| )dropzone($| )/.test(el.className)) { _results.push(dropzones.push(el)); } else { _results.push(void 0); } } return _results; }; checkElements(document.getElementsByTagName("div")); checkElements(document.getElementsByTagName("form")); } _results = []; for (_i = 0, _len = dropzones.length; _i < _len; _i++) { dropzone = dropzones[_i]; _results.push(new Dropzone(dropzone)); } return _results; }); }).call(this); }); require.alias("component-emitter/index.js", "dropzone/deps/emitter/index.js"); if (typeof exports == "object") { module.exports = require("dropzone"); } else if (typeof define == "function" && define.amd) { define(function(){ return require("dropzone"); }); } else { window["Dropzone"] = require("dropzone"); }})(); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/dropzone/upload.php ================================================ '; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible file upload attack!\n"; } echo 'Here is some more debugging info:'; print_r($_FILES); print "
        "; */ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/.gitignore ================================================ InputMask ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/README.md ================================================ #jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) jquery.inputmask is a jquery plugin which create an input mask. An inputmask helps the user with the input by ensuring a predefined format. This can be usefull for dates, numerics, phone numbers, ... Highlights: - easy to use - optional parts anywere in the mask - possibility to define aliases which hide complexity - date / datetime masks - numeric masks - lots of callbacks - non-greedy masks - many features can be enabled/disabled/configured by options - supports readonly/disabled/dir="rtl" attributes - support data-inputmask attribute - multi-mask support ## Usage: Include the js-files which you can find in the dist-folder. You have the bundled file which contains the main plugin code and also all extensions. (date, numerics, other) or if you prefer to only include some parts, use the separate js-files in the dist/min folder. The minimum to include is the jquery.inputmask.js ```html ``` Define your masks: ```javascript $(document).ready(function(){ $("#date").inputmask("d/m/y"); //direct mask $("#phone").inputmask("mask", {"mask": "(999) 999-9999"}); //specifying fn & options $("#tin").inputmask({"mask": "99-9999999"}); //specifying options only }); ``` or ```html ``` ```javascript $(document).ready(function(){ $(":input").inputmask(); }); ``` ## Options: ### change the placeholder ```javascript $(document).ready(function(){ $("#date").inputmask("d/m/y",{ "placeholder": "*" }); }); ``` or a multi-char placeholder ```javascript $(document).ready(function(){ $("#date").inputmask("d/m/y",{ "placeholder": "dd/mm/yyyy" }); }); ``` ### execute a function when the mask is completed, incomplete or cleared ```javascript $(document).ready(function(){ $("#date").inputmask("d/m/y",{ "oncomplete": function(){ alert('inputmask complete'); } }); $("#date").inputmask("d/m/y",{ "onincomplete": function(){ alert('inputmask incomplete'); } }); $("#date").inputmask("d/m/y",{ "oncleared": function(){ alert('inputmask cleared'); } }); }); ``` ### clearIncomplete - clear the incomplete input on blur ```javascript $(document).ready(function(){ $("#date").inputmask("d/m/y",{ "clearIncomplete": true } }); }); ``` ### mask repeat function ```javascript $(document).ready(function(){ $("#number").inputmask({ "mask": "9", "repeat": 10 }); // ~ mask "9999999999" }); ``` ### mask non-greedy repeat function ```javascript $(document).ready(function(){ $("#number").inputmask({ "mask": "9", "repeat": 10, "greedy": false }); // ~ mask "9" or mask "99" or ... mask "9999999999" }); ``` ### get the unmaskedvalue ```javascript $(document).ready(function(){ $("#number").inputmask('unmaskedvalue'); }); ``` ### set a value and apply mask this can be done with the traditionnal jquery.val function (all browsers) or javascript value property for browsers which implement lookupGetter or getOwnPropertyDescriptor ```javascript $(document).ready(function(){ $("#number").val(12345); var number = document.getElementById("number"); number.value = 12345; }); ``` with the autoUnmaskoption you can change the return of $.fn.val (or value property) to unmaskedvalue or the maskedvalue ```javascript $(document).ready(function(){ $('#<%= tbDate.ClientID%>').inputmask({ "mask": "d/m/y", 'autoUnmask' : true}); // value: 23/03/1973 alert($('#<%= tbDate.ClientID%>').val()); // shows 23031973 (autoUnmask: true) var tbDate = document.getElementById("<%= tbDate.ClientID%>"); alert(tbDate.value); // shows 23031973 (autoUnmask: true) }); ``` ### add custom definitions You can define your own definitions to use in your mask. Start by choosing a masksymbol. ##### validator Next define your validator. The validator can be a regular expression or a function. ##### cardinality Cardinality specifies how many characters are represented and validated for the definition. ##### prevalidator The prevalidator option is used to validate the characters before the definition cardinality is reached. (see 'j' example) ##### definitionSymbol When you insert or delete characters, they are only shifted when the definition type is the same. This behavior can be overridden by giving a definitionSymbol. (see example x, y, z, which can be used for ip-address masking, the validation is different, but it is allowed to shift the characteres between the definitions) ```javascript $.extend($.inputmask.defaults.definitions, { 'f': { //masksymbol "validator": "[0-9\(\)\.\+/ ]", "cardinality": 1, 'prevalidator': null }, 'g': { "validator": function (chrs, buffer, pos, strict, opts) { //do some logic and return true, false, or { "pos": new position, "c": character to place } } "cardinality": 1, 'prevalidator': null }, 'j': { //basic year validator: "(19|20)\\d{2}", cardinality: 4, prevalidator: [ { validator: "[12]", cardinality: 1 }, { validator: "(19|20)", cardinality: 2 }, { validator: "(19|20)\\d", cardinality: 3 } ] }, 'x': { validator: "[0-2]", cardinality: 1, definitionSymbol: "i" //this allows shifting values from other definitions, with the same masksymbol or definitionSymbol }, 'y': { validator: function (chrs, buffer, pos, strict, opts) { var valExp2 = new RegExp("2[0-5]|[01][0-9]"); return valExp2.test(buffer[pos - 1] + chrs); }, cardinality: 1, definitionSymbol: "i" }, 'z': { validator: function (chrs, buffer, pos, strict, opts) { var valExp3 = new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]"); return valExp3.test(buffer[pos - 2] + buffer[pos - 1] + chrs); }, cardinality: 1, definitionSymbol: "i" } }); ``` ### set defaults ```javascript $.extend($.inputmask.defaults, { 'autoUnmask': true }); ``` ### numeric input direction ```javascript $(document).ready(function(){ $(selector).inputmask('€ 999.999.999,99', { numericInput: true }); //123456 => € ___.__1.234,56 }); ``` #### skipRadixDance If you define a radixPoint the caret will always jump to the integer part, until you type the radixpoint. ```javascript $(document).ready(function(){ $(selector).inputmask('€ 999.999.999,99', { numericInput: true, radixPoint: "," }); }); ``` This behavior can be skipped by setting the skipRadixDance to true. #### align the numerics to the right By setting the rightAlignNumerics you can specify to right align a numeric inputmask. Default is true. ```javascript $(document).ready(function(){ $(selector).inputmask('decimal', { rightAlignNumerics: false }); //disables the right alignment of the decimal input }); ``` ### remove the inputmask ```javascript $(document).ready(function(){ $('selector').inputmask('remove'); }); ``` ### escape special mask chars ```javascript $(document).ready(function(){ $("#months").inputmask("m \\months"); }); ``` ### clearMaskOnLostFocus remove the empty mask on blur or when not empty removes the optional trailing part ```javascript $(document).ready(function(){ $("#ssn").inputmask("999-99-9999",{placeholder:" ", clearMaskOnLostFocus: true }); //default }); ``` ### Optional Masks It is possible to define some parts in the mask as optional. This is done by using [ ]. Example: ```javascript $('#test').inputmask('(99) 9999[9]-9999'); ``` This mask wil allow input like (99) 99999-9999 or (99) 9999-9999. Input => 12123451234 mask => (12) 12345-1234 (trigger complete) Input => 121234-1234 mask => (12) 1234-1234 (trigger complete) Input => 1212341234 mask => (12) 12341-234_ (trigger incomplete) #### skipOptionalPartCharacter As an extra there is another configurable character which is used to skip an optional part in the mask. ```javascript skipOptionalPartCharacter: " ", ``` Input => 121234 1234 mask => (12) 1234-1234 (trigger complete) When `clearMaskOnLostFocus: true` is set in the options (default), the mask will clearout the optional part when it is not filled in and this only in case the optional part is at the end of the mask. For example, given: ```javascript $('#test').inputmask('999[-AAA]'); ``` While the field has focus and is blank, users will see the full mask `___-___`. When the required part of the mask is filled and the field loses focus, the user will see `123`. When both the required and optional parts of the mask are filled out and the field loses focus, the user will see `123-ABC`. ### Multiple masks You can define multiple mask for your input. Depending on the input the masking will switch between the defined masks. This can be usefull when the masks are too different to solve it with optional parts. ```javascript $(selector).inputmask({ mask: ["999.999", "aa-aa-aa"]}); ``` ### aliases option First you have to create an alias definition (more examples can be found in jquery.inputmask.extensions.js) ```javascript $.extend($.inputmask.defaults.aliases, { 'date': { mask: "d/m/y" }, 'dd/mm/yyyy': { alias: "date" } }); ``` use: ```javascript $(document).ready(function(){ $("#date").inputmask("date"); // => equals to $("#date").inputmask("d/m/y"); }); ``` or use the dd/mm/yyyy alias of the date alias: ```javascript $(document).ready(function(){ $("#date").inputmask("dd/mm/yyyy"); // => equals to $("#date").inputmask("d/m/y"); }); ``` ### auto upper/lower- casing inputmask see jquery.inputmask.extensions.js for an example how to define "auto"-casing in a definition (definition A) casing can be null, "upper" or "lower" ```javascript $(document).ready(function(){ $("#test").inputmask("999-AAA"); // => 123abc ===> 123-ABC }); ``` ### getemptymask command return the default (empty) mask value ```javascript $(document).ready(function(){ $("#test").inputmask("999-AAA"); var initialValue = $("#test").inputmask("getemptymask"); // initialValue => "___-___" }); ``` ### onKeyUp / onKeyDown option Use this to do some extra processing of the input when certain keys are pressed. This can be usefull when implementing an alias, ex. decimal alias, autofill the digits when pressing tab. see jquery.inputmask.extensions.js for some examples ### hasMaskedValue Check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value ```javascript $(document).ready(function(){ function validateMaskedValue(val){} function validateValue(val){} var val = $("#test").val(); if($("#test").inputmask("hasMaskedValue")) validateMaskedValue(val); else validateValue(val); }); ``` ### showMaskOnFocus Shows the mask when the input gets focus. (default = true) ```javascript $(document).ready(function(){ $("#ssn").inputmask("999-99-9999",{ showMaskOnFocus: true }); //default }); ``` To make sure no mask is visible on focus also set the showMaskOnHover to false. Otherwise hovering with the mouse will set the mask and will stay on focus. ### showMaskOnHover Shows the mask when hovering the mouse. (default = true) ```javascript $(document).ready(function(){ $("#ssn").inputmask("999-99-9999",{ showMaskOnHover: true }); //default }); ``` ### onKeyValidation Callback function is executed on every keyvalidation with the result as parameter. ```javascript $(document).ready(function(){ $("#ssn").inputmask("999-99-9999", { onKeyValidation: function (result) { console.log(result); } }); }); ``` ### isComplete Verify wheter the current value is complete or not. ```javascript $(document).ready(function(){ if($("#ssn").inputmask("isComplete")){ //do something } }); ``` ### showTooltip Show the current mask definition as a tooltip. ```javascript $(selector).inputmask({ mask: ["999-999-9999 [x99999]", "+099 99 99 9999[9]-9999"], showTooltip: true }); ``` ## Supported markup options ### RTL attribute ```html ``` ### readonly attribute ```html ``` ### disabled attribute ```html ``` ### maxlength attribute ```html ``` ### data-inputmask attribute You can also apply an inputmask by using the data-inputmask attribute. In the attribute you specify the options wanted for the inputmask. This gets parsed with $.parseJSON (for the moment), so be sure to use a welformed json-string without the {}. ```html ``` ```javascript $(document).ready(function(){ $(":input").inputmask(); }); ``` ## Compiling with Google Closure Compiler First grab the sources from github. In the root you type ant. A new folder dist is created with the minified and optimized js-files ## .NET Nuget Package Install ```html PM> Install-Package jQuery.InputMask ``` In App_Start, BundleConfig.cs ```c# bundles.Add(new ScriptBundle("~/bundles/inputmask").Include( "~/Scripts/jquery.inputmask/jquery.inputmask-{version}.js", "~/Scripts/jquery.inputmask/jquery.inputmask.extensions-{version}.js", "~/Scripts/jquery.inputmask/jquery.inputmask.date.extensions-{version}.js", "~/Scripts/jquery.inputmask/jquery.inputmask.numeric.extensions-{version}.js")); ``` In Layout ```html @Scripts.Render("~/bundles/inputmask") ``` # jquery.inputmask extensions ## Alias definitions ### date & datetime aliases ```javascript $(document).ready(function(){ $("#date").inputmask("dd/mm/yyyy"); $("#date").inputmask("mm/dd/yyyy"); $("#date").inputmask("date"); // alias for dd/mm/yyyy $("#date").inputmask("date", {yearrange: { minyear: 1900, maxyear: 2099 }}); //specify year range }); ``` The date aliases take leapyears into account. There is also autocompletion on day, month, year. For example: input: 2/2/2012 result: 02/02/2012 input: 352012 result: 03/05/2012 input: 3/530 result: 03/05/2030 input: ctrl rightarrow result: the date from today ```javascript $(document).ready(function(){ $("#date").inputmask("datetime"); // 24h $("#date").inputmask("datetime12"); // am/pm }); ``` ### numeric aliases ```javascript $(document).ready(function(){ $("#numeric").inputmask("decimal"); $("#numeric").inputmask("decimal", { allowMinus: false }); $("#numeric").inputmask("integer"); }); ``` RadixDance With the decimal mask the caret will always jump to the integer part, until you type the radixpoint. There is autocompletion on tab with decimal numbers. You can disable this behaviour by setting the skipRadixDance to true. Define the radixpoint ```javascript $(document).ready(function(){ $("#numeric").inputmask("decimal", { radixPoint: "," }); }); ``` Define the number of digits after the radixpoint ```javascript $(document).ready(function(){ $("#numeric").inputmask("decimal", { digits: 3 }); }); ``` When TAB out of the input the digits autocomplate with 0 if the digits option is given a valid number. Grouping support through: autoGroup, groupSeparator, groupSize ```javascript $(document).ready(function(){ $("#numeric").inputmask("decimal", { radixPoint: ",", autoGroup: true, groupSeparator: ".", groupSize: 3 }); }); ``` Allow minus and/or plus symbol ```javascript $(document).ready(function(){ $("#numeric").inputmask("decimal", { allowMinus: false }); $("#numeric").inputmask("integer", { allowMinus: false, allowPlus: true }); }); ``` ### other aliases An ip adress alias for entering valid ip-addresses. ```javascript $(document).ready(function(){ $(selector).inputmask("ip"); }); ``` You can find/modify/extend this alias in the jquery.inputmask.extensions.js ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/dist/jquery.inputmask.bundle.js ================================================ /** * @license Input Mask plugin for jquery * http://github.com/RobinHerbots/jquery.inputmask * Copyright (c) 2010 - 2013 Robin Herbots * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) * Version: 2.2.42 */ (function ($) { if ($.fn.inputmask == undefined) { $.inputmask = { //options default defaults: { placeholder: "_", optionalmarker: { start: "[", end: "]" }, escapeChar: "\\", mask: null, oncomplete: $.noop, //executes when the mask is complete onincomplete: $.noop, //executes when the mask is incomplete and focus is lost oncleared: $.noop, //executes when the mask is cleared repeat: 0, //repetitions of the mask greedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed autoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor clearMaskOnLostFocus: true, insertMode: true, //insert the input or overwrite the input clearIncomplete: false, //clear the incomplete input on blur aliases: {}, //aliases definitions => see jquery.inputmask.extensions.js onKeyUp: $.noop, //override to implement autocomplete on certain keys for example onKeyDown: $.noop, //override to implement autocomplete on certain keys for example showMaskOnFocus: true, //show the mask-placeholder when the input has focus showMaskOnHover: true, //show the mask-placeholder when hovering the empty input onKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: result, opts skipOptionalPartCharacter: " ", //a character which can be used to skip an optional part of a mask showTooltip: false, //show the activemask as tooltip //numeric basic properties numericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position) radixPoint: "", //".", // | "," skipRadixDance: false, //disable radixpoint caret positioning rightAlignNumerics: true, //align numerics to the right //numeric basic properties definitions: { '9': { validator: "[0-9]", cardinality: 1 }, 'a': { validator: "[A-Za-z\u0410-\u044F\u0401\u0451]", cardinality: 1 }, '*': { validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]", cardinality: 1 } }, 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 }, //specify keycodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF ignorables: [9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { var calculatedLength = buffer.length; if (!greedy && repeat > 1) { calculatedLength += (buffer.length * (repeat - 1)); } return calculatedLength; } }, val: $.fn.val, //store the original jquery val function escapeRegex: function (str) { var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\']; return str.replace(new RegExp('(\\' + specials.join('|\\') + ')', 'gim'), '\\$1'); } }; $.fn.inputmask = function (fn, options) { var opts = $.extend(true, {}, $.inputmask.defaults, options), msie10 = navigator.userAgent.match(new RegExp("msie 10", "i")) !== null, iphone = navigator.userAgent.match(new RegExp("iphone", "i")) !== null, android = navigator.userAgent.match(new RegExp("android.*safari.*", "i")) !== null, pasteEvent = isInputEventSupported('paste') && !msie10 ? 'paste' : 'input', android533, masksets, activeMasksetIndex = 0; if (android) { var browser = navigator.userAgent.match(/safari.*/i), version = parseInt(new RegExp(/[0-9]+/).exec(browser)); android533 = (version <= 533); //android534 = (533 < version) && (version <= 534); } if (typeof fn === "string") { switch (fn) { case "mask": //resolve possible aliases given by options resolveAlias(opts.alias, options); masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), 0).mask(this); }); case "unmaskedvalue": var $input = $(this), input = this; masksets = $input.data('inputmask')['masksets']; activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; opts = $input.data('inputmask')['opts']; return maskScope(masksets, activeMasksetIndex).unmaskedvalue(this); case "remove": return this.each(function () { var $input = $(this), input = this; setTimeout(function () { if ($input.data('inputmask')) { masksets = $input.data('inputmask')['masksets']; activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; opts = $input.data('inputmask')['opts']; //writeout the unmaskedvalue input._valueSet(maskScope(masksets, activeMasksetIndex).unmaskedvalue($input, true)); //clear data $input.removeData('inputmask'); //unbind all events $input.unbind(".inputmask"); $input.removeClass('focus.inputmask'); //restore the value property var valueProperty; if (Object.getOwnPropertyDescriptor) valueProperty = Object.getOwnPropertyDescriptor(input, "value"); if (valueProperty && valueProperty.get) { if (input._valueGet) { Object.defineProperty(input, "value", { get: input._valueGet, set: input._valueSet }); } } else if (document.__lookupGetter__ && input.__lookupGetter__("value")) { if (input._valueGet) { input.__defineGetter__("value", input._valueGet); input.__defineSetter__("value", input._valueSet); } } delete input._valueGet; delete input._valueSet; } }, 0); }); break; case "getemptymask": //return the default (empty) mask value, usefull for setting the default value in validation if (this.data('inputmask')) { masksets = this.data('inputmask')['masksets']; activeMasksetIndex = this.data('inputmask')['activeMasksetIndex']; return masksets[activeMasksetIndex]['_buffer'].join(''); } else return ""; case "hasMaskedValue": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value return this.data('inputmask') ? !this.data('inputmask')['opts'].autoUnmask : false; case "isComplete": masksets = this.data('inputmask')['masksets']; activeMasksetIndex = this.data('inputmask')['activeMasksetIndex']; opts = this.data('inputmask')['opts']; return maskScope(masksets, activeMasksetIndex).isComplete(this[0]._valueGet().split('')); default: //check if the fn is an alias if (!resolveAlias(fn, options)) { //maybe fn is a mask so we try //set mask opts.mask = fn; } masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this); }); break; } } else if (typeof fn == "object") { opts = $.extend(true, {}, $.inputmask.defaults, fn); resolveAlias(opts.alias, fn); //resolve aliases masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this); }); } else if (fn == undefined) { //look for data-inputmask atribute - the attribute should only contain optipns return this.each(function () { var attrOptions = $(this).attr("data-inputmask"); if (attrOptions && attrOptions != "") { try { attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'); var dataoptions = $.parseJSON("{" + attrOptions + "}"); opts = $.extend(true, {}, $.inputmask.defaults, options); $.extend(true, opts, dataoptions); resolveAlias(opts.alias, dataoptions); opts.alias = undefined; $(this).inputmask(opts); } catch (ex) { } //need a more relax parseJSON } }); } //helper functions function isInputEventSupported(eventName) { var el = document.createElement('input'), eventName = 'on' + eventName, isSupported = (eventName in el); if (!isSupported) { el.setAttribute(eventName, 'return;'); isSupported = typeof el[eventName] == 'function'; } el = null; return isSupported; } function resolveAlias(aliasStr, options) { var aliasDefinition = opts.aliases[aliasStr]; if (aliasDefinition) { if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias); //alias is another alias $.extend(true, opts, aliasDefinition); //merge alias definition in the options $.extend(true, opts, options); //reapply extra given options return true; } return false; } function getMaskTemplate(mask) { var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat; if (mask.length == 1 && greedy == false) { opts.placeholder = ""; } //hide placeholder with single non-greedy mask var singleMask = $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true; } else if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { for (var i = 0; i < maskdef.cardinality; i++) { outElem.push(getPlaceHolder(outCount + i)); } } else { outElem.push(element); escaped = false; } outCount += outElem.length; return outElem; } }); //allocate repetitions var repeatedMask = singleMask.slice(); for (var i = 1; i < repeat && greedy; i++) { repeatedMask = repeatedMask.concat(singleMask.slice()); } return { "mask": repeatedMask, "repeat": repeat, "greedy": greedy }; } //test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol} function getTestingChain(mask) { var isOptional = false, escaped = false; var newBlockMarker = false; //indicates wheter the begin/ending of a block should be indicated return $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true; } else if (element == opts.optionalmarker.start && !escaped) { isOptional = true; newBlockMarker = true; } else if (element == opts.optionalmarker.end && !escaped) { isOptional = false; newBlockMarker = true; } else { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { var prevalidators = maskdef["prevalidator"], prevalidatorsL = prevalidators ? prevalidators.length : 0; for (var i = 1; i < maskdef.cardinality; i++) { var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator["validator"], cardinality = prevalidator["cardinality"]; outElem.push({ fn: validator ? typeof validator == 'string' ? new RegExp(validator) : new function () { this.test = validator; } : new RegExp("."), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] | element }); if (isOptional == true) //reset newBlockMarker newBlockMarker = false; } outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == 'string' ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator; } : new RegExp("."), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] | element }); } else { outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element }); escaped = false; } //reset newBlockMarker newBlockMarker = false; return outElem; } }); } function generateMaskSets() { var ms = []; var genmasks = []; //used to keep track of the masks that where processed, to avoid duplicates function markOptional(maskPart) { //needed for the clearOptionalTail functionality return opts.optionalmarker.start + maskPart + opts.optionalmarker.end; } function splitFirstOptionalEndPart(maskPart) { var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { optionalStartMarkers++; } if (maskPart.charAt(i) == opts.optionalmarker.end) { optionalEndMarkers++; } if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers) break; } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)); } return maskParts; } function splitFirstOptionalStartPart(maskPart) { var mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { break; } } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)); } return maskParts; } function generateMask(maskPrefix, maskPart) { var maskParts = splitFirstOptionalEndPart(maskPart); var newMask, maskTemplate; var masks = splitFirstOptionalStartPart(maskParts[0]); if (masks.length > 1) { newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } if (splitFirstOptionalStartPart(masks[1]).length > 1) { //optional contains another optional generateMask(maskPrefix + masks[0], masks[1] + maskParts[1]); } if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) { generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1]); generateMask(maskPrefix + masks[0], maskParts[1]); } } else { newMask = maskPrefix + maskParts; if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } } } if ($.isArray(opts.mask)) { $.each(opts.mask, function (ndx, lmnt) { generateMask("", lmnt.toString()); }); } else generateMask("", opts.mask.toString()); return ms; } function getPlaceHolder(pos) { return opts.placeholder.charAt(pos % opts.placeholder.length); } function maskScope(masksets, activeMasksetIndex) { //maskset helperfunctions function getActiveMaskSet() { return masksets[activeMasksetIndex]; } function getActiveTests() { return getActiveMaskSet()['tests']; } function getActiveBufferTemplate() { return getActiveMaskSet()['_buffer']; } function getActiveBuffer() { return getActiveMaskSet()['buffer']; } function isValid(pos, c, strict, isRTL) { //strict true ~ no correction or autofill strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions function _isValid(position, activeMaskset) { var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = '', buffer = activeMaskset["buffer"]; for (var i = activeMaskset['tests'][testPos].cardinality; i > loopend; i--) { chrs += getBufferElement(buffer, testPos - (i - 1)); } if (c) { chrs += c; } //return is false or a json object => { pos: ??, c: ??} or true return activeMaskset['tests'][testPos].fn != null ? activeMaskset['tests'][testPos].fn.test(chrs, buffer, position, strict, opts) : false; } if (strict) { var result = _isValid(pos, getActiveMaskSet()); //only check validity in current mask when validating strict if (result === true) { result = { "pos": pos }; //always take a possible corrected maskposition into account } return result; } var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (index, value) { var activeMaskset = this; activeMasksetIndex = index; var maskPos = pos; if (currentActiveMasksetIndex != activeMasksetIndex && !isMask(pos)) { if (c == activeMaskset['_buffer'][maskPos] || c == opts.skipOptionalPartCharacter) { //match non-mask item results.push({ "activeMasksetIndex": index, "result": { "refresh": true, c: activeMaskset['_buffer'][maskPos] } }); //new command hack only rewrite buffer activeMaskset['lastValidPosition'] = maskPos; return false; } else activeMaskset['lastValidPosition'] = isRTL ? getMaskLength() + 1 : -1; //mark mask as validated and invalid //maskPos = isRTL ? seekPrevious(pos) : seekNext(pos); } if ((activeMaskset['lastValidPosition'] == undefined && maskPos == (isRTL ? seekPrevious(getMaskLength()) : seekNext(-1)) ) || (isRTL || opts.numericInput) ? activeMaskset['lastValidPosition'] <= opts.numericInput ? getMaskLength() : seekNext(maskPos) : activeMaskset['lastValidPosition'] >= seekPrevious(maskPos)) { if (maskPos >= 0 && maskPos < getMaskLength()) { result = _isValid(maskPos, activeMaskset); if (result !== false) { if (result === true) { result = { "pos": maskPos }; //always take a possible corrected maskposition into account } var newValidPosition = result.pos || maskPos; if (activeMaskset['lastValidPosition'] == undefined || (isRTL ? (opts.greedy ? activeMaskset['lastValidPosition'] > newValidPosition : newValidPosition == getActiveBuffer().length - 1) : activeMaskset['lastValidPosition'] < newValidPosition)) activeMaskset['lastValidPosition'] = newValidPosition; //set new position from isValid } else activeMaskset['lastValidPosition'] = isRTL ? pos == getMaskLength() ? undefined : seekNext(pos) : pos == 0 ? undefined : seekPrevious(pos); //autocorrect validposition from backspace etc results.push({ "activeMasksetIndex": index, "result": result }); } } }); activeMasksetIndex = currentActiveMasksetIndex; //reset activeMasksetIndex return results; //return results of the multiple mask validations } function determineActiveMasksetIndex(isRTL) { var currentMasksetIndex = activeMasksetIndex, highestValid = { "activeMasksetIndex": 0, "lastValidPosition": isRTL ? getMaskLength() + 1 : -1 }; $.each(masksets, function (index, value) { var activeMaskset = this; if (activeMaskset['lastValidPosition'] != undefined) { if ((isRTL || opts.numericInput) ? (activeMaskset['lastValidPosition'] < highestValid['lastValidPosition']) : (activeMaskset['lastValidPosition'] > highestValid['lastValidPosition'])) { highestValid["activeMasksetIndex"] = index; highestValid["lastValidPosition"] = activeMaskset['lastValidPosition']; } } }); activeMasksetIndex = highestValid["activeMasksetIndex"]; if (currentMasksetIndex != activeMasksetIndex) { if (isRTL) { clearBuffer(getActiveBuffer(), 0, seekPrevious(highestValid["lastValidPosition"])); } else { clearBuffer(getActiveBuffer(), seekNext(highestValid["lastValidPosition"]), getMaskLength()); } getActiveMaskSet()["writeOutBuffer"] = true; } } function isMask(pos) { var testPos = determineTestPosition(pos); var test = getActiveTests()[testPos]; return test != undefined ? test.fn : false; } function determineTestPosition(pos) { return pos % getActiveTests().length; } function getMaskLength() { return opts.getMaskLength(getActiveBufferTemplate(), getActiveMaskSet()['greedy'], getActiveMaskSet()['repeat'], getActiveBuffer(), opts); } //pos: from position function seekNext(pos) { var maskL = getMaskLength(); if (pos >= maskL) return maskL; var position = pos; while (++position < maskL && !isMask(position)) { } ; return position; } //pos: from position function seekPrevious(pos) { var position = pos; if (position <= 0) return 0; while (--position > 0 && !isMask(position)) { } ; return position; } function setBufferElement(buffer, position, element, autoPrepare, isRTL) { if (autoPrepare) position = prepareBuffer(buffer, position, isRTL); var test = getActiveTests()[determineTestPosition(position)]; var elem = element; if (elem != undefined) { switch (test.casing) { case "upper": elem = element.toUpperCase(); break; case "lower": elem = element.toLowerCase(); break; } } buffer[position] = elem; } function getBufferElement(buffer, position, autoPrepare) { if (autoPrepare) position = prepareBuffer(buffer, position); return buffer[position]; } //needed to handle the non-greedy mask repetitions function prepareBuffer(buffer, position, isRTL) { var j; if (isRTL) { while (position < 0 && buffer.length < getMaskLength()) { j = getActiveBufferTemplate().length - 1; position = getActiveBufferTemplate().length; while (getActiveBufferTemplate()[j] !== undefined) { buffer.unshift(getActiveBufferTemplate()[j--]); } } } else { while (buffer[position] == undefined && buffer.length < getMaskLength()) { j = 0; while (getActiveBufferTemplate()[j] !== undefined) { //add a new buffer buffer.push(getActiveBufferTemplate()[j++]); } } } return position; } function writeBuffer(input, buffer, caretPos) { input._valueSet(buffer.join('')); if (caretPos != undefined) { caret(input, caretPos); } } ; function clearBuffer(buffer, start, end) { for (var i = start, maskL = getMaskLength() ; i < end && i < maskL; i++) { setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true)); } } ; function setReTargetPlaceHolder(buffer, pos) { var testPos = determineTestPosition(pos); setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos)); } function checkVal(input, writeOut, strict, nptvl) { var isRTL = $(input).data('inputmask')['isRTL'], inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet(), isRTL).split(''); $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); if (strict !== true) activeMasksetIndex = 0; //caret(input, getActiveMaskSet()["p"]); if (isRTL && !opts.numericInput) inputValue = inputValue.reverse(); var ml = getMaskLength(); $.each(inputValue, function (ndx, charCode) { var index = isRTL ? (opts.numericInput ? ml : ml - ndx - 1) : ndx; if (isMask(isRTL ? (opts.numericInput ? seekPrevious(ml) : ml - ndx - 1) : ndx) || (strict !== true && charCode != getBufferElement(getActiveBufferTemplate(), index, true))) { $(input).trigger("keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]); } }); if (strict === true) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["p"]) : seekPrevious(getActiveMaskSet()["p"]); } function escapeRegex(str) { return $.inputmask.escapeRegex.call(this, str); } function truncateInput(inputValue, rtl) { return rtl ? inputValue.replace(new RegExp("^(" + escapeRegex(getActiveBufferTemplate().join('')) + ")*"), "") : inputValue.replace(new RegExp("(" + escapeRegex(getActiveBufferTemplate().join('')) + ")*$"), ""); } function clearOptionalTail(input) { var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos; if ($(input).data('inputmask')['isRTL']) { for (var pos = 0; pos <= tmpBuffer.length - 1; pos++) { var testPos = determineTestPosition(pos); if (getActiveTests()[testPos].optionality) { if (!isMask(pos) || !isValid(pos, buffer[pos], true)) tmpBuffer.splice(0, 1); else break; } else break; } } else { for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) { var testPos = determineTestPosition(pos); if (getActiveTests()[testPos].optionality) { if (!isMask(pos) || !isValid(pos, buffer[pos], true)) tmpBuffer.pop(); else break; } else break; } } writeBuffer(input, tmpBuffer); } //functionality fn this.unmaskedvalue = function ($input, skipDatepickerCheck) { return unmaskedvalue($input, skipDatepickerCheck); }; function unmaskedvalue($input, skipDatepickerCheck) { var input = $input[0]; if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) { checkVal(input, false, true); return $.map(getActiveBuffer(), function (element, index) { return isMask(index) && isValid(index, element, true) ? element : null; }).join(''); } else { return input._valueGet(); } } var caretSavePoint; function caret(input, begin, end) { var npt = input.jquery && input.length > 0 ? input[0] : input, range; if (typeof begin == 'number') { if (!$(input).is(':visible')) { return; } end = (typeof end == 'number') ? end : begin; if (opts.insertMode == false && begin == end) end++; //set visualization for insert/overwrite mode if (npt.setSelectionRange) { if (android) { setTimeout(function () { npt.selectionStart = begin; npt.selectionEnd = android ? begin : end; }, 10); caretSavePoint = { "begin": begin, "end": end }; } else { npt.selectionStart = begin; npt.selectionEnd = end; } } else if (npt.createTextRange) { range = npt.createTextRange(); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', begin); range.select(); } } else { if (!$(input).is(':visible')) { return { "begin": 0, "end": 0 }; } if (npt.setSelectionRange) { begin = npt.selectionStart; end = npt.selectionEnd; } else if (document.selection && document.selection.createRange) { range = document.selection.createRange(); begin = 0 - range.duplicate().moveStart('character', -100000); end = begin + range.text.length; } return { "begin": begin, "end": end }; } }; this.isComplete = function (buffer) { return isComplete(buffer); }; function isComplete(buffer) { var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (ndx, ms) { activeMasksetIndex = ndx; var aml = seekPrevious(getMaskLength()); if (ms["lastValidPosition"] != undefined && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) { var msComplete = true; for (var i = 0; i <= aml; i++) { var mask = isMask(i), testPos = determineTestPosition(i); if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) { msComplete = false; break; } } complete = complete || msComplete; if (complete) //break loop return false; } highestValidPosition = ms["lastValidPosition"]; }); activeMasksetIndex = currentActiveMasksetIndex; //reset activeMaskset return complete; } this.mask = function (el) { var $input = $(el); if (!$input.is(":input")) return; //store tests & original buffer in the input element - used to get the unmasked value $input.data('inputmask', { 'masksets': masksets, 'activeMasksetIndex': activeMasksetIndex, 'opts': opts, 'isRTL': false }); //show tooltip if (opts.showTooltip) { $input.prop("title", getActiveMaskSet()["mask"]); } //correct greedy setting if needed getActiveMaskSet()['greedy'] = getActiveMaskSet()['greedy'] ? getActiveMaskSet()['greedy'] : getActiveMaskSet()['repeat'] == 0; //handle maxlength attribute var maxLength = $input.prop('maxLength'); if (getMaskLength() > maxLength && maxLength > -1) { //FF sets no defined max length to -1 if (maxLength < getActiveBufferTemplate().length) getActiveBufferTemplate().length = maxLength; if (getActiveMaskSet()['greedy'] == false) { getActiveMaskSet()['repeat'] = Math.round(maxLength / getActiveBufferTemplate().length); } $input.prop('maxLength', getMaskLength() * 2); } patchValueProperty(el); //init vars getActiveMaskSet()["undoBuffer"] = el._valueGet(); var skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround ignorable = false, isRTL = false; if (el.dir == "rtl" || opts.numericInput) { if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics)) $input.css("text-align", "right"); el.dir = "ltr"; $input.removeAttr("dir"); var inputData = $input.data('inputmask'); inputData['isRTL'] = true; $input.data('inputmask', inputData); isRTL = true; } //unbind all events - to make sure that no other mask will interfere when re-masking $input.unbind(".inputmask"); $input.removeClass('focus.inputmask'); //bind events $input.bind("mouseenter.inputmask", function () { var $input = $(this), input = this; if (!$input.hasClass('focus.inputmask') && opts.showMaskOnHover) { if (input._valueGet() != getActiveBuffer().join('')) { writeBuffer(input, getActiveBuffer()); } } }).bind("blur.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer(); $input.removeClass('focus.inputmask'); if (nptValue != getActiveMaskSet()["undoBuffer"]) { $input.change(); } if (opts.clearMaskOnLostFocus && nptValue != '') { if (nptValue == getActiveBufferTemplate().join('')) input._valueSet(''); else { //clearout optional tail of the mask clearOptionalTail(input); } } if (!isComplete(buffer)) { $input.trigger("incomplete"); if (opts.clearIncomplete) { $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); activeMasksetIndex = 0; if (opts.clearMaskOnLostFocus) input._valueSet(''); else { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer); } } } }).bind("focus.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(); if (opts.showMaskOnFocus && !$input.hasClass('focus.inputmask') && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ''))) { if (input._valueGet() != getActiveBuffer().join('')) { writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]); } } $input.addClass('focus.inputmask'); getActiveMaskSet()["undoBuffer"] = input._valueGet(); }).bind("mouseleave.inputmask", function () { var $input = $(this), input = this; if (opts.clearMaskOnLostFocus) { if (!$input.hasClass('focus.inputmask')) { if (input._valueGet() == getActiveBufferTemplate().join('') || input._valueGet() == '') input._valueSet(''); else { //clearout optional tail of the mask clearOptionalTail(input); } } } }).bind("click.inputmask", function () { var input = this; setTimeout(function () { var selectedCaret = caret(input), buffer = getActiveBuffer(); if (selectedCaret.begin == selectedCaret.end) { var clickPosition = selectedCaret.begin, lvp = getActiveMaskSet()["lastValidPosition"], lastPosition; determineInputDirection(input, selectedCaret); if (isRTL) { if (opts.numericInput) { lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ? $.inArray(opts.radixPoint, buffer) : getMaskLength(); } else { lastPosition = seekPrevious((lvp == undefined ? getMaskLength() : lvp) + 1); } caret(input, clickPosition > lastPosition && (isValid(clickPosition, buffer[clickPosition], true, isRTL) !== false || !isMask(clickPosition)) ? clickPosition : lastPosition); } else { lastPosition = seekNext(lvp == undefined ? -1 : lvp); caret(input, clickPosition < lastPosition && (isValid(clickPosition, buffer[clickPosition], true, isRTL) !== false || !isMask(clickPosition)) ? clickPosition : lastPosition); } } }, 0); }).bind('dblclick.inputmask', function () { var input = this; if (getActiveMaskSet()["lastValidPosition"] != undefined) { setTimeout(function () { isRTL ? caret(input, seekPrevious(getActiveMaskSet()["lastValidPosition"]), getMaskLength()) : caret(input, 0, seekNext(getActiveMaskSet()["lastValidPosition"])); }, 0); } }).bind("keydown.inputmask", keydownEvent ).bind("keypress.inputmask", keypressEvent ).bind("keyup.inputmask", keyupEvent ).bind(pasteEvent + ".inputmask dragdrop.inputmask drop.inputmask", function () { var input = this, $input = $(input); setTimeout(function () { checkVal(input, true, false); if (isComplete(getActiveBuffer())) $input.trigger("complete"); $input.click(); }, 0); }).bind('setvalue.inputmask', function () { var input = this; getActiveMaskSet()["undoBuffer"] = input._valueGet(); checkVal(input, true); if (input._valueGet() == getActiveBufferTemplate().join('')) input._valueSet(''); }).bind('complete.inputmask', opts.oncomplete) .bind('incomplete.inputmask', opts.onincomplete) .bind('cleared.inputmask', opts.oncleared); //apply mask checkVal(el, true, false); // Wrap document.activeElement in a try/catch block since IE9 throw "Unspecified error" if document.activeElement is undefined when we are in an IFrame. var activeElement; try { activeElement = document.activeElement; } catch (e) { } if (activeElement === el) { //position the caret when in focus $input.addClass('focus.inputmask'); caret(el, getActiveMaskSet()["lastValidPosition"]); } else if (opts.clearMaskOnLostFocus) { if (getActiveBuffer().join('') == getActiveBufferTemplate().join('')) { el._valueSet(''); } else { clearOptionalTail(el); } } installEventRuler(el); //private functions function installEventRuler(npt) { var events = $._data(npt).events; $.each(events, function (eventType, eventHandlers) { $.each(eventHandlers, function (ndx, eventHandler) { if (eventHandler.namespace == "inputmask") { var handler = eventHandler.handler; eventHandler.handler = function (e) { if (this.readOnly || this.disabled) e.preventDefault; else return handler.apply(this, arguments); }; } }); }); } function patchValueProperty(npt) { var valueProperty; if (Object.getOwnPropertyDescriptor) valueProperty = Object.getOwnPropertyDescriptor(npt, "value"); if (valueProperty && valueProperty.get) { if (!npt._valueGet) { npt._valueGet = valueProperty.get; npt._valueSet = valueProperty.set; Object.defineProperty(npt, "value", { get: function () { var $self = $(this), inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : this._valueGet() != masksets[activeMasksetIndex]['_buffer'].join('') ? this._valueGet() : ''; }, set: function (value) { this._valueSet(value); $(this).triggerHandler('setvalue.inputmask'); } }); } } else if (document.__lookupGetter__ && npt.__lookupGetter__("value")) { if (!npt._valueGet) { npt._valueGet = npt.__lookupGetter__("value"); npt._valueSet = npt.__lookupSetter__("value"); npt.__defineGetter__("value", function () { var $self = $(this), inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : this._valueGet() != masksets[activeMasksetIndex]['_buffer'].join('') ? this._valueGet() : ''; }); npt.__defineSetter__("value", function (value) { this._valueSet(value); $(this).triggerHandler('setvalue.inputmask'); }); } } else { if (!npt._valueGet) { npt._valueGet = function () { return this.value; }; npt._valueSet = function (value) { this.value = value; }; } if ($.fn.val.inputmaskpatch != true) { $.fn.val = function () { if (arguments.length == 0) { var $self = $(this); if ($self.data('inputmask')) { if ($self.data('inputmask')['opts'].autoUnmask) return $self.inputmask('unmaskedvalue'); else { var result = $.inputmask.val.apply($self); var inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return result != masksets[activeMasksetIndex]['_buffer'].join('') ? result : ''; } } else return $.inputmask.val.apply($self); } else { var args = arguments; return this.each(function () { var $self = $(this); var result = $.inputmask.val.apply($self, args); if ($self.data('inputmask')) $self.triggerHandler('setvalue.inputmask'); return result; }); } }; $.extend($.fn.val, { inputmaskpatch: true }); } } } function determineInputDirection(input, pos) { //set input direction according the position to the radixPoint if (opts.numericInput && opts.radixPoint != "" && opts.skipRadixDance === false) { var nptStr = input._valueGet(); var radixPosition = nptStr.indexOf(opts.radixPoint); isRTL = pos.begin <= radixPosition || pos.end <= radixPosition || radixPosition == -1; } } //shift chars to left from start to end and put c at end position if defined function shiftL(start, end, c) { var buffer = getActiveBuffer(); while (!isMask(start) && start - 1 >= 0) start--; //jumping over nonmask position for (var i = start; i < end && i < getMaskLength() ; i++) { if (isMask(i)) { setReTargetPlaceHolder(buffer, i); var j = seekNext(i); var p = getBufferElement(buffer, j); if (p != getPlaceHolder(j)) { if (j < getMaskLength() && isValid(i, p, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) { setBufferElement(buffer, i, getBufferElement(buffer, j), true, isRTL); if (j < end) { setReTargetPlaceHolder(buffer, j); //cleanup next position } } else { if (isMask(i)) break; } } //else if (c == undefined) break; } else { setReTargetPlaceHolder(buffer, i); } } if (c != undefined) setBufferElement(buffer, isRTL ? end : seekPrevious(end), c); if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join(''), isRTL).split(''); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i]; } if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); } return start; //return the used start position } function shiftR(start, end, c, full) { //full => behave like a push right ~ do not stop on placeholders var buffer = getActiveBuffer(); for (var i = start; i <= end && i < getMaskLength() ; i++) { if (isMask(i)) { var t = getBufferElement(buffer, i); setBufferElement(buffer, i, c, true, isRTL); if (t != getPlaceHolder(i)) { var j = seekNext(i); if (j < getMaskLength()) { if (isValid(j, t, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) c = t; else { if (isMask(j)) break; else c = t; } } else break; } else { c = t; if (full !== true) break; } } else setReTargetPlaceHolder(buffer, i); } var lengthBefore = buffer.length; if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join(''), isRTL).split(''); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i]; } if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); } return end - (lengthBefore - buffer.length); //return new start position } ; function keydownEvent(e) { //Safari 5.1.x - modal dialog fires keypress twice workaround skipKeyPressEvent = false; var input = this, k = e.keyCode, pos = caret(input); determineInputDirection(input, pos); //backspace, delete, and escape get special treatment if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete e.preventDefault(); //stop default action but allow propagation var beginPos = pos.begin; if (pos.begin == 0 && pos.end == getMaskLength()) { clearBuffer(getActiveBuffer(), pos.begin, pos.end); $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); } else if ((pos.end - pos.begin) > 1 || ((pos.end - pos.begin) == 1 && opts.insertMode)) { //partial selection clearBuffer(getActiveBuffer(), pos.begin, pos.end); var ml = getMaskLength(); if (opts.greedy == false) { isRTL ? shiftR(0, pos.end - 1, getPlaceHolder(pos.end), true) : shiftL(pos.begin, ml); } else { for (var i = pos.begin; i < pos.end; i++) { if (isMask(i)) isRTL ? shiftR(0, pos.end - 1, getPlaceHolder(pos.end), true) : shiftL(pos.begin, ml); } } checkVal(input, false, true, getActiveBuffer()); } else { $.each(masksets, function (ndx, ms) { activeMasksetIndex = ndx; beginPos = android533 ? pos.end : pos.begin; var buffer = getActiveBuffer(), firstMaskPos = isRTL ? seekPrevious(getMaskLength() + 1) : seekNext(-1), maskL = getMaskLength(); if (k == opts.keyCode.DELETE) { //handle delete if (isRTL ? beginPos > firstMaskPos : beginPos < firstMaskPos) beginPos = firstMaskPos; if (beginPos < maskL) { if (opts.numericInput && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : seekNext(beginPos); beginPos = shiftL(beginPos, maskL); } else { if (isRTL) { beginPos = shiftR(0, beginPos, getPlaceHolder(beginPos), true); beginPos = seekNext(beginPos); } else { beginPos = shiftL(beginPos, maskL); } } if (getActiveMaskSet()['lastValidPosition'] != undefined) { if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']]) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["lastValidPosition"]) : (getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"])); if (isRTL ? getActiveMaskSet()['lastValidPosition'] > firstMaskPos : getActiveMaskSet()['lastValidPosition'] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos; } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos; } } } } else if (k == opts.keyCode.BACKSPACE) { //handle backspace if (isRTL ? beginPos <= firstMaskPos : beginPos > firstMaskPos) { beginPos -= 1; if (opts.numericInput && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = shiftR(0, (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : beginPos - 1, getPlaceHolder(beginPos), true); beginPos++; } else { if (isRTL) { beginPos = shiftR(0, beginPos, getPlaceHolder(beginPos), true); beginPos = buffer[beginPos + 1] == opts.radixPoint ? beginPos + 1 : seekNext(beginPos); } else { beginPos = shiftL(beginPos, maskL); } } if (getActiveMaskSet()['lastValidPosition'] != undefined) { if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']]) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["lastValidPosition"]) : (getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"])); if (isRTL ? getActiveMaskSet()['lastValidPosition'] > firstMaskPos : getActiveMaskSet()['lastValidPosition'] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos; } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos; } } } else if (activeMasksetIndex > 0) { //retry other masks getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = firstMaskPos; //init first activeMasksetIndex = 0; getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); getActiveMaskSet()["p"] = isRTL ? seekPrevious(getMaskLength() + 1) : seekNext(-1); getActiveMaskSet()["lastValidPosition"] = undefined; } } }); } determineActiveMasksetIndex(isRTL); writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]); if (input._valueGet() == getActiveBufferTemplate().join('')) $(input).trigger('cleared'); if (opts.showTooltip) { //update tooltip $input.prop("title", getActiveMaskSet()["mask"]); } } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch setTimeout(function () { var caretPos = isRTL ? getActiveMaskSet()["lastValidPosition"] : seekNext(getActiveMaskSet()["lastValidPosition"]); if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) caretPos--; caret(input, e.shiftKey ? pos.begin : caretPos, caretPos); }, 0); } else if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { //Home or page_up caret(input, 0, e.shiftKey ? pos.begin : 0); } else if (k == opts.keyCode.ESCAPE) { //escape input._valueSet(getActiveMaskSet()["undoBuffer"]); checkVal(input, true, true); } else if (k == opts.keyCode.INSERT) { //insert opts.insertMode = !opts.insertMode; caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin); } else if (opts.insertMode == false && !e.shiftKey) { if (k == opts.keyCode.RIGHT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin); }, 0); } else if (k == opts.keyCode.LEFT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin - 1); }, 0); } } opts.onKeyDown.call(this, e, getActiveBuffer(), opts); //extra stuff to execute on keydown ignorable = $.inArray(k, opts.ignorables) != -1; } function keypressEvent(e, checkval, k, writeOut, strict, ndx) { //Safari 5.1.x - modal dialog fires keypress twice workaround if (k == undefined && skipKeyPressEvent) return false; skipKeyPressEvent = true; var input = this, $input = $(input); e = e || window.event; var k = k || e.which || e.charCode || e.keyCode, c = String.fromCharCode(k); if ((e.ctrlKey || e.metaKey || ignorable) && checkval !== true) { return true; } else { if (k) { var pos, results, result; if (checkval) { var pcaret = strict ? ndx : (opts.numericInput ? seekNext(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"]); pos = { begin: pcaret, end: pcaret }; } else { pos = caret(input); } //clear possible selection var initialIndex = activeMasksetIndex, selectionCleared = false; $.each(masksets, function (ndx, lmnt) { activeMasksetIndex = ndx; getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); if ((pos.end - pos.begin) > 1 || ((pos.end - pos.begin) == 1 && opts.insertMode)) { var posend = pos.end < getMaskLength() ? pos.end : getMaskLength(); clearBuffer(getActiveBuffer(), pos.begin, posend); var ml = getMaskLength(); if (opts.greedy == false) { isRTL ? shiftR(0, posend - 1, getPlaceHolder(posend), true) : shiftL(pos.begin, ml); } else { for (var i = pos.begin; i < posend; i++) { if (isMask(i)) isRTL ? shiftR(0, posend - 1, getPlaceHolder(posend), true) : shiftL(pos.begin, ml); } } selectionCleared = true; } }); activeMasksetIndex = initialIndex; //restore index if (isRTL) { var p = seekPrevious(selectionCleared ? pos.begin : pos.end); results = isValid(p, c, strict, isRTL); if (strict === true) results = [{ "activeMasksetIndex": activeMasksetIndex, "result": results }]; $.each(results, function (index, result) { activeMasksetIndex = result["activeMasksetIndex"]; getActiveMaskSet()["writeOutBuffer"] = true; var np = result["result"]; if (np !== false) { var refresh = false, buffer = getActiveBuffer(); if (np !== true) { refresh = np["refresh"]; //only rewrite buffer from isValid p = np.pos != undefined ? np.pos : p; //set new position from isValid c = np.c != undefined ? np.c : c; //set new char from isValid } if (refresh !== true) { var maskL = getMaskLength(); //update masklength to include possible groupSeparator offset var firstMaskPos = seekNext(-1), firstUnmaskedPosition = firstMaskPos; if (opts.insertMode == true) { if (getActiveMaskSet()['greedy'] == true) { var bfrClone = buffer.slice(); while (getBufferElement(bfrClone, firstUnmaskedPosition, true) != getPlaceHolder(firstUnmaskedPosition) && firstUnmaskedPosition <= p) { firstUnmaskedPosition = firstUnmaskedPosition == maskL ? (maskL + 1) : seekNext(firstUnmaskedPosition); } } if (firstUnmaskedPosition <= p && (getActiveMaskSet()['greedy'] || (buffer.length < maskL || getBufferElement(buffer, p) == getPlaceHolder(p)))) { if (buffer[firstMaskPos] != getPlaceHolder(firstMaskPos) && buffer.length < maskL) { var offset = prepareBuffer(buffer, -1, isRTL); if ((selectionCleared ? pos.begin : pos.end) != 0) p = p + offset; maskL = buffer.length; } shiftL(firstUnmaskedPosition, p, c); } else getActiveMaskSet()["writeOutBuffer"] = false; } else setBufferElement(buffer, p, c, true, isRTL); } getActiveMaskSet()["p"] = p; } }); if (strict !== true) determineActiveMasksetIndex(isRTL); if (writeOut !== false) { $.each(results, function (ndx, rslt) { if (rslt["activeMasksetIndex"] == activeMasksetIndex) { result = rslt; return false; } }); if (result != undefined) { var self = this; setTimeout(function () { opts.onKeyValidation.call(self, result["result"], opts); }, 0); if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) { var buffer = getActiveBuffer(); writeBuffer(input, buffer, checkval ? undefined : (opts.numericInput ? seekNext(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"])); setTimeout(function () { //timeout needed for IE if (isComplete(buffer)) $input.trigger("complete"); }, 0); } else { getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split(''); } } } } else { var p = seekNext(pos.begin - 1); results = isValid(p, c, strict, isRTL); if (strict === true) results = [{ "activeMasksetIndex": activeMasksetIndex, "result": results }]; $.each(results, function (index, result) { activeMasksetIndex = result["activeMasksetIndex"]; getActiveMaskSet()["writeOutBuffer"] = true; var np = result["result"]; if (np !== false) { var refresh = false, buffer = getActiveBuffer(); if (np !== true) { refresh = np["refresh"]; //only rewrite buffer from isValid p = np.pos != undefined ? np.pos : p; //set new position from isValid c = np.c != undefined ? np.c : c; //set new char from isValid } if (refresh !== true) { if (opts.insertMode == true) { var lastUnmaskedPosition = getMaskLength(); var bfrClone = buffer.slice(); while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) { lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition); } if (lastUnmaskedPosition >= p) shiftR(p, buffer.length, c); else getActiveMaskSet()["writeOutBuffer"] = false; } else setBufferElement(buffer, p, c, true, isRTL); } getActiveMaskSet()["p"] = seekNext(p); } }); if (strict !== true) determineActiveMasksetIndex(isRTL); if (writeOut !== false) { $.each(results, function (ndx, rslt) { if (rslt["activeMasksetIndex"] == activeMasksetIndex) { result = rslt; return false; } }); if (result != undefined) { var self = this; setTimeout(function () { opts.onKeyValidation.call(self, result["result"], opts); }, 0); if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) { var p = getActiveMaskSet()["p"], buffer = getActiveBuffer(); writeBuffer(input, buffer, checkval ? undefined : p); setTimeout(function () { //timeout needed for IE if (isComplete(buffer)) $input.trigger("complete"); }, 0); } else { getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split(''); } } } } if (android && checkval !== true) { caret(input, caretSavePoint.begin, caretSavePoint.end); } if (opts.showTooltip) { //update tooltip $input.prop("title", getActiveMaskSet()["mask"]); } e.preventDefault(); } } } function keyupEvent(e) { var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer(); opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup if (k == opts.keyCode.TAB && $input.hasClass('focus.inputmask') && input._valueGet().length == 0 && opts.showMaskOnFocus) { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer); if (!isRTL) caret(input, 0); getActiveMaskSet()["undoBuffer"] = input._valueGet(); } } }; return this; }; return this; }; } })(jQuery); /* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 2.2.42 Optional extensions on the jquery.inputmask base */ (function ($) { //extra definitions $.extend($.inputmask.defaults.definitions, { 'A': { //auto uppercasing validator: "[A-Za-z]", cardinality: 1, casing: "upper" }, '#': { validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]", cardinality: 1, casing: "upper" } }); $.extend($.inputmask.defaults.aliases, { 'url': { mask: "ir", placeholder: "", separator: "", defaultPrefix: "http://", regex: { urlpre1: new RegExp("[fh]"), urlpre2: new RegExp("(ft|ht)"), urlpre3: new RegExp("(ftp|htt)"), urlpre4: new RegExp("(ftp:|http|ftps)"), urlpre5: new RegExp("(ftp:/|ftps:|http:|https)"), urlpre6: new RegExp("(ftp://|ftps:/|http:/|https:)"), urlpre7: new RegExp("(ftp://|ftps://|http://|https:/)"), urlpre8: new RegExp("(ftp://|ftps://|http://|https://)") }, definitions: { 'i': { validator: function (chrs, buffer, pos, strict, opts) { return true; }, cardinality: 8, prevalidator: (function () { var result = [], prefixLimit = 8; for (var i = 0; i < prefixLimit; i++) { result[i] = (function () { var j = i; return { validator: function (chrs, buffer, pos, strict, opts) { if (opts.regex["urlpre" + (j + 1)]) { var tmp = chrs, k; if (((j + 1) - chrs.length) > 0) { tmp = buffer.join('').substring(0, ((j + 1) - chrs.length)) + "" + tmp; } var isValid = opts.regex["urlpre" + (j + 1)].test(tmp); if (!strict && !isValid) { pos = pos - j; for (k = 0; k < opts.defaultPrefix.length; k++) { buffer[pos] = opts.defaultPrefix[k]; pos++; } for (k = 0; k < tmp.length - 1; k++) { buffer[pos] = tmp[k]; pos++; } return { "pos": pos }; } return isValid; } else { return false; } }, cardinality: j }; })(); } return result; })() }, "r": { validator: ".", cardinality: 50 } }, insertMode: false, autoUnmask: false }, "ip": { mask: "i.i.i.i", definitions: { 'i': { validator: "25[0-5]|2[0-4][0-9]|[01][0-9][0-9]", cardinality: 3, prevalidator: [ { validator: "[0-2]", cardinality: 1 }, { validator: "2[0-5]|[01][0-9]", cardinality: 2 } ] } } } }); })(jQuery);/* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2012 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 2.2.42 Optional extensions on the jquery.inputmask base */ (function ($) { //date & time aliases $.extend($.inputmask.defaults.definitions, { 'h': { //hours validator: "[01][0-9]|2[0-3]", cardinality: 2, prevalidator: [{ validator: "[0-2]", cardinality: 1 }] }, 's': { //seconds || minutes validator: "[0-5][0-9]", cardinality: 2, prevalidator: [{ validator: "[0-5]", cardinality: 1 }] }, 'd': { //basic day validator: "0[1-9]|[12][0-9]|3[01]", cardinality: 2, prevalidator: [{ validator: "[0-3]", cardinality: 1 }] }, 'm': { //basic month validator: "0[1-9]|1[012]", cardinality: 2, prevalidator: [{ validator: "[01]", cardinality: 1 }] }, 'y': { //basic year validator: "(19|20)\\d{2}", cardinality: 4, prevalidator: [ { validator: "[12]", cardinality: 1 }, { validator: "(19|20)", cardinality: 2 }, { validator: "(19|20)\\d", cardinality: 3 } ] } }); $.extend($.inputmask.defaults.aliases, { 'dd/mm/yyyy': { mask: "1/2/y", placeholder: "dd/mm/yyyy", regex: { val1pre: new RegExp("[0-3]"), //daypre val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), //day val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])"); }, //monthpre val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))"); }//month }, leapday: "29/02/", separator: '/', yearrange: { minyear: 1900, maxyear: 2099 }, isInYearRange: function (chrs, minyear, maxyear) { var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))); var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length))); return (enteredyear != NaN ? minyear <= enteredyear && enteredyear <= maxyear : false) || (enteredyear2 != NaN ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false); }, determinebaseyear: function (minyear, maxyear) { var currentyear = (new Date()).getFullYear(); if (minyear > currentyear) return minyear; if (maxyear < currentyear) return maxyear; return currentyear; }, onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()); } }, definitions: { '1': { //val1 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.val1.test(chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val1.test("0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.val1pre.test(chrs); if (!strict && !isValid) { isValid = opts.regex.val1.test("0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, '2': { //val2 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(0, 3); var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(0, 3); var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, 'y': { //year validator: function (chrs, buffer, pos, strict, opts) { if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) { var dayMonthValue = buffer.join('').substr(0, 6); if (dayMonthValue != opts.leapday) return true; else { var year = parseInt(chrs, 10);//detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) return true; else return false; else return true; else return false; } } else return false; }, cardinality: 4, prevalidator: [ { validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (!strict && !isValid) { var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 1); isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[0]; return { "pos": pos }; } yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[0]; buffer[pos++] = yearPrefix[1]; return { "pos": pos }; } } return isValid; }, cardinality: 1 }, { validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (!strict && !isValid) { var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[1]; return { "pos": pos }; } yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) { var dayMonthValue = buffer.join('').substr(0, 6); if (dayMonthValue != opts.leapday) isValid = true; else { var year = parseInt(chrs, 10);//detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) isValid = true; else isValid = false; else isValid = true; else isValid = false; } } else isValid = false; if (isValid) { buffer[pos - 1] = yearPrefix[0]; buffer[pos++] = yearPrefix[1]; buffer[pos++] = chrs[0]; return { "pos": pos }; } } return isValid; }, cardinality: 2 }, { validator: function (chrs, buffer, pos, strict, opts) { return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); }, cardinality: 3 } ] } }, insertMode: false, autoUnmask: false }, 'mm/dd/yyyy': { placeholder: "mm/dd/yyyy", alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias regex: { val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); }, //daypre val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); }, //day val1pre: new RegExp("[01]"), //monthpre val1: new RegExp("0[1-9]|1[012]") //month }, leapday: "02/29/", onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()); } } }, 'yyyy/mm/dd': { mask: "y/1/2", placeholder: "yyyy/mm/dd", alias: "mm/dd/yyyy", leapday: "/02/29", onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()); } }, definitions: { '2': { //val2 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(5, 3); var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } //check leap yeap if (isValid) { var dayMonthValue = buffer.join('').substr(4, 4) + chrs; if (dayMonthValue != opts.leapday) return true; else { var year = parseInt(buffer.join('').substr(0, 4), 10); //detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) return true; else return false; else return true; else return false; } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(5, 3); var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] } } }, 'dd.mm.yyyy': { mask: "1.2.y", placeholder: "dd.mm.yyyy", leapday: "29.02.", separator: '.', alias: "dd/mm/yyyy" }, 'dd-mm-yyyy': { mask: "1-2-y", placeholder: "dd-mm-yyyy", leapday: "29-02-", separator: '-', alias: "dd/mm/yyyy" }, 'mm.dd.yyyy': { mask: "1.2.y", placeholder: "mm.dd.yyyy", leapday: "02.29.", separator: '.', alias: "mm/dd/yyyy" }, 'mm-dd-yyyy': { mask: "1-2-y", placeholder: "mm-dd-yyyy", leapday: "02-29-", separator: '-', alias: "mm/dd/yyyy" }, 'yyyy.mm.dd': { mask: "y.1.2", placeholder: "yyyy.mm.dd", leapday: ".02.29", separator: '.', alias: "yyyy/mm/dd" }, 'yyyy-mm-dd': { mask: "y-1-2", placeholder: "yyyy-mm-dd", leapday: "-02-29", separator: '-', alias: "yyyy/mm/dd" }, 'datetime': { mask: "1/2/y h:s", placeholder: "dd/mm/yyyy hh:mm", alias: "dd/mm/yyyy", regex: { hrspre: new RegExp("[012]"), //hours pre hrs24: new RegExp("2[0-9]|1[3-9]"), hrs: new RegExp("[01][0-9]|2[0-3]"), //hours ampmpre: new RegExp("[apAP]"), ampm: new RegExp("^[a|p|A|P][m|M]") }, timeseparator: ':', hourFormat: "24", // or 12 definitions: { 'h': { //hours validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.hrs.test(chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.hrs.test("0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; buffer[pos] = chrs.charAt(0); pos++; return { "pos": pos }; } } } if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) { var tmp = parseInt(chrs, 10); if (tmp == 24) { buffer[pos + 5] = "a"; buffer[pos + 6] = "m"; } else { buffer[pos + 5] = "p"; buffer[pos + 6] = "m"; } tmp = tmp - 12; if (tmp < 10) { buffer[pos] = tmp.toString(); buffer[pos - 1] = "0"; } else { buffer[pos] = tmp.toString().charAt(1); buffer[pos - 1] = tmp.toString().charAt(0); } return { "pos": pos, "c": buffer[pos] }; } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.hrspre.test(chrs); if (!strict && !isValid) { isValid = opts.regex.hrs.test("0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, 't': { //am/pm validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.ampm.test(chrs); if (!strict && !isValid) { isValid = opts.regex.ampm.test(chrs + 'm'); if (isValid) { buffer[pos - 1] = chrs.charAt(0); buffer[pos] = "m"; pos++; return pos; } } return isValid; }, casing: "lower", cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.ampmpre.test(chrs); if (isValid) { isValid = opts.regex.ampm.test(chrs + "m"); if (isValid) { buffer[pos] = chrs; buffer[pos + 1] = 'm'; return pos; } } return isValid; }, cardinality: 1 }] } }, insertMode: false, autoUnmask: false }, 'datetime12': { mask: "1/2/y h:s t", placeholder: "dd/mm/yyyy hh:mm xm", alias: "datetime", hourFormat: "12" }, 'hh:mm t': { mask: "h:s t", placeholder: "hh:mm xm", alias: "datetime", hourFormat: "12" }, 'h:s t': { mask: "h:s t", placeholder: "hh:mm xm", alias: "datetime", hourFormat: "12" }, 'hh:mm:ss': { mask: "h:s:s", autoUnmask: false }, 'hh:mm': { mask: "h:s", autoUnmask: false }, 'date': { alias: "dd/mm/yyyy" // "mm/dd/yyyy" } }); })(jQuery);/* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 2.2.42 Optional extensions on the jquery.inputmask base */ (function ($) { //number aliases $.extend($.inputmask.defaults.aliases, { 'decimal': { mask: "~", placeholder: "", repeat: 10, greedy: false, numericInput: true, digits: "*", //numer of digits groupSeparator: "",//",", // | "." radixPoint: ".", groupSize: 3, autoGroup: false, allowPlus: true, allowMinus: true, getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { //custom getMaskLength to take the groupSeparator into account var calculatedLength = buffer.length; if (!greedy && repeat > 1) { calculatedLength += (buffer.length * (repeat - 1)); } var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint); var currentBufferStr = currentBuffer.join(''), strippedBufferStr = currentBufferStr.replace(new RegExp(escapedGroupSeparator, "g"), "").replace(new RegExp(escapedRadixPoint), ""), groupOffset = currentBufferStr.length - strippedBufferStr.length; return calculatedLength + groupOffset; }, postFormat: function (buffer, pos, reformatOnly, opts) { if (opts.groupSeparator == "") return pos; var cbuf = buffer.slice(), radixPos = $.inArray(opts.radixPoint, buffer); if (!reformatOnly) { cbuf.splice(pos == 0 || pos <= radixPos || opts.skipRadixDance ? pos + 1 : pos, 0, "?"); //set position indicator } var bufVal = cbuf.join(''); if (opts.autoGroup || (reformatOnly && bufVal.indexOf(opts.groupSeparator) != -1)) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), ''); var radixSplit = bufVal.split(opts.radixPoint); bufVal = radixSplit[0]; var reg = new RegExp('([-\+]?[\\d\?]+)([\\d\?]{' + opts.groupSize + '})'); while (reg.test(bufVal)) { bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2'); bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator); } if (radixSplit.length > 1) bufVal += opts.radixPoint + radixSplit[1]; } buffer.length = bufVal.length; //align the length for (var i = 0, l = bufVal.length; i < l; i++) { buffer[i] = bufVal.charAt(i); } var newPos = $.inArray("?", buffer); if (!reformatOnly) buffer.splice(newPos, 1); return reformatOnly ? pos : newPos <= radixPos || (opts.skipRadixDance && newPos != 0) ? newPos - 1 : newPos; }, regex: { number: function (groupSeparator, groupSize, radixPoint, digits, allowPlus, allowMinus) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, groupSeparator); var escapedRadixPoint = $.inputmask.escapeRegex.call(this, radixPoint); var digitExpression = isNaN(digits) ? digits : '{0,' + digits + '}'; var signedExpression = "[" + (allowPlus ? "\+" : "") + (allowMinus ? "-" : "") + "]?"; return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + groupSize + "}((" + escapedGroupSeparator + "\\d{" + groupSize + "})?)+)(" + escapedRadixPoint + "\\d" + digitExpression + ")?$"); } }, onKeyDown: function (e, buffer, opts) { var $input = $(this), input = this; if (e.keyCode == opts.keyCode.TAB) { var radixPosition = $.inArray(opts.radixPoint, buffer); if (radixPosition != -1) { var masksets = $input.data('inputmask')['masksets']; var activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex]["_buffer"], masksets[activeMasksetIndex]["greedy"], masksets[activeMasksetIndex]["repeat"], buffer, opts) ; i++) { if (buffer[radixPosition + i] == undefined) buffer[radixPosition + i] = "0"; } input._valueSet(buffer.join('')); } } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) { opts.postFormat(buffer, 0, true, opts); input._valueSet(buffer.join('')); } }, definitions: { '~': { //real number validator: function (chrs, buffer, pos, strict, opts) { if (chrs == "") return false; if (pos <= 1 && buffer[0] === '0' && new RegExp("[\\d-]").test(chrs)) { //handle first char buffer[0] = ""; return { "pos": 0 }; } var cbuf = strict ? buffer.slice(0, pos) : buffer.slice(); cbuf.splice(pos == 0 ? pos : pos + 1, 0, chrs); var bufferStr = cbuf.join(''); if (opts.autoGroup && !strict) { //strip groupseparator var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); bufferStr = bufferStr.replace(new RegExp(escapedGroupSeparator, "g"), ''); } var isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid) { //let's help the regex a bit bufferStr += "0"; isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid) { //make a valid group var lastGroupSeparator = bufferStr.lastIndexOf(opts.groupSeparator); for (i = bufferStr.length - lastGroupSeparator; i <= 3; i++) { bufferStr += "0"; } isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid && !strict) { if (chrs == opts.radixPoint) { isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test("0" + bufferStr + "0"); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } } } } if (isValid != false && !strict && chrs != opts.radixPoint) { var newPos = opts.postFormat(buffer, pos, false, opts); return { "pos": newPos }; } return isValid; }, cardinality: 1, prevalidator: null } }, insertMode: true, autoUnmask: false }, 'integer': { regex: { number: function (groupSeparator, groupSize, radixPoint, digits, allowPlus, allowMinus) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, groupSeparator); var signedExpression = "[" + (allowPlus ? "\+" : "") + (allowMinus ? "-" : "") + "]?"; return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + groupSize + "}((" + escapedGroupSeparator + "\\d{" + groupSize + "})?)+)$"); } }, alias: "decimal" } }); })(jQuery); /* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 2.2.42 Regex extensions on the jquery.inputmask base Allows for using regular expressions as a mask */ (function ($) { $.extend($.inputmask.defaults.aliases, { // $(selector).inputmask("Regex", { regex: "[0-9]*"} 'Regex': { mask: "r", greedy: false, repeat: 10, //needs to be computed regex: null, regexSplit: null, definitions: { 'r': { validator: function (chrs, buffer, pos, strict, opts) { function analyseRegex() { //ENHANCE ME var regexSplitRegex = "\\[.*?\]\\*"; opts.regexSplit = opts.regex.match(new RegExp(regexSplitRegex, "g")); //if (opts.regex.indexOf("*") != (opts.regex.length - 1)) { // opts.regex += "{1}"; //} //opts.regexSplit.push(opts.regex); } if (opts.regexSplit == null) { analyseRegex(); } var cbuffer = buffer.slice(), regexPart = "", isValid = false; cbuffer.splice(pos, 0, chrs); var bufferStr = cbuffer.join(''); for (var i = 0; i < opts.regexSplit.length; i++) { regexPart += opts.regexSplit[i]; var exp = new RegExp("^" + regexPart + "$"); isValid = exp.test(bufferStr); console.log(bufferStr + ' ' + isValid + ' ' + regexPart); if (isValid) break; } return isValid; }, cardinality: 1 } } } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/dist/min/jquery.inputmask.date.extensions.js ================================================ (function(h){h.extend(h.inputmask.defaults.definitions,{h:{validator:"[01][0-9]|2[0-3]",cardinality:2,prevalidator:[{validator:"[0-2]",cardinality:1}]},s:{validator:"[0-5][0-9]",cardinality:2,prevalidator:[{validator:"[0-5]",cardinality:1}]},d:{validator:"0[1-9]|[12][0-9]|3[01]",cardinality:2,prevalidator:[{validator:"[0-3]",cardinality:1}]},m:{validator:"0[1-9]|1[012]",cardinality:2,prevalidator:[{validator:"[01]",cardinality:1}]},y:{validator:"(19|20)\\d{2}",cardinality:4,prevalidator:[{validator:"[12]", cardinality:1},{validator:"(19|20)",cardinality:2},{validator:"(19|20)\\d",cardinality:3}]}});h.extend(h.inputmask.defaults.aliases,{"dd/mm/yyyy":{mask:"1/2/y",placeholder:"dd/mm/yyyy",regex:{val1pre:/[0-3]/,val1:/0[1-9]|[12][0-9]|3[01]/,val2pre:function(a){a=h.inputmask.escapeRegex.call(this,a);return RegExp("((0[1-9]|[12][0-9]|3[01])"+a+"[01])")},val2:function(a){a=h.inputmask.escapeRegex.call(this,a);return RegExp("((0[1-9]|[12][0-9])"+a+"(0[1-9]|1[012]))|(30"+a+"(0[13-9]|1[012]))|(31"+a+"(0[13578]|1[02]))")}}, leapday:"29/02/",separator:"/",yearrange:{minyear:1900,maxyear:2099},isInYearRange:function(a,d,c){var e=parseInt(a.concat(d.toString().slice(a.length))),a=parseInt(a.concat(c.toString().slice(a.length)));return(NaN!=e?d<=e&&e<=c:!1)||(NaN!=a?d<=a&&a<=c:!1)},determinebaseyear:function(a,d){var c=(new Date).getFullYear();return a>c?a:da?(d[c]=a.toString(), d[c-1]="0"):(d[c]=a.toString().charAt(1),d[c-1]=a.toString().charAt(0)),{pos:c,c:d[c]}):f},cardinality:2,prevalidator:[{validator:function(a,d,c,e,b){var f=b.regex.hrspre.test(a);return!e&&!f&&(f=b.regex.hrs.test("0"+a))?(d[c]="0",c++,{pos:c}):f},cardinality:1}]},t:{validator:function(a,d,c,e,b){var f=b.regex.ampm.test(a);return!e&&!f&&(f=b.regex.ampm.test(a+"m"))?(d[c-1]=a.charAt(0),d[c]="m",c++,c):f},casing:"lower",cardinality:2,prevalidator:[{validator:function(a,d,c,e,b){if(e=b.regex.ampmpre.test(a))if(e= b.regex.ampm.test(a+"m"))return d[c]=a,d[c+1]="m",c;return e},cardinality:1}]}},insertMode:!1,autoUnmask:!1},datetime12:{mask:"1/2/y h:s t",placeholder:"dd/mm/yyyy hh:mm xm",alias:"datetime",hourFormat:"12"},"hh:mm t":{mask:"h:s t",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"h:s t":{mask:"h:s t",placeholder:"hh:mm xm",alias:"datetime",hourFormat:"12"},"hh:mm:ss":{mask:"h:s:s",autoUnmask:!1},"hh:mm":{mask:"h:s",autoUnmask:!1},date:{alias:"dd/mm/yyyy"}})})(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/dist/min/jquery.inputmask.extensions.js ================================================ (function(a){a.extend(a.inputmask.defaults.definitions,{A:{validator:"[A-Za-z]",cardinality:1,casing:"upper"},"#":{validator:"[A-Za-z\u0410-\u044f\u0401\u04510-9]",cardinality:1,casing:"upper"}});a.extend(a.inputmask.defaults.aliases,{url:{mask:"ir",placeholder:"",separator:"",defaultPrefix:"http://",regex:{urlpre1:/[fh]/,urlpre2:/(ft|ht)/,urlpre3:/(ftp|htt)/,urlpre4:/(ftp:|http|ftps)/,urlpre5:/(ftp:\/|ftps:|http:|https)/,urlpre6:/(ftp:\/\/|ftps:\/|http:\/|https:)/,urlpre7:/(ftp:\/\/|ftps:\/\/|http:\/\/|https:\/)/, urlpre8:/(ftp:\/\/|ftps:\/\/|http:\/\/|https:\/\/)/},definitions:{i:{validator:function(){return!0},cardinality:8,prevalidator:function(){for(var a=[],c=0;8>c;c++)a[c]=function(){var a=c;return{validator:function(e,c,d,b,g){if(g.regex["urlpre"+(a+1)]){var f=e;0=B?k[B-1]:[],A=u.validator,u=u.cardinality;c.push({fn:A?"string"==typeof A?RegExp(A):new function(){this.test=A}:/./,cardinality:u?u:1,optionality:d,newBlockMarker:!0==d?t:!1,offset:0,casing:f.casing,def:f.definitionSymbol|a});!0==d&&(t=!1)}c.push({fn:f.validator?"string"== typeof f.validator?RegExp(f.validator):new function(){this.test=f.validator}:/./,cardinality:f.cardinality,optionality:d,newBlockMarker:t,offset:0,casing:f.casing,def:f.definitionSymbol|a})}else c.push({fn:null,cardinality:0,optionality:d,newBlockMarker:t,offset:0,casing:null,def:a}),g=!1;t=!1;return c}})}function Q(){function e(a){var c=a.length;for(i=0;id;y--)k+=z(e,c-(y-1));R&&(k+=R);return null!=j.tests[c].fn?j.tests[c].fn.test(k,e,a,f,b):!1}if(f=!0===f){var g=y(j,a());!0===g&&(g={pos:j}); return g}var l=[],g=!1,o=d;c.each(e,function(a){d=a;if(o!=d&&!u(j)){if(R==this._buffer[j]||R==b.skipOptionalPartCharacter)return l.push({activeMasksetIndex:a,result:{refresh:!0,c:this._buffer[j]}}),this.lastValidPosition=j,!1;this.lastValidPosition=r?p()+1:-1}if((void 0==this.lastValidPosition&&j==(r?H(p()):s(-1))||r||b.numericInput?this.lastValidPosition<=b.numericInput?p():s(j):this.lastValidPosition>=H(j))&&0<=j&&jc:c==k().length-1:this.lastValidPositionM.lastValidPosition))M.activeMasksetIndex=a,M.lastValidPosition= this.lastValidPosition});d=M.activeMasksetIndex;f!=d&&(j?K(k(),0,H(M.lastValidPosition)):K(k(),s(M.lastValidPosition),p()),a().writeOutBuffer=!0)}function u(a){a=A(a);a=x()[a];return void 0!=a?a.fn:!1}function A(a){return a%x().length}function p(){return b.getMaskLength(f(),a().greedy,a().repeat,k(),b)}function s(a){var b=p();if(a>=b)return b;for(;++a=a)return 0;for(;0<--a&&!u(a););return a}function o(a,b,c,d,f){d&&(b=L(a,b,f));d=x()[A(b)];f=c;if(void 0!=f)switch(d.casing){case "upper":f= c.toUpperCase();break;case "lower":f=c.toLowerCase()}a[b]=f}function z(a,b,c){c&&(b=L(a,b));return a[b]}function L(a,b,c){if(c)for(;0>b&&a.length=k&&e.lastValidPosition==g){for(var l=!0,o=0;o<=g;o++){var s=u(o),t=A(o);if(s&&(void 0==a[o]||a[o]==J(o))||!s&&a[o]!=f()[t]){l=!1;break}}if(b= b||l)return!1}k=e.lastValidPosition});d=g;return b}this.unmaskedvalue=function(a,b){return V(a,b)};this.isComplete=function(a){return S(a)};this.mask=function(j){function F(a){a=c._data(a).events;c.each(a,function(a,b){c.each(b,function(a,b){if("inputmask"==b.namespace){var c=b.handler;b.handler=function(a){if(this.readOnly||this.disabled)a.preventDefault;else return c.apply(this,arguments)}}})})}function M(a){var b;Object.getOwnPropertyDescriptor&&(b=Object.getOwnPropertyDescriptor(a,"value"));if(b&& b.get)a._valueGet||(a._valueGet=b.get,a._valueSet=b.set,Object.defineProperty(a,"value",{get:function(){var a=c(this),b=c(this).data("inputmask"),d=b.masksets,f=b.activeMasksetIndex;return b&&b.opts.autoUnmask?a.inputmask("unmaskedvalue"):this._valueGet()!=d[f]._buffer.join("")?this._valueGet():""},set:function(a){this._valueSet(a);c(this).triggerHandler("setvalue.inputmask")}}));else if(document.__lookupGetter__&&a.__lookupGetter__("value"))a._valueGet||(a._valueGet=a.__lookupGetter__("value"),a._valueSet= a.__lookupSetter__("value"),a.__defineGetter__("value",function(){var a=c(this),b=c(this).data("inputmask"),d=b.masksets,f=b.activeMasksetIndex;return b&&b.opts.autoUnmask?a.inputmask("unmaskedvalue"):this._valueGet()!=d[f]._buffer.join("")?this._valueGet():""}),a.__defineSetter__("value",function(a){this._valueSet(a);c(this).triggerHandler("setvalue.inputmask")}));else if(a._valueGet||(a._valueGet=function(){return this.value},a._valueSet=function(a){this.value=a}),!0!=c.fn.val.inputmaskpatch)c.fn.val= function(){if(arguments.length==0){var a=c(this);if(a.data("inputmask")){if(a.data("inputmask").opts.autoUnmask)return a.inputmask("unmaskedvalue");var a=c.inputmask.val.apply(a),b=c(this).data("inputmask");return a!=b.masksets[b.activeMasksetIndex]._buffer.join("")?a:""}return c.inputmask.val.apply(a)}var d=arguments;return this.each(function(){var a=c(this),b=c.inputmask.val.apply(a,d);a.data("inputmask")&&a.triggerHandler("setvalue.inputmask");return b})},c.extend(c.fn.val,{inputmaskpatch:!0})} function r(a,c){if(b.numericInput&&""!=b.radixPoint&&!1===b.skipRadixDance){var d=a._valueGet().indexOf(b.radixPoint);n=c.begin<=d||c.end<=d||-1==d}}function y(b,c,d){for(var e=k();!u(b)&&0<=b-1;)b--;for(var h=b;he:h e:a().lastValidPositione){if(h-=1,b.numericInput&&""!=b.radixPoint&&c[h]==b.radixPoint?(h=O(0,c.length-1==h?h:h-1,J(h),!0),h++):n?(h=O(0,h,J(h),!0),h=c[h+1]==b.radixPoint?h+1:s(h)):h=y(h,g),void 0!=a().lastValidPosition)-1!=a().lastValidPosition&&k()[a().lastValidPosition]==f()[a().lastValidPosition]&&(a().lastValidPosition=n?s(a().lastValidPosition):0==a().lastValidPosition?-1:H(a().lastValidPosition)), (n?a().lastValidPosition>e:a().lastValidPosition1||G.end-G.begin==1&&b.insertMode){c=G.end=w;)e=e==0?-1:H(e);e>=w?O(w,g.length,r):a().writeOutBuffer=false}else o(g,w,r,true,n);a().p= s(w)}}),!0!==h&&B(n),!1!==q&&(c.each(m,function(a,b){if(b.activeMasksetIndex==d){v=b;return false}}),void 0!=v&&(I=this,setTimeout(function(){b.onKeyValidation.call(I,v.result,b)},0),a().writeOutBuffer&&!1!==v.result?(w=a().p,F=k(),E(this,F,j?void 0:w),setTimeout(function(){S(F)&&A.trigger("complete")},0)):a().buffer=a().undoBuffer.split("")));T&&!0!==j&&C(this,g,t);b.showTooltip&&A.prop("title",a().mask);f.preventDefault()}}function Z(e){var d=c(this),g=e.keyCode,j=k();b.onKeyUp.call(this,e,j,b); g==b.keyCode.TAB&&(d.hasClass("focus.inputmask")&&0==this._valueGet().length&&b.showMaskOnFocus)&&(j=f().slice(),E(this,j),n||C(this,0),a().undoBuffer=this._valueGet())}var v=c(j);if(v.is(":input")){v.data("inputmask",{masksets:e,activeMasksetIndex:d,opts:b,isRTL:!1});b.showTooltip&&v.prop("title",a().mask);a().greedy=a().greedy?a().greedy:0==a().repeat;var N=v.prop("maxLength");p()>N&&-1d&&(l(g,f[g],true,n)!==false||!u(g))?g:d)}else{d=s(h==void 0?-1:h);C(e,g=parseInt(RegExp(/[0-9]+/).exec(I)));if("string"===typeof L)switch(L){case "mask":return E(b.alias,D),o=Q(),this.each(function(){F(c.extend(true,{},o),0).mask(this)});case "unmaskedvalue":return I=c(this),o=I.data("inputmask").masksets,z=I.data("inputmask").activeMasksetIndex,b=I.data("inputmask").opts,F(o,z).unmaskedvalue(this);case "remove":return this.each(function(){var e=c(this),d=this;setTimeout(function(){if(e.data("inputmask")){o= e.data("inputmask").masksets;z=e.data("inputmask").activeMasksetIndex;b=e.data("inputmask").opts;d._valueSet(F(o,z).unmaskedvalue(e,true));e.removeData("inputmask");e.unbind(".inputmask");e.removeClass("focus.inputmask");var c;Object.getOwnPropertyDescriptor&&(c=Object.getOwnPropertyDescriptor(d,"value"));if(c&&c.get)d._valueGet&&Object.defineProperty(d,"value",{get:d._valueGet,set:d._valueSet});else if(document.__lookupGetter__&&d.__lookupGetter__("value")&&d._valueGet){d.__defineGetter__("value", d._valueGet);d.__defineSetter__("value",d._valueSet)}delete d._valueGet;delete d._valueSet}},0)});case "getemptymask":return this.data("inputmask")?(o=this.data("inputmask").masksets,z=this.data("inputmask").activeMasksetIndex,o[z]._buffer.join("")):"";case "hasMaskedValue":return this.data("inputmask")?!this.data("inputmask").opts.autoUnmask:!1;case "isComplete":return o=this.data("inputmask").masksets,z=this.data("inputmask").activeMasksetIndex,b=this.data("inputmask").opts,F(o,z).isComplete(this[0]._valueGet().split("")); default:return E(L,D)||(b.mask=L),o=Q(),this.each(function(){F(c.extend(true,{},o),z).mask(this)})}else{if("object"==typeof L)return b=c.extend(!0,{},c.inputmask.defaults,L),E(b.alias,L),o=Q(),this.each(function(){F(c.extend(true,{},o),z).mask(this)});if(void 0==L)return this.each(function(){var e=c(this).attr("data-inputmask");if(e&&e!="")try{var e=e.replace(RegExp("'","g"),'"'),d=c.parseJSON("{"+e+"}");b=c.extend(true,{},c.inputmask.defaults,D);c.extend(true,b,d);E(b.alias,d);b.alias=void 0;c(this).inputmask(b)}catch(g){}})}return this})})(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/dist/min/jquery.inputmask.numeric.extensions.js ================================================ (function(h){h.extend(h.inputmask.defaults.aliases,{decimal:{mask:"~",placeholder:"",repeat:10,greedy:!1,numericInput:!0,digits:"*",groupSeparator:"",radixPoint:".",groupSize:3,autoGroup:!1,allowPlus:!0,allowMinus:!0,getMaskLength:function(c,f,d,b,a){var e=c.length;!f&&1=d&&"0"===f[0]&&/[\d-]/.test(c))return f[0]="",{pos:0};var e=b?f.slice(0,d):f.slice(); e.splice(0==d?d:d+1,0,c);e=e.join("");if(a.autoGroup&&!b)var g=h.inputmask.escapeRegex.call(this,a.groupSeparator),e=e.replace(RegExp(g,"g"),"");g=a.regex.number(a.groupSeparator,a.groupSize,a.radixPoint,a.digits,a.allowPlus,a.allowMinus).test(e);if(!g&&(e+="0",g=a.regex.number(a.groupSeparator,a.groupSize,a.radixPoint,a.digits,a.allowPlus,a.allowMinus).test(e),!g)){g=e.lastIndexOf(a.groupSeparator);for(i=e.length-g;3>=i;i++)e+="0";g=a.regex.number(a.groupSeparator,a.groupSize,a.radixPoint,a.digits, a.allowPlus,a.allowMinus).test(e);if(!g&&!b&&c==a.radixPoint&&(g=a.regex.number(a.groupSeparator,a.groupSize,a.radixPoint,a.digits,a.allowPlus,a.allowMinus).test("0"+e+"0")))return f[d]="0",d++,{pos:d}}return!1!=g&&!b&&c!=a.radixPoint?{pos:a.postFormat(f,d,!1,a)}:g},cardinality:1,prevalidator:null}},insertMode:!0,autoUnmask:!1},integer:{regex:{number:function(c,f,d,b,a,e){c=h.inputmask.escapeRegex.call(this,c);return RegExp("^"+("["+(a?"+":"")+(e?"-":"")+"]?")+"(\\d+|\\d{1,"+f+"}(("+c+"\\d{"+f+"})?)+)$")}}, alias:"decimal"}})})(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/dist/min/jquery.inputmask.regex.extensions.js ================================================ (function(b){b.extend(b.inputmask.defaults.aliases,{Regex:{mask:"r",greedy:!1,repeat:10,regex:null,regexSplit:null,definitions:{r:{validator:function(f,a,c,d,e){null==e.regexSplit&&(e.regexSplit=e.regex.match(RegExp("\\[.*?]\\*","g")));var b=a.slice(),a="",d=!1;b.splice(c,0,f);f=b.join("");for(c=0;c currentyear) return minyear; if (maxyear < currentyear) return maxyear; return currentyear; }, onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()); } }, definitions: { '1': { //val1 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.val1.test(chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val1.test("0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.val1pre.test(chrs); if (!strict && !isValid) { isValid = opts.regex.val1.test("0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, '2': { //val2 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(0, 3); var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(0, 3); var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, 'y': { //year validator: function (chrs, buffer, pos, strict, opts) { if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) { var dayMonthValue = buffer.join('').substr(0, 6); if (dayMonthValue != opts.leapday) return true; else { var year = parseInt(chrs, 10);//detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) return true; else return false; else return true; else return false; } } else return false; }, cardinality: 4, prevalidator: [ { validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (!strict && !isValid) { var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 1); isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[0]; return { "pos": pos }; } yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[0]; buffer[pos++] = yearPrefix[1]; return { "pos": pos }; } } return isValid; }, cardinality: 1 }, { validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); if (!strict && !isValid) { var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear); if (isValid) { buffer[pos++] = yearPrefix[1]; return { "pos": pos }; } yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear).toString().slice(0, 2); if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) { var dayMonthValue = buffer.join('').substr(0, 6); if (dayMonthValue != opts.leapday) isValid = true; else { var year = parseInt(chrs, 10);//detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) isValid = true; else isValid = false; else isValid = true; else isValid = false; } } else isValid = false; if (isValid) { buffer[pos - 1] = yearPrefix[0]; buffer[pos++] = yearPrefix[1]; buffer[pos++] = chrs[0]; return { "pos": pos }; } } return isValid; }, cardinality: 2 }, { validator: function (chrs, buffer, pos, strict, opts) { return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); }, cardinality: 3 } ] } }, insertMode: false, autoUnmask: false }, 'mm/dd/yyyy': { placeholder: "mm/dd/yyyy", alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias regex: { val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); }, //daypre val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); }, //day val1pre: new RegExp("[01]"), //monthpre val1: new RegExp("0[1-9]|1[012]") //month }, leapday: "02/29/", onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()); } } }, 'yyyy/mm/dd': { mask: "y/1/2", placeholder: "yyyy/mm/dd", alias: "mm/dd/yyyy", leapday: "/02/29", onKeyUp: function (e, buffer, opts) { var $input = $(this); if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) { var today = new Date(); $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()); } }, definitions: { '2': { //val2 ~ day or month validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(5, 3); var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; return { "pos": pos, "c": chrs.charAt(0) }; } } } //check leap yeap if (isValid) { var dayMonthValue = buffer.join('').substr(4, 4) + chrs; if (dayMonthValue != opts.leapday) return true; else { var year = parseInt(buffer.join('').substr(0, 4), 10); //detect leap year if (year % 4 === 0) if (year % 100 === 0) if (year % 400 === 0) return true; else return false; else return true; else return false; } } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var frontValue = buffer.join('').substr(5, 3); var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs); if (!strict && !isValid) { isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] } } }, 'dd.mm.yyyy': { mask: "1.2.y", placeholder: "dd.mm.yyyy", leapday: "29.02.", separator: '.', alias: "dd/mm/yyyy" }, 'dd-mm-yyyy': { mask: "1-2-y", placeholder: "dd-mm-yyyy", leapday: "29-02-", separator: '-', alias: "dd/mm/yyyy" }, 'mm.dd.yyyy': { mask: "1.2.y", placeholder: "mm.dd.yyyy", leapday: "02.29.", separator: '.', alias: "mm/dd/yyyy" }, 'mm-dd-yyyy': { mask: "1-2-y", placeholder: "mm-dd-yyyy", leapday: "02-29-", separator: '-', alias: "mm/dd/yyyy" }, 'yyyy.mm.dd': { mask: "y.1.2", placeholder: "yyyy.mm.dd", leapday: ".02.29", separator: '.', alias: "yyyy/mm/dd" }, 'yyyy-mm-dd': { mask: "y-1-2", placeholder: "yyyy-mm-dd", leapday: "-02-29", separator: '-', alias: "yyyy/mm/dd" }, 'datetime': { mask: "1/2/y h:s", placeholder: "dd/mm/yyyy hh:mm", alias: "dd/mm/yyyy", regex: { hrspre: new RegExp("[012]"), //hours pre hrs24: new RegExp("2[0-9]|1[3-9]"), hrs: new RegExp("[01][0-9]|2[0-3]"), //hours ampmpre: new RegExp("[apAP]"), ampm: new RegExp("^[a|p|A|P][m|M]") }, timeseparator: ':', hourFormat: "24", // or 12 definitions: { 'h': { //hours validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.hrs.test(chrs); if (!strict && !isValid) { if (chrs.charAt(1) == opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) != -1) { isValid = opts.regex.hrs.test("0" + chrs.charAt(0)); if (isValid) { buffer[pos - 1] = "0"; buffer[pos] = chrs.charAt(0); pos++; return { "pos": pos }; } } } if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) { var tmp = parseInt(chrs, 10); if (tmp == 24) { buffer[pos + 5] = "a"; buffer[pos + 6] = "m"; } else { buffer[pos + 5] = "p"; buffer[pos + 6] = "m"; } tmp = tmp - 12; if (tmp < 10) { buffer[pos] = tmp.toString(); buffer[pos - 1] = "0"; } else { buffer[pos] = tmp.toString().charAt(1); buffer[pos - 1] = tmp.toString().charAt(0); } return { "pos": pos, "c": buffer[pos] }; } return isValid; }, cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.hrspre.test(chrs); if (!strict && !isValid) { isValid = opts.regex.hrs.test("0" + chrs); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } return isValid; }, cardinality: 1 }] }, 't': { //am/pm validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.ampm.test(chrs); if (!strict && !isValid) { isValid = opts.regex.ampm.test(chrs + 'm'); if (isValid) { buffer[pos - 1] = chrs.charAt(0); buffer[pos] = "m"; pos++; return pos; } } return isValid; }, casing: "lower", cardinality: 2, prevalidator: [{ validator: function (chrs, buffer, pos, strict, opts) { var isValid = opts.regex.ampmpre.test(chrs); if (isValid) { isValid = opts.regex.ampm.test(chrs + "m"); if (isValid) { buffer[pos] = chrs; buffer[pos + 1] = 'm'; return pos; } } return isValid; }, cardinality: 1 }] } }, insertMode: false, autoUnmask: false }, 'datetime12': { mask: "1/2/y h:s t", placeholder: "dd/mm/yyyy hh:mm xm", alias: "datetime", hourFormat: "12" }, 'hh:mm t': { mask: "h:s t", placeholder: "hh:mm xm", alias: "datetime", hourFormat: "12" }, 'h:s t': { mask: "h:s t", placeholder: "hh:mm xm", alias: "datetime", hourFormat: "12" }, 'hh:mm:ss': { mask: "h:s:s", autoUnmask: false }, 'hh:mm': { mask: "h:s", autoUnmask: false }, 'date': { alias: "dd/mm/yyyy" // "mm/dd/yyyy" } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/js/jquery.inputmask.extensions.js ================================================ /* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 0.0.0 Optional extensions on the jquery.inputmask base */ (function ($) { //extra definitions $.extend($.inputmask.defaults.definitions, { 'A': { //auto uppercasing validator: "[A-Za-z]", cardinality: 1, casing: "upper" }, '#': { validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]", cardinality: 1, casing: "upper" } }); $.extend($.inputmask.defaults.aliases, { 'url': { mask: "ir", placeholder: "", separator: "", defaultPrefix: "http://", regex: { urlpre1: new RegExp("[fh]"), urlpre2: new RegExp("(ft|ht)"), urlpre3: new RegExp("(ftp|htt)"), urlpre4: new RegExp("(ftp:|http|ftps)"), urlpre5: new RegExp("(ftp:/|ftps:|http:|https)"), urlpre6: new RegExp("(ftp://|ftps:/|http:/|https:)"), urlpre7: new RegExp("(ftp://|ftps://|http://|https:/)"), urlpre8: new RegExp("(ftp://|ftps://|http://|https://)") }, definitions: { 'i': { validator: function (chrs, buffer, pos, strict, opts) { return true; }, cardinality: 8, prevalidator: (function () { var result = [], prefixLimit = 8; for (var i = 0; i < prefixLimit; i++) { result[i] = (function () { var j = i; return { validator: function (chrs, buffer, pos, strict, opts) { if (opts.regex["urlpre" + (j + 1)]) { var tmp = chrs, k; if (((j + 1) - chrs.length) > 0) { tmp = buffer.join('').substring(0, ((j + 1) - chrs.length)) + "" + tmp; } var isValid = opts.regex["urlpre" + (j + 1)].test(tmp); if (!strict && !isValid) { pos = pos - j; for (k = 0; k < opts.defaultPrefix.length; k++) { buffer[pos] = opts.defaultPrefix[k]; pos++; } for (k = 0; k < tmp.length - 1; k++) { buffer[pos] = tmp[k]; pos++; } return { "pos": pos }; } return isValid; } else { return false; } }, cardinality: j }; })(); } return result; })() }, "r": { validator: ".", cardinality: 50 } }, insertMode: false, autoUnmask: false }, "ip": { mask: "i.i.i.i", definitions: { 'i': { validator: "25[0-5]|2[0-4][0-9]|[01][0-9][0-9]", cardinality: 3, prevalidator: [ { validator: "[0-2]", cardinality: 1 }, { validator: "2[0-5]|[01][0-9]", cardinality: 2 } ] } } } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/js/jquery.inputmask.js ================================================ /** * @license Input Mask plugin for jquery * http://github.com/RobinHerbots/jquery.inputmask * Copyright (c) 2010 - 2013 Robin Herbots * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) * Version: 0.0.0 */ (function ($) { if ($.fn.inputmask == undefined) { $.inputmask = { //options default defaults: { placeholder: "_", optionalmarker: { start: "[", end: "]" }, escapeChar: "\\", mask: null, oncomplete: $.noop, //executes when the mask is complete onincomplete: $.noop, //executes when the mask is incomplete and focus is lost oncleared: $.noop, //executes when the mask is cleared repeat: 0, //repetitions of the mask greedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed autoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor clearMaskOnLostFocus: true, insertMode: true, //insert the input or overwrite the input clearIncomplete: false, //clear the incomplete input on blur aliases: {}, //aliases definitions => see jquery.inputmask.extensions.js onKeyUp: $.noop, //override to implement autocomplete on certain keys for example onKeyDown: $.noop, //override to implement autocomplete on certain keys for example showMaskOnFocus: true, //show the mask-placeholder when the input has focus showMaskOnHover: true, //show the mask-placeholder when hovering the empty input onKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: result, opts skipOptionalPartCharacter: " ", //a character which can be used to skip an optional part of a mask showTooltip: false, //show the activemask as tooltip //numeric basic properties numericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position) radixPoint: "", //".", // | "," skipRadixDance: false, //disable radixpoint caret positioning rightAlignNumerics: true, //align numerics to the right //numeric basic properties definitions: { '9': { validator: "[0-9]", cardinality: 1 }, 'a': { validator: "[A-Za-z\u0410-\u044F\u0401\u0451]", cardinality: 1 }, '*': { validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]", cardinality: 1 } }, 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 }, //specify keycodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF ignorables: [9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { var calculatedLength = buffer.length; if (!greedy && repeat > 1) { calculatedLength += (buffer.length * (repeat - 1)); } return calculatedLength; } }, val: $.fn.val, //store the original jquery val function escapeRegex: function (str) { var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\']; return str.replace(new RegExp('(\\' + specials.join('|\\') + ')', 'gim'), '\\$1'); } }; $.fn.inputmask = function (fn, options) { var opts = $.extend(true, {}, $.inputmask.defaults, options), msie10 = navigator.userAgent.match(new RegExp("msie 10", "i")) !== null, iphone = navigator.userAgent.match(new RegExp("iphone", "i")) !== null, android = navigator.userAgent.match(new RegExp("android.*safari.*", "i")) !== null, pasteEvent = isInputEventSupported('paste') && !msie10 ? 'paste' : 'input', android533, masksets, activeMasksetIndex = 0; if (android) { var browser = navigator.userAgent.match(/safari.*/i), version = parseInt(new RegExp(/[0-9]+/).exec(browser)); android533 = (version <= 533); //android534 = (533 < version) && (version <= 534); } if (typeof fn === "string") { switch (fn) { case "mask": //resolve possible aliases given by options resolveAlias(opts.alias, options); masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), 0).mask(this); }); case "unmaskedvalue": var $input = $(this), input = this; masksets = $input.data('inputmask')['masksets']; activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; opts = $input.data('inputmask')['opts']; return maskScope(masksets, activeMasksetIndex).unmaskedvalue(this); case "remove": return this.each(function () { var $input = $(this), input = this; setTimeout(function () { if ($input.data('inputmask')) { masksets = $input.data('inputmask')['masksets']; activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; opts = $input.data('inputmask')['opts']; //writeout the unmaskedvalue input._valueSet(maskScope(masksets, activeMasksetIndex).unmaskedvalue($input, true)); //clear data $input.removeData('inputmask'); //unbind all events $input.unbind(".inputmask"); $input.removeClass('focus.inputmask'); //restore the value property var valueProperty; if (Object.getOwnPropertyDescriptor) valueProperty = Object.getOwnPropertyDescriptor(input, "value"); if (valueProperty && valueProperty.get) { if (input._valueGet) { Object.defineProperty(input, "value", { get: input._valueGet, set: input._valueSet }); } } else if (document.__lookupGetter__ && input.__lookupGetter__("value")) { if (input._valueGet) { input.__defineGetter__("value", input._valueGet); input.__defineSetter__("value", input._valueSet); } } delete input._valueGet; delete input._valueSet; } }, 0); }); break; case "getemptymask": //return the default (empty) mask value, usefull for setting the default value in validation if (this.data('inputmask')) { masksets = this.data('inputmask')['masksets']; activeMasksetIndex = this.data('inputmask')['activeMasksetIndex']; return masksets[activeMasksetIndex]['_buffer'].join(''); } else return ""; case "hasMaskedValue": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value return this.data('inputmask') ? !this.data('inputmask')['opts'].autoUnmask : false; case "isComplete": masksets = this.data('inputmask')['masksets']; activeMasksetIndex = this.data('inputmask')['activeMasksetIndex']; opts = this.data('inputmask')['opts']; return maskScope(masksets, activeMasksetIndex).isComplete(this[0]._valueGet().split('')); default: //check if the fn is an alias if (!resolveAlias(fn, options)) { //maybe fn is a mask so we try //set mask opts.mask = fn; } masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this); }); break; } } else if (typeof fn == "object") { opts = $.extend(true, {}, $.inputmask.defaults, fn); resolveAlias(opts.alias, fn); //resolve aliases masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this); }); } else if (fn == undefined) { //look for data-inputmask atribute - the attribute should only contain optipns return this.each(function () { var attrOptions = $(this).attr("data-inputmask"); if (attrOptions && attrOptions != "") { try { attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'); var dataoptions = $.parseJSON("{" + attrOptions + "}"); opts = $.extend(true, {}, $.inputmask.defaults, options); $.extend(true, opts, dataoptions); resolveAlias(opts.alias, dataoptions); opts.alias = undefined; $(this).inputmask(opts); } catch (ex) { } //need a more relax parseJSON } }); } //helper functions function isInputEventSupported(eventName) { var el = document.createElement('input'), eventName = 'on' + eventName, isSupported = (eventName in el); if (!isSupported) { el.setAttribute(eventName, 'return;'); isSupported = typeof el[eventName] == 'function'; } el = null; return isSupported; } function resolveAlias(aliasStr, options) { var aliasDefinition = opts.aliases[aliasStr]; if (aliasDefinition) { if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias); //alias is another alias $.extend(true, opts, aliasDefinition); //merge alias definition in the options $.extend(true, opts, options); //reapply extra given options return true; } return false; } function getMaskTemplate(mask) { var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat; if (mask.length == 1 && greedy == false) { opts.placeholder = ""; } //hide placeholder with single non-greedy mask var singleMask = $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true; } else if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { for (var i = 0; i < maskdef.cardinality; i++) { outElem.push(getPlaceHolder(outCount + i)); } } else { outElem.push(element); escaped = false; } outCount += outElem.length; return outElem; } }); //allocate repetitions var repeatedMask = singleMask.slice(); for (var i = 1; i < repeat && greedy; i++) { repeatedMask = repeatedMask.concat(singleMask.slice()); } return { "mask": repeatedMask, "repeat": repeat, "greedy": greedy }; } //test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol} function getTestingChain(mask) { var isOptional = false, escaped = false; var newBlockMarker = false; //indicates wheter the begin/ending of a block should be indicated return $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true; } else if (element == opts.optionalmarker.start && !escaped) { isOptional = true; newBlockMarker = true; } else if (element == opts.optionalmarker.end && !escaped) { isOptional = false; newBlockMarker = true; } else { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { var prevalidators = maskdef["prevalidator"], prevalidatorsL = prevalidators ? prevalidators.length : 0; for (var i = 1; i < maskdef.cardinality; i++) { var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator["validator"], cardinality = prevalidator["cardinality"]; outElem.push({ fn: validator ? typeof validator == 'string' ? new RegExp(validator) : new function () { this.test = validator; } : new RegExp("."), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] | element }); if (isOptional == true) //reset newBlockMarker newBlockMarker = false; } outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == 'string' ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator; } : new RegExp("."), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] | element }); } else { outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element }); escaped = false; } //reset newBlockMarker newBlockMarker = false; return outElem; } }); } function generateMaskSets() { var ms = []; var genmasks = []; //used to keep track of the masks that where processed, to avoid duplicates function markOptional(maskPart) { //needed for the clearOptionalTail functionality return opts.optionalmarker.start + maskPart + opts.optionalmarker.end; } function splitFirstOptionalEndPart(maskPart) { var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { optionalStartMarkers++; } if (maskPart.charAt(i) == opts.optionalmarker.end) { optionalEndMarkers++; } if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers) break; } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)); } return maskParts; } function splitFirstOptionalStartPart(maskPart) { var mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { break; } } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)); } return maskParts; } function generateMask(maskPrefix, maskPart) { var maskParts = splitFirstOptionalEndPart(maskPart); var newMask, maskTemplate; var masks = splitFirstOptionalStartPart(maskParts[0]); if (masks.length > 1) { newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } if (splitFirstOptionalStartPart(masks[1]).length > 1) { //optional contains another optional generateMask(maskPrefix + masks[0], masks[1] + maskParts[1]); } if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) { generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1]); generateMask(maskPrefix + masks[0], maskParts[1]); } } else { newMask = maskPrefix + maskParts; if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ "mask": newMask, "_buffer": maskTemplate["mask"], "buffer": maskTemplate["mask"].slice(), "tests": getTestingChain(newMask), "lastValidPosition": undefined, "greedy": maskTemplate["greedy"], "repeat": maskTemplate["repeat"] }); } } } if ($.isArray(opts.mask)) { $.each(opts.mask, function (ndx, lmnt) { generateMask("", lmnt.toString()); }); } else generateMask("", opts.mask.toString()); return ms; } function getPlaceHolder(pos) { return opts.placeholder.charAt(pos % opts.placeholder.length); } function maskScope(masksets, activeMasksetIndex) { //maskset helperfunctions function getActiveMaskSet() { return masksets[activeMasksetIndex]; } function getActiveTests() { return getActiveMaskSet()['tests']; } function getActiveBufferTemplate() { return getActiveMaskSet()['_buffer']; } function getActiveBuffer() { return getActiveMaskSet()['buffer']; } function isValid(pos, c, strict, isRTL) { //strict true ~ no correction or autofill strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions function _isValid(position, activeMaskset) { var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = '', buffer = activeMaskset["buffer"]; for (var i = activeMaskset['tests'][testPos].cardinality; i > loopend; i--) { chrs += getBufferElement(buffer, testPos - (i - 1)); } if (c) { chrs += c; } //return is false or a json object => { pos: ??, c: ??} or true return activeMaskset['tests'][testPos].fn != null ? activeMaskset['tests'][testPos].fn.test(chrs, buffer, position, strict, opts) : false; } if (strict) { var result = _isValid(pos, getActiveMaskSet()); //only check validity in current mask when validating strict if (result === true) { result = { "pos": pos }; //always take a possible corrected maskposition into account } return result; } var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (index, value) { var activeMaskset = this; activeMasksetIndex = index; var maskPos = pos; if (currentActiveMasksetIndex != activeMasksetIndex && !isMask(pos)) { if (c == activeMaskset['_buffer'][maskPos] || c == opts.skipOptionalPartCharacter) { //match non-mask item results.push({ "activeMasksetIndex": index, "result": { "refresh": true, c: activeMaskset['_buffer'][maskPos] } }); //new command hack only rewrite buffer activeMaskset['lastValidPosition'] = maskPos; return false; } else activeMaskset['lastValidPosition'] = isRTL ? getMaskLength() + 1 : -1; //mark mask as validated and invalid //maskPos = isRTL ? seekPrevious(pos) : seekNext(pos); } if ((activeMaskset['lastValidPosition'] == undefined && maskPos == (isRTL ? seekPrevious(getMaskLength()) : seekNext(-1)) ) || (isRTL || opts.numericInput) ? activeMaskset['lastValidPosition'] <= opts.numericInput ? getMaskLength() : seekNext(maskPos) : activeMaskset['lastValidPosition'] >= seekPrevious(maskPos)) { if (maskPos >= 0 && maskPos < getMaskLength()) { result = _isValid(maskPos, activeMaskset); if (result !== false) { if (result === true) { result = { "pos": maskPos }; //always take a possible corrected maskposition into account } var newValidPosition = result.pos || maskPos; if (activeMaskset['lastValidPosition'] == undefined || (isRTL ? (opts.greedy ? activeMaskset['lastValidPosition'] > newValidPosition : newValidPosition == getActiveBuffer().length - 1) : activeMaskset['lastValidPosition'] < newValidPosition)) activeMaskset['lastValidPosition'] = newValidPosition; //set new position from isValid } else activeMaskset['lastValidPosition'] = isRTL ? pos == getMaskLength() ? undefined : seekNext(pos) : pos == 0 ? undefined : seekPrevious(pos); //autocorrect validposition from backspace etc results.push({ "activeMasksetIndex": index, "result": result }); } } }); activeMasksetIndex = currentActiveMasksetIndex; //reset activeMasksetIndex return results; //return results of the multiple mask validations } function determineActiveMasksetIndex(isRTL) { var currentMasksetIndex = activeMasksetIndex, highestValid = { "activeMasksetIndex": 0, "lastValidPosition": isRTL ? getMaskLength() + 1 : -1 }; $.each(masksets, function (index, value) { var activeMaskset = this; if (activeMaskset['lastValidPosition'] != undefined) { if ((isRTL || opts.numericInput) ? (activeMaskset['lastValidPosition'] < highestValid['lastValidPosition']) : (activeMaskset['lastValidPosition'] > highestValid['lastValidPosition'])) { highestValid["activeMasksetIndex"] = index; highestValid["lastValidPosition"] = activeMaskset['lastValidPosition']; } } }); activeMasksetIndex = highestValid["activeMasksetIndex"]; if (currentMasksetIndex != activeMasksetIndex) { if (isRTL) { clearBuffer(getActiveBuffer(), 0, seekPrevious(highestValid["lastValidPosition"])); } else { clearBuffer(getActiveBuffer(), seekNext(highestValid["lastValidPosition"]), getMaskLength()); } getActiveMaskSet()["writeOutBuffer"] = true; } } function isMask(pos) { var testPos = determineTestPosition(pos); var test = getActiveTests()[testPos]; return test != undefined ? test.fn : false; } function determineTestPosition(pos) { return pos % getActiveTests().length; } function getMaskLength() { return opts.getMaskLength(getActiveBufferTemplate(), getActiveMaskSet()['greedy'], getActiveMaskSet()['repeat'], getActiveBuffer(), opts); } //pos: from position function seekNext(pos) { var maskL = getMaskLength(); if (pos >= maskL) return maskL; var position = pos; while (++position < maskL && !isMask(position)) { } ; return position; } //pos: from position function seekPrevious(pos) { var position = pos; if (position <= 0) return 0; while (--position > 0 && !isMask(position)) { } ; return position; } function setBufferElement(buffer, position, element, autoPrepare, isRTL) { if (autoPrepare) position = prepareBuffer(buffer, position, isRTL); var test = getActiveTests()[determineTestPosition(position)]; var elem = element; if (elem != undefined) { switch (test.casing) { case "upper": elem = element.toUpperCase(); break; case "lower": elem = element.toLowerCase(); break; } } buffer[position] = elem; } function getBufferElement(buffer, position, autoPrepare) { if (autoPrepare) position = prepareBuffer(buffer, position); return buffer[position]; } //needed to handle the non-greedy mask repetitions function prepareBuffer(buffer, position, isRTL) { var j; if (isRTL) { while (position < 0 && buffer.length < getMaskLength()) { j = getActiveBufferTemplate().length - 1; position = getActiveBufferTemplate().length; while (getActiveBufferTemplate()[j] !== undefined) { buffer.unshift(getActiveBufferTemplate()[j--]); } } } else { while (buffer[position] == undefined && buffer.length < getMaskLength()) { j = 0; while (getActiveBufferTemplate()[j] !== undefined) { //add a new buffer buffer.push(getActiveBufferTemplate()[j++]); } } } return position; } function writeBuffer(input, buffer, caretPos) { input._valueSet(buffer.join('')); if (caretPos != undefined) { caret(input, caretPos); } } ; function clearBuffer(buffer, start, end) { for (var i = start, maskL = getMaskLength() ; i < end && i < maskL; i++) { setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true)); } } ; function setReTargetPlaceHolder(buffer, pos) { var testPos = determineTestPosition(pos); setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos)); } function checkVal(input, writeOut, strict, nptvl) { var isRTL = $(input).data('inputmask')['isRTL'], inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet(), isRTL).split(''); $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); if (strict !== true) activeMasksetIndex = 0; //caret(input, getActiveMaskSet()["p"]); if (isRTL && !opts.numericInput) inputValue = inputValue.reverse(); var ml = getMaskLength(); $.each(inputValue, function (ndx, charCode) { var index = isRTL ? (opts.numericInput ? ml : ml - ndx - 1) : ndx; if (isMask(isRTL ? (opts.numericInput ? seekPrevious(ml) : ml - ndx - 1) : ndx) || (strict !== true && charCode != getBufferElement(getActiveBufferTemplate(), index, true))) { $(input).trigger("keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]); } }); if (strict === true) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["p"]) : seekPrevious(getActiveMaskSet()["p"]); } function escapeRegex(str) { return $.inputmask.escapeRegex.call(this, str); } function truncateInput(inputValue, rtl) { return rtl ? inputValue.replace(new RegExp("^(" + escapeRegex(getActiveBufferTemplate().join('')) + ")*"), "") : inputValue.replace(new RegExp("(" + escapeRegex(getActiveBufferTemplate().join('')) + ")*$"), ""); } function clearOptionalTail(input) { var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos; if ($(input).data('inputmask')['isRTL']) { for (var pos = 0; pos <= tmpBuffer.length - 1; pos++) { var testPos = determineTestPosition(pos); if (getActiveTests()[testPos].optionality) { if (!isMask(pos) || !isValid(pos, buffer[pos], true)) tmpBuffer.splice(0, 1); else break; } else break; } } else { for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) { var testPos = determineTestPosition(pos); if (getActiveTests()[testPos].optionality) { if (!isMask(pos) || !isValid(pos, buffer[pos], true)) tmpBuffer.pop(); else break; } else break; } } writeBuffer(input, tmpBuffer); } //functionality fn this.unmaskedvalue = function ($input, skipDatepickerCheck) { return unmaskedvalue($input, skipDatepickerCheck); }; function unmaskedvalue($input, skipDatepickerCheck) { var input = $input[0]; if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) { checkVal(input, false, true); return $.map(getActiveBuffer(), function (element, index) { return isMask(index) && isValid(index, element, true) ? element : null; }).join(''); } else { return input._valueGet(); } } var caretSavePoint; function caret(input, begin, end) { var npt = input.jquery && input.length > 0 ? input[0] : input, range; if (typeof begin == 'number') { if (!$(input).is(':visible')) { return; } end = (typeof end == 'number') ? end : begin; if (opts.insertMode == false && begin == end) end++; //set visualization for insert/overwrite mode if (npt.setSelectionRange) { if (android) { setTimeout(function () { npt.selectionStart = begin; npt.selectionEnd = android ? begin : end; }, 10); caretSavePoint = { "begin": begin, "end": end }; } else { npt.selectionStart = begin; npt.selectionEnd = end; } } else if (npt.createTextRange) { range = npt.createTextRange(); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', begin); range.select(); } } else { if (!$(input).is(':visible')) { return { "begin": 0, "end": 0 }; } if (npt.setSelectionRange) { begin = npt.selectionStart; end = npt.selectionEnd; } else if (document.selection && document.selection.createRange) { range = document.selection.createRange(); begin = 0 - range.duplicate().moveStart('character', -100000); end = begin + range.text.length; } return { "begin": begin, "end": end }; } }; this.isComplete = function (buffer) { return isComplete(buffer); }; function isComplete(buffer) { var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (ndx, ms) { activeMasksetIndex = ndx; var aml = seekPrevious(getMaskLength()); if (ms["lastValidPosition"] != undefined && ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) { var msComplete = true; for (var i = 0; i <= aml; i++) { var mask = isMask(i), testPos = determineTestPosition(i); if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) { msComplete = false; break; } } complete = complete || msComplete; if (complete) //break loop return false; } highestValidPosition = ms["lastValidPosition"]; }); activeMasksetIndex = currentActiveMasksetIndex; //reset activeMaskset return complete; } this.mask = function (el) { var $input = $(el); if (!$input.is(":input")) return; //store tests & original buffer in the input element - used to get the unmasked value $input.data('inputmask', { 'masksets': masksets, 'activeMasksetIndex': activeMasksetIndex, 'opts': opts, 'isRTL': false }); //show tooltip if (opts.showTooltip) { $input.prop("title", getActiveMaskSet()["mask"]); } //correct greedy setting if needed getActiveMaskSet()['greedy'] = getActiveMaskSet()['greedy'] ? getActiveMaskSet()['greedy'] : getActiveMaskSet()['repeat'] == 0; //handle maxlength attribute var maxLength = $input.prop('maxLength'); if (getMaskLength() > maxLength && maxLength > -1) { //FF sets no defined max length to -1 if (maxLength < getActiveBufferTemplate().length) getActiveBufferTemplate().length = maxLength; if (getActiveMaskSet()['greedy'] == false) { getActiveMaskSet()['repeat'] = Math.round(maxLength / getActiveBufferTemplate().length); } $input.prop('maxLength', getMaskLength() * 2); } patchValueProperty(el); //init vars getActiveMaskSet()["undoBuffer"] = el._valueGet(); var skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround ignorable = false, isRTL = false; if (el.dir == "rtl" || opts.numericInput) { if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics)) $input.css("text-align", "right"); el.dir = "ltr"; $input.removeAttr("dir"); var inputData = $input.data('inputmask'); inputData['isRTL'] = true; $input.data('inputmask', inputData); isRTL = true; } //unbind all events - to make sure that no other mask will interfere when re-masking $input.unbind(".inputmask"); $input.removeClass('focus.inputmask'); //bind events $input.bind("mouseenter.inputmask", function () { var $input = $(this), input = this; if (!$input.hasClass('focus.inputmask') && opts.showMaskOnHover) { if (input._valueGet() != getActiveBuffer().join('')) { writeBuffer(input, getActiveBuffer()); } } }).bind("blur.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer(); $input.removeClass('focus.inputmask'); if (nptValue != getActiveMaskSet()["undoBuffer"]) { $input.change(); } if (opts.clearMaskOnLostFocus && nptValue != '') { if (nptValue == getActiveBufferTemplate().join('')) input._valueSet(''); else { //clearout optional tail of the mask clearOptionalTail(input); } } if (!isComplete(buffer)) { $input.trigger("incomplete"); if (opts.clearIncomplete) { $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); activeMasksetIndex = 0; if (opts.clearMaskOnLostFocus) input._valueSet(''); else { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer); } } } }).bind("focus.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(); if (opts.showMaskOnFocus && !$input.hasClass('focus.inputmask') && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ''))) { if (input._valueGet() != getActiveBuffer().join('')) { writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]); } } $input.addClass('focus.inputmask'); getActiveMaskSet()["undoBuffer"] = input._valueGet(); }).bind("mouseleave.inputmask", function () { var $input = $(this), input = this; if (opts.clearMaskOnLostFocus) { if (!$input.hasClass('focus.inputmask')) { if (input._valueGet() == getActiveBufferTemplate().join('') || input._valueGet() == '') input._valueSet(''); else { //clearout optional tail of the mask clearOptionalTail(input); } } } }).bind("click.inputmask", function () { var input = this; setTimeout(function () { var selectedCaret = caret(input), buffer = getActiveBuffer(); if (selectedCaret.begin == selectedCaret.end) { var clickPosition = selectedCaret.begin, lvp = getActiveMaskSet()["lastValidPosition"], lastPosition; determineInputDirection(input, selectedCaret); if (isRTL) { if (opts.numericInput) { lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ? $.inArray(opts.radixPoint, buffer) : getMaskLength(); } else { lastPosition = seekPrevious((lvp == undefined ? getMaskLength() : lvp) + 1); } caret(input, clickPosition > lastPosition && (isValid(clickPosition, buffer[clickPosition], true, isRTL) !== false || !isMask(clickPosition)) ? clickPosition : lastPosition); } else { lastPosition = seekNext(lvp == undefined ? -1 : lvp); caret(input, clickPosition < lastPosition && (isValid(clickPosition, buffer[clickPosition], true, isRTL) !== false || !isMask(clickPosition)) ? clickPosition : lastPosition); } } }, 0); }).bind('dblclick.inputmask', function () { var input = this; if (getActiveMaskSet()["lastValidPosition"] != undefined) { setTimeout(function () { isRTL ? caret(input, seekPrevious(getActiveMaskSet()["lastValidPosition"]), getMaskLength()) : caret(input, 0, seekNext(getActiveMaskSet()["lastValidPosition"])); }, 0); } }).bind("keydown.inputmask", keydownEvent ).bind("keypress.inputmask", keypressEvent ).bind("keyup.inputmask", keyupEvent ).bind(pasteEvent + ".inputmask dragdrop.inputmask drop.inputmask", function () { var input = this, $input = $(input); setTimeout(function () { checkVal(input, true, false); if (isComplete(getActiveBuffer())) $input.trigger("complete"); $input.click(); }, 0); }).bind('setvalue.inputmask', function () { var input = this; getActiveMaskSet()["undoBuffer"] = input._valueGet(); checkVal(input, true); if (input._valueGet() == getActiveBufferTemplate().join('')) input._valueSet(''); }).bind('complete.inputmask', opts.oncomplete) .bind('incomplete.inputmask', opts.onincomplete) .bind('cleared.inputmask', opts.oncleared); //apply mask checkVal(el, true, false); // Wrap document.activeElement in a try/catch block since IE9 throw "Unspecified error" if document.activeElement is undefined when we are in an IFrame. var activeElement; try { activeElement = document.activeElement; } catch (e) { } if (activeElement === el) { //position the caret when in focus $input.addClass('focus.inputmask'); caret(el, getActiveMaskSet()["lastValidPosition"]); } else if (opts.clearMaskOnLostFocus) { if (getActiveBuffer().join('') == getActiveBufferTemplate().join('')) { el._valueSet(''); } else { clearOptionalTail(el); } } installEventRuler(el); //private functions function installEventRuler(npt) { var events = $._data(npt).events; $.each(events, function (eventType, eventHandlers) { $.each(eventHandlers, function (ndx, eventHandler) { if (eventHandler.namespace == "inputmask") { var handler = eventHandler.handler; eventHandler.handler = function (e) { if (this.readOnly || this.disabled) e.preventDefault; else return handler.apply(this, arguments); }; } }); }); } function patchValueProperty(npt) { var valueProperty; if (Object.getOwnPropertyDescriptor) valueProperty = Object.getOwnPropertyDescriptor(npt, "value"); if (valueProperty && valueProperty.get) { if (!npt._valueGet) { npt._valueGet = valueProperty.get; npt._valueSet = valueProperty.set; Object.defineProperty(npt, "value", { get: function () { var $self = $(this), inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : this._valueGet() != masksets[activeMasksetIndex]['_buffer'].join('') ? this._valueGet() : ''; }, set: function (value) { this._valueSet(value); $(this).triggerHandler('setvalue.inputmask'); } }); } } else if (document.__lookupGetter__ && npt.__lookupGetter__("value")) { if (!npt._valueGet) { npt._valueGet = npt.__lookupGetter__("value"); npt._valueSet = npt.__lookupSetter__("value"); npt.__defineGetter__("value", function () { var $self = $(this), inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : this._valueGet() != masksets[activeMasksetIndex]['_buffer'].join('') ? this._valueGet() : ''; }); npt.__defineSetter__("value", function (value) { this._valueSet(value); $(this).triggerHandler('setvalue.inputmask'); }); } } else { if (!npt._valueGet) { npt._valueGet = function () { return this.value; }; npt._valueSet = function (value) { this.value = value; }; } if ($.fn.val.inputmaskpatch != true) { $.fn.val = function () { if (arguments.length == 0) { var $self = $(this); if ($self.data('inputmask')) { if ($self.data('inputmask')['opts'].autoUnmask) return $self.inputmask('unmaskedvalue'); else { var result = $.inputmask.val.apply($self); var inputData = $(this).data('inputmask'), masksets = inputData['masksets'], activeMasksetIndex = inputData['activeMasksetIndex']; return result != masksets[activeMasksetIndex]['_buffer'].join('') ? result : ''; } } else return $.inputmask.val.apply($self); } else { var args = arguments; return this.each(function () { var $self = $(this); var result = $.inputmask.val.apply($self, args); if ($self.data('inputmask')) $self.triggerHandler('setvalue.inputmask'); return result; }); } }; $.extend($.fn.val, { inputmaskpatch: true }); } } } function determineInputDirection(input, pos) { //set input direction according the position to the radixPoint if (opts.numericInput && opts.radixPoint != "" && opts.skipRadixDance === false) { var nptStr = input._valueGet(); var radixPosition = nptStr.indexOf(opts.radixPoint); isRTL = pos.begin <= radixPosition || pos.end <= radixPosition || radixPosition == -1; } } //shift chars to left from start to end and put c at end position if defined function shiftL(start, end, c) { var buffer = getActiveBuffer(); while (!isMask(start) && start - 1 >= 0) start--; //jumping over nonmask position for (var i = start; i < end && i < getMaskLength() ; i++) { if (isMask(i)) { setReTargetPlaceHolder(buffer, i); var j = seekNext(i); var p = getBufferElement(buffer, j); if (p != getPlaceHolder(j)) { if (j < getMaskLength() && isValid(i, p, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) { setBufferElement(buffer, i, getBufferElement(buffer, j), true, isRTL); if (j < end) { setReTargetPlaceHolder(buffer, j); //cleanup next position } } else { if (isMask(i)) break; } } //else if (c == undefined) break; } else { setReTargetPlaceHolder(buffer, i); } } if (c != undefined) setBufferElement(buffer, isRTL ? end : seekPrevious(end), c); if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join(''), isRTL).split(''); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i]; } if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); } return start; //return the used start position } function shiftR(start, end, c, full) { //full => behave like a push right ~ do not stop on placeholders var buffer = getActiveBuffer(); for (var i = start; i <= end && i < getMaskLength() ; i++) { if (isMask(i)) { var t = getBufferElement(buffer, i); setBufferElement(buffer, i, c, true, isRTL); if (t != getPlaceHolder(i)) { var j = seekNext(i); if (j < getMaskLength()) { if (isValid(j, t, true, isRTL) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) c = t; else { if (isMask(j)) break; else c = t; } } else break; } else { c = t; if (full !== true) break; } } else setReTargetPlaceHolder(buffer, i); } var lengthBefore = buffer.length; if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join(''), isRTL).split(''); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i]; } if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); } return end - (lengthBefore - buffer.length); //return new start position } ; function keydownEvent(e) { //Safari 5.1.x - modal dialog fires keypress twice workaround skipKeyPressEvent = false; var input = this, k = e.keyCode, pos = caret(input); determineInputDirection(input, pos); //backspace, delete, and escape get special treatment if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete e.preventDefault(); //stop default action but allow propagation var beginPos = pos.begin; if (pos.begin == 0 && pos.end == getMaskLength()) { clearBuffer(getActiveBuffer(), pos.begin, pos.end); $.each(masksets, function (ndx, ms) { ms["buffer"] = ms["_buffer"].slice(); ms["lastValidPosition"] = undefined; ms["p"] = isRTL ? getMaskLength() : 0; }); } else if ((pos.end - pos.begin) > 1 || ((pos.end - pos.begin) == 1 && opts.insertMode)) { //partial selection clearBuffer(getActiveBuffer(), pos.begin, pos.end); var ml = getMaskLength(); if (opts.greedy == false) { isRTL ? shiftR(0, pos.end - 1, getPlaceHolder(pos.end), true) : shiftL(pos.begin, ml); } else { for (var i = pos.begin; i < pos.end; i++) { if (isMask(i)) isRTL ? shiftR(0, pos.end - 1, getPlaceHolder(pos.end), true) : shiftL(pos.begin, ml); } } checkVal(input, false, true, getActiveBuffer()); } else { $.each(masksets, function (ndx, ms) { activeMasksetIndex = ndx; beginPos = android533 ? pos.end : pos.begin; var buffer = getActiveBuffer(), firstMaskPos = isRTL ? seekPrevious(getMaskLength() + 1) : seekNext(-1), maskL = getMaskLength(); if (k == opts.keyCode.DELETE) { //handle delete if (isRTL ? beginPos > firstMaskPos : beginPos < firstMaskPos) beginPos = firstMaskPos; if (beginPos < maskL) { if (opts.numericInput && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : seekNext(beginPos); beginPos = shiftL(beginPos, maskL); } else { if (isRTL) { beginPos = shiftR(0, beginPos, getPlaceHolder(beginPos), true); beginPos = seekNext(beginPos); } else { beginPos = shiftL(beginPos, maskL); } } if (getActiveMaskSet()['lastValidPosition'] != undefined) { if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']]) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["lastValidPosition"]) : (getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"])); if (isRTL ? getActiveMaskSet()['lastValidPosition'] > firstMaskPos : getActiveMaskSet()['lastValidPosition'] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos; } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos; } } } } else if (k == opts.keyCode.BACKSPACE) { //handle backspace if (isRTL ? beginPos <= firstMaskPos : beginPos > firstMaskPos) { beginPos -= 1; if (opts.numericInput && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = shiftR(0, (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : beginPos - 1, getPlaceHolder(beginPos), true); beginPos++; } else { if (isRTL) { beginPos = shiftR(0, beginPos, getPlaceHolder(beginPos), true); beginPos = buffer[beginPos + 1] == opts.radixPoint ? beginPos + 1 : seekNext(beginPos); } else { beginPos = shiftL(beginPos, maskL); } } if (getActiveMaskSet()['lastValidPosition'] != undefined) { if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']]) getActiveMaskSet()["lastValidPosition"] = isRTL ? seekNext(getActiveMaskSet()["lastValidPosition"]) : (getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"])); if (isRTL ? getActiveMaskSet()['lastValidPosition'] > firstMaskPos : getActiveMaskSet()['lastValidPosition'] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos; } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos; } } } else if (activeMasksetIndex > 0) { //retry other masks getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = firstMaskPos; //init first activeMasksetIndex = 0; getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); getActiveMaskSet()["p"] = isRTL ? seekPrevious(getMaskLength() + 1) : seekNext(-1); getActiveMaskSet()["lastValidPosition"] = undefined; } } }); } determineActiveMasksetIndex(isRTL); writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]); if (input._valueGet() == getActiveBufferTemplate().join('')) $(input).trigger('cleared'); if (opts.showTooltip) { //update tooltip $input.prop("title", getActiveMaskSet()["mask"]); } } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch setTimeout(function () { var caretPos = isRTL ? getActiveMaskSet()["lastValidPosition"] : seekNext(getActiveMaskSet()["lastValidPosition"]); if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) caretPos--; caret(input, e.shiftKey ? pos.begin : caretPos, caretPos); }, 0); } else if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { //Home or page_up caret(input, 0, e.shiftKey ? pos.begin : 0); } else if (k == opts.keyCode.ESCAPE) { //escape input._valueSet(getActiveMaskSet()["undoBuffer"]); checkVal(input, true, true); } else if (k == opts.keyCode.INSERT) { //insert opts.insertMode = !opts.insertMode; caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin); } else if (opts.insertMode == false && !e.shiftKey) { if (k == opts.keyCode.RIGHT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin); }, 0); } else if (k == opts.keyCode.LEFT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin - 1); }, 0); } } opts.onKeyDown.call(this, e, getActiveBuffer(), opts); //extra stuff to execute on keydown ignorable = $.inArray(k, opts.ignorables) != -1; } function keypressEvent(e, checkval, k, writeOut, strict, ndx) { //Safari 5.1.x - modal dialog fires keypress twice workaround if (k == undefined && skipKeyPressEvent) return false; skipKeyPressEvent = true; var input = this, $input = $(input); e = e || window.event; var k = k || e.which || e.charCode || e.keyCode, c = String.fromCharCode(k); if ((e.ctrlKey || e.metaKey || ignorable) && checkval !== true) { return true; } else { if (k) { var pos, results, result; if (checkval) { var pcaret = strict ? ndx : (opts.numericInput ? seekNext(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"]); pos = { begin: pcaret, end: pcaret }; } else { pos = caret(input); } //clear possible selection var initialIndex = activeMasksetIndex, selectionCleared = false; $.each(masksets, function (ndx, lmnt) { activeMasksetIndex = ndx; getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); if ((pos.end - pos.begin) > 1 || ((pos.end - pos.begin) == 1 && opts.insertMode)) { var posend = pos.end < getMaskLength() ? pos.end : getMaskLength(); clearBuffer(getActiveBuffer(), pos.begin, posend); var ml = getMaskLength(); if (opts.greedy == false) { isRTL ? shiftR(0, posend - 1, getPlaceHolder(posend), true) : shiftL(pos.begin, ml); } else { for (var i = pos.begin; i < posend; i++) { if (isMask(i)) isRTL ? shiftR(0, posend - 1, getPlaceHolder(posend), true) : shiftL(pos.begin, ml); } } selectionCleared = true; } }); activeMasksetIndex = initialIndex; //restore index if (isRTL) { var p = seekPrevious(selectionCleared ? pos.begin : pos.end); results = isValid(p, c, strict, isRTL); if (strict === true) results = [{ "activeMasksetIndex": activeMasksetIndex, "result": results }]; $.each(results, function (index, result) { activeMasksetIndex = result["activeMasksetIndex"]; getActiveMaskSet()["writeOutBuffer"] = true; var np = result["result"]; if (np !== false) { var refresh = false, buffer = getActiveBuffer(); if (np !== true) { refresh = np["refresh"]; //only rewrite buffer from isValid p = np.pos != undefined ? np.pos : p; //set new position from isValid c = np.c != undefined ? np.c : c; //set new char from isValid } if (refresh !== true) { var maskL = getMaskLength(); //update masklength to include possible groupSeparator offset var firstMaskPos = seekNext(-1), firstUnmaskedPosition = firstMaskPos; if (opts.insertMode == true) { if (getActiveMaskSet()['greedy'] == true) { var bfrClone = buffer.slice(); while (getBufferElement(bfrClone, firstUnmaskedPosition, true) != getPlaceHolder(firstUnmaskedPosition) && firstUnmaskedPosition <= p) { firstUnmaskedPosition = firstUnmaskedPosition == maskL ? (maskL + 1) : seekNext(firstUnmaskedPosition); } } if (firstUnmaskedPosition <= p && (getActiveMaskSet()['greedy'] || (buffer.length < maskL || getBufferElement(buffer, p) == getPlaceHolder(p)))) { if (buffer[firstMaskPos] != getPlaceHolder(firstMaskPos) && buffer.length < maskL) { var offset = prepareBuffer(buffer, -1, isRTL); if ((selectionCleared ? pos.begin : pos.end) != 0) p = p + offset; maskL = buffer.length; } shiftL(firstUnmaskedPosition, p, c); } else getActiveMaskSet()["writeOutBuffer"] = false; } else setBufferElement(buffer, p, c, true, isRTL); } getActiveMaskSet()["p"] = p; } }); if (strict !== true) determineActiveMasksetIndex(isRTL); if (writeOut !== false) { $.each(results, function (ndx, rslt) { if (rslt["activeMasksetIndex"] == activeMasksetIndex) { result = rslt; return false; } }); if (result != undefined) { var self = this; setTimeout(function () { opts.onKeyValidation.call(self, result["result"], opts); }, 0); if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) { var buffer = getActiveBuffer(); writeBuffer(input, buffer, checkval ? undefined : (opts.numericInput ? seekNext(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"])); setTimeout(function () { //timeout needed for IE if (isComplete(buffer)) $input.trigger("complete"); }, 0); } else { getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split(''); } } } } else { var p = seekNext(pos.begin - 1); results = isValid(p, c, strict, isRTL); if (strict === true) results = [{ "activeMasksetIndex": activeMasksetIndex, "result": results }]; $.each(results, function (index, result) { activeMasksetIndex = result["activeMasksetIndex"]; getActiveMaskSet()["writeOutBuffer"] = true; var np = result["result"]; if (np !== false) { var refresh = false, buffer = getActiveBuffer(); if (np !== true) { refresh = np["refresh"]; //only rewrite buffer from isValid p = np.pos != undefined ? np.pos : p; //set new position from isValid c = np.c != undefined ? np.c : c; //set new char from isValid } if (refresh !== true) { if (opts.insertMode == true) { var lastUnmaskedPosition = getMaskLength(); var bfrClone = buffer.slice(); while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) { lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition); } if (lastUnmaskedPosition >= p) shiftR(p, buffer.length, c); else getActiveMaskSet()["writeOutBuffer"] = false; } else setBufferElement(buffer, p, c, true, isRTL); } getActiveMaskSet()["p"] = seekNext(p); } }); if (strict !== true) determineActiveMasksetIndex(isRTL); if (writeOut !== false) { $.each(results, function (ndx, rslt) { if (rslt["activeMasksetIndex"] == activeMasksetIndex) { result = rslt; return false; } }); if (result != undefined) { var self = this; setTimeout(function () { opts.onKeyValidation.call(self, result["result"], opts); }, 0); if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) { var p = getActiveMaskSet()["p"], buffer = getActiveBuffer(); writeBuffer(input, buffer, checkval ? undefined : p); setTimeout(function () { //timeout needed for IE if (isComplete(buffer)) $input.trigger("complete"); }, 0); } else { getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split(''); } } } } if (android && checkval !== true) { caret(input, caretSavePoint.begin, caretSavePoint.end); } if (opts.showTooltip) { //update tooltip $input.prop("title", getActiveMaskSet()["mask"]); } e.preventDefault(); } } } function keyupEvent(e) { var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer(); opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup if (k == opts.keyCode.TAB && $input.hasClass('focus.inputmask') && input._valueGet().length == 0 && opts.showMaskOnFocus) { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer); if (!isRTL) caret(input, 0); getActiveMaskSet()["undoBuffer"] = input._valueGet(); } } }; return this; }; return this; }; } })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/js/jquery.inputmask.numeric.extensions.js ================================================ /* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 0.0.0 Optional extensions on the jquery.inputmask base */ (function ($) { //number aliases $.extend($.inputmask.defaults.aliases, { 'decimal': { mask: "~", placeholder: "", repeat: 10, greedy: false, numericInput: true, digits: "*", //numer of digits groupSeparator: "",//",", // | "." radixPoint: ".", groupSize: 3, autoGroup: false, allowPlus: true, allowMinus: true, getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { //custom getMaskLength to take the groupSeparator into account var calculatedLength = buffer.length; if (!greedy && repeat > 1) { calculatedLength += (buffer.length * (repeat - 1)); } var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint); var currentBufferStr = currentBuffer.join(''), strippedBufferStr = currentBufferStr.replace(new RegExp(escapedGroupSeparator, "g"), "").replace(new RegExp(escapedRadixPoint), ""), groupOffset = currentBufferStr.length - strippedBufferStr.length; return calculatedLength + groupOffset; }, postFormat: function (buffer, pos, reformatOnly, opts) { if (opts.groupSeparator == "") return pos; var cbuf = buffer.slice(), radixPos = $.inArray(opts.radixPoint, buffer); if (!reformatOnly) { cbuf.splice(pos == 0 || pos <= radixPos || opts.skipRadixDance ? pos + 1 : pos, 0, "?"); //set position indicator } var bufVal = cbuf.join(''); if (opts.autoGroup || (reformatOnly && bufVal.indexOf(opts.groupSeparator) != -1)) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), ''); var radixSplit = bufVal.split(opts.radixPoint); bufVal = radixSplit[0]; var reg = new RegExp('([-\+]?[\\d\?]+)([\\d\?]{' + opts.groupSize + '})'); while (reg.test(bufVal)) { bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2'); bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator); } if (radixSplit.length > 1) bufVal += opts.radixPoint + radixSplit[1]; } buffer.length = bufVal.length; //align the length for (var i = 0, l = bufVal.length; i < l; i++) { buffer[i] = bufVal.charAt(i); } var newPos = $.inArray("?", buffer); if (!reformatOnly) buffer.splice(newPos, 1); return reformatOnly ? pos : newPos <= radixPos || (opts.skipRadixDance && newPos != 0) ? newPos - 1 : newPos; }, regex: { number: function (groupSeparator, groupSize, radixPoint, digits, allowPlus, allowMinus) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, groupSeparator); var escapedRadixPoint = $.inputmask.escapeRegex.call(this, radixPoint); var digitExpression = isNaN(digits) ? digits : '{0,' + digits + '}'; var signedExpression = "[" + (allowPlus ? "\+" : "") + (allowMinus ? "-" : "") + "]?"; return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + groupSize + "}((" + escapedGroupSeparator + "\\d{" + groupSize + "})?)+)(" + escapedRadixPoint + "\\d" + digitExpression + ")?$"); } }, onKeyDown: function (e, buffer, opts) { var $input = $(this), input = this; if (e.keyCode == opts.keyCode.TAB) { var radixPosition = $.inArray(opts.radixPoint, buffer); if (radixPosition != -1) { var masksets = $input.data('inputmask')['masksets']; var activeMasksetIndex = $input.data('inputmask')['activeMasksetIndex']; for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex]["_buffer"], masksets[activeMasksetIndex]["greedy"], masksets[activeMasksetIndex]["repeat"], buffer, opts) ; i++) { if (buffer[radixPosition + i] == undefined) buffer[radixPosition + i] = "0"; } input._valueSet(buffer.join('')); } } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) { opts.postFormat(buffer, 0, true, opts); input._valueSet(buffer.join('')); } }, definitions: { '~': { //real number validator: function (chrs, buffer, pos, strict, opts) { if (chrs == "") return false; if (pos <= 1 && buffer[0] === '0' && new RegExp("[\\d-]").test(chrs)) { //handle first char buffer[0] = ""; return { "pos": 0 }; } var cbuf = strict ? buffer.slice(0, pos) : buffer.slice(); cbuf.splice(pos == 0 ? pos : pos + 1, 0, chrs); var bufferStr = cbuf.join(''); if (opts.autoGroup && !strict) { //strip groupseparator var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator); bufferStr = bufferStr.replace(new RegExp(escapedGroupSeparator, "g"), ''); } var isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid) { //let's help the regex a bit bufferStr += "0"; isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid) { //make a valid group var lastGroupSeparator = bufferStr.lastIndexOf(opts.groupSeparator); for (i = bufferStr.length - lastGroupSeparator; i <= 3; i++) { bufferStr += "0"; } isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test(bufferStr); if (!isValid && !strict) { if (chrs == opts.radixPoint) { isValid = opts.regex.number(opts.groupSeparator, opts.groupSize, opts.radixPoint, opts.digits, opts.allowPlus, opts.allowMinus).test("0" + bufferStr + "0"); if (isValid) { buffer[pos] = "0"; pos++; return { "pos": pos }; } } } } } if (isValid != false && !strict && chrs != opts.radixPoint) { var newPos = opts.postFormat(buffer, pos, false, opts); return { "pos": newPos }; } return isValid; }, cardinality: 1, prevalidator: null } }, insertMode: true, autoUnmask: false }, 'integer': { regex: { number: function (groupSeparator, groupSize, radixPoint, digits, allowPlus, allowMinus) { var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, groupSeparator); var signedExpression = "[" + (allowPlus ? "\+" : "") + (allowMinus ? "-" : "") + "]?"; return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + groupSize + "}((" + escapedGroupSeparator + "\\d{" + groupSize + "})?)+)$"); } }, alias: "decimal" } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-inputmask/js/jquery.inputmask.regex.extensions.js ================================================ /* Input Mask plugin extensions http://github.com/RobinHerbots/jquery.inputmask Copyright (c) 2010 - 2013 Robin Herbots Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) Version: 0.0.0 Regex extensions on the jquery.inputmask base Allows for using regular expressions as a mask */ (function ($) { $.extend($.inputmask.defaults.aliases, { // $(selector).inputmask("Regex", { regex: "[0-9]*"} 'Regex': { mask: "r", greedy: false, repeat: 10, //needs to be computed regex: null, regexSplit: null, definitions: { 'r': { validator: function (chrs, buffer, pos, strict, opts) { function analyseRegex() { //ENHANCE ME var regexSplitRegex = "\\[.*?\]\\*"; opts.regexSplit = opts.regex.match(new RegExp(regexSplitRegex, "g")); //if (opts.regex.indexOf("*") != (opts.regex.length - 1)) { // opts.regex += "{1}"; //} //opts.regexSplit.push(opts.regex); } if (opts.regexSplit == null) { analyseRegex(); } var cbuffer = buffer.slice(), regexPart = "", isValid = false; cbuffer.splice(pos, 0, chrs); var bufferStr = cbuffer.join(''); for (var i = 0; i < opts.regexSplit.length; i++) { regexPart += opts.regexSplit[i]; var exp = new RegExp("^" + regexPart + "$"); isValid = exp.test(bufferStr); console.log(bufferStr + ' ' + isValid + ' ' + regexPart); if (isValid) break; } return isValid; }, cardinality: 1 } } } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/README.md ================================================ [jQuery Validation Plugin](http://bassistance.de/jquery-plugins/jquery-plugin-validation/) - Form validation made easy ================================ The jQuery Validation Plugin provides drop-in validation for your existing forms, while making all kinds of customizations to fit your application really easy. ## [Help the project](http://pledgie.com/campaigns/18159) This project is looking for help! [You can donate to the ongoing pledgie campaign](http://pledgie.com/campaigns/18159) and help spread the word. If you've used the plugin, or plan to use, consider a donation - any amount will help. You can find the plan for how to spend the money on the [pledgie page](http://pledgie.com/campaigns/18159). ## Getting Started Include jQuery and the plugin on a page. Then select a form to validate and call the `validate` method. ```html
        ``` For more information on how to setup a rules and customizations, [check the documentation](http://docs.jquery.com/Plugins/Validation). ## Contributing In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/grunt). If you've wrote custom methods that you'd like to contribute to additional-methods.js, create a branch, add the method there and send a pull request for that branch. If you've wrote a patch for some bug listed on http://plugins.jquery.com/project/issues/validate, please provide a link to that issue in your commit message. ## License Copyright (c) 2012 Jörn Zaefferer Licensed under the MIT license. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/changelog.txt ================================================ 1.10.0 / 2012-09-07 =================== * Corrected French strings for nowhitespace, phoneUS, phoneUK and mobileUK based upon community feedback. * rename files for language_REGION according to the standard ISO_3166-1 (http://en.wikipedia.org/wiki/ISO_3166-1), for Taiwan tha language is Chinese (zh) and the region is Taiwan (TW) * Optimise RegEx patterns, especially for UK phone numbers. * Add Language Name for each file, rename the language code according to the standard ISO 639 for Estonian, Georgian, Ukrainian and Chinese (http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) * Added croatian (HR) localization * Existing French translations were edited and French translations for the additional methods were added. * Merged in changes for specifying custom error messages in data attributes * Updated UK Mobile phone number regex for new numbers. Fixes #154 * Add element to success call with test. Fixes #60 * Fixed regex for time additional method. Fixes #131 * resetForm now clears old previousValue on form elements. Fixes #312 * Added checkbox test to require_from_group and changed require_from_group to use elementValue. Fixes #359 * Fixed dataFilter response issues in jQuery 1.5.2+. Fixes #405 * Added jQuery Mobile demo. Fixes #249 * Deoptimize findByName for correctness. Fixes #82 - $.validator.prototype.findByName breaks in IE7 * Added US zip code support and test. Fixes #90 * Changed lastElement to lastActive in keyup, skip validation on tab or empty element. Fixes #244 * Removed number stripping from stripHtml. Fixes #2 * Fixed invalid count on invalid to valid remote validation. Fixes #286 * Add link to file_input to demo index * Moved old accept method to extension additional-method, added new accept method to handle standard browser mimetype filtering. Fixes #287 and supersedes #369 * Disables blur event when onfocusout is set to false. Test added. * Fixed value issue for radio buttons and checkboxes. Fixes #363 * Added test for rangeWords and fixed regex and bounds in method. Fixes #308 * Fixed TinyMCE Demo and added link on demo page. Fixes #382 * Changed localization message for min/max. Fixes #273 * Added pseudo selector for text input types to fix issue with default empty type attribute. Added tests and some test markup. Fixes #217 * Fixed delegate bug for dynamic-totals demo. Fixes #51 * Fix incorrect message for alphanumeric validator * Removed incorrect false check on required attribute * required attribute fix for non-html5 browsers. Fixes #301 * Added methods "require_from_group" and "skip_or_fill_minimum" * Use correct iso code for swedish * Updated demo HTML files to use HTML5 doctype * Fixed regex issue for decimals without leading zeroes. Added new methods test. Fixes #41 * Introduce a elementValue method that normalizes only string values (don't touch array value of multi-select). Fixes #116 * Support for dynamically added submit buttons, and updated test case. Uses validateDelegate. Code from PR #9 * Fix bad double quote in test fixtures * Fix maxWords method to include the upper bound, not exclude it. Fixes #284 * Fixed grammar error in german range validator message. Fixes #315 * Fixed handling of multiple class names for errorClass option. Test by Max Lynch. Fixes #280 * Fix jQuery.format usage, should be $.validator.format. Fixes #329 * Methods for 'all' UK phone numbers + UK postcodes * Pattern method: Convert string param to RegExp. Fixes issue #223 * grammar error in german localization file * Added Estonian localization for messages * Improve tooltip handling on themerollered demo * Add type="text" to input fields without type attribute to please qSA * Update themerollered demo to use tooltip to show errors as overlay. * Update themerollered demo to use latest jQuery UI (along with newer jQuery version). Move code around to speed up page load. * Fixed min error message broken in Japanese. * Update form plugin to latest version. Enhance the ajaxSubmit demo. * Drop dateDE and numberDE methods from classRuleSettings, leftover from moving those to localized methods * Passing submit event to submitHandler callback * Fixed #219 - Fix valid() on elements with dependency-callback or dependency-expression. * Improve build to remove dist dir to ensure only the current release gets zipped up 1.9.0 --- * Added Basque (EU) localization * Added Slovenian (SL) localization * Fixed issue #127 - Finnish translations has one : instead of ; * Fixed Russian localization, minor syntax issue * Added in support for HTML5 input types, fixes #97 * Improved HTML5 support by setting novalidate attribute on the form, and reading the type attribute. * Fixed showLabel() removing all classes from error element. Remove only settings.validClass. Fixes #151. * Added 'pattern' to additional-methods to validate against arbitraty regular expressions. * Improved email method to not allow the dot at the end (valid by RFC, but unwanted here). Fixes #143 * Fixed swedish and norwedian translations, min/max messages got switched. Fixes #181 * Fixed #184 - resetForm: should unset lastElement * Fixed #71 - improve existing time method and add time12h method for 12h am/pm time format * Fixed #177 - Fix validation of a single radio or checkbox input * Fixed #189 - :hidden elements are now ignored by default * Fixed #194 - Required as attribute fails if jQuery>=1.6 - Use .prop instead of .attr * Fixed #47, #39, #32 - Allowed credit card numbers to contain spaces as well as dashes (spaces are commonly input by users). 1.8.1 --- * Added Thai (TH) localization, fixes #85 * Added Vietnamese (VI) localization, thanks Ngoc * Fixed issue #78. Error/Valid styling applies to all radio buttons of same group for required validation. * Don't use form.elements as that isn't supported in jQuery 1.6 anymore. Its buggy as hell anyway (IE6-8: form.elements === form). 1.8.0 --- * Improved NL localization (http://plugins.jquery.com/node/14120) * Added Georgian (GE) localization, thanks Avtandil Kikabidze * Added Serbian (SR) localization, thanks Aleksandar Milovac * Added ipv4 and ipv6 to additional methods, thanks Natal Ngétal * Added Japanese (JA) localization, thanks Bryan Meyerovich * Added Catalan (CA) localization, thanks Xavier de Pedro * Fixed missing var statements within for-in loops * Fix for remote validation, where a formatted message got messed up (https://github.com/jzaefferer/jquery-validation/issues/11) * Bugfixes for compability with jQuery 1.5.1, while maintaining backwards-compability 1.7 --- * Added Lithuanian (LT) localization * Added Greek (EL) localization (http://plugins.jquery.com/node/12319) * Added Latvian (LV) localization (http://plugins.jquery.com/node/12349) * Added Hebrew (HE) localization (http://plugins.jquery.com/node/12039) * Fixed Spanish (ES) localization (http://plugins.jquery.com/node/12696) * Added jQuery UI themerolled demo * Removed cmxform.js * Fixed four missing semicolons (http://plugins.jquery.com/node/12639) * Renamed phone-method in additional-methods.js to phoneUS * Added phoneUK and mobileUK methods to additional-methods.js (http://plugins.jquery.com/node/12359) * Deep extend options to avoid modifying multiple forms when using the rules-method on a single element (http://plugins.jquery.com/node/12411) * Bugfixes for compability with jQuery 1.4.2, while maintaining backwards-compability 1.6 --- * Added Arabic (AR), Portuguese (PTPT), Persian (FA), Finnish (FI) and Bulgarian (BR) localization * Updated Swedish (SE) localization (some missing html iso characters) * Fixed $.validator.addMethod to properly handle empty string vs. undefined for the message argument * Fixed two accidental global variables * Enhanced min/max/rangeWords (in additional-methods.js) to strip html before counting; good when counting words in a richtext editor * Added localized methods for DE, NL and PT, removing the dateDE and numberDE methods (use messages_de.js and methods_de.js with date and number methods instead) * Fixed remote form submit synchronization, kudos to Matas Petrikas * Improved interactive select validation, now validating also on click (via option or select, inconsistent across browsers); doesn't work in Safari, which doesn't trigger a click event at all on select elements; fixes http://plugins.jquery.com/node/11520 * Updated to latest form plugin (2.36), fixing http://plugins.jquery.com/node/11487 * Bind to blur event for equalTo target to revalidate when that target changes, fixes http://plugins.jquery.com/node/11450 * Simplified select validation, delegating to jQuery's val() method to get the select value; should fix http://plugins.jquery.com/node/11239 * Fixed default message for digits (http://plugins.jquery.com/node/9853) * Fixed issue with cached remote message (http://plugins.jquery.com/node/11029 and http://plugins.jquery.com/node/9351) * Fixed a missing semicolon in additional-methods.js (http://plugins.jquery.com/node/9233) * Added automatic detection of substitution parameters in messages, removing the need to provide format functions (http://plugins.jquery.com/node/11195) * Fixed an issue with :filled/:blank somewhat caused by Sizzle (http://plugins.jquery.com/node/11144) * Added an integer method to additional-methods.js (http://plugins.jquery.com/node/9612) * Fixed errorsFor method where the for-attribute contains characters that need escaping to be valid inside a selector (http://plugins.jquery.com/node/9611) 1.5.5 --- * Fix for http://plugins.jquery.com/node/8659 * Fixed trailing comma in messages_cs.js 1.5.4 --- * Fixed remote method bug (http://plugins.jquery.com/node/8658) 1.5.3 --- * Fixed a bug related to the wrapper-option, where all ancestor-elements that matched the wrapper-option where selected (http://plugins.jquery.com/node/7624) * Updated multipart demo to use latest jQuery UI accordion * Added dateNL and time methods to additionalMethods.js * Added Traditional Chinese (Taiwan, tw) and Kazakhstan (KK) localization * Moved jQuery.format (fomerly String.format) to jQuery.validator.format, jQuery.format is deprecated and will be removed in 1.6 (see http://code.google.com/p/jquery-utils/issues/detail?id=15 for details) * Cleaned up messages_pl.js and messages_ptbr.js (still defined messages for max/min/rangeValue, which were removed in 1.4) * Fixed flawed boolean logic in valid-plugin-method for multiple elements; now all elements need to be valid for a boolean-true result (http://plugins.jquery.com/node/8481) * Enhancement $.validator.addMethod: An undefined third message-argument won't overwrite an existing message (http://plugins.jquery.com/node/8443) * Enhancement to submitHandler option: When used, click events on submit buttons are captured and the submitting button is inserted into the form before calling submitHandler, and removed afterwards; keeps submit buttons intact (http://plugins.jquery.com/node/7183#comment-3585) * Added option validClass, default "valid", which adds that class to all valid elements, after validation (http://dev.jquery.com/ticket/2205) * Added creditcardtypes method to additionalMethods.js, including tests (via http://dev.jquery.com/ticket/3635) * Improved remote method to allow serverside message as a string, or true for valid, or false for invalid using the clientside defined message (http://dev.jquery.com/ticket/3807) * Improved accept method to also accept a Drupal-style comma-seperated list of values (http://plugins.jquery.com/node/8580) 1.5.2 --- * Fixed messages in additional-methods.js for maxWords, minWords, and rangeWords to include call to $.format * Fixed value passed to methods to exclude carriage return (\r), same as jQuery's val() does * Added slovak (sk) localization * Added demo for intergration with jQuery UI tabs * Added selects-grouping example to tabs demo (see second tab, birthdate field) 1.5.1 --- * Updated marketo demo to use invalidHandler option instead of binding invalid-form event * Added TinyMCE integration example * Added ukrainian (ua) localization * Fixed length validation to work with trimmed value (regression from 1.5 where general trimming before validation was removed) * Various small fixes for compability with both 1.2.6 and 1.3 1.5 --- * Improved basic demo, validating confirm-password field after password changed * Fixed basic validation to pass the untrimmed input value as the first parameter to validation methods, changed required accordingly; breaks existing custom method that rely on the trimming * Added norwegian (no), italian (it), hungarian (hu) and romanian (ro) localization * Fixed #3195: Two flaws in swedish localization * Fixed #3503: Extended rules("add") to accept messages propery: use to specify add custom messages to an element via rules("add", { messages: { required: "Required! " } }); * Fixed #3356: Regression from #2908 when using meta-option * Fixed #3370: Added ignoreTitle option, set to skip reading messages from the title attribute, helps to avoid issues with Google Toolbar; default is false for compability * Fixed #3516: Trigger invalid-form event even when remote validation is involved * Added invalidHandler option as a shortcut to bind("invalid-form", function() {}) * Fixed Safari issue for loading indicator in ajaxSubmit-integration-demo (append to body first, then hide) * Added test for creditcard validation and improved default message * Enhanced remote validation, accepting options to passthrough to $.ajax as paramter (either url string or options, including url property plus everything else that $.ajax supports) 1.4 --- * Fixed #2931, validate elements in document order and ignore type=image inputs * Fixed usage of $ and jQuery variables, now fully comptible with all variations of noConflict usage * Implemented #2908, enabling custom messages via metadata ala class="{required:true,messages:{required:'required field'}}", added demo/custom-messages-metadata-demo.html * Removed deprecated methods minValue (min), maxValue (max), rangeValue (rangevalue), minLength (minlength), maxLength (maxlength), rangeLength (rangelength) * Fixed #2215 regression: Call unhighlight only for current elements, not everything * Implemented #2989, enabling image button to cancel validation * Fixed issue where IE incorrectly validates against maxlength=0 * Added czech (cs) localization * Reset validator.submitted on validator.resetForm(), enabling a full reset when necessary * Fixed #3035, skipping all falsy attributes when reading rules (0, undefined, empty string), removed part of the maxlength workaround (for 0) * Added dutch (nl) localization (#3201) 1.3 --- * Fixed invalid-form event, now only triggered when form is invalid * Added spanish (es), russian (ru), portuguese brazilian (ptbr), turkish (tr), and polish (pl) localization * Added removeAttrs plugin to facilate adding and removing multiple attributes * Added groups option to display a single message for multiple elements, via groups: { arbitraryGroupName: "fieldName1 fieldName2[, fieldNameN" } * Enhanced rules() for adding and removing (static) rules: rules("add", "method1[, methodN]"/{method1:param[, method_n:param]}) and rules("remove"[, "method1[, method_n]") * Enhanced rules-option, accepts space-seperated string-list of methods, eg. {birthdate: "required date"} * Fixed checkbox group validation with inline rules: As long as the rules are specified on the first element, the group is now properly validated on click * Fixed #2473, ignoring all rules with an explicit parameter of boolean-false, eg. required:false is the same as not specifying required at all (it was handled as required:true so far) * Fixed #2424, with a modified patch from #2473: Methods returning a dependency-mismatch don't stop other rules from being evaluated anymore; still, success isn't applied for optional fields * Fixed url and email validation to not use trimmed values * Fixed creditcard validation to accept only digits and dashes ("asdf" is not a valid creditcard number) * Allow both button and input elements for cancel buttons (via class="cancel") * Fixed #2215: Fixed message display to call unhighlight as part of showing and hiding messages, no more visual side-effects while checking an element and extracted validator.checkForm to validate a form without UI sideeffects * Rewrote custom selectors (:blank, :filled, :unchecked) with functions for compability with AIR 1.2.1 ----- * Bundled delegeate plugin with validate plugin - its always required anyway * Improved remote validation to include parts from the ajaxQueue plugin for proper synchronization (no additional plugin necessary) * Fixed stopRequest to prevent pendingRequest < 0 * Added jQuery.validator.autoCreateRanges property, defaults to false, enable to convert min/max to range and minlength/maxlength to rangelength; this basically fixes the issue introduced by automatically creating ranges in 1.2 * Fixed optional-methods to not highlight anything at all if the field is blank, that is, don't trigger success * Allow false/null for highlight/unhighlight options instead of forcing a do-nothing-callback even when nothing needs to be highlighted * Fixed validate() call with no elements selected, returning undefined instead of throwing an error * Improved demo, replacing metadata with classes/attributes for specifying rules * Fixed error when no custom message is used for remote validation * Modified email and url validation to require domain label and top label * Fixed url and email validation to require TLD (actually to require domain label); 1.2 version (TLD is optional) is moved to additionals as url2 and email2 * Fixed dynamic-totals demo in IE6/7 and improved templating, using textarea to store multiline template and string interpolation * Added login form example with "Email password" link that makes the password field optional * Enhanced dynamic-totals demo with an example of a single message for two fields 1.2 --- * Added AJAX-captcha validation example (based on http://psyrens.com/captcha/) * Added remember-the-milk-demo (thanks RTM team for the permission!) * Added marketo-demo (thanks Glen Lipka!) * Added support for ajax-validation, see method "remote"; serverside returns JSON, true for valid elements, false or a String for invalid, String is used as message * Added highlight and unhighlight options, by default toggles errorClass on element, allows custom highlighting * Added valid() plugin method for easy programmatic checking of forms and fields without the need to use the validator API * Added rules() plguin method to read and write rules for an element (currently read only) * Replaced regex for email method, thanks to the contribution by Scott Gonzalez, see http://projects.scottsplayground.com/email_address_validation/ * Restructured event architecture to rely solely on delegation, both improving performance, and ease-of-use for the developer (requires jquery.delegate.js) * Moved documentation from inline to http://docs.jquery.com/Plugins/Validation - including interactive examples for all methods * Removed validator.refresh(), validation is now completey dynamic * Renamed minValue to min, maxValue to max and rangeValue to range, deprecating the previous names (to be removed in 1.3) * Renamed minLength to minlength, maxLength to maxlength and rangeLength to rangelength, deprecating the previous names (to be removed in 1.3) * Added feature to merge min + max into and range and minlength + maxlength into rangelength * Added support for dynamic rule parameters, allowing to specify a function as a parameter eg. for minlength, called when validating the element * Allow to specify null or an empty string as a message to display nothing (see marketo demo) * Rules overhaul: Now supports combination of rules-option, metadata, classes (new) and attributes (new), see rules() for details 1.1.2 --- * Replaced regex for URL method, thanks to the contribution by Scott Gonzalez, see http://projects.scottsplayground.com/iri/ * Improved email method to better handle unicode characters * Fixed error container to hide when all elements are valid, not only on form submit * Fixed String.format to jQuery.format (moving into jQuery namespace) * Fixed accept method to accept both upper and lowercase extensions * Fixed validate() plugin method to create only one validator instance for a given form and always return that one instance (avoids binding events multiple times) * Changed debug-mode console log from "error" to "warn" level 1.1.1 ----- * Fixed invalid XHTML, preventing error label creation in IE since jQuery 1.1.4 * Fixed and improved String.format: Global search & replace, better handling of array arguments * Fixed cancel-button handling to use validator-object for storing state instead of form element * Fixed name selectors to handle "complex" names, eg. containing brackets ("list[]") * Added button and disabled elements to exclude from validation * Moved element event handlers to refresh to be able to add handlers to new elements * Fixed email validation to allow long top level domains (eg. ".travel") * Moved showErrors() from valid() to form() * Added validator.size(): returns the number of current errors * Call submitHandler with validator as scope for easier access of it's methods, eg. to find error labels using errorsFor(Element) * Compatible with jQuery 1.1.x and 1.2.x 1.1 --- * Added validation on blur, keyup and click (for checkboxes and radiobutton). Replaces event-option. * Fixed resetForm * Fixed custom-methods-demo 1.0 --- * Improved number and numberDE methods to check for correct decimal numbers with delimiters * Only elements that have rules are checked (otherwise success-option is applied to all elements) * Added creditcard number method (thanks to Brian Klug) * Added ignore-option, eg. ignore: "[@type=hidden]", using that expression to exclude elements to validate. Default: none, though submit and reset buttons are always ignored * Heavily enhanced Functions-as-messages by providing a flexible String.format helper * Accept Functions as messages, providing runtime-custom-messages * Fixed exclusion of elements without rules from successList * Fixed custom-method-demo, replaced the alert with message displaying the number of errors * Fixed form-submit-prevention when using submitHandler * Completely removed dependency on element IDs, though they are still used (when present) to link error labels to inputs. Achieved by using an array with {name, message, element} instead of an object with id:message pairs for the internal errorList. * Added support for specifying simple rules as simple strings, eg. "required" is equivalent to {required: true} * Added feature: Add errorClass to invalid field�s parent element, making it easy to style the label/field container or the label for the field. * Added feature: focusCleanup - If enabled, removes the errorClass from the invalid elements and hides all errors messages whenever the element is focused. * Added success option to show the a field was validated successfully * Fixed Opera select-issue (avoiding a attribute-collision) * Fixed problems with focussing hidden elements in IE * Added feature to skip validation for submit buttons with class "cancel" * Fixed potential issues with Google Toolbar by prefering plugin option messages over title attribute * submitHandler is only called when an actual submit event was handled, validator.form() returns false only for invalid forms * Invalid elements are now focused only on submit or via validator.focusInvalid(), avoiding all trouble with focus-on-blur * IE6 error container layout issue is solved * Customize error element via errorElement option * Added validator.refresh() to find new inputs in the form * Added accept validation method, checks file extensions * Improved dependecy feature by adding two custom expressions: ":blank" to select elements with an empty value and �:filled� to select elements with a value, both excluding whitespace * Added a resetForm() method to the validator: Resets each form element (using the form plugin, if available), removes classes on invalid elements and hides all error messages * Fixed docs for validator.showErrors() * Fixed error label creation to always use html() instead of text(), allowing arbitrary HTML passed in as messages * Fixed error label creation to use specified error class * Added dependency feature: The requires method accepts both String (jQuery expressions) and Functions as the argument * Heavily improved customizing of error message display: Use normal messages and show/hide an additional container; Completely replace message display with own mechanism (while being able to delegate to the default handler; Customize placing of generated labels (instead of default below-element) * Fixed two major bugs in IE (error containers) and Opera (metadata) * Modified validation methods to accept empty fields as valid (exception: of course �required� and also �equalTo� methods) * Renamed "min" to "minLength", "max" to "maxLength", "length" to "rangeLength" * Added "minValue", "maxValue" and "rangeValue" * Streamlined API for support of different events. The default, submit, can be disabled. If any event is specified, that is applied to each element (instead of the entire form). Combining keyup-validation with submit-validation is now extremely easy to setup * Added support for one-message-per-rule when defining messages via plugin settings * Added support to wrap metadata in some parent element. Useful when metadata is used for other plugins, too. * Refactored tests and demos: Less files, better demos * Improved documentation: More examples for methods, more reference texts explaining some basics ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/ajaxSubmit-intergration-demo.html ================================================ Test for jQuery validate() plugin

        jQuery Validation Plugin Demo

        Login Form (Enter "foobar" as password)

        Please login!

        Backend file: form.phps

        Back to main page
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/captcha.js ================================================ $(function(){ $("#refreshimg").click(function(){ $.post('newsession.php'); $("#captchaimage").load('image_req.php'); return false; }); $("#captchaform").validate({ rules: { captcha: { required: true, remote: "process.php" } }, messages: { captcha: "Correct captcha is required. Click the captcha to generate a new one" }, submitHandler: function() { alert("Correct captcha!"); }, success: function(label) { label.addClass("valid").text("Valid captcha!") }, onkeyup: false }); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/image_req.php ================================================ Captcha image'; ?> ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/images/image.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/index.php ================================================ AJAX CAPTCHA

        AJAX CAPTCHA, based on http://psyrens.com/captcha/

        Captcha image

        If you can't decipher the text on the image, click it to dynamically generate a new one.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/newsession.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/process.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/rand.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/captcha/style.css ================================================ body { margin: 3% 5%; padding: 0; background-color: #fff; color: #333; font: 0.9em/1.3 Helvetica, Arial, Verdana, Sans-serif; } a:link, a:visited { background-color: #fff; color: #333; text-decoration: underline; } a:hover, a:focus, a:active { background-color: #ffb; color: #454545; text-decoration: underline; } h1 { margin: 2% 0%; padding: 1%; border-bottom: 1px solid #ddd; background-color: #f8f8f8; color: #666; font: normal 1.5em Helvetica, Arial, Verdana, Sans-serif; } h2 { margin: 2% 0%; padding: 1%; border-bottom: 1px solid #ddd; background-color: #f8f8f8; color: #666; font: normal 1.3em Helvetica, Arial, Verdana, Sans-serif; } h3 { margin: 2% 0%; padding: 1%; border-bottom: 1px solid #ddd; background-color: #f8f8f8; color: #666; font: normal 1.2em Helvetica, Arial, Verdana, Sans-serif; } table { margin: 0; padding: 0; width: 100%; } table th { border: 1px solid #ddd; font-weight: bold; text-align: left; padding: 1%; } table td { border: 1px solid #ddd; padding: 1%; } dl, dt, dd { margin: 0; padding: 0; } form { margin: 0; padding: 0; } fieldset { border: 1px solid #ddd; margin: 0% 0% 2% 0%; padding: 2%; } fieldset legend { margin: 0; padding: 0 4px; background-color: inherit; color: #333; } code { font: 1em "Courier New", Courier, Monospace; } pre code { font: 1.1em "Courier New", Courier, Monospace; border-bottom: 1px solid #eee; } img { border: 1px solid #eee; } p#statusgreen { font-size: 1.2em; background-color: #fff; color: #0a0; } p#statusred { font-size: 1.2em; background-color: #fff; color: #a00; } fieldset label { display: block; } fieldset label.error { color: red; } fieldset label.valid { color: green; } fieldset div#captchaimage { float: left; margin-right: 15px; } fieldset input#captcha { width: 25%; border: 1px solid #ddd; padding: 2px; } fieldset input#submit { display: block; margin: 2% 0% 0% 0%; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/chili.css ================================================ .jscom, .mix htcom { color: #4040c2; } .com { color: green; } .regexp { color: maroon; } .string { color: teal; } .keywords { color: blue; } .global { color: #008; } .numbers { color: #880; } .comm { color: green; } .tag { color: blue; } .entity { color: blue; } .string { color: teal; } .aname { color: maroon; } .avalue { color: maroon; } .jquery { color: #00a; } .plugin { color: red; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/cmxform.css ================================================ /********************************** Name: cmxform Styles ***********************************/ form.cmxform { width: 370px; font-size: 1.0em; color: #333; } form.cmxform legend { padding-left: 0; } form.cmxform legend, form.cmxform label { color: #333; } form.cmxform fieldset { border: none; border-top: 1px solid #C9DCA6; background: url(../images/cmxform-fieldset.gif) left bottom repeat-x; background-color: #F8FDEF; } form.cmxform fieldset fieldset { background: none; } form.cmxform fieldset p, form.cmxform fieldset fieldset { padding: 5px 10px 7px; background: url(../images/cmxform-divider.gif) left bottom repeat-x; } form.cmxform label.error, label.error { /* remove the next line when you have trouble in IE6 with labels in list */ color: red; font-style: italic } div.error { display: none; } input { border: 1px solid black; } input.checkbox { border: none } input:focus { border: 1px dotted black; } input.error { border: 1px dotted red; } form.cmxform .gray * { color: gray; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/cmxformTemplate.css ================================================ /********************************** Use: cmxform template ***********************************/ form.cmxform fieldset { margin-bottom: 10px; } form.cmxform legend { padding: 0 2px; font-weight: bold; _margin: 0 -7px; /* IE Win */ } form.cmxform label { display: inline-block; line-height: 1.8; vertical-align: top; cursor: hand; } form.cmxform fieldset p { list-style: none; padding: 5px; margin: 0; } form.cmxform fieldset fieldset { border: none; margin: 3px 0 0; } form.cmxform fieldset fieldset legend { padding: 0 0 5px; font-weight: normal; } form.cmxform fieldset fieldset label { display: block; width: auto; } form.cmxform label { width: 100px; } /* Width of labels */ form.cmxform fieldset fieldset label { margin-left: 103px; } /* Width plus 3 (html space) */ form.cmxform label.error { margin-left: 103px; width: 220px; } form.cmxform input.submit { margin-left: 103px; } /*\*//*/ form.cmxform legend { display: inline-block; } /* IE Mac legend fix */ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/core.css ================================================ body, div { font-family: 'lucida grande', helvetica, verdana, arial, sans-serif } body { margin: 0; padding: 0; font-size: small; color: #333 } h1, h2 { font-family: 'trebuchet ms', verdana, arial; padding: 10px; margin: 0 } h1 { font-size: large } #main { padding: 1em; } #banner { padding: 15px; background-color: #06b; color: white; font-size: large; border-bottom: 1px solid #ccc; background: url(../images/bg.gif) repeat-x; text-align: center } #banner a { color: white; } p { margin: 10px 0; } li { margin-left: 10px; } h3 { margin: 1em 0 0; } h1 { font-size: 2em; } h2 { font-size: 1.8em; } h3 { font-size: 1.6em; } h4 { font-size: 1.4em; } h5 { font-size: 1.2em; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/reset.css ================================================ /********************************** Use: Reset Styles for all browsers ***********************************/ body, p, blockquote { margin: 0; padding: 0; } a img, iframe { border: none; } /* Headers ------------------------------*/ h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; font-size: 100%; } /* Lists ------------------------------*/ ul, ol, dl, li, dt, dd { margin: 0; padding: 0; } /* Links ------------------------------*/ a, a:link {} a:visited {} a:hover {} a:active {} /* Forms ------------------------------*/ form, fieldset { margin: 0; padding: 0; } fieldset { border: 1px solid #000; } legend { padding: 0; color: #000; } input, textarea, select { margin: 0; padding: 1px; font-size: 100%; font-family: inherit; } select { padding: 0; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/css/screen.css ================================================ /********************************** Use: Main Screen Import ***********************************/ @import "reset.css"; @import "core.css"; @import "cmxformTemplate.css"; @import "cmxform.css"; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/custom-messages-metadata-demo.html ================================================ jQuery validation plug-in - comment form example

        jQuery Validation Plugin Demo

        Take a look at the source to see how messages can be customized with metadata.

        Please enter your email address

        Please enter your email address

        Please enter your email address

        Back to main page ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/custom-methods-demo.html ================================================ Test for jQuery validate() plugin

        jQuery Validation Plugin Demo

        Example with custom methods and heavily customized error display

        Your form contains tons of errors! Please try again.

        Back to main page

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/dynamic-totals.html ================================================ jQuery validation plug-in - dynamic forms demo

        jQuery Validation Plugin Demo

        Example with custom methods and heavily customized error display
         

        Your form contains tons of errors! Please try again.

        Back to main page

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/errorcontainer-demo.html ================================================ Test for jQuery validate() plugin

        jQuery Validation Plugin Demo

        Login Form

        There are serious errors in your form submission, please see below for details.

        Validating a complete form

        There are serious errors in your form submission, please see details above the form!

        Back to main page
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/file_input.html ================================================ jQuery validation plug-in - comment form example
        Select the indicated type of files?

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/form.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/form.phps ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/index.html ================================================ jQuery validation plug-in - main demo

        jQuery Validation Plugin Demo

        Default submitHandler is set to display an alert into of submitting the form

        Please provide your name, email address (won't be published) and a comment

        Validating a complete form

        Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo

        Syntetic examples

        Real-world examples

        Testsuite

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/jquerymobile.html ================================================ My Page

        Welcome

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/js/chili-1.7.pack.js ================================================ eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('8={3b:"1.6",2o:"1B.1Y,1B.23,1B.2e",2i:"",2H:1a,12:"",2C:1a,Z:"",2a:\'$$\',R:"&#F;",1j:"&#F;&#F;&#F;&#F;",1f:"&#F;<1W/>",3c:5(){9 $(y).39("1k")[0]},I:{},N:{}};(5($){$(5(){5 1J(l,a){5 2I(A,h){4 3=(1v h.3=="1h")?h.3:h.3.1w;k.1m({A:A,3:"("+3+")",u:1+(3.c(/\\\\./g,"%").c(/\\[.*?\\]/g,"%").3a(/\\((?!\\?)/g)||[]).u,z:(h.z)?h.z:8.2a})}5 2z(){4 1E=0;4 1x=x 2A;Q(4 i=0;i\';8.N[X]=1H;7($.31.34){4 W=J.1L(Y);4 $W=$(W);$("2d").1O($W)}v{$("2d").1O(Y)}}}5 1q(e,a){4 l=e&&e.1g&&e.1g[0]&&e.1g[0].37;7(!l)l="";l=l.c(/\\r\\n?/g,"\\n");4 C=1J(l,a);7(8.1j){C=C.c(/\\t/g,8.1j)}7(8.1f){C=C.c(/\\n/g,8.1f)}$(e).38(C)}5 1o(q,13){4 1l={12:8.12,2x:q+".1d",Z:8.Z,2w:q+".2u"};4 B;7(13&&1v 13=="2l")B=$.35(1l,13);v B=1l;9{a:B.12+B.2x,1p:B.Z+B.2w}}7($.2q)$.2q({36:"2l.15"});4 2n=x 1u("\\\\b"+8.2i+"\\\\b","2j");4 1e=[];$(8.2o).2D(5(){4 e=y;4 1n=$(e).3i("V");7(!1n){9}4 q=$.3u(1n.c(2n,""));7(\'\'!=q){1e.1m(e);4 f=1o(q,e.15);7(8.2H||e.15){7(!8.N[f.a]){1D{8.N[f.a]=1H;$.3v(f.a,5(M){M.f=f.a;8.I[f.a]=M;7(8.2C){2B(f.1p)}$("."+q).2D(5(){4 f=1o(q,y.15);7(M.f==f.a){1q(y,M)}})})}1I(3s){3t("a 3w Q: "+q+\'@\'+3z)}}}v{4 a=8.I[f.a];7(a){1q(e,a)}}}});7(J.1i&&J.1i.29){5 22(p){7(\'\'==p){9""}1z{4 16=(x 3A()).2k()}19(p.3x(16)>-1);p=p.c(/\\<1W[^>]*?\\>/3y,16);4 e=J.1L(\'<1k>\');e.3l=p;p=e.3m.c(x 1u(16,"g"),\'\\r\\n\');9 p}4 T="";4 18=1G;$(1e).3j().G("1k").U("2c",5(){18=y}).U("1M",5(){7(18==y)T=J.1i.29().3k});$("3n").U("3q",5(){7(\'\'!=T){2p.3r.3o(\'3p\',22(T));2V.2R=1a}}).U("2c",5(){T=""}).U("1M",5(){18=1G})}})})(1Z);8.I["1Y.1d"]={k:{2M:{3:/\\/\\*[^*]*\\*+(?:[^\\/][^*]*\\*+)*\\//},25:{3:/\\

        Step 1 of 2


        Login Information





        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/marketo/jquery.maskedinput.js ================================================ /* * Copyright (c) 2007 Josh Bush (digitalbush.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. */ /* * Version: 1.1 * Release: 2007-09-08 */ (function($) { //Helper Functions for Caret positioning function getCaretPosition(ctl){ var res = {begin: 0, end: 0 }; if (ctl.setSelectionRange){ res.begin = ctl.selectionStart; res.end = ctl.selectionEnd; }else if (document.selection && document.selection.createRange){ var range = document.selection.createRange(); res.begin = 0 - range.duplicate().moveStart('character', -100000); res.end = res.begin + range.text.length; } return res; }; function setCaretPosition(ctl, pos){ if(ctl.setSelectionRange){ ctl.focus(); ctl.setSelectionRange(pos,pos); }else if (ctl.createTextRange){ var range = ctl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }; //Predefined character definitions var charMap={ '9':"[0-9]", 'a':"[A-Za-z]", '*':"[A-Za-z0-9]" }; //Helper method to inject character definitions $.mask={ addPlaceholder : function(c,r){ charMap[c]=r; } }; $.fn.unmask=function(){ return this.trigger("unmask"); }; //Main Method $.fn.mask = function(mask,settings) { settings = $.extend({ placeholder: "_", completed: null }, settings); //Build Regex for format validation var reString="^"; for(var i=0;i 16 && k < 32 ) || (k > 32 && k < 41)); //delete selection before proceeding if((pos.begin-pos.end)!=0 && (!ignore || k==8 || k==46)){ clearBuffer(pos.begin,pos.end); } //backspace and delete get special treatment if(k==8){//backspace while(pos.begin-->=0){ if(!locked[pos.begin]){ buffer[pos.begin]=settings.placeholder; if($.browser.opera){ //Opera won't let you cancel the backspace, so we'll let it backspace over a dummy character. writeBuffer(pos.begin); setCaretPosition(this,pos.begin+1); }else{ writeBuffer(); setCaretPosition(this,pos.begin); } return false; } } }else if(k==46){//delete clearBuffer(pos.begin,pos.begin+1); writeBuffer(); setCaretPosition(this,pos.begin); return false; }else if (k==27){ clearBuffer(0,mask.length); writeBuffer(); setCaretPosition(this,0); return false; } }; input.bind("keydown",keydownEvent); function keypressEvent(e){ if(ignore){ ignore=false; return; } e=e||window.event; var k=e.charCode||e.keyCode||e.which; var pos=getCaretPosition(this); var caretPos=pos.begin; if(e.ctrlKey || e.altKey){//Ignore return true; }else if ((k>=41 && k<=122) ||k==32 || k>186){//typeable characters while(pos.begin=buffer.length) settings.completed.call(input); else setCaretPosition(this,caretPos); return false; }; input.bind("keypress",keypressEvent); /*Helper Methods*/ function clearBuffer(start,end){ for(var i=start;i= 6 && /\d/.test(value) && /[a-z]/i.test(value); if (!result) { element.value = ""; var validator = this; setTimeout(function() { validator.blockFocusCleanup = true; element.focus(); validator.blockFocusCleanup = false; }, 1); } return result; }, "Your password must be at least 6 characters long and contain at least one number and one character."); // a custom method making the default value for companyurl ("http://") invalid, without displaying the "invalid url" message jQuery.validator.addMethod("defaultInvalid", function(value, element) { return value != element.defaultValue; }, ""); jQuery.validator.addMethod("billingRequired", function(value, element) { if ($("#bill_to_co").is(":checked")) return $(element).parents(".subTable").length; return !this.optional(element); }, ""); jQuery.validator.messages.required = ""; $("form").validate({ invalidHandler: function(e, validator) { var errors = validator.numberOfInvalids(); if (errors) { var message = errors == 1 ? 'You missed 1 field. It has been highlighted below' : 'You missed ' + errors + ' fields. They have been highlighted below'; $("div.error span").html(message); $("div.error").show(); } else { $("div.error").hide(); } }, onkeyup: false, submitHandler: function() { $("div.error").hide(); alert("submit! use link below to go to the other step"); }, messages: { password2: { required: " ", equalTo: "Please enter the same password as above" }, email: { required: " ", email: "Please enter a valid email address, example: you@yourdomain.com", remote: jQuery.validator.format("{0} is already taken, please enter a different address.") } }, debug:true }); $(".resize").vjustify(); $("div.buttonSubmit").hoverClass("buttonSubmitHover"); if ($.browser.safari) { $("body").addClass("safari"); } $("input.phone").mask("(999) 999-9999"); $("input.zipcode").mask("99999"); var creditcard = $("#creditcard").mask("9999 9999 9999 9999"); $("#cc_type").change( function() { switch ($(this).val()){ case 'amex': creditcard.unmask().mask("9999 999999 99999"); break; default: creditcard.unmask().mask("9999 9999 9999 9999"); break; } } ); // toggle optional billing address var subTableDiv = $("div.subTableDiv"); var toggleCheck = $("input.toggleCheck"); toggleCheck.is(":checked") ? subTableDiv.hide() : subTableDiv.show(); $("input.toggleCheck").click(function() { if (this.checked == true) { subTableDiv.slideUp("medium"); $("form").valid(); } else { subTableDiv.slideDown("medium"); } }); }); $.fn.vjustify = function() { var maxHeight=0; $(".resize").css("height","auto"); this.each(function(){ if (this.offsetHeight > maxHeight) { maxHeight = this.offsetHeight; } }); this.each(function(){ $(this).height(maxHeight); if (this.offsetHeight > maxHeight) { $(this).height((maxHeight-(this.offsetHeight-maxHeight))); } }); }; $.fn.hoverClass = function(classname) { return this.hover(function() { $(this).addClass(classname); }, function() { $(this).removeClass(classname); }); }; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/marketo/step2.htm ================================================ Subscription Signup | Marketo

        Step 2 of 2

        Billing Information


        Billing Address:
        Credit Card Type:
        Expiration:



        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/marketo/stylesheet.css ================================================ :-moz-any-link :focus { outline: none; } :focus { -moz-outline-style: none; outline: none; } body { font-size: 80%; margin: 0; padding: 0; font-family: tahoma, geneva, sans-serif; background-color: #000000; } a { color: #0653AB; outline: 0px; text-decoration: none; } a:hover { outline: 0px; text-decoration: underline; } img { border: 0px; } /* s1.0 - Page Containers */ #letterbox { margin: 10px auto; width: 883px; background-color: #364158; border: 8px solid #D4D4D4; padding: 1px 1px 10px 1px; } #header-background { background: url(images/back_nav_blue.gif) repeat-x; margin: 0px auto; padding: 0px; height: 73px; width: 883px; border-top: 4px solid #CCEAFE; border-bottom: 4px solid #D4D4D4; } #page-container { width: 866px; margin: 0px auto; margin-top: 33px; /* pad from top menu to actions buts*/ margin-bottom: -11px; padding-top: 8px; padding-bottom: 8px; background-color: #D4D4D4; /* light grey*/ border-right: 1px solid #464646; } #page-content-inner { width: 849px; margin: 0px auto; border-top: 1px solid #9F9FA0; border-left: 1px solid #A2A09A; background-color: #F4F1E9; position: relative; } #page-content-inner #col-left { width: 210px; float: left; background-color: #F4F1E9; } #page-content-inner #col-main { width: 639px; background-color: #ffffff; position: absolute; right: 0px; top: 0px; } #footer-container { width: 866px; position: relative; left: 8px; padding: 2px 0px 10px 0px; background-color: #D4D4D4; /* light grey*/ } /* s2.0 - Global navigation bar */ .nav-global-container { width: 880px; margin: 0px auto; position: relative; } * html .nav-global-container { /* ie6 fix*/ margin-bottom: -6px; } .login { position: absolute; right: 20px; text-align: center; } .login a,.login a span { display: block; height: 18px; font-size: 11px; background: url(images/login-sprite.gif) right -5px no-repeat; text-decoration: none; font-weight: bold; padding: 5px 10px 5px 10px; position: relative; } .login a:hover { color: #000000; text-decoration: underline; } div.login a span { background-position: left -105px; width: 4px; position: absolute; top: 0px; left: 0px; padding: 5px 0px 5px 0px;; } div.login a:hover span { } .logo { float: left; margin: 0px 0px -5px 0px; /* neg marging for ie6 */ } .logo img { border: 0px; margin-left: -1px; } .nav-global { float: left; width: 645px; margin: 40px 0px 0px 40px; background-color: transparent; } .nav-global ul { margin: 0px; padding: 0px; list-style: none; } .nav-global li { float: left; white-space: nowrap; } div.nav-global li a,div.nav-global li a span { background-image: url(images/tab-sprite.gif); background-position: right 100px; background-repeat: no-repeat; height: 32px; color: #666666; text-decoration: none; font: bold 16px 'trebuchet ms'; margin-right: 15px; display: block; position: relative; padding: 7px 15px 0px 15px; } div.nav-global li a:hover { background-position: right 0px; color: #333333; } div.nav-global li a:hover span { background-position: left -100px; display: block !important; } div.nav-global li a span { background-position: left 150px; width: 4px; position: absolute; left: 0px; top: 0px; padding: 7px 0px 0px 0px; } body.safari div.nav-global li a span { display: none; } div.nav-global li a.on,div.nav-global li a.on:hover { background-position: right -55px; color: #FFFFFF; } div.nav-global li a.on span,div.nav-global li a.on:hover span { background-position: left -155px; display: block !important; } div.action-container { position: relative; top: -45px; cursor: pointer; } div.action-icon-container { position: absolute; top: -17px; left: -17px; z-index: 10; width: 100px; height: 100px; overflow: hidden; } div.action-icon { border: 0px; position: absolute; top: -0px; left: 0px; } div.action-button-container { height: 106px; width: 180px; overflow: hidden; position: absolute; top: 0px; left: 0px; z-index: 5; } img.action-icon { border: 0px; position: absolute; top: 0px; left: 0px; z-index: 0 } div.action-text { z-index: 20; color: #FFFFFF; position: absolute; left: 40px; top: 12px; font: 14px tahoma, geneva; padding-top: 30px; } div.bigbuttons { top: -20px; } div.action-header { z-index: 21; position: absolute; left: 40px; top: 10px; } div.action-header b { font: bold 17px tahoma, geneva; display: block; margin-bottom: 10px; color: #0b2c89; position: absolute; top: 0px; left: 0px; width: 130px; } div.action-header b.shadow { top: 1px; left: 1px; color: #d5d5d5; } img.action-button { position: relative; } div.hover img.action-button { top: -131px; } div.on img.action-button { top: -261px; } /* s3.0 - top of content Action Buttons */ .action-buttons { width: 100%; /* ie6 requires */ } .action-buttons ul { position: relative; padding: 0px; } .action-buttons li { position: relative; /* ie6 fix */ float: left; list-style: none; text-align: center; line-height: 16px; margin: -61px 0px 0px 0px; } .action-home li { margin: -49px 0px 0px 0px; } .action-buttons a { display: block; height: 110px; width: 175px; padding: 14px 0px 0px 25px; text-decoration: none; font-size: 12px; font-weight: bold; color: #ffffff; } .action-buttons li span { color: #053880; line-height: 47px; font-size: 17px; } div.action-bottom { margin: 15px 0px 10px 0px; float: left; } div.action-bottom a { height: 61px; width: 178px; border: 0px; background: url(images/action-bottom.gif) no-repeat 0px 0px; color: #0b2c89; float: left; position: relative; font: bold 17px tahoma, geneva; text-decoration: none; margin-right: 10px; } div.action-bottom a span { position: absolute; top: 15px; left: 40px; } div.action-bottom a span.shadow { top: 16px; left: 41px; color: #d4d4d4; } .line-grey { background: url(images/line-grey.gif) 0 0 repeat-x; height: 2px; margin: 8px 25px 20px 0; } /* s4.0 - Home Hero Area */ .hero-background { position: relative; width: 880px; background: url(images/back_home-hero.jpg) 10px 0px no-repeat; height: 211px; margin: -20px 0px 45px 0px; } .hero-text { float: right; width: 626px; margin-top: 26px; } .hero-text a { /* Sign Up Now Button */ padding: 5px 32px 0px 0px; float: right; } .hero-text h1 { font-size: 2.3em; line-height: 1.2em; color: #333333; font-family: Trebuchet MS; margin: 12px 0px 10px 10px; } .hero-text h2 { margin: 0px; font-weight: normal; font-size: 1.35em; margin: 5px 0px 13px 10px } /* s4.1 - Home Left Header tab */ .col-left-header-tab { position: relative; /* ie6 fix */ background: url(images/tab_green.gif) 0 0 no-repeat; height: 30px; width: 166px; text-align: center; color: #ffffff; font: 20px 'trebuchet ms'; padding-top: 2px; margin-top: -41px; margin-left: 20px; line-height: 29px; margin-bottom: 8px; display: block; } .col-left-header-tab a { color: #FFFFFF; } .callout-green { background: url(images/back_green-fade.gif) 0 0 repeat-x; font-size: 1.2em; padding: 10px 15px 20px 13px; color: #303B52; line-height: 1.4em; } /* s4.2 - Home Left Quote */ .callout-tan { color: #666666; } .callout-tan h1 { background: #F4F1E9 url(images/back_tan-fade.gif) 0 0 repeat-y; font-size: 1.1em; text-align: center; margin: 0px; padding: 11px 5px 11px 2px; color: #333333; } .callout-tan p { margin: 0px; margin-top: 5px; line-height: 1.4em; padding: 5px 10px 7px 13px; } .callout-tan p img { float: left; margin: 5px 10px 5px 0px; } .callout-tan div { text-align: left; padding: 5px 10px 7px 0px; font-weight: bold; } /* s4.3 - purple home boxes */ .box-purple { background: #C6C8E3 url(images/back_home-icons.png) 0px 0px repeat-x; border-left: 1px solid #ffffff; color: #333333; width: 581px; padding: 10px 15px 20px 15px; } div.box-purple a { } .box-purple h1 { font-size: 1.5em; margin: 10px 0px -15px 0px; } .box-purple li { margin: 0px 0px 0px -23px; line-height: 1.6em; font-size: 1em; } .box-purple div { padding: 0px 0px 0px 110px; } .icon-text01 { background-image: url(images/icon_search-engine-market.png); background-repeat: no-repeat; } * html .icon-text01 { width: 460px; /* must have a width or heigh tag for ie6*/ background-image: none; filter: progid : DXImageTransform . Microsoft . AlphaImageLoader(src = "images/icon_search-engine-market.png", sizingMethod = "crop"); } .icon-text02 { background: url(images/icon_landing-pages.png) 0 0 no-repeat; } * html .icon-text02 { width: 460px; /* must have a width or heigh tag for ie6*/ background-image: none; filter: progid : DXImageTransform . Microsoft . AlphaImageLoader(src = "images/icon_landing-pages.png", sizingMethod = "crop"); } .icon-text03 { background: url(images/icon_salesforce.png) 0 0 no-repeat; } * html .icon-text03 { width: 460px; /* must have a width or heigh tag for ie6*/ background-image: none; filter: progid : DXImageTransform . Microsoft . AlphaImageLoader(src = "images/icon_salesforce.png", sizingMethod = "crop"); } /* s4.4 - news home boxes */ .callout-news { color: #555555; float: left; width: 49%; margin: 10px 1px 0px 0px; padding-bottom: 20px; text-align: left; } .line-news-r { border-right: 1px solid #D4D4D4; } .callout-news h1 { background-color: #EEEEEE; font-size: 1.2em; margin: 0px; padding: 11px 5px 11px 15px; color: #333333; } .callout-news p { margin: 10px 0px 0px 10px; padding: 0px 10px 7px 20px; background: url(images/news.gif) no-repeat left 1px; } .callout-news p a { } .callout-news ul { list-style-type: none; padding: 0; margin: 10px 0 0 10px; } .callout-news li { background: url(images/icon_news.gif) no-repeat left 2px; padding: 0px 5px 5px 20px; } .callout-news li a { display: block; margin-bottom: 5px; } .callout-news div { text-align: right; } #scrollup { position: relative; overflow: hidden; height: 440px; width: 200px } .headline { position: absolute; top: 600px; left: 5px; height: 585px; width: 190px; font: normal 12px tahoma, geneva !important; } div.more { margin: 5px 0px 0px 0px; padding: 0px 10px 0px 0px; letter-spacing: inherit; } div.more a { background: transparent url(images/arrow_r-blue.gif) no-repeat right 2px ; font-weight: bold; padding: 0px 20px 0px 0px; font-weight: bold; text-decoration: none; } div.more a:hover { text-decoration: underline; } /* sX.0 - Left Nav */ .nav-left-back { background: url(images/back_nav_side.gif) 0 0 repeat-x; } div.empty { background: #F1F0E5 url(images/back_green-fade.gif) 0 0 repeat-x; } div.empty div.callout-green { } .nav-left { padding-top: 12px; /*background: url(images/logo_marketo_square.gif) 0 0 no-repeat;*/ width: 210px; } .nav-left ul { margin: 0px; padding: 0px; list-style: none; } .nav-left li a { display: block; height: 24px; text-decoration: none; font-size: 12px; font-weight: bold; color: #ffffff; border-top: 1px solid #B3D38D; border-bottom: 1px solid #7CA84E; border-left: 1px solid #97B973; padding: 6px 0px 0px 20px; } .nav-left a:hover,.nav-left a.active:hover,#nav-left-sub a:hover { color: #4C6F28; background-color: #F4F1E9; } .nav-left a.open { background-image: url(images/arrow_d-green.gif); background-repeat: no-repeat; background-position: 6px 11px; } .nav-left-header-tab { position: relative; /* ie6 fix */ background: url(images/tab_green.gif) 0 0 no-repeat; height: 32px; width: 166px; text-align: center; color: #ffffff; margin: -41px 0px 0px 22px; line-height: 22px; margin-bottom: 8px; display: block; } div.empty div.nav-left-header-tab { background: url(images/tab_green2.gif) 0 0 no-repeat; } .nav-left a.active { /* background: url(images/arrow_d-green.gif) 5px 10px no-repeat; */ display: block; height: 24px; text-decoration: none; font-size: 12px; font-weight: bold; background-color: #F4F1E9; color: #4C6F28; border-top: 1px solid #D1E5BB; border-bottom: 1px solid #B0CB95; border-left: 1px solid #DADADA; padding: 6px 0px 0px 20px; } #nav-left-sub a { display: block; height: 24px; text-decoration: none; font-size: 12px; font-weight: bold; background-color: #D6E8C4; color: #4C6F28; border-top: 1px solid #D6E8C4; border-bottom: 1px solid #B0CB95; border-left: 1px solid #97B973; border-right: 1px solid #8DBE5A; padding: 6px 0px 0px 30px; } * html #nav-left-sub { /* ie6 fix */ margin-top: -1px; } *+html #nav-left-sub { /* ie7 fix */ margin-top: -1px; } #nav-left-sub a.active-page { display: block; height: 24px; text-decoration: none; font-size: 12px; font-weight: bold; background-color: #ffffff; color: #666666; border-top: 0px solid #7CA84E; border-bottom: 1px solid #B0CB95; border-left: 1px solid #97B973; border-right: 0px solid #8DBE5A; padding: 6px 0px 0px 30px; cursor: default; /* turns off hand icon for link */ } /* sX.0 - Main Content */ .main-content { color: #666666; position: absolute; right: 20px; padding-top: 20px; width: 585px; padding-bottom: 20px; } div.main-content div.main-content { } .main-content h1 { color: #5890D1; font-size: 1.9em; font-family: Trebuchet MS; border-bottom: 1px solid #cccccc; margin: 0px 10px 0px 0px; } .main-content h2 { color: #666666; font-size: 1.3em; font-weight: normal; margin: 10px 10px 5px 0px; } .main-content p { margin: 10px 10px 10px 0px; line-height: 1.55em; } /* sX.1 - Main Content Sub Styles */ .sub-grey { border-top: 1px solid #D4D4D4; border-bottom: 1px solid #D4D4D4; background-color: #F4F4F4; margin: 10px 10px 0px 0px; padding: 0px 10px 20px 15px; } .sub-white { margin: 10px 10px 0px 0px; padding: 0px 10px 20px 15px; } img.screen-grab-r { margin-right: -8px; text-align: right; padding: 0px 0px 0px 10px; } div.main-content a.screenshot { float: right; padding: 10px 10px 0px 0px } .content-foot { border-top: 1px solid #D4D4D4; font-size: .9em; line-height: 1.45em; margin: 10px 20px 0px 0px; padding: 10px 10px 30px 0px; } div.main-content ul { position: relative; left: -25px; } div.main-content li { margin-bottom: 5px; list-style-type: disc } div.main-content li a { color: #6A6CB0; } /* sX.0 - Footer */ div.footer { color: #666666; font-size: .85em; font-weight: normal; height: 18px; margin: 0px auto; font-family: Tahoma, Geneva, sans-serif; margin-top: 10px; } .footer ul { list-style-type: none; } .footer li { float: left; border-right: 1px solid #666666; padding: 0px 7px 0px 7px; margin-top: 3px; } .footer a { color: #666666; text-decoration: none; } .footer a:hover { color: #0653AB; text-decoration: none; } .footer li.line-off { border-right: 0px solid #ffffff; } div.footer strong { font-weight: normal; } /* sX.0 - General Colors */ .line-grey,.line-grey-tier { border-top: 1px solid #A3A3A2; } .line-grey-tier { padding-bottom: 25px; } .bottom { height: 10px; } div.p10bottom { padding-bottom: 10px; } .clear { clear: both; } table.grid { background: #EEEEEE; } table.grid th { background-color: #F4F4F4; } table.grid td { background-color: #FFFFFF; } div.buttonSubmit { position: relative; } div.buttonSubmit input,div.buttonSubmit span { height: 36px; position: relative; background-image: url(images/button-submit.gif); background-repeat: no-repeat; background-position: right 0px; float: left; color: #FFFFFF; font-weight: bold; padding: 0px 15px 2px 15px; margin: 20px 0px 20px 0px; border: 0px; cursor: pointer; z-index: 5; } div.buttonSubmit input { width: auto; } div.buttonSubmit span { width: 4px; position: absolute; left: 0px; top: 0px; background-position: left -36px; padding: 0px 0px 0px 0px; z-index: 10; } body.safari div.buttonSubmit span { display: none } div.buttonSubmitHover input { background-position: right -72px; } div.buttonSubmitHover span { background-position: left -108px; } a.demoLink { padding: 1px 10px 0px 17px; height: 24px; background: url(images/bullet_triangle_blue.gif) no-repeat 0px 4px; display: block; float: left; } div.callout-tan a { background: none; color: #0653AB; margin: auto; display: block; } div.callout-tan a:hover { background: none; color: #0653AB; } label.error { display: block; color: red; font-style: italic; font-weight: normal; } input.error { border: 2px solid red; } p.demoBlock { border-bottom: 1px solid #DDDDDD; padding-bottom: 10px; } div.left-nav-callout { height: 200px; width: 190px; top: 55px; left: 5px; position: relative; padding-left: 9px; padding-top: 13px; } div.left-nav-callout img.png { position: absolute; z-index: 0; top: 0px; left: 0px; } div.left-nav-callout h6 { font: bold 14px tahoma, geneva; color: #333333; height: 36px; padding-left: 5px; margin: 0px; position: relative; z-index: 10; } div.left-nav-callout a { background: url(images/monitor24.gif) no-repeat 0px center; padding: 5px 0px 5px 30px; display: block; font: bold 12px tahoma, geneva; color: #336699; margin-bottom: 5px; position: relative; z-index: 10; width: 140px; } form table td { padding: 5px; } form table input { width: 200px; padding: 3px; margin: 0px; } textarea { width: 400px } td.label { width: 150px; } tr.required td.label { font-weight: bold; background: url(/images/forms/backRequiredGray.gif) no-repeat right center; } div.subTableDiv { width: 500px; } div.subTableDiv td.label { width: 135px; } ul#homeBlog li div.description { display: none; } td.field input.error, td.field select.error, tr.errorRow td.field input,tr.errorRow td.field select { border: 2px solid red; background-color: #FFFFD5; margin: 0px; color: red; } tr td.field div.formError { display: none; color: #FF0000; } tr.errorRow td.field div.formError { display: block; font-weight: normal; } div.error { color: red; } div.error a { color: #336699; font-size: 12px; text-decoration: underline } div.tooltip { position: absolute; left: 30px; bottom: 0px; display: none; /* in case javascript is disabled */ width: 170px; background-color: #F4F1E9; z-index: 100; padding: 10px; border: 1px solid #CCCCCC; } div.offerbox { width: 125px; float: left; position: relative; } div.offerbox h3 { font: bold 17px tahoma, geneva; color: #333333; height: 55px; margin: 0px auto; text-align: center; } div.offerbox h4 { height: 100px; font: normal 13px tahoma, geneva; margin: 0px; } div.offerbox h5 { font: bold 14px tahoma, geneva; margin: 0px; height: 55px; } div.offerbox h5 small { float: left; font-weight: normal; font-size: 10px; } div.offerbox div.learnmore { padding-left: 25px; } div#marketoEditions { background: url(images/buynowBack.gif) no-repeat; width: 584px; height: 376px; float: left; position: relative; margin-bottom: 10px; } div.offerHeader { background: #0D8BBD; position: absolute; top: 20px; width: 266px; height: 34px; border: 1px solid #e1e4e2; } div.offerHeader span { font: 20px 'trebuchet ms'; color: #FFFFFF; position: absolute; left: 0px; top: 0px; } div.offerHeader span.shadow { font: 20px 'trebuchet ms'; color: #333333; position: absolute; } div.offerbox div.buttonSubmit { margin: 5px 0px 0px 10px; } div.footerAddress { position: absolute; bottom: 30px; left: 20px; color: #666666; font-size: 11px; display: none; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/emails.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/emails.phps ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/index.html ================================================ Remember The Milk signup form - jQuery Validate plugin demo - with friendly permission from the RTM team

        jQuery Validation Plugin Demo

         
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/milk.css ================================================ /* GENERAL ELEMENTS */ * { margin: 0; padding: 0; } body, input, select, textarea { font-family: verdana, arial, helvetica, sans-serif; font-size: 11px; } body { color: #333; background-color: #fff; text-align: center; } a:link { color:#0060BF; text-decoration: underline; } a:visited { color:#0060BF; text-decoration: underline; } a:active { color:#0060BF; text-decoration: underline; } a:hover { color:#000000; text-decoration: underline; } h1, h2, h3, h4, h5, h6 { font-family: "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, arial, helvetica, sans-serif; font-weight: bold; color: #666; } h1 { font-size: 1.8em; margin: 0em 0em 0.6em 0em; color: #EC5800; } h2 { font-size: 1.5em; margin: 1.2em 0em 0.4em 0em; } h3 { font-size: 1.4em; margin: 1.2em 0em 0.4em 0em; color: #EC5800; } h4 { font-size: 1.2em; margin: 1.2em 0em 0.4em 0em; } h5 { font-size: 1.0em; margin: 1.2em 0em 0.4em 0em; } h6 { font-size: 0.8em; margin: 1.2em 0em 0.4em 0em; } img { border: 0px; } p { font-size: 1.0em; line-height: 1.3em; margin: 1.2em 0em 1.2em 0em; } li > p { margin-top: 0.2em; } pre { font-family: monospace; font-size: 1.0em; } strong, b { font-weight: bold; } /* PAGE ELEMENTS */ /* Content */ #content { margin: 0em auto; width: 765px; padding: 10px 0 10px 0; text-align: left; /* Win IE5 */ } .content { margin-left: 4.5em; margin-right: 4.5em; } .content ol, .content ul, .content li { font-size: 1.0em; line-height: 1.3em; margin: 0.2em 0 0.1em 1.5em; } .content ol.terms li { margin-bottom: 1em; } /* Header */ #header { padding-bottom: 10em; } #headerlogo { float: left; } #headerlogo img { width: 188px; height: 83px; } #headernav { float: right; } label { font-weight: bold; } #reminders label { font-weight: normal; } table.tabbedtable { padding-left: 3em; } table.tabbedtable td { padding-bottom: 5px; } table.tabbedtable label { text-align: right; padding-right: 9px; } .hiddenlabel { visibility: hidden; } .largelink { border: 1px solid #cacaca; padding: 10px; background-color: #E8EEF7; font-size: 1.2em; font-weight: bold; } .largelinkwrap { padding-top: 10px; padding-bottom: 10px; } #signuptab { float:left; width:100%; background:#fff url("bg.gif") repeat-x bottom; font-size: 1.0em; line-height: normal; } #signuptab ul { margin:0; padding: 0px 10px 0px 10px; list-style:none; } #signuptab li { float:left; background:url("left_white.png") no-repeat left top; margin:0; padding:0 3px 0 9px; border-bottom:1px solid #CACACA; } #signuptab a { float:left; display:block; width:.1em; background:url("right_white.png") no-repeat right top; padding:2px 15px 0px 6px; text-decoration:none; font-weight:bold; color:#fff; white-space: nowrap; } #signuptab > ul a {width:auto;} /* Commented Backslash Hack hides rule from IE5-Mac \*/ #signuptab a {float:none;} /* End IE5-Mac hack */ #signuptab a:hover { color:#333; } #signuptab #signupcurrent { background-position:0 -150px; border-width:0; } #signuptab #signupcurrent a { background-position:100% -150px; padding-bottom:1px; color:#000; } #signuptab li:hover, #signuptab li:hover a { background-position:0% -150px; color:#000; } #signuptab li:hover a { background-position:100% -150px; } /* Signup box */ #signupbox { width: 100%; text-align: center; margin: 0em auto; } #signupwrap { border: 1px solid #CACACA; border-top: 0; text-align: left; padding: 35px 10px 20px 30px; clear: both; } /* Unsupported browsers */ .orange_rbcontent { padding: 0.4em; } .orange_rbroundbox { width: 100%; } #unsupported { font-weight: bold; text-align: left; } /*#content { padding-top: 15px; }*/ /* Signup form */ #signupform table { border-spacing: 0px; border-collapse: collapse; empty-cells: show; } #signupform .label { padding-top: 2px; padding-right: 8px; vertical-align: top; text-align: right; width: 125px; white-space: nowrap; } #signupform .field { padding-bottom: 10px; white-space: nowrap; } #signupform .status { padding-top: 2px; padding-left: 8px; vertical-align: top; width: 246px; white-space: nowrap; } #signupform .textfield { width: 150px; } #signupform label.error { background:url("../images/unchecked.gif") no-repeat 0px 0px; padding-left: 16px; padding-bottom: 2px; font-weight: bold; color: #EA5200; } #signupform label.checked { background:url("../images/checked.gif") no-repeat 0px 0px; } #signupform .success_msg { font-weight: bold; color: #0060BF; margin-left: 19px; } #signupform #dateformatStatus, #signupform #termsStatus { margin-left: 6px; } #signupform #dateformat_eu { vertical-align: middle; } #signupform #ldateformat_eu { font-weight: normal; vertical-align: middle; } #signupform #dateformat_am { vertical-align: middle; } #signupform #ldateformat_am { font-weight: normal; vertical-align: middle; } #signupform #termswrap { float: left; } #signupform #terms { vertical-align: middle; float: left; display: block; margin-right: 5px; } #signupform #lterms { font-weight: normal; vertical-align: middle; float: left; display: block; width: 350px; white-space: normal; } #signupform #lsignupsubmit { visibility: hidden; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/users.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/milk/users.phps ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/multipart/index.html ================================================ jQuery accordion form with validation

        Help me Buy and Sell a House

        This form is quick & easy to complete - in only 3 steps!

        • Step 1 of 3
          *Required Field

          Tell us about the property you're buying

            No:      Yes:




        • Step 2 of 3
          *Required Field

          Tell us about the property you're selling













        • Step 3 of 3
          *Required Field

          Tell us about yourself













          This is a sample form, no information is sent anywhere.

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/multipart/js/jquery.maskedinput-1.0.js ================================================ /* * Copyright (c) 2007 Josh Bush (digitalbush.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. */ /* * Version: 1.0 * Release: 2007-07-25 */ (function($) { //Helper Functions for Caret positioning function getCaretPosition(ctl){ var res = {begin: 0, end: 0 }; if (ctl.setSelectionRange){ res.begin = ctl.selectionStart; res.end = ctl.selectionEnd; }else if (document.selection && document.selection.createRange){ var range = document.selection.createRange(); res.begin = 0 - range.duplicate().moveStart('character', -100000); res.end = res.begin + range.text.length; } return res; }; function setCaretPosition(ctl, pos){ if(ctl.setSelectionRange){ ctl.focus(); ctl.setSelectionRange(pos,pos); }else if (ctl.createTextRange){ var range = ctl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }; //Predefined character definitions var charMap={ '9':"[0-9]", 'a':"[A-Za-z]", '*':"[A-Za-z0-9]" }; //Helper method to inject character definitions $.mask={ addPlaceholder : function(c,r){ charMap[c]=r; } }; //Main Method $.fn.mask = function(mask,settings) { settings = $.extend({ placeholder: "_", completed: null }, settings); //Build Regex for format validation var reString="^"; for(var i=0;i 16 && k < 32 ) || (k > 32 && k < 41)); //delete selection before proceeding if((pos.begin-pos.end)!=0 && (!ignore || k==8 || k==46)){ clearBuffer(pos.begin,pos.end); } //backspace and delete get special treatment if(k==8){//backspace while(pos.begin-->=0){ if(!locked[pos.begin]){ buffer[pos.begin]=settings.placeholder; if($.browser.opera){ //Opera won't let you cancel the backspace, so we'll let it backspace over a dummy character. writeBuffer(pos.begin); setCaretPosition(this,pos.begin+1); }else{ writeBuffer(); setCaretPosition(this,pos.begin); } return false; } } }else if(k==46){//delete clearBuffer(pos.begin,pos.begin+1); writeBuffer(); setCaretPosition(this,pos.begin); return false; }else if (k==27){ clearBuffer(0,mask.length); writeBuffer(); setCaretPosition(this,0); return false; } }); input.keypress(function(e){ if(ignore){ ignore=false; return; } e=e||window.event; var k=e.charCode||e.keyCode||e.which; var pos=getCaretPosition(this); var caretPos=pos.begin; if(e.ctrlKey || e.altKey){//Ignore return true; }else if ((k>=41 && k<=122) ||k==32 || k>186){//typeable characters while(pos.begin=buffer.length) settings.completed.call(input); else setCaretPosition(this,caretPos); return false; }); /*Helper Methods*/ function clearBuffer(start,end){ for(var i=start;i").addClass("ui-icon " + o.icons.header).prependTo(this.headers); this.active.find(".ui-icon").toggleClass(o.icons.header).toggleClass(o.icons.headerSelected); // IE7-/Win - Extra vertical space in lists fixed if ($.browser.msie) { this.element.find('a').css('zoom', '1'); } this.resize(); //ARIA this.element.attr('role','tablist'); this.headers .attr('role','tab') .bind('keydown', function(event) { return self._keydown(event); }) .next() .attr('role','tabpanel'); this.headers .not(this.active || "") .attr('aria-expanded','false') .attr("tabIndex", "-1") .next() .hide(); // make sure at least one header is in the tab order if (!this.active.length) { this.headers.eq(0).attr('tabIndex','0'); } else { this.active .attr('aria-expanded','true') .attr('tabIndex', '0'); } // only need links in taborder for Safari if (!$.browser.safari) this.headers.find('a').attr('tabIndex','-1'); if (o.event) { this.headers.bind((o.event) + ".accordion", function(event) { return self._clickHandler.call(self, event, this); }); } }, destroy: function() { var o = this.options; this.element .removeClass("ui-accordion ui-widget ui-helper-reset") .removeAttr("role") .unbind('.accordion') .removeData('accordion'); this.headers .unbind(".accordion") .removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top") .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex"); this.headers.find("a").removeAttr("tabindex"); this.headers.children(".ui-icon").remove(); var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active"); if (o.autoHeight || o.fillHeight) { contents.css("height", ""); } }, _setData: function(key, value) { if(key == 'alwaysOpen') { key = 'collapsible'; value = !value; } $.widget.prototype._setData.apply(this, arguments); }, _keydown: function(event) { var o = this.options, keyCode = $.ui.keyCode; if (o.disabled || event.altKey || event.ctrlKey) return; var length = this.headers.length; var currentIndex = this.headers.index(event.target); var toFocus = false; switch(event.keyCode) { case keyCode.RIGHT: case keyCode.DOWN: toFocus = this.headers[(currentIndex + 1) % length]; break; case keyCode.LEFT: case keyCode.UP: toFocus = this.headers[(currentIndex - 1 + length) % length]; break; case keyCode.SPACE: case keyCode.ENTER: return this._clickHandler({ target: event.target }, event.target); } if (toFocus) { $(event.target).attr('tabIndex','-1'); $(toFocus).attr('tabIndex','0'); toFocus.focus(); return false; } return true; }, resize: function() { var o = this.options, maxHeight; if (o.fillSpace) { if($.browser.msie) { var defOverflow = this.element.parent().css('overflow'); this.element.parent().css('overflow', 'hidden'); } maxHeight = this.element.parent().height(); if($.browser.msie) { this.element.parent().css('overflow', defOverflow); } this.headers.each(function() { maxHeight -= $(this).outerHeight(); }); var maxPadding = 0; this.headers.next().each(function() { maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height()); }).height(Math.max(0, maxHeight - maxPadding)) .css('overflow', 'auto'); } else if ( o.autoHeight ) { maxHeight = 0; this.headers.next().each(function() { maxHeight = Math.max(maxHeight, $(this).outerHeight()); }).height(maxHeight); } }, activate: function(index) { // call clickHandler with custom event var active = this._findActive(index)[0]; this._clickHandler({ target: active }, active); }, _findActive: function(selector) { return selector ? typeof selector == "number" ? this.headers.filter(":eq(" + selector + ")") : this.headers.not(this.headers.not(selector)) : selector === false ? $([]) : this.headers.filter(":eq(0)"); }, _clickHandler: function(event, target) { var o = this.options; if (o.disabled) return false; // called only when using activate(false) to close all parts programmatically if (!event.target && o.collapsible) { this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all") .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header); this.active.next().addClass('ui-accordion-content-active'); var toHide = this.active.next(), data = { options: o, newHeader: $([]), oldHeader: o.active, newContent: $([]), oldContent: toHide }, toShow = (this.active = $([])); this._toggle(toShow, toHide, data); return false; } // get the click target var clicked = $(event.currentTarget || target); var clickedIsActive = clicked[0] == this.active[0]; // if animations are still active, or the active header is the target, ignore click if (this.running || (!o.collapsible && clickedIsActive)) { return false; } // switch classes this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all") .find(".ui-icon").removeClass(o.icons.headerSelected).addClass(o.icons.header); this.active.next().addClass('ui-accordion-content-active'); if (!clickedIsActive) { clicked.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top") .find(".ui-icon").removeClass(o.icons.header).addClass(o.icons.headerSelected); clicked.next().addClass('ui-accordion-content-active'); } // find elements to show and hide var toShow = clicked.next(), toHide = this.active.next(), data = { options: o, newHeader: clickedIsActive && o.collapsible ? $([]) : clicked, oldHeader: this.active, newContent: clickedIsActive && o.collapsible ? $([]) : toShow.find('> *'), oldContent: toHide.find('> *') }, down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); this.active = clickedIsActive ? $([]) : clicked; this._toggle(toShow, toHide, data, clickedIsActive, down); return false; }, _toggle: function(toShow, toHide, data, clickedIsActive, down) { var o = this.options, self = this; this.toShow = toShow; this.toHide = toHide; this.data = data; var complete = function() { if(!self) return; return self._completed.apply(self, arguments); }; // trigger changestart event this._trigger("changestart", null, this.data); // count elements to animate this.running = toHide.size() === 0 ? toShow.size() : toHide.size(); if (o.animated) { var animOptions = {}; if ( o.collapsible && clickedIsActive ) { animOptions = { toShow: $([]), toHide: toHide, complete: complete, down: down, autoHeight: o.autoHeight || o.fillSpace }; } else { animOptions = { toShow: toShow, toHide: toHide, complete: complete, down: down, autoHeight: o.autoHeight || o.fillSpace }; } if (!o.proxied) { o.proxied = o.animated; } if (!o.proxiedDuration) { o.proxiedDuration = o.duration; } o.animated = $.isFunction(o.proxied) ? o.proxied(animOptions) : o.proxied; o.duration = $.isFunction(o.proxiedDuration) ? o.proxiedDuration(animOptions) : o.proxiedDuration; var animations = $.ui.accordion.animations, duration = o.duration, easing = o.animated; if (!animations[easing]) { animations[easing] = function(options) { this.slide(options, { easing: easing, duration: duration || 700 }); }; } animations[easing](animOptions); } else { if (o.collapsible && clickedIsActive) { toShow.toggle(); } else { toHide.hide(); toShow.show(); } complete(true); } toHide.prev().attr('aria-expanded','false').attr("tabIndex", "-1").blur(); toShow.prev().attr('aria-expanded','true').attr("tabIndex", "0").focus(); }, _completed: function(cancel) { var o = this.options; this.running = cancel ? 0 : --this.running; if (this.running) return; if (o.clearStyle) { this.toShow.add(this.toHide).css({ height: "", overflow: "" }); } this._trigger('change', null, this.data); } }); $.extend($.ui.accordion, { version: "1.7.1", defaults: { active: null, alwaysOpen: true, //deprecated, use collapsible 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(); } }, animations: { slide: function(options, additions) { options = $.extend({ easing: "swing", duration: 300 }, options, additions); if ( !options.toHide.size() ) { options.toShow.animate({height: "show"}, options); return; } if ( !options.toShow.size() ) { options.toHide.animate({height: "hide"}, options); return; } var overflow = options.toShow.css('overflow'), percentDone, showProps = {}, hideProps = {}, fxAttrs = [ "height", "paddingTop", "paddingBottom" ], originalWidth; // fix width before calculating height of hidden element var s = options.toShow; originalWidth = s[0].style.width; s.width( parseInt(s.parent().width(),10) - parseInt(s.css("paddingLeft"),10) - parseInt(s.css("paddingRight"),10) - (parseInt(s.css("borderLeftWidth"),10) || 0) - (parseInt(s.css("borderRightWidth"),10) || 0) ); $.each(fxAttrs, function(i, prop) { hideProps[prop] = 'hide'; var parts = ('' + $.css(options.toShow[0], prop)).match(/^([\d+-.]+)(.*)$/); showProps[prop] = { value: parts[1], unit: parts[2] || 'px' }; }); options.toShow.css({ height: 0, overflow: 'hidden' }).show(); options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate(hideProps,{ step: function(now, settings) { // only calculate the percent when animating height // IE gets very inconsistent results when animating elements // with small values, which is common for padding if (settings.prop == 'height') { percentDone = (settings.now - settings.start) / (settings.end - settings.start); } options.toShow[0].style[settings.prop] = (percentDone * showProps[settings.prop].value) + showProps[settings.prop].unit; }, duration: options.duration, easing: options.easing, complete: function() { if ( !options.autoHeight ) { options.toShow.css("height", ""); } options.toShow.css("width", originalWidth); options.toShow.css({overflow: overflow}); options.complete(); } }); }, bounceslide: function(options) { this.slide(options, { easing: options.down ? "easeOutBounce" : "swing", duration: options.down ? 1000 : 200 }); }, easeslide: function(options) { this.slide(options, { easing: "easeinout", duration: 700 }); } } }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/multipart/js/ui.core.js ================================================ /* * jQuery UI 1.7.1 * * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI */ ;jQuery.ui || (function($) { var _remove = $.fn.remove, isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9); //Helper functions and ui object $.ui = { version: "1.7.1", // $.ui.plugin is deprecated. Use the proxy pattern instead. plugin: { add: function(module, option, set) { var proto = $.ui[module].prototype; for(var i in set) { proto.plugins[i] = proto.plugins[i] || []; proto.plugins[i].push([option, set[i]]); } }, call: function(instance, name, args) { var set = instance.plugins[name]; if(!set || !instance.element[0].parentNode) { return; } for (var i = 0; i < set.length; i++) { if (instance.options[set[i][0]]) { set[i][1].apply(instance.element, args); } } } }, contains: function(a, b) { return document.compareDocumentPosition ? a.compareDocumentPosition(b) & 16 : a !== b && a.contains(b); }, hasScroll: function(el, a) { //If overflow is hidden, the element might have extra content, but the user wants to hide it if ($(el).css('overflow') == 'hidden') { return false; } var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', has = false; if (el[scroll] > 0) { return true; } // TODO: determine which cases actually cause this to happen // if the element doesn't have the scroll set, see if it's possible to // set the scroll el[scroll] = 1; has = (el[scroll] > 0); el[scroll] = 0; return has; }, isOverAxis: function(x, reference, size) { //Determines when x coordinate is over "b" element axis return (x > reference) && (x < (reference + size)); }, isOver: function(y, x, top, left, height, width) { //Determines when x, y coordinates is over "b" element return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); }, keyCode: { BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, 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, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38 } }; // WAI-ARIA normalization if (isFF2) { var attr = $.attr, removeAttr = $.fn.removeAttr, ariaNS = "http://www.w3.org/2005/07/aaa", ariaState = /^aria-/, ariaRole = /^wairole:/; $.attr = function(elem, name, value) { var set = value !== undefined; return (name == 'role' ? (set ? attr.call(this, elem, name, "wairole:" + value) : (attr.apply(this, arguments) || "").replace(ariaRole, "")) : (ariaState.test(name) ? (set ? elem.setAttributeNS(ariaNS, name.replace(ariaState, "aaa:"), value) : attr.call(this, elem, name.replace(ariaState, "aaa:"))) : attr.apply(this, arguments))); }; $.fn.removeAttr = function(name) { return (ariaState.test(name) ? this.each(function() { this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); }) : removeAttr.call(this, name)); }; } //jQuery plugins $.fn.extend({ remove: function() { // Safari has a native remove event which actually removes DOM elements, // so we have to use triggerHandler instead of trigger (#3037). $("*", this).add(this).each(function() { $(this).triggerHandler("remove"); }); return _remove.apply(this, arguments ); }, enableSelection: function() { return this .attr('unselectable', 'off') .css('MozUserSelect', '') .unbind('selectstart.ui'); }, disableSelection: function() { return this .attr('unselectable', 'on') .css('MozUserSelect', 'none') .bind('selectstart.ui', function() { return false; }); }, scrollParent: function() { var scrollParent; if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { scrollParent = this.parents().filter(function() { return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); }).eq(0); } else { scrollParent = this.parents().filter(function() { return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); }).eq(0); } return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; } }); //Additional selectors $.extend($.expr[':'], { data: function(elem, i, match) { return !!$.data(elem, match[3]); }, focusable: function(element) { var nodeName = element.nodeName.toLowerCase(), tabIndex = $.attr(element, 'tabindex'); return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' == nodeName || 'area' == nodeName ? element.href || !isNaN(tabIndex) : !isNaN(tabIndex)) // the element and all of its ancestors must be visible // the browser may report that the area is hidden && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; }, tabbable: function(element) { var tabIndex = $.attr(element, 'tabindex'); return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); } }); // $.widget is a factory to create jQuery plugins // taking some boilerplate code out of the plugin code function getter(namespace, plugin, method, args) { function getMethods(type) { var methods = $[namespace][plugin][type] || []; return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); } var methods = getMethods('getter'); if (args.length == 1 && typeof args[0] == 'string') { methods = methods.concat(getMethods('getterSetter')); } return ($.inArray(method, methods) != -1); } $.widget = function(name, prototype) { var namespace = name.split(".")[0]; name = name.split(".")[1]; // create plugin method $.fn[name] = function(options) { var isMethodCall = (typeof options == 'string'), args = Array.prototype.slice.call(arguments, 1); // prevent calls to internal methods if (isMethodCall && options.substring(0, 1) == '_') { return this; } // handle getter methods if (isMethodCall && getter(namespace, name, options, args)) { var instance = $.data(this[0], name); return (instance ? instance[options].apply(instance, args) : undefined); } // handle initialization and non-getter methods return this.each(function() { var instance = $.data(this, name); // constructor (!instance && !isMethodCall && $.data(this, name, new $[namespace][name](this, options))._init()); // method call (instance && isMethodCall && $.isFunction(instance[options]) && instance[options].apply(instance, args)); }); }; // create widget constructor $[namespace] = $[namespace] || {}; $[namespace][name] = function(element, options) { var self = this; this.namespace = namespace; this.widgetName = name; this.widgetEventPrefix = $[namespace][name].eventPrefix || name; this.widgetBaseClass = namespace + '-' + name; this.options = $.extend({}, $.widget.defaults, $[namespace][name].defaults, $.metadata && $.metadata.get(element)[name], options); this.element = $(element) .bind('setData.' + name, function(event, key, value) { if (event.target == element) { return self._setData(key, value); } }) .bind('getData.' + name, function(event, key) { if (event.target == element) { return self._getData(key); } }) .bind('remove', function() { return self.destroy(); }); }; // add widget prototype $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); // TODO: merge getter and getterSetter properties from widget prototype // and plugin prototype $[namespace][name].getterSetter = 'option'; }; $.widget.prototype = { _init: function() {}, destroy: function() { this.element.removeData(this.widgetName) .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') .removeAttr('aria-disabled'); }, option: function(key, value) { var options = key, self = this; if (typeof key == "string") { if (value === undefined) { return this._getData(key); } options = {}; options[key] = value; } $.each(options, function(key, value) { self._setData(key, value); }); }, _getData: function(key) { return this.options[key]; }, _setData: function(key, value) { this.options[key] = value; if (key == 'disabled') { this.element [value ? 'addClass' : 'removeClass']( this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') .attr("aria-disabled", value); } }, enable: function() { this._setData('disabled', false); }, disable: function() { this._setData('disabled', true); }, _trigger: function(type, event, data) { var callback = this.options[type], eventName = (type == this.widgetEventPrefix ? type : this.widgetEventPrefix + type); event = $.Event(event); event.type = eventName; // copy original event properties over to the new event // this would happen if we could call $.event.fix instead of $.Event // but we don't have a way to force an event to be fixed multiple times if (event.originalEvent) { for (var i = $.event.props.length, prop; i;) { prop = $.event.props[--i]; event[prop] = event.originalEvent[prop]; } } this.element.trigger(event, data); return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false || event.isDefaultPrevented()); } }; $.widget.defaults = { disabled: false }; /** Mouse Interaction Plugin **/ $.ui.mouse = { _mouseInit: function() { var self = this; this.element .bind('mousedown.'+this.widgetName, function(event) { return self._mouseDown(event); }) .bind('click.'+this.widgetName, function(event) { if(self._preventClickEvent) { self._preventClickEvent = false; event.stopImmediatePropagation(); return false; } }); // Prevent text selection in IE if ($.browser.msie) { this._mouseUnselectable = this.element.attr('unselectable'); this.element.attr('unselectable', 'on'); } this.started = false; }, // TODO: make sure destroying one instance of mouse doesn't mess with // other instances of mouse _mouseDestroy: function() { this.element.unbind('.'+this.widgetName); // Restore text selection in IE ($.browser.msie && this.element.attr('unselectable', this._mouseUnselectable)); }, _mouseDown: function(event) { // don't let more than one widget handle mouseStart // TODO: figure out why we have to use originalEvent event.originalEvent = event.originalEvent || {}; if (event.originalEvent.mouseHandled) { return; } // we may have missed mouseup (out of window) (this._mouseStarted && this._mouseUp(event)); this._mouseDownEvent = event; var self = this, btnIsLeft = (event.which == 1), elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { return true; } this.mouseDelayMet = !this.options.delay; if (!this.mouseDelayMet) { this._mouseDelayTimer = setTimeout(function() { self.mouseDelayMet = true; }, this.options.delay); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(event) !== false); if (!this._mouseStarted) { event.preventDefault(); return true; } } // these delegates are required to keep context this._mouseMoveDelegate = function(event) { return self._mouseMove(event); }; this._mouseUpDelegate = function(event) { return self._mouseUp(event); }; $(document) .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); // preventDefault() is used to prevent the selection of text here - // however, in Safari, this causes select boxes not to be selectable // anymore, so this fix is needed ($.browser.safari || event.preventDefault()); event.originalEvent.mouseHandled = true; return true; }, _mouseMove: function(event) { // IE mouseup check - mouseup happened when mouse was out of window if ($.browser.msie && !event.button) { return this._mouseUp(event); } if (this._mouseStarted) { this._mouseDrag(event); return event.preventDefault(); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(this._mouseDownEvent, event) !== false); (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); } return !this._mouseStarted; }, _mouseUp: function(event) { $(document) .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); if (this._mouseStarted) { this._mouseStarted = false; this._preventClickEvent = (event.target == this._mouseDownEvent.target); this._mouseStop(event); } return false; }, _mouseDistanceMet: function(event) { return (Math.max( Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY) ) >= this.options.distance ); }, _mouseDelayMet: function(event) { return this.mouseDelayMet; }, // These are placeholder methods, to be overriden by extending plugin _mouseStart: function(event) {}, _mouseDrag: function(event) {}, _mouseStop: function(event) {}, _mouseCapture: function(event) { return true; } }; $.ui.mouse.defaults = { cancel: null, distance: 1, delay: 0 }; })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/multipart/style.css ================================================ /******************************************** AUTHOR: Erwin Aligam WEBSITE: http://www.styleshout.com/ TEMPLATE NAME: Techmania 1.0 TEMPLATE CODE: S-0003 VERSION: 1.1 *******************************************/ /******************************************** HTML ELEMENTS ********************************************/ /* Top elements */ /** { margin:0; padding: 0; }*/ body { background-color: #000; color: #555; font: 78%/ 1.6 Verdana, 'Trebuchet MS', arial, sans-serif; text-align: center; margin: 15px 0; } /* links */ a { color: #213540; background: inherit; text-decoration: none; } a:hover { color: #3e4255; text-decoration: underline; background: inherit; } /* headers */ h1,h2,h3 { font-family: 'Trebuchet MS', Arial, sans-serif; font-weight: bold; } h1 { font-size: 1.5em; margin: 10px 15px; } h2 { font-size: 1.3em; text-transform: uppercase; color: #339900; margin: 10px 15px; } h3 { font-size: 1.1em; color: #333; margin: 16px 0 0 18px; } h1,h2,h3 { padding: 0; } p { line-height: 1.4em; padding: 0 15px; } p.error { color: #CC0033; } ul,ol { margin: 10px 6px; padding: 0 15px; color: #006699; } ul span,ol span { color: #666666; } /* images */ img { border: 2px solid #CCC; } img.float-right { margin: 5px 0px 10px 10px; } img.float-left { margin: 5px 10px 10px 0px; } code { margin: 5px 0; padding: 10px; text-align: left; display: block; overflow: auto; font: 500 1em/ 1.5em 'Lucida Console', 'courier new', monospace; /* white-space: pre; */ background: #FAFAFA; border: 1px solid #EAEAEA; border-left: 5px solid #72A545; } acronym { cursor: help; border-bottom: 1px solid #777; } blockquote { margin: 15px; padding: 0 0 0 32px; background: #FAFAFA url(quote.gif) no-repeat 5px 10px !important; background-position: 8px 10px; border: 1px solid #EAEAEA; border-left: 5px solid #72A545; font-weight: bold; } /* form elements */ fieldset { margin: 12px 12px 18px; padding-left: 6px; border: 1px solid #004080; color: #006699; } fieldset fieldset { border: 1px solid #9ea190; margin: 17px 14px; } form { margin: 10px 15px; padding: 0; } label { font-weight: bold; margin: 5px 3px 0 0; width: 160px; text-align: right; float: left; } legend { font-size: 1.2em; padding: 0 12px; font-weight: 900; background-color: #F9F9F9; } fieldset fieldset legend { font-size: 1em; color: #1a2129; padding: 0 18px; margin-left: 75px; } input { padding: 3px; margin: 4px 0; border: 1px solid #CFCED3; font: normal 1em Verdana, sans-serif; color: #777; } textarea { width: 400px; padding: 4px; font: normal 1em Verdana, sans-serif; border: 1px solid #eee; height: 100px; display: block; color: #777; } input.button { margin: 0; font: bold 12px Arial, Sans-serif; border: 1px solid #EAEAEA; padding: 3px 4px; background: #CCC url(buttonbg.gif) repeat-x left bottom; color: #333; /* color: #339900; */ cursor: pointer; } input.submitbutton { background-color: #006699; color: #FFF; background-image: none; font-weight: 900; border: 1px solid #EAEAEA; margin: 0 0 0 200px; } /* search */ #sidebar #search { background: #f2f2f2; margin: 0 15px; padding: 5px 0; } #sidebar #search img { vertical-align: bottom; } #sidebar #search .textbox { background: #FFF url(input.png) no-repeat top left; border: 1px solid #EAEAEA; font-size: 11px; padding: 3px; width: 110px; } #sidebar #search input.searchbutton { margin: 0; font: bold 100% Arial, Sans-serif; border: 1px solid #CCC; background: #CCC url(buttonbg.gif) repeat-x left bottom; padding: 1px; height: 25px; color: #333; width: 55px; } /***************************** LAYOUT ******************************/ #wrap { margin: 0 auto; padding: 0; text-align: left; background-color: #FFF; width: 790px; } #content-wrap { clear: both; margin: 0; padding: 0; width: 790px; } /* header */ #header { position: relative; clear: left; width: 790px; height: 137px; margin: 0; padding: 0; background: #000 url(headerbg.jpg) no-repeat left bottom; } #header h1#logo-text { float: right; margin: 39px 58px 0 0; padding: 0; font: bolder 3.2em 'Trebuchet MS', Arial, Sans-serif; letter-spacing: -2px; color: #FFF; text-transform: none; /* change the values of top and right to adjust the position of the logo*/ top: 35px; right: 30px; } #header h2#slogan { float: right; margin: 0 38px 0 0; padding: 0; font: bold 1.5em 'Trebuchet MS', Arial, Sans-serif; text-transform: none; letter-spacing: 1px; color: #FFF; clear: both; text-align: right; } #header h1#logo-text span { color: #CFCED3; } /* menu tabs */ #header #header-tabs { position: absolute; top: 0; left: 0; width: 100%; height: 25px; background: #000; font: bold 1.1em Verdana, Tahoma, 'Trebuchet MS', Sans-serif; } #header-tabs ul { margin: 0; padding: 2px 0px 0px 0px; list-style: none; } #header-tabs li { display: inline; margin: 0; padding: 0; } #header-tabs a { float: left; background: url(tableft.gif) no-repeat left top; margin: 0; padding: 0 0 0 4px; text-decoration: none; } #header-tabs a span { float: left; display: block; background: url(tabright.gif) no-repeat right top; padding: 7px 15px 4px 8px; color: #CCC; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ #header-tabs a span { float: none; } /* End IE5-Mac hack */ #header-tabs a:hover span { color: #FFF; } #header-tabs a:hover { background-position: 0% -42px; } #header-tabs a:hover span { background-position: 100% -42px; } #header-tabs #current a { background-position: 0% -42px; } #header-tabs #current a span { background-position: 100% -42px; color: #FFF; } /* main content */ #main { width: 748px; margin: 0; padding: 8px 16px; background-color: #F9F9F9; border-left: 5px solid #000; border-right: 5px solid #000; } #main h1 { padding: 8px 0 3px 25px; text-transform: none; border-bottom: 2px solid #f2f2f2; color: #339900; } /* sidebar */ #sidebar { /* float: right; width: 245px; margin: 0 0 10px 0; padding: 0; background-color: inherit; */ display: none; } #sidebar h1 { padding: 8px 0px 3px 25px; background: url(square_arrow.gif) no-repeat 0% .7em; text-transform: none; color: #339900; } #sidebar ul.sidemenu { list-style: none; margin: 10px 15px; padding: 0; } #sidebar ul.sidemenu li { margin-bottom: 1px; border: 1px solid #f2f2f2; } #sidebar ul.sidemenu a { display: block; font-weight: bold; color: #333; text-decoration: none; padding: 2px 5px 2px 10px; background: #f2f2f2; border-left: 5px solid #CCC; min-height: 18px; } * html body #sidebar ul.sidemenu a { height: 18px; } #sidebar ul.sidemenu a:hover { padding: 2px 5px 2px 10px; background: #f2f2f2; color: #339900; border-left: 5px solid #72A545; } /* footer */ #footer { clear: both; height: 40px; color: #CCC; background: #000; margin: 0; font-size: 92%; } #footer a { text-decoration: none; font-weight: bold; color: #FFF; } #footer #footer-left { width: 68%; float: left; text-align: left; margin: 0; padding: 10px; } #footer #footer-right { width: 25%; float: right; text-align: right; margin: 0; padding: 10px; } /* alignment classes */ .float-left { float: left; } .float-right { float: right; } .align-left { text-align: left; } .align-right { text-align: right; } /* additional classes */ .clear { clear: both; } .hide { display: none; } .gray { color: #CCC; } .comments { color: #333; background: #FFF; text-align: right; border-top: 1px dashed #EFF0F1; border-bottom: 1px dashed #EFF0F1; padding: 5px 0; margin-top: 20px; } html { min-height: 100.1%; } /* ------ one ------------*/ body .mainText { font-family: Arial, Helvetica, sans-serif; font-size: 12px; } #demoText h1,.mainText h1 { font-size: 130%; color: #0099FF; text-decoration: none; font-family: Arial, Helvetica, sans-serif; margin: 5px 4px 5px 24px; background: none; padding: 0; border: none; text-transform: capitalize; } .mainText h2 { font-size: 110%; color: #000033; font-family: Arial, Helvetica, sans-serif; text-decoration: none; background: none; margin: 4px 32px 6px 22px; text-transform: capitalize; } .mainText h3 { font-size: 120%; font-weight: 900; margin: 14px 0 0 0; text-align: center; color: #000033; } .mainText table { width: 95%; border: 1px solid #0099FF; border-collapse: collapse; margin: 18px 7px; } .mainText table td { background-color: #99CCFF; color: #000033; padding: 4px; } .mainText table th { background-color: #000033; color: #99CCFF; padding: 4px; } .mainText .linkPar a { color: #000033; text-decoration: underline; } .mainText .linkPar a:hover { color: #660033; text-decoration: none; font-weight: 900; } .pusher { cursor: pointer; padding: 3px 10px 3px 22px; font-weight: 900; font-size: 14px; } /* ------------- form specific styles are here -------------- */ fieldset { margin: 0; border: 1px solid #C3DE00; padding: 10px; /*border:none; padding:0;*/ color: #7563A5; } legend { background-color: #FFFFFF; text-align: center; color: #097981; padding: 0 12px; } label { text-align: right; width: 298px; border-right: 1px dotted #099; padding-right: 5px; margin: 0 0 8px 0; float: left; clear: left; display: block; color: #7563A5; } label.checkbox,label.textarea { border: none; } label.lgfield { border: none; text-align: center; clear: both; float: none; width: 100%; } fieldset input,fieldset select,fieldset textarea { margin-left: 10px; margin-bottom: 8px; } select.longfield { margin: 0 0 0 115px; } input [type="radio"],input [type="checkbox"] { margin: 2px 0 0 4px; } textarea { width: 250px; float: left; } /*Get Help Form Styles*/ p.formDisclaimer { text-align: center; margin: 32px 24px 12px 0; font-style: italic; } div.buttonWrapper { margin: 28px 0 14px 0; clear: both; text-align: center; } .formspacer { height: 1em; clear: both; } .hideField { display: none; } .pushOpen { height: 18em; } /* ----- error message for field validation ----- */ #stepForm label.warning { text-align: left; width: auto; padding: 0; margin: 0 0 0 10px; float: none; clear: none; display: inline; color: #CC3366; font-size: 10px; border: none; border-top: 1px dotted #CC3366; } div.requiredNotice { width: 140px; float: right; margin: 0 24px 0 0; padding: 0; } h3.stepHeader { text-align: left; font-size: 16px; font-weight: bold; margin: 0 0 24px 24px; color: #676cac; } ul#stepForm,ul#stepForm li { margin: 0; padding: 0; } ul#stepForm li { list-style: none; } /* Form Buttons */ input.submitbutton,.nextbutton,.prevbutton { width: 100px; height: 40px; background-color: #663399; padding: 4px; border: 1px solid #339933; cursor: pointer; text-align: center; color: #FFFFFF; margin: 7px; } input.submitbutton { background-color: #006699; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/radio-checkbox-select-demo.html ================================================ Test for jQuery validate() plugin

        jQuery Validation Plugin Demo

        Validating a form with a radio and checkbox buttons
        Gender
        Family


        Spam

        Some tests with selects





        Back to main page
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tabs/index.html ================================================ jQuery UI tabs integration demo

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/themerollered.html ================================================ jQuery validation plug-in - ThemeRolldered demo
        Please provide your name, email address (won't be published) and a comment

        Validating a complete form

        Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tinymce/index.html ================================================ jQuery Validation plugin: integration with TinyMCE

        TinyMCE and Validation Plugin integration example



        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tinymce/themes/simple/editor_template.js ================================================ (function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.documentBaseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})(); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tinymce/themes/simple/langs/en.js ================================================ tinyMCE.addI18n('en.simple',{ bold_desc:"Bold (Ctrl+B)", italic_desc:"Italic (Ctrl+I)", underline_desc:"Underline (Ctrl+U)", striketrough_desc:"Strikethrough", bullist_desc:"Unordered list", numlist_desc:"Ordered list", undo_desc:"Undo (Ctrl+Z)", redo_desc:"Redo (Ctrl+Y)", cleanup_desc:"Cleanup messy code" }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tinymce/themes/simple/skins/default/ui.css ================================================ /* Reset */ .defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} /* Containers */ .defaultSimpleSkin {position:relative} .defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;} .defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;} .defaultSimpleSkin .mceToolbar {height:24px;} /* Layout */ .defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px} .defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} /* Button */ .defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px} .defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} .defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0} .defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} /* Separator */ .defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px} /* Theme */ .defaultSimpleSkin span.mce_bold {background-position:0 0} .defaultSimpleSkin span.mce_italic {background-position:-60px 0} .defaultSimpleSkin span.mce_underline {background-position:-140px 0} .defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0} .defaultSimpleSkin span.mce_undo {background-position:-160px 0} .defaultSimpleSkin span.mce_redo {background-position:-100px 0} .defaultSimpleSkin span.mce_cleanup {background-position:-40px 0} .defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} .defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0} ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/demo/tinymce/tiny_mce.js ================================================ var tinymce={majorVersion:'3',minorVersion:'2.1.1',releaseDate:'2008-11-27',_init:function(){var t=this,d=document,w=window,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isOpera=w.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!w.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);if(w.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;}t.suffix='';nl=d.getElementsByTagName('base');for(i=0;i=items.length){for(i=0,l=base.length;i=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a;})+'"';}if(t=='object'){if(o instanceof Array){for(i=0,v='[';i0?',':'')+s(o[i]);return v+']';}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}';}return''+o;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);function ready(){if(!o.async||x.readyState==4||c++>10000){if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}else w.setTimeout(ready,10);};if(!o.async)return ready();t=w.setTimeout(ready,10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,sr;e=t.get(e);p=t.getPos(e);sr=t.getSize(e);return{x:p.x,y:p.y,w:sr.w,h:sr.h};},getSize:function(e){var t=this,w,h;e=t.get(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName.toUpperCase()==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(e&&this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n,xp;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(!t.selectorRe)t.selectorRe=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;;if(tinymce.isAir){each(tinymce.explode(pa),function(v){if(!(xp=t.cache[v])){xp='';each(v.split(' '),function(v){v=t.selectorRe.exec(v);xp+=v[1]?'//'+v[1]:'//*';if(v[2])xp+="[@id='"+v[2]+"']";if(v[3]){each(v[3].split('.'),function(n){xp+="[@class = '"+n+"' or contains(concat(' ', @class, ' '), ' "+n+" ')]";});}});t.cache[v]=xp;}xp=t.doc.evaluate(xp,s,null,4,null);while(n=xp.iterateNext())o.push(n);});return o;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;t.setAttribs(e,a);if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(!e||!n)return;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(!is(v,'string')){each(v,function(v,n){t.setStyle(e,n,v);});return;}if(s.keep_values){if(v&&!t._isRes(v))e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;case"shape":e.setAttribute('mce_style',v);break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e||e.nodeType!==1)return false;if(!is(dv))dv='';if(/^(src|href|style|coords|shape)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}if(isIE&&t.props[n]){v=e[t.props[n]];v=v&&v.nodeValue?v.nodeValue:v;}if(!v)v=e.getAttribute(n,2);if(n==='style'){v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values&&!t._isRes(v))e.setAttribute('mce_style',v);}}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0'||v===20)v='';break;case'width':case'height':case'vspace':case'checked':case'disabled':case'readonly':if(v===0)v='';break;case'hspace':if(v===-1)v='';break;case'maxlength':case'tabindex':if(v===32768||v===2147483647||v==='32768')v='';break;case'compact':case'noshade':case'nowrap':if(v===65535)return n;return dv;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v!==undefined&&v!==null&&v!=='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};st=st.replace(/&(#?[a-z0-9]+);/g,'&$1_MCE_SEMI_');each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/_MCE_SEMI_/g,';');v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null)+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){if(tinymce.isGecko&&k.indexOf('-moz-')===0)return;switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:tinymce._addVer(u)});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return!e||e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='
        '+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='
        '+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/

        <\/p>|]+)><\/p>|/gi,' 

        ');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/

        ]+)>|

        /g,'

        ');h=h.replace(/<\/p>/g,'
        ');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x|]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|]+)>/gi,'<$1i$2>');}else if(isIE){h=h.replace(/'/g,''');h=h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,'');}h=h.replace(/]+)\/>|/gi,'');if(s.keep_values){if(/)/g,'\n');s=s.replace(/^[\r\n]*|[\r\n]*$/g,'');s=s.replace(/^\s*(\/\/\s*|\]\]>|-->|\]\]-->)\s*$/g,'');return s;};h=h.replace(/]+|)>([\s\S]*?)<\/script>/g,function(v,a,b){b=trim(b);if(!a)a=' type="text/javascript"';if(b)b='';return''+b+'';});h=h.replace(/]+|)>([\s\S]*?)<\/style>/g,function(v,a,b){b=trim(b);return''+b+'';});}h=h.replace(//g,'');h=h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(t._isRes(c))return m;if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'&&b!='shape'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e,n,v;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;n=e.firstChild;v='';if(n){do{v+=n.nodeValue;}while(n.nextSibling);}return v||s;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.get(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);},_isRes:function(c){return/^(top|left|bottom|right|width|height)/i.test(c)||/;\s*(top|left|bottom|right|width|height)/i.test(c);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;if(e.domLoaded)return;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded){Event.domLoaded=1;return;}if(isIE&&document.location.protocol!='https:'){document.write('';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='';if(tinymce.relaxedDomain){if(isIE||(tinymce.isOpera&&parseFloat(opera.version())>=9.5))u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{if(!s.readonly)d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);if(!s.readonly)b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,element_format:s.element_format,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;if(!s.readonly)t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('','g'),'');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'
        ');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='
        '+o.content+'
        ';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
        [\r\n]*)$/,'');});}if(isGecko&&!s.readonly){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this,ce=t.settings.content_editable;if(!sf){if(!ce&&(!isIE||t.selection.getNode().ownerDocument!=t.getDoc()))t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language||'en',i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[(this.settings.language||'en')+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o,st;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){st=o.func.call(o.scope,ui,val);if(st!==true){t.onExecCommand.dispatch(t,cmd,ui,val,a);return st;}}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryStateCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;if(e){o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;}},save:function(o){var t=this,e=t.getElement(),h,f;if(!e||!t.initialized)return;o=o||{};o.save=true;if(!o.no_events){t.undoManager.typing=0;t.undoManager.add();}o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'
        ');o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o.content=h;if(!o.no_events)t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();if(!t.settings.content_editable){Event.clear(t.getWin());Event.clear(t.getDoc());}Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getBody(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getBody(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko&&!s.readonly){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())try{d.execCommand("useCSS",0,true);}catch(ex){}}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){var c=e.keyCode;if((c>=33&&c<=36)||(c>=37&&c<=40)||c==13||c==45||c==46||c==8||(tinymce.isMac&&(c==91||c==93))||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'']);t.addShortcut('ctrl+7','',['FormatBlock',false,'

        ']);t.addShortcut('ctrl+8','',['FormatBlock',false,'

        ']);t.addShortcut('ctrl+9','',['FormatBlock',false,'
        ']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(tinymce.isMac&&o.ctrl!=e.metaKey)return;else if(!tinymce.isMac&&o.ctrl!=e.ctrlKey)return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':n.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(n,'mce_style','');dom.setAttrib(n,'mce_name','span');break;}});}else if(o.set){each(t.dom.select('table,span',o.node).reverse(),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onSetContent.add(function(ed,o){if(o.initial)convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function process(no){var n,sp,nl,x;if(!s.inline_styles)return;nl=t.dom.select('font',no);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}};t.onPreProcess.add(function(ed,o){if(o.get)process(o.node);});t.onSetContent.add(function(ed,o){if(o.initial)process(o.node);});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;function isBlock(n){return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName);};tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,s=ed.selection,e=ed.dom.getParent(s.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else{if(ed.settings.convert_fonts_to_spans)t._applyInlineStyle('span',{style:{fontFamily:v}});else ed.getDoc().execCommand('FontName',false,v);}},FontSize:function(u,v){var ed=this.editor,s=ed.settings,fc,fs;if(s.convert_fonts_to_spans&&v>=1&&v<=7){fs=tinymce.explode(s.font_size_style_values);fc=tinymce.explode(s.font_size_classes);if(fc)v=fc[v-1]||v;else v=fs[v-1]||v;}if(v>=1&&v<=7)ed.getDoc().execCommand('FontSize',false,v);else this._applyInlineStyle('span',{style:{fontSize:v}});},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontSize;if(!v&&(isOpera||isWebKit)){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return v||this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontFamily.replace(/, /g,',').replace(/[\'\"]/g,'').toLowerCase();if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(bl||n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(bl&&/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(bl||n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('
        ');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if((e=t.getSelectedElement())&&!ed.settings.force_span_wrappers)set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(ed.settings.force_span_wrappers&&p.nodeName!='SPAN')return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},ForeColor:function(ui,v){var ed=this.editor;if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{color:v}});return;}else ed.getDoc().execCommand('ForeColor',false,v);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{backgroundColor:val}});return;}function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,bl,nb,b;function isBlock(n){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);};bl=dom.getParent(s.getNode(),function(n){return isBlock(n);});if(bl){if((isIE&&isBlock(bl.parentNode))||bl.nodeName=='DIV'){nb=ed.dom.create(val);each(dom.getAttribs(bl),function(v){dom.setAttrib(nb,v.nodeName,dom.getAttrib(bl,v.nodeName));});b=s.getBookmark();dom.replace(nb,bl,1);s.moveToBookmark(b);ed.nodeChanged();return;}}val=ed.settings.forced_root_block?(val||'

        '):val;if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n=ed.selection.getNode();if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!ed.settings.inline_styles&&!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE'));},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),isBlock);eb=dom.getParent(s.getEnd(),isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_applyInlineStyle:function(na,at,op){var t=this,ed=t.editor,dom=ed.dom,bm,lo={},kh;na=na.toUpperCase();if(op&&op.check_classes&&at['class'])op.check_classes.push(at['class']);function replaceFonts(){var bm;each(dom.select(tinymce.isWebKit&&!tinymce.isAir?'span':'font'),function(n){if(n.style.fontFamily=='mceinline'||n.face=='mceinline'){if(!bm)bm=ed.selection.getBookmark();at._mce_new='1';dom.replace(dom.create(na,at),n,1);}});each(dom.select(na),function(n){if(n.getAttribute('_mce_new')){function removeStyle(n){if(n.nodeType==1){each(at.style,function(v,k){dom.setStyle(n,k,'');});if(at['class']&&n.className&&op){each(op.check_classes,function(c){if(dom.hasClass(n,c))dom.removeClass(n,c);});}}};each(dom.select(na,n),removeStyle);if(n.parentNode&&n.parentNode.nodeType==1&&n.parentNode.childNodes.length==1)removeStyle(n.parentNode);dom.getParent(n.parentNode,function(pn){if(pn.nodeType==1){if(at.style){each(at.style,function(v,k){var sv;if(!lo[k]&&(sv=dom.getStyle(pn,k))){if(sv===v)dom.setStyle(n,k,'');lo[k]=1;}});}if(at['class']&&pn.className&&op){each(op.check_classes,function(c){if(dom.hasClass(pn,c))dom.removeClass(n,c);});}}return false;});n.removeAttribute('_mce_new');}});each(dom.select(na).reverse(),function(n){var c=0;each(dom.getAttribs(n),function(an){if(an.nodeName.substring(0,1)!='_'&&dom.getAttrib(n,an.nodeName)!=''){c++;}});if(c==0)dom.remove(n,1);});ed.selection.moveToBookmark(bm);return!!bm;};ed.focus();ed.getDoc().execCommand('FontName',false,'mceinline');replaceFonts();if(kh=t._applyInlineStyle.keyhandler){ed.onKeyUp.remove(kh);ed.onKeyPress.remove(kh);ed.onKeyDown.remove(kh);ed.onSetContent.remove(t._applyInlineStyle.chandler);}if(ed.selection.isCollapsed()){t._pendingStyles=tinymce.extend(t._pendingStyles||{},at.style);t._applyInlineStyle.chandler=ed.onSetContent.add(function(){delete t._pendingStyles;});t._applyInlineStyle.keyhandler=kh=function(e){if(t._pendingStyles){at.style=t._pendingStyles;delete t._pendingStyles;}if(replaceFonts()){ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);}if(e.type=='keyup')ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);};ed.onKeyDown.add(kh);ed.onKeyPress.add(kh);ed.onKeyUp.add(kh);}else t._pendingStyles=0;},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),isBlock);eb=dom.getParent(en||s.getEnd(),isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0&&(t.index==0||t.index==t.data.length)?t.index-1:t.index];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index','gi');t.rePadd=new RegExp(']+)><\\\/p>|]+)\\\/>|]+)>\\s+<\\\/p>|

        <\\\/p>||

        \\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp(']+)>[\\s\\u00a0]+<\\\/p>|

        [\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp(']+)>( | )<\\\/p>|

        ( | )<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp(']+)>\\s*
        \\s*<\\\/p>|

        \\s*
        \\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*
        \\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2>
        ');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2>
        ');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0');o.content=o.content.replace(t.reTrailBr,'');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('
        ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i,n,eid;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){if(r.startContainer.nodeType==1&&(n=r.startContainer.childNodes[r.startOffset])&&n.nodeType==1){eid=n.getAttribute("id");n.setAttribute("id","__mce");}else{if(ed.dom.getParent(r.startContainer,function(e){return e===b;})){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}}}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=b.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}else if(!isIE&&(n=ed.dom.get('__mce'))){if(eid)n.setAttribute('id',eid);else n.removeAttribute('id');r=d.createRange();r.setStartBefore(n);r.setEndBefore(n);se.setRng(r);}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,dom=ed.dom,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=dom.getViewPort(ed.getWin()),y,ch,car;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn===en&&/^(TD|TH)$/.test(sn.nodeName)){dom.remove(sn.firstChild);ed.dom.add(sn,se.element,null,'
        ');aft=ed.dom.add(sn,se.element,null,'
        ');r=d.createRange();r.selectNodeContents(aft);r.collapse(1);ed.selection.setRng(r);return false;}if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='
        ';function appendStyles(e,en){var nl=[],nn,n,i;e.innerHTML='';if(se.keep_styles){n=en;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)){nn=n.cloneNode(false);dom.setAttrib(nn,'id','');nl.push(nn);}}while(n=n.parentNode);}if(nl.length>0){for(i=nl.length-1,nn=e;i>=0;i--)nn=nn.appendChild(nl[i]);nl[0].innerHTML=isOpera?' ':'
        ';return nl[0];}else e.innerHTML=isOpera?' ':'
        ';};if(isEmpty(aft))car=appendStyles(aft,en);if(isOpera&&parseFloat(opera.version())<9.5){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();function first(n){return d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode()||n;};r=d.createRange();r.selectNodeContents(isGecko?first(car||aft):car||aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(yvp.y+vp.h){ed.getWin().scrollTo(0,y]*?>/g, ' ').replace(/ | /gi, ' ') // remove punctuation .replace(/[.(),;:!?%#$'"_+=\/-]*/g,''); } jQuery.validator.addMethod("maxWords", function(value, element, params) { return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params; }, jQuery.validator.format("Please enter {0} words or less.")); jQuery.validator.addMethod("minWords", function(value, element, params) { return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params; }, jQuery.validator.format("Please enter at least {0} words.")); jQuery.validator.addMethod("rangeWords", function(value, element, params) { var valueStripped = stripHtml(value); var regex = /\b\w+\b/g; return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1]; }, jQuery.validator.format("Please enter between {0} and {1} words.")); })(); jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) { return this.optional(element) || /^[a-z\-.,()'\"\s]+$/i.test(value); }, "Letters or punctuation only please"); jQuery.validator.addMethod("alphanumeric", function(value, element) { return this.optional(element) || /^\w+$/i.test(value); }, "Letters, numbers, and underscores only please"); jQuery.validator.addMethod("lettersonly", function(value, element) { return this.optional(element) || /^[a-z]+$/i.test(value); }, "Letters only please"); jQuery.validator.addMethod("nowhitespace", function(value, element) { return this.optional(element) || /^\S+$/i.test(value); }, "No white space please"); jQuery.validator.addMethod("ziprange", function(value, element) { return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value); }, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx"); jQuery.validator.addMethod("zipcodeUS", function(value, element) { return this.optional(element) || /\d{5}-\d{4}$|^\d{5}$/.test(value) }, "The specified US ZIP Code is invalid"); jQuery.validator.addMethod("integer", function(value, element) { return this.optional(element) || /^-?\d+$/.test(value); }, "A positive or negative non-decimal number please"); /** * Return true, if the value is a valid vehicle identification number (VIN). * * Works with all kind of text inputs. * * @example * @desc Declares a required input element whose value must be a valid vehicle identification number. * * @name jQuery.validator.methods.vinUS * @type Boolean * @cat Plugins/Validate/Methods */ jQuery.validator.addMethod("vinUS", function(v) { if (v.length != 17) { return false; } var i, n, d, f, cd, cdv; var LL = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"]; var VL = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9]; var FL = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2]; var rs = 0; for(i = 0; i < 17; i++){ f = FL[i]; d = v.slice(i,i+1); if (i == 8) { cdv = d; } if (!isNaN(d)) { d *= f; } else { for (n = 0; n < LL.length; n++) { if (d.toUpperCase() === LL[n]) { d = VL[n]; d *= f; if (isNaN(cdv) && n == 8) { cdv = LL[n]; } break; } } } rs += d; } cd = rs % 11; if (cd == 10) { cd = "X"; } if (cd == cdv) { return true; } return false; }, "The specified vehicle identification number (VIN) is invalid."); /** * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy. * * @example jQuery.validator.methods.date("01/01/1900") * @result true * * @example jQuery.validator.methods.date("01/13/1990") * @result false * * @example jQuery.validator.methods.date("01.01.1900") * @result false * * @example * @desc Declares an optional input element whose value must be a valid date. * * @name jQuery.validator.methods.dateITA * @type Boolean * @cat Plugins/Validate/Methods */ jQuery.validator.addMethod("dateITA", function(value, element) { var check = false; var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/; if( re.test(value)){ var adata = value.split('/'); var gg = parseInt(adata[0],10); var mm = parseInt(adata[1],10); var aaaa = parseInt(adata[2],10); var xdata = new Date(aaaa,mm-1,gg); if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) ) check = true; else check = false; } else check = false; return this.optional(element) || check; }, "Please enter a correct date"); jQuery.validator.addMethod("dateNL", function(value, element) { return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value); }, "Vul hier een geldige datum in."); jQuery.validator.addMethod("time", function(value, element) { return this.optional(element) || /^([0-1]\d|2[0-3]):([0-5]\d)$/.test(value); }, "Please enter a valid time, between 00:00 and 23:59"); jQuery.validator.addMethod("time12h", function(value, element) { return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(value); }, "Please enter a valid time, between 00:00 am and 12:00 pm"); /** * matches US phone number format * * where the area code may not start with 1 and the prefix may not start with 1 * allows '-' or ' ' as a separator and allows parens around area code * some people may want to put a '1' in front of their number * * 1(212)-999-2345 or * 212 999 2344 or * 212-999-0983 * * but not * 111-123-5434 * and not * 212 123 4567 */ jQuery.validator.addMethod("phoneUS", function(phone_number, element) { phone_number = phone_number.replace(/\s+/g, ""); return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/); }, "Please specify a valid phone number"); jQuery.validator.addMethod('phoneUK', function(phone_number, element) { phone_number = phone_number.replace(/\(|\)|\s+|-/g,''); return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/); }, 'Please specify a valid phone number'); jQuery.validator.addMethod('mobileUK', function(phone_number, element) { phone_number = phone_number.replace(/\s+|-/g,''); return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/); }, 'Please specify a valid mobile number'); //Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers jQuery.validator.addMethod('phonesUK', function(phone_number, element) { phone_number = phone_number.replace(/\s+|-/g,''); return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/); }, 'Please specify a valid uk phone number'); // On the above three UK functions, do the following server side processing: // Compare with ^((?:00\s?|\+)(44)\s?)?\(?0?(?:\)\s?)?([1-9]\d{1,4}\)?[\d\s]+) // Extract $2 and set $prefix to '+44' if $2 is '44' otherwise set $prefix to '0' // Extract $3 and remove spaces and parentheses. Phone number is combined $2 and $3. // A number of very detailed GB telephone number RegEx patterns can also be found at: // http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_UK_Telephone_Numbers //Matches UK postcode. based on http://snipplr.com/view/3152/postcode-validation/ jQuery.validator.addMethod('postcodeUK', function(postcode, element) { postcode = (postcode.toUpperCase()).replace(/\s+/g,''); return this.optional(element) || postcode.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/) || postcode.match(/^(GIR)(0AA)$/) || postcode.match(/^(BFPO)(\d{1,4})$/) || postcode.match(/^(BFPO)(C\/O\d{1,3})$/); }, 'Please specify a valid postcode'); // TODO check if value starts with <, otherwise don't try stripping anything jQuery.validator.addMethod("strippedminlength", function(value, element, param) { return jQuery(value).text().length >= param; }, jQuery.validator.format("Please enter at least {0} characters")); // same as email, but TLD is optional jQuery.validator.addMethod("email2", function(value, element, param) { return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); }, jQuery.validator.messages.email); // same as url, but TLD is optional jQuery.validator.addMethod("url2", function(value, element, param) { return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); }, jQuery.validator.messages.url); // NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator // Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0 // Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings) jQuery.validator.addMethod("creditcardtypes", function(value, element, param) { if (/[^0-9-]+/.test(value)) { return false; } value = value.replace(/\D/g, ""); var validTypes = 0x0000; if (param.mastercard) validTypes |= 0x0001; if (param.visa) validTypes |= 0x0002; if (param.amex) validTypes |= 0x0004; if (param.dinersclub) validTypes |= 0x0008; if (param.enroute) validTypes |= 0x0010; if (param.discover) validTypes |= 0x0020; if (param.jcb) validTypes |= 0x0040; if (param.unknown) validTypes |= 0x0080; if (param.all) validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080; if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard return value.length == 16; } if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa return value.length == 16; } if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex return value.length == 15; } if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub return value.length == 14; } if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute return value.length == 15; } if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover return value.length == 16; } if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb return value.length == 16; } if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb return value.length == 15; } if (validTypes & 0x0080) { //unknown return true; } return false; }, "Please enter a valid credit card number."); jQuery.validator.addMethod("ipv4", function(value, element, param) { return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value); }, "Please enter a valid IP v4 address."); jQuery.validator.addMethod("ipv6", function(value, element, param) { return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value); }, "Please enter a valid IP v6 address."); /** * Return true if the field value matches the given format RegExp * * @example jQuery.validator.methods.pattern("AR1004",element,/^AR\d{4}$/) * @result true * * @example jQuery.validator.methods.pattern("BR1004",element,/^AR\d{4}$/) * @result false * * @name jQuery.validator.methods.pattern * @type Boolean * @cat Plugins/Validate/Methods */ jQuery.validator.addMethod("pattern", function(value, element, param) { if (this.optional(element)) { return true; } if (typeof param === 'string') { param = new RegExp('^(?:' + param + ')$'); } return param.test(value); }, "Invalid format."); /* * Lets you say "at least X inputs that match selector Y must be filled." * * The end result is that neither of these inputs: * * * * * ...will validate unless at least one of them is filled. * * partnumber: {require_from_group: [1,".productinfo"]}, * description: {require_from_group: [1,".productinfo"]} * */ jQuery.validator.addMethod("require_from_group", function(value, element, options) { var validator = this; var selector = options[1]; var validOrNot = $(selector, element.form).filter(function() { return validator.elementValue(this); }).length >= options[0]; if(!$(element).data('being_validated')) { var fields = $(selector, element.form); fields.data('being_validated', true); fields.valid(); fields.data('being_validated', false); } return validOrNot; }, jQuery.format("Please fill at least {0} of these fields.")); /* * Lets you say "either at least X inputs that match selector Y must be filled, * OR they must all be skipped (left blank)." * * The end result, is that none of these inputs: * * * * * * ...will validate unless either at least two of them are filled, * OR none of them are. * * partnumber: {skip_or_fill_minimum: [2,".productinfo"]}, * description: {skip_or_fill_minimum: [2,".productinfo"]}, * color: {skip_or_fill_minimum: [2,".productinfo"]} * */ jQuery.validator.addMethod("skip_or_fill_minimum", function(value, element, options) { var validator = this; numberRequired = options[0]; selector = options[1]; var numberFilled = $(selector, element.form).filter(function() { return validator.elementValue(this); }).length; var valid = numberFilled >= numberRequired || numberFilled === 0; if(!$(element).data('being_validated')) { var fields = $(selector, element.form); fields.data('being_validated', true); fields.valid(); fields.data('being_validated', false); } return valid; }, jQuery.format("Please either skip these fields or fill at least {0} of them.")); // Accept a value from a file input based on a required mimetype jQuery.validator.addMethod("accept", function(value, element, param) { // Split mime on commas incase we have multiple types we can accept var typeParam = typeof param === "string" ? param.replace(/,/g, '|') : "image/*", optionalValue = this.optional(element), i, file; // Element is optional if(optionalValue) { return optionalValue; } if($(element).attr("type") === "file") { // If we are using a wildcard, make it regex friendly typeParam = typeParam.replace("*", ".*"); // Check if the element has a FileList before checking each file if(element.files && element.files.length) { for(i = 0; i < element.files.length; i++) { file = element.files[i]; // Grab the mimtype from the loaded file, verify it matches if(!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) { return false; } } } } // Either return true because we've validated each file, or because the // browser does not support element.files and the FileList feature return true; }, jQuery.format("Please enter a value with a valid mimetype.")); // Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept jQuery.validator.addMethod("extension", function(value, element, param) { param = typeof param === "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif"; return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); }, jQuery.format("Please enter a value with a valid extension.")); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/dist/jquery.validate.js ================================================ /*! jQuery Validation Plugin - v1.10.0 - 9/7/2012 * https://github.com/jzaefferer/jquery-validation * Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */ (function($) { $.extend($.fn, { // http://docs.jquery.com/Plugins/Validation/validate validate: function( options ) { // if nothing is selected, return nothing; can't chain anyway if (!this.length) { if (options && options.debug && window.console) { console.warn( "nothing selected, can't validate, returning nothing" ); } return; } // check if a validator for this form was already created var validator = $.data(this[0], 'validator'); if ( validator ) { return validator; } // Add novalidate tag if HTML5. this.attr('novalidate', 'novalidate'); validator = new $.validator( options, this[0] ); $.data(this[0], 'validator', validator); if ( validator.settings.onsubmit ) { this.validateDelegate( ":submit", "click", function(ev) { if ( validator.settings.submitHandler ) { validator.submitButton = ev.target; } // allow suppressing validation by adding a cancel class to the submit button if ( $(ev.target).hasClass('cancel') ) { validator.cancelSubmit = true; } }); // validate the form on submit this.submit( function( event ) { if ( validator.settings.debug ) { // prevent form submit to be able to see console output event.preventDefault(); } function handle() { var hidden; if ( validator.settings.submitHandler ) { if (validator.submitButton) { // insert a hidden input as a replacement for the missing submit button hidden = $("").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); } validator.settings.submitHandler.call( validator, validator.currentForm, event ); if (validator.submitButton) { // and clean up afterwards; thanks to no-block-scope, hidden can be referenced hidden.remove(); } return false; } return true; } // prevent submit for invalid forms or custom submit handlers if ( validator.cancelSubmit ) { validator.cancelSubmit = false; return handle(); } if ( validator.form() ) { if ( validator.pendingRequest ) { validator.formSubmitted = true; return false; } return handle(); } else { validator.focusInvalid(); return false; } }); } return validator; }, // http://docs.jquery.com/Plugins/Validation/valid valid: function() { if ( $(this[0]).is('form')) { return this.validate().form(); } else { var valid = true; var validator = $(this[0].form).validate(); this.each(function() { valid &= validator.element(this); }); return valid; } }, // attributes: space seperated list of attributes to retrieve and remove removeAttrs: function(attributes) { var result = {}, $element = this; $.each(attributes.split(/\s/), function(index, value) { result[value] = $element.attr(value); $element.removeAttr(value); }); return result; }, // http://docs.jquery.com/Plugins/Validation/rules rules: function(command, argument) { var element = this[0]; if (command) { var settings = $.data(element.form, 'validator').settings; var staticRules = settings.rules; var existingRules = $.validator.staticRules(element); switch(command) { case "add": $.extend(existingRules, $.validator.normalizeRule(argument)); staticRules[element.name] = existingRules; if (argument.messages) { settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); } break; case "remove": if (!argument) { delete staticRules[element.name]; return existingRules; } var filtered = {}; $.each(argument.split(/\s/), function(index, method) { filtered[method] = existingRules[method]; delete existingRules[method]; }); return filtered; } } var data = $.validator.normalizeRules( $.extend( {}, $.validator.metadataRules(element), $.validator.classRules(element), $.validator.attributeRules(element), $.validator.staticRules(element) ), element); // make sure required is at front if (data.required) { var param = data.required; delete data.required; data = $.extend({required: param}, data); } return data; } }); // Custom selectors $.extend($.expr[":"], { // http://docs.jquery.com/Plugins/Validation/blank blank: function(a) {return !$.trim("" + a.value);}, // http://docs.jquery.com/Plugins/Validation/filled filled: function(a) {return !!$.trim("" + a.value);}, // http://docs.jquery.com/Plugins/Validation/unchecked unchecked: function(a) {return !a.checked;} }); // constructor for validator $.validator = function( options, form ) { this.settings = $.extend( true, {}, $.validator.defaults, options ); this.currentForm = form; this.init(); }; $.validator.format = function(source, params) { if ( arguments.length === 1 ) { return function() { var args = $.makeArray(arguments); args.unshift(source); return $.validator.format.apply( this, args ); }; } if ( arguments.length > 2 && params.constructor !== Array ) { params = $.makeArray(arguments).slice(1); } if ( params.constructor !== Array ) { params = [ params ]; } $.each(params, function(i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); }); return source; }; $.extend($.validator, { defaults: { messages: {}, groups: {}, rules: {}, errorClass: "error", validClass: "valid", errorElement: "label", focusInvalid: true, errorContainer: $( [] ), errorLabelContainer: $( [] ), onsubmit: true, ignore: ":hidden", ignoreTitle: false, onfocusin: function(element, event) { this.lastActive = element; // hide error label and remove error class on focus if enabled if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { if ( this.settings.unhighlight ) { this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); } this.addWrapper(this.errorsFor(element)).hide(); } }, onfocusout: function(element, event) { if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { this.element(element); } }, onkeyup: function(element, event) { if ( event.which === 9 && this.elementValue(element) === '' ) { return; } else if ( element.name in this.submitted || element === this.lastActive ) { this.element(element); } }, onclick: function(element, event) { // click on selects, radiobuttons and checkboxes if ( element.name in this.submitted ) { this.element(element); } // or option elements, check parent select in that case else if (element.parentNode.name in this.submitted) { this.element(element.parentNode); } }, highlight: function(element, errorClass, validClass) { if (element.type === 'radio') { this.findByName(element.name).addClass(errorClass).removeClass(validClass); } else { $(element).addClass(errorClass).removeClass(validClass); } }, unhighlight: function(element, errorClass, validClass) { if (element.type === 'radio') { this.findByName(element.name).removeClass(errorClass).addClass(validClass); } else { $(element).removeClass(errorClass).addClass(validClass); } } }, // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults setDefaults: function(settings) { $.extend( $.validator.defaults, settings ); }, messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date (ISO).", number: "Please enter a valid number.", digits: "Please enter only digits.", creditcard: "Please enter a valid credit card number.", equalTo: "Please enter the same value again.", maxlength: $.validator.format("Please enter no more than {0} characters."), minlength: $.validator.format("Please enter at least {0} characters."), rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), range: $.validator.format("Please enter a value between {0} and {1}."), max: $.validator.format("Please enter a value less than or equal to {0}."), min: $.validator.format("Please enter a value greater than or equal to {0}.") }, autoCreateRanges: false, prototype: { init: function() { this.labelContainer = $(this.settings.errorLabelContainer); this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); this.submitted = {}; this.valueCache = {}; this.pendingRequest = 0; this.pending = {}; this.invalid = {}; this.reset(); var groups = (this.groups = {}); $.each(this.settings.groups, function(key, value) { $.each(value.split(/\s/), function(index, name) { groups[name] = key; }); }); var rules = this.settings.rules; $.each(rules, function(key, value) { rules[key] = $.validator.normalizeRule(value); }); function delegate(event) { var validator = $.data(this[0].form, "validator"), eventType = "on" + event.type.replace(/^validate/, ""); if (validator.settings[eventType]) { validator.settings[eventType].call(validator, this[0], event); } } $(this.currentForm) .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " + "[type='number'], [type='search'] ,[type='tel'], [type='url'], " + "[type='email'], [type='datetime'], [type='date'], [type='month'], " + "[type='week'], [type='time'], [type='datetime-local'], " + "[type='range'], [type='color'] ", "focusin focusout keyup", delegate) .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); if (this.settings.invalidHandler) { $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); } }, // http://docs.jquery.com/Plugins/Validation/Validator/form form: function() { this.checkForm(); $.extend(this.submitted, this.errorMap); this.invalid = $.extend({}, this.errorMap); if (!this.valid()) { $(this.currentForm).triggerHandler("invalid-form", [this]); } this.showErrors(); return this.valid(); }, checkForm: function() { this.prepareForm(); for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { this.check( elements[i] ); } return this.valid(); }, // http://docs.jquery.com/Plugins/Validation/Validator/element element: function( element ) { element = this.validationTargetFor( this.clean( element ) ); this.lastElement = element; this.prepareElement( element ); this.currentElements = $(element); var result = this.check( element ) !== false; if (result) { delete this.invalid[element.name]; } else { this.invalid[element.name] = true; } if ( !this.numberOfInvalids() ) { // Hide error containers on last error this.toHide = this.toHide.add( this.containers ); } this.showErrors(); return result; }, // http://docs.jquery.com/Plugins/Validation/Validator/showErrors showErrors: function(errors) { if(errors) { // add items to error list and map $.extend( this.errorMap, errors ); this.errorList = []; for ( var name in errors ) { this.errorList.push({ message: errors[name], element: this.findByName(name)[0] }); } // remove items from success list this.successList = $.grep( this.successList, function(element) { return !(element.name in errors); }); } if (this.settings.showErrors) { this.settings.showErrors.call( this, this.errorMap, this.errorList ); } else { this.defaultShowErrors(); } }, // http://docs.jquery.com/Plugins/Validation/Validator/resetForm resetForm: function() { if ( $.fn.resetForm ) { $( this.currentForm ).resetForm(); } this.submitted = {}; this.lastElement = null; this.prepareForm(); this.hideErrors(); this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); }, numberOfInvalids: function() { return this.objectLength(this.invalid); }, objectLength: function( obj ) { var count = 0; for ( var i in obj ) { count++; } return count; }, hideErrors: function() { this.addWrapper( this.toHide ).hide(); }, valid: function() { return this.size() === 0; }, size: function() { return this.errorList.length; }, focusInvalid: function() { if( this.settings.focusInvalid ) { try { $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) .filter(":visible") .focus() // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find .trigger("focusin"); } catch(e) { // ignore IE throwing errors when focusing hidden elements } } }, findLastActive: function() { var lastActive = this.lastActive; return lastActive && $.grep(this.errorList, function(n) { return n.element.name === lastActive.name; }).length === 1 && lastActive; }, elements: function() { var validator = this, rulesCache = {}; // select all valid inputs inside the form (no submit or reset buttons) return $(this.currentForm) .find("input, select, textarea") .not(":submit, :reset, :image, [disabled]") .not( this.settings.ignore ) .filter(function() { if ( !this.name && validator.settings.debug && window.console ) { console.error( "%o has no name assigned", this); } // select only the first element for each name, and only those with rules specified if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { return false; } rulesCache[this.name] = true; return true; }); }, clean: function( selector ) { return $( selector )[0]; }, errors: function() { var errorClass = this.settings.errorClass.replace(' ', '.'); return $( this.settings.errorElement + "." + errorClass, this.errorContext ); }, reset: function() { this.successList = []; this.errorList = []; this.errorMap = {}; this.toShow = $([]); this.toHide = $([]); this.currentElements = $([]); }, prepareForm: function() { this.reset(); this.toHide = this.errors().add( this.containers ); }, prepareElement: function( element ) { this.reset(); this.toHide = this.errorsFor(element); }, elementValue: function( element ) { var type = $(element).attr('type'), val = $(element).val(); if ( type === 'radio' || type === 'checkbox' ) { return $('input[name="' + $(element).attr('name') + '"]:checked').val(); } if ( typeof val === 'string' ) { return val.replace(/\r/g, ""); } return val; }, check: function( element ) { element = this.validationTargetFor( this.clean( element ) ); var rules = $(element).rules(); var dependencyMismatch = false; var val = this.elementValue(element); var result; for (var method in rules ) { var rule = { method: method, parameters: rules[method] }; try { result = $.validator.methods[method].call( this, val, element, rule.parameters ); // if a method indicates that the field is optional and therefore valid, // don't mark it as valid when there are no other rules if ( result === "dependency-mismatch" ) { dependencyMismatch = true; continue; } dependencyMismatch = false; if ( result === "pending" ) { this.toHide = this.toHide.not( this.errorsFor(element) ); return; } if( !result ) { this.formatAndAdd( element, rule ); return false; } } catch(e) { if ( this.settings.debug && window.console ) { console.log("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method", e); } throw e; } } if (dependencyMismatch) { return; } if ( this.objectLength(rules) ) { this.successList.push(element); } return true; }, // return the custom message for the given element and validation method // specified in the element's "messages" metadata customMetaMessage: function(element, method) { if (!$.metadata) { return; } var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata(); return meta && meta.messages && meta.messages[method]; }, // return the custom message for the given element and validation method // specified in the element's HTML5 data attribute customDataMessage: function(element, method) { return $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase())); }, // return the custom message for the given element name and validation method customMessage: function( name, method ) { var m = this.settings.messages[name]; return m && (m.constructor === String ? m : m[method]); }, // return the first defined argument, allowing empty strings findDefined: function() { for(var i = 0; i < arguments.length; i++) { if (arguments[i] !== undefined) { return arguments[i]; } } return undefined; }, defaultMessage: function( element, method) { return this.findDefined( this.customMessage( element.name, method ), this.customDataMessage( element, method ), this.customMetaMessage( element, method ), // title is never undefined, so handle empty string as undefined !this.settings.ignoreTitle && element.title || undefined, $.validator.messages[method], "Warning: No message defined for " + element.name + "" ); }, formatAndAdd: function( element, rule ) { var message = this.defaultMessage( element, rule.method ), theregex = /\$?\{(\d+)\}/g; if ( typeof message === "function" ) { message = message.call(this, rule.parameters, element); } else if (theregex.test(message)) { message = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters); } this.errorList.push({ message: message, element: element }); this.errorMap[element.name] = message; this.submitted[element.name] = message; }, addWrapper: function(toToggle) { if ( this.settings.wrapper ) { toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); } return toToggle; }, defaultShowErrors: function() { var i, elements; for ( i = 0; this.errorList[i]; i++ ) { var error = this.errorList[i]; if ( this.settings.highlight ) { this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); } this.showLabel( error.element, error.message ); } if( this.errorList.length ) { this.toShow = this.toShow.add( this.containers ); } if (this.settings.success) { for ( i = 0; this.successList[i]; i++ ) { this.showLabel( this.successList[i] ); } } if (this.settings.unhighlight) { for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass ); } } this.toHide = this.toHide.not( this.toShow ); this.hideErrors(); this.addWrapper( this.toShow ).show(); }, validElements: function() { return this.currentElements.not(this.invalidElements()); }, invalidElements: function() { return $(this.errorList).map(function() { return this.element; }); }, showLabel: function(element, message) { var label = this.errorsFor( element ); if ( label.length ) { // refresh error/success class label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); // check if we have a generated label, replace the message then if ( label.attr("generated") ) { label.html(message); } } else { // create label label = $("<" + this.settings.errorElement + "/>") .attr({"for": this.idOrName(element), generated: true}) .addClass(this.settings.errorClass) .html(message || ""); if ( this.settings.wrapper ) { // make sure the element is visible, even in IE // actually showing the wrapped element is handled elsewhere label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); } if ( !this.labelContainer.append(label).length ) { if ( this.settings.errorPlacement ) { this.settings.errorPlacement(label, $(element) ); } else { label.insertAfter(element); } } } if ( !message && this.settings.success ) { label.text(""); if ( typeof this.settings.success === "string" ) { label.addClass( this.settings.success ); } else { this.settings.success( label, element ); } } this.toShow = this.toShow.add(label); }, errorsFor: function(element) { var name = this.idOrName(element); return this.errors().filter(function() { return $(this).attr('for') === name; }); }, idOrName: function(element) { return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); }, validationTargetFor: function(element) { // if radio/checkbox, validate first element in group instead if (this.checkable(element)) { element = this.findByName( element.name ).not(this.settings.ignore)[0]; } return element; }, checkable: function( element ) { return (/radio|checkbox/i).test(element.type); }, findByName: function( name ) { return $(this.currentForm).find('[name="' + name + '"]'); }, getLength: function(value, element) { switch( element.nodeName.toLowerCase() ) { case 'select': return $("option:selected", element).length; case 'input': if( this.checkable( element) ) { return this.findByName(element.name).filter(':checked').length; } } return value.length; }, depend: function(param, element) { return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; }, dependTypes: { "boolean": function(param, element) { return param; }, "string": function(param, element) { return !!$(param, element.form).length; }, "function": function(param, element) { return param(element); } }, optional: function(element) { var val = this.elementValue(element); return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; }, startRequest: function(element) { if (!this.pending[element.name]) { this.pendingRequest++; this.pending[element.name] = true; } }, stopRequest: function(element, valid) { this.pendingRequest--; // sometimes synchronization fails, make sure pendingRequest is never < 0 if (this.pendingRequest < 0) { this.pendingRequest = 0; } delete this.pending[element.name]; if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { $(this.currentForm).submit(); this.formSubmitted = false; } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { $(this.currentForm).triggerHandler("invalid-form", [this]); this.formSubmitted = false; } }, previousValue: function(element) { return $.data(element, "previousValue") || $.data(element, "previousValue", { old: null, valid: true, message: this.defaultMessage( element, "remote" ) }); } }, classRuleSettings: { required: {required: true}, email: {email: true}, url: {url: true}, date: {date: true}, dateISO: {dateISO: true}, number: {number: true}, digits: {digits: true}, creditcard: {creditcard: true} }, addClassRules: function(className, rules) { if ( className.constructor === String ) { this.classRuleSettings[className] = rules; } else { $.extend(this.classRuleSettings, className); } }, classRules: function(element) { var rules = {}; var classes = $(element).attr('class'); if ( classes ) { $.each(classes.split(' '), function() { if (this in $.validator.classRuleSettings) { $.extend(rules, $.validator.classRuleSettings[this]); } }); } return rules; }, attributeRules: function(element) { var rules = {}; var $element = $(element); for (var method in $.validator.methods) { var value; // support for in both html5 and older browsers if (method === 'required') { value = $element.get(0).getAttribute(method); // Some browsers return an empty string for the required attribute // and non-HTML5 browsers might have required="" markup if (value === "") { value = true; } // force non-HTML5 browsers to return bool value = !!value; } else { value = $element.attr(method); } if (value) { rules[method] = value; } else if ($element[0].getAttribute("type") === method) { rules[method] = true; } } // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) { delete rules.maxlength; } return rules; }, metadataRules: function(element) { if (!$.metadata) { return {}; } var meta = $.data(element.form, 'validator').settings.meta; return meta ? $(element).metadata()[meta] : $(element).metadata(); }, staticRules: function(element) { var rules = {}; var validator = $.data(element.form, 'validator'); if (validator.settings.rules) { rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; } return rules; }, normalizeRules: function(rules, element) { // handle dependency check $.each(rules, function(prop, val) { // ignore rule when param is explicitly false, eg. required:false if (val === false) { delete rules[prop]; return; } if (val.param || val.depends) { var keepRule = true; switch (typeof val.depends) { case "string": keepRule = !!$(val.depends, element.form).length; break; case "function": keepRule = val.depends.call(element, element); break; } if (keepRule) { rules[prop] = val.param !== undefined ? val.param : true; } else { delete rules[prop]; } } }); // evaluate parameters $.each(rules, function(rule, parameter) { rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; }); // clean number parameters $.each(['minlength', 'maxlength', 'min', 'max'], function() { if (rules[this]) { rules[this] = Number(rules[this]); } }); $.each(['rangelength', 'range'], function() { if (rules[this]) { rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; } }); if ($.validator.autoCreateRanges) { // auto-create ranges if (rules.min && rules.max) { rules.range = [rules.min, rules.max]; delete rules.min; delete rules.max; } if (rules.minlength && rules.maxlength) { rules.rangelength = [rules.minlength, rules.maxlength]; delete rules.minlength; delete rules.maxlength; } } // To support custom messages in metadata ignore rule methods titled "messages" if (rules.messages) { delete rules.messages; } return rules; }, // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} normalizeRule: function(data) { if( typeof data === "string" ) { var transformed = {}; $.each(data.split(/\s/), function() { transformed[this] = true; }); data = transformed; } return data; }, // http://docs.jquery.com/Plugins/Validation/Validator/addMethod addMethod: function(name, method, message) { $.validator.methods[name] = method; $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; if (method.length < 3) { $.validator.addClassRules(name, $.validator.normalizeRule(name)); } }, methods: { // http://docs.jquery.com/Plugins/Validation/Methods/required required: function(value, element, param) { // check if dependency is met if ( !this.depend(param, element) ) { return "dependency-mismatch"; } if ( element.nodeName.toLowerCase() === "select" ) { // could be an array for select-multiple or a string, both are fine this way var val = $(element).val(); return val && val.length > 0; } if ( this.checkable(element) ) { return this.getLength(value, element) > 0; } return $.trim(value).length > 0; }, // http://docs.jquery.com/Plugins/Validation/Methods/remote remote: function(value, element, param) { if ( this.optional(element) ) { return "dependency-mismatch"; } var previous = this.previousValue(element); if (!this.settings.messages[element.name] ) { this.settings.messages[element.name] = {}; } previous.originalMessage = this.settings.messages[element.name].remote; this.settings.messages[element.name].remote = previous.message; param = typeof param === "string" && {url:param} || param; if ( this.pending[element.name] ) { return "pending"; } if ( previous.old === value ) { return previous.valid; } previous.old = value; var validator = this; this.startRequest(element); var data = {}; data[element.name] = value; $.ajax($.extend(true, { url: param, mode: "abort", port: "validate" + element.name, dataType: "json", data: data, success: function(response) { validator.settings.messages[element.name].remote = previous.originalMessage; var valid = response === true || response === "true"; if ( valid ) { var submitted = validator.formSubmitted; validator.prepareElement(element); validator.formSubmitted = submitted; validator.successList.push(element); delete validator.invalid[element.name]; validator.showErrors(); } else { var errors = {}; var message = response || validator.defaultMessage( element, "remote" ); errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; validator.invalid[element.name] = true; validator.showErrors(errors); } previous.valid = valid; validator.stopRequest(element, valid); } }, param)); return "pending"; }, // http://docs.jquery.com/Plugins/Validation/Methods/minlength minlength: function(value, element, param) { var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); return this.optional(element) || length >= param; }, // http://docs.jquery.com/Plugins/Validation/Methods/maxlength maxlength: function(value, element, param) { var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); return this.optional(element) || length <= param; }, // http://docs.jquery.com/Plugins/Validation/Methods/rangelength rangelength: function(value, element, param) { var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); return this.optional(element) || ( length >= param[0] && length <= param[1] ); }, // http://docs.jquery.com/Plugins/Validation/Methods/min min: function( value, element, param ) { return this.optional(element) || value >= param; }, // http://docs.jquery.com/Plugins/Validation/Methods/max max: function( value, element, param ) { return this.optional(element) || value <= param; }, // http://docs.jquery.com/Plugins/Validation/Methods/range range: function( value, element, param ) { return this.optional(element) || ( value >= param[0] && value <= param[1] ); }, // http://docs.jquery.com/Plugins/Validation/Methods/email email: function(value, element) { // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/url url: function(value, element) { // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/date date: function(value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); }, // http://docs.jquery.com/Plugins/Validation/Methods/dateISO dateISO: function(value, element) { return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/number number: function(value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/digits digits: function(value, element) { return this.optional(element) || /^\d+$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/creditcard // based on http://en.wikipedia.org/wiki/Luhn creditcard: function(value, element) { if ( this.optional(element) ) { return "dependency-mismatch"; } // accept only spaces, digits and dashes if (/[^0-9 \-]+/.test(value)) { return false; } var nCheck = 0, nDigit = 0, bEven = false; value = value.replace(/\D/g, ""); for (var n = value.length - 1; n >= 0; n--) { var cDigit = value.charAt(n); nDigit = parseInt(cDigit, 10); if (bEven) { if ((nDigit *= 2) > 9) { nDigit -= 9; } } nCheck += nDigit; bEven = !bEven; } return (nCheck % 10) === 0; }, // http://docs.jquery.com/Plugins/Validation/Methods/equalTo equalTo: function(value, element, param) { // bind to the blur event of the target in order to revalidate whenever the target field is updated // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead var target = $(param); if (this.settings.onfocusout) { target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { $(element).valid(); }); } return value === target.val(); } } }); // deprecated, use $.validator.format instead $.format = $.validator.format; }(jQuery)); // ajax mode: abort // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() (function($) { var pendingRequests = {}; // Use a prefilter if available (1.5+) if ( $.ajaxPrefilter ) { $.ajaxPrefilter(function(settings, _, xhr) { var port = settings.port; if (settings.mode === "abort") { if ( pendingRequests[port] ) { pendingRequests[port].abort(); } pendingRequests[port] = xhr; } }); } else { // Proxy ajax var ajax = $.ajax; $.ajax = function(settings) { var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, port = ( "port" in settings ? settings : $.ajaxSettings ).port; if (mode === "abort") { if ( pendingRequests[port] ) { pendingRequests[port].abort(); } return (pendingRequests[port] = ajax.apply(this, arguments)); } return ajax.apply(this, arguments); }; } }(jQuery)); // provides cross-browser focusin and focusout events // IE has native support, in other browsers, use event caputuring (neither bubbles) // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation // handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target (function($) { // only implement if not provided by jQuery core (since 1.4) // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) { $.each({ focus: 'focusin', blur: 'focusout' }, function( original, fix ){ $.event.special[fix] = { setup:function() { this.addEventListener( original, handler, true ); }, teardown:function() { this.removeEventListener( original, handler, true ); }, handler: function(e) { var args = arguments; args[0] = $.event.fix(e); args[0].type = fix; return $.event.handle.apply(this, args); } }; function handler(e) { e = $.event.fix(e); e.type = fix; return $.event.handle.call(this, e); } }); } $.extend($.fn, { validateDelegate: function(delegate, type, handler) { return this.bind(type, function(event) { var target = $(event.target); if (target.is(delegate)) { return handler.apply(target, arguments); } }); } }); }(jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/grunt.js ================================================ /*global config:true, task:true*/ module.exports = function(grunt) { grunt.initConfig({ pkg: '', meta: { banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("m/d/yyyy") %>\n' + '<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */' }, concat: { 'dist/jquery.validate.js': ['', ''], 'dist/additional-methods.js': ['', ''] }, min: { 'dist/jquery.validate.min.js': ['', 'dist/jquery.validate.js'], 'dist/additional-methods.min.js': ['', 'dist/additional-methods.js'] }, zip: { dist: { src: [ 'dist/additional-methods.js', 'dist/additional-methods.min.js', 'dist/jquery.validate.js', 'dist/jquery.validate.min.js', 'README.md', 'changelog.txt', 'grunt.js', 'package.json', 'demo/**/*.*', 'lib/**/*.*', 'localization/**/*.*', 'test/**/*.*' ], dest: 'dist/<%= pkg.name %>-<%= pkg.version %>.zip' } }, qunit: { files: ['test/index.html'] }, lint: { files: ['jquery.validate.js'] }, jshint: { options: { curly: true, eqeqeq: true, immed: true, latedef: true, newcap: true, noarg: true, sub: true, undef: true, eqnull: true, browser: true }, globals: { jQuery: true, $: true, console: true } } }); grunt.registerMultiTask('zip', 'Create a zip file for release', function() { var files = grunt.file.expand(this.file.src); // grunt.log.writeln(require('util').inspect(files)); grunt.log.writeln("Creating zip file " + this.file.dest); var done = this.async(); var zipstream = require('zipstream'); var fs = require('fs'); var out = fs.createWriteStream(this.file.dest); var zip = zipstream.createZip({ level: 1 }); zip.pipe(out); function addFile() { if (!files.length) { zip.finalize(function(written) { grunt.log.writeln(written + ' total bytes written'); done(); }); return; } var file = files.shift(); grunt.log.verbose.writeln('Zipping ' + file); zip.addFile(fs.createReadStream(file), { name: file }, addFile); } addFile(); }); grunt.registerTask('default', 'lint qunit'); grunt.registerTask('release', 'default concat min zip'); }; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/lib/jquery-1.3.2.js ================================================ /*! * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){ var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. undefined, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, jQuery = window.jQuery = window.$ = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); }, // A simple way to check for HTML strings or ID strings // (both of which we optimize for) quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, // Is it a simple selector isSimple = /^.[^:#\[\.,]*$/; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { // Make sure that a selection was provided selector = selector || document; // Handle $(DOMElement) if ( selector.nodeType ) { this[0] = selector; this.length = 1; this.context = selector; return this; } // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? var match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) selector = jQuery.clean( [ match[1] ], context ); // HANDLE: $("#id") else { var elem = document.getElementById( match[3] ); // Handle the case where IE and Opera return items // by name instead of ID if ( elem && elem.id != match[3] ) return jQuery().find( selector ); // Otherwise, we inject the element directly into the jQuery object var ret = jQuery( elem || [] ); ret.context = document; ret.selector = selector; return ret; } // HANDLE: $(expr, [context]) // (which is just equivalent to: $(content).find(expr) } else return jQuery( context ).find( selector ); // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) return jQuery( document ).ready( selector ); // Make sure that old selector state is passed along if ( selector.selector && selector.context ) { this.selector = selector.selector; this.context = selector.context; } return this.setArray(jQuery.isArray( selector ) ? selector : jQuery.makeArray(selector)); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.3.2", // The number of elements contained in the matched element set size: function() { return this.length; }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num === undefined ? // Return a 'clean' array Array.prototype.slice.call( this ) : // Return just the object this[ num ]; }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = jQuery( elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) ret.selector = this.selector + (this.selector ? " " : "") + selector; else if ( name ) ret.selector = this.selector + "." + name + "(" + selector + ")"; // Return the newly-formed element set return ret; }, // Force the current matched set of elements to become // the specified array of elements (destroying the stack in the process) // You should use pushStack() in order to do this, but maintain the stack setArray: function( elems ) { // Resetting the length to 0, then using the native Array push // is a super-fast way to populate an object with array-like properties this.length = 0; Array.prototype.push.apply( this, elems ); return this; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem && elem.jquery ? elem[0] : elem , this ); }, attr: function( name, value, type ) { var options = name; // Look for the case where we're accessing a style value if ( typeof name === "string" ) if ( value === undefined ) return this[0] && jQuery[ type || "attr" ]( this[0], name ); else { options = {}; options[ name ] = value; } // Check to see if we're setting style values return this.each(function(i){ // Set all the styles for ( name in options ) jQuery.attr( type ? this.style : this, name, jQuery.prop( this, options[ name ], type, i, name ) ); }); }, css: function( key, value ) { // ignore negative width and height values if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) value = undefined; return this.attr( key, value, "curCSS" ); }, text: function( text ) { if ( typeof text !== "object" && text != null ) return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); var ret = ""; jQuery.each( text || this, function(){ jQuery.each( this.childNodes, function(){ if ( this.nodeType != 8 ) ret += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text( [ this ] ); }); }); return ret; }, wrapAll: function( html ) { if ( this[0] ) { // The elements to wrap the target around var wrap = jQuery( html, this[0].ownerDocument ).clone(); if ( this[0].parentNode ) wrap.insertBefore( this[0] ); wrap.map(function(){ var elem = this; while ( elem.firstChild ) elem = elem.firstChild; return elem; }).append(this); } return this; }, wrapInner: function( html ) { return this.each(function(){ jQuery( this ).contents().wrapAll( html ); }); }, wrap: function( html ) { return this.each(function(){ jQuery( this ).wrapAll( html ); }); }, append: function() { return this.domManip(arguments, true, function(elem){ if (this.nodeType == 1) this.appendChild( elem ); }); }, prepend: function() { return this.domManip(arguments, true, function(elem){ if (this.nodeType == 1) this.insertBefore( elem, this.firstChild ); }); }, before: function() { return this.domManip(arguments, false, function(elem){ this.parentNode.insertBefore( elem, this ); }); }, after: function() { return this.domManip(arguments, false, function(elem){ this.parentNode.insertBefore( elem, this.nextSibling ); }); }, end: function() { return this.prevObject || jQuery( [] ); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: [].push, sort: [].sort, splice: [].splice, find: function( selector ) { if ( this.length === 1 ) { var ret = this.pushStack( [], "find", selector ); ret.length = 0; jQuery.find( selector, this[0], ret ); return ret; } else { return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ return jQuery.find( selector, elem ); })), "find", selector ); } }, clone: function( events ) { // Do the clone var ret = this.map(function(){ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { // IE copies events bound via attachEvent when // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal // In order to get around this, we use innerHTML. // Unfortunately, this means some modifications to // attributes in IE that are actually only stored // as properties will not be copied (such as the // the name attribute on an input). var html = this.outerHTML; if ( !html ) { var div = this.ownerDocument.createElement("div"); div.appendChild( this.cloneNode(true) ); html = div.innerHTML; } return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; } else return this.cloneNode(true); }); // Copy the events from the original to the clone if ( events === true ) { var orig = this.find("*").andSelf(), i = 0; ret.find("*").andSelf().each(function(){ if ( this.nodeName !== orig[i].nodeName ) return; var events = jQuery.data( orig[i], "events" ); for ( var type in events ) { for ( var handler in events[ type ] ) { jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); } } i++; }); } // Return the cloned set return ret; }, filter: function( selector ) { return this.pushStack( jQuery.isFunction( selector ) && jQuery.grep(this, function(elem, i){ return selector.call( elem, i ); }) || jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ return elem.nodeType === 1; }) ), "filter", selector ); }, closest: function( selector ) { var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, closer = 0; return this.map(function(){ var cur = this; while ( cur && cur.ownerDocument ) { if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { jQuery.data(cur, "closest", closer); return cur; } cur = cur.parentNode; closer++; } }); }, not: function( selector ) { if ( typeof selector === "string" ) // test special case where just one selector is passed in if ( isSimple.test( selector ) ) return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); else selector = jQuery.multiFilter( selector, this ); var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; return this.filter(function() { return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; }); }, add: function( selector ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), typeof selector === "string" ? jQuery( selector ) : jQuery.makeArray( selector ) ))); }, is: function( selector ) { return !!selector && jQuery.multiFilter( selector, this ).length > 0; }, hasClass: function( selector ) { return !!selector && this.is( "." + selector ); }, val: function( value ) { if ( value === undefined ) { var elem = this[0]; if ( elem ) { if( jQuery.nodeName( elem, 'option' ) ) return (elem.attributes.value || {}).specified ? elem.value : elem.text; // We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type == "select-one"; // Nothing was selected if ( index < 0 ) return null; // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ]; if ( option.selected ) { // Get the specifc value for the option value = jQuery(option).val(); // We don't need an array for one selects if ( one ) return value; // Multi-Selects return an array values.push( value ); } } return values; } // Everything else, we just grab the value return (elem.value || "").replace(/\r/g, ""); } return undefined; } if ( typeof value === "number" ) value += ''; return this.each(function(){ if ( this.nodeType != 1 ) return; if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery.inArray(this.name, value) >= 0); else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(value); jQuery( "option", this ).each(function(){ this.selected = (jQuery.inArray( this.value, values ) >= 0 || jQuery.inArray( this.text, values ) >= 0); }); if ( !values.length ) this.selectedIndex = -1; } else this.value = value; }); }, html: function( value ) { return value === undefined ? (this[0] ? this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : null) : this.empty().append( value ); }, replaceWith: function( value ) { return this.after( value ).remove(); }, eq: function( i ) { return this.slice( i, +i + 1 ); }, slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ), "slice", Array.prototype.slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function(elem, i){ return callback.call( elem, i, elem ); })); }, andSelf: function() { return this.add( this.prevObject ); }, domManip: function( args, table, callback ) { if ( this[0] ) { var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), first = fragment.firstChild; if ( first ) for ( var i = 0, l = this.length; i < l; i++ ) callback.call( root(this[i], first), this.length > 1 || i > 0 ? fragment.cloneNode(true) : fragment ); if ( scripts ) jQuery.each( scripts, evalScript ); } return this; function root( elem, cur ) { return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? (elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody"))) : elem; } } }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; function evalScript( i, elem ) { if ( elem.src ) jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); else jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); if ( elem.parentNode ) elem.parentNode.removeChild( elem ); } function now(){ return +new Date; } jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) target = {}; // extend jQuery itself if only one argument is passed if ( length == i ) { target = this; --i; } for ( ; i < length; i++ ) // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) // Extend the base object for ( var name in options ) { var src = target[ name ], copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) continue; // Recurse if we're merging object values if ( deep && copy && typeof copy === "object" && !copy.nodeType ) target[ name ] = jQuery.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); // Don't bring in undefined values else if ( copy !== undefined ) target[ name ] = copy; } // Return the modified object return target; }; // exclude the following css properties to add px var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, // cache defaultView defaultView = document.defaultView || {}, toString = Object.prototype.toString; jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) window.jQuery = _jQuery; return jQuery; }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return toString.call(obj) === "[object Function]"; }, isArray: function( obj ) { return toString.call(obj) === "[object Array]"; }, // check if an element is in a (or is an) XML document isXMLDoc: function( elem ) { return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); }, // Evalulates a script in a global context globalEval: function( data ) { if ( data && /\S/.test(data) ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.getElementsByTagName("head")[0] || document.documentElement, script = document.createElement("script"); script.type = "text/javascript"; if ( jQuery.support.scriptEval ) script.appendChild( document.createTextNode( data ) ); else script.text = data; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length; if ( args ) { if ( length === undefined ) { for ( name in object ) if ( callback.apply( object[ name ], args ) === false ) break; } else for ( ; i < length; ) if ( callback.apply( object[ i++ ], args ) === false ) break; // A special, fast, case for the most common use of each } else { if ( length === undefined ) { for ( name in object ) if ( callback.call( object[ name ], name, object[ name ] ) === false ) break; } else for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} } return object; }, prop: function( elem, value, type, i, name ) { // Handle executable functions if ( jQuery.isFunction( value ) ) value = value.call( elem, i ); // Handle passing in a number to a CSS property return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? value + "px" : value; }, className: { // internal only, use addClass("class") add: function( elem, classNames ) { jQuery.each((classNames || "").split(/\s+/), function(i, className){ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) elem.className += (elem.className ? " " : "") + className; }); }, // internal only, use removeClass("class") remove: function( elem, classNames ) { if (elem.nodeType == 1) elem.className = classNames !== undefined ? jQuery.grep(elem.className.split(/\s+/), function(className){ return !jQuery.className.has( classNames, className ); }).join(" ") : ""; }, // internal only, use hasClass("class") has: function( elem, className ) { return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; } }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { var old = {}; // Remember the old values, and insert the new ones for ( var name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } callback.call( elem ); // Revert the old values for ( var name in options ) elem.style[ name ] = old[ name ]; }, css: function( elem, name, force, extra ) { if ( name == "width" || name == "height" ) { var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; function getWH() { val = name == "width" ? elem.offsetWidth : elem.offsetHeight; if ( extra === "border" ) return; jQuery.each( which, function() { if ( !extra ) val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; if ( extra === "margin" ) val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; else val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; }); } if ( elem.offsetWidth !== 0 ) getWH(); else jQuery.swap( elem, props, getWH ); return Math.max(0, Math.round(val)); } return jQuery.curCSS( elem, name, force ); }, curCSS: function( elem, name, force ) { var ret, style = elem.style; // We need to handle opacity special in IE if ( name == "opacity" && !jQuery.support.opacity ) { ret = jQuery.attr( style, "opacity" ); return ret == "" ? "1" : ret; } // Make sure we're using the right name for getting the float value if ( name.match( /float/i ) ) name = styleFloat; if ( !force && style && style[ name ] ) ret = style[ name ]; else if ( defaultView.getComputedStyle ) { // Only "float" is needed here if ( name.match( /float/i ) ) name = "float"; name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); var computedStyle = defaultView.getComputedStyle( elem, null ); if ( computedStyle ) ret = computedStyle.getPropertyValue( name ); // We should always get a number back from opacity if ( name == "opacity" && ret == "" ) ret = "1"; } else if ( elem.currentStyle ) { var camelCase = name.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); }); ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { // Remember the original values var left = style.left, rsLeft = elem.runtimeStyle.left; // Put in the new values to get a computed value out elem.runtimeStyle.left = elem.currentStyle.left; style.left = ret || 0; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; elem.runtimeStyle.left = rsLeft; } } return ret; }, clean: function( elems, context, fragment ) { context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' if ( typeof context.createElement === "undefined" ) context = context.ownerDocument || context[0] && context[0].ownerDocument || document; // If a single string is passed in and it's a single tag // just do a createElement and skip the rest if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); if ( match ) return [ context.createElement( match[1] ) ]; } var ret = [], scripts = [], div = context.createElement("div"); jQuery.each(elems, function(i, elem){ if ( typeof elem === "number" ) elem += ''; if ( !elem ) return; // Convert html string into DOM nodes if ( typeof elem === "string" ) { // Fix "XHTML"-style tags in all browsers elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : front + ">"; }); // Trim whitespace, otherwise indexOf won't work as expected var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); var wrap = // option or optgroup !tags.indexOf("", "" ] || !tags.indexOf("", "" ] || tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [ 1, "", "
        " ] || !tags.indexOf("", "" ] || // matched above (!tags.indexOf("", "" ] || !tags.indexOf("", "" ] || // IE can't serialize and This is a p

        * @before $.metadata.setType("elem", "script") * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" * @desc Reads metadata from a nested script element * * @param String type The encoding type * @param String name The name of the attribute to be used to get metadata (optional) * @cat Plugins/Metadata * @descr Sets the type of encoding to be used when loading metadata for the first time * @type undefined * @see metadata() */ (function($) { $.extend({ metadata : { defaults : { type: 'class', name: 'metadata', cre: /({.*})/, single: 'metadata' }, setType: function( type, name ){ this.defaults.type = type; this.defaults.name = name; }, get: function( elem, opts ){ var settings = $.extend({},this.defaults,opts); // check for empty string in single property if ( !settings.single.length ) settings.single = 'metadata'; var data = $.data(elem, settings.single); // returned cached data if it already exists if ( data ) return data; data = "{}"; if ( settings.type == "class" ) { var m = settings.cre.exec( elem.className ); if ( m ) data = m[1]; } else if ( settings.type == "elem" ) { if( !elem.getElementsByTagName ) return undefined; var e = elem.getElementsByTagName(settings.name); if ( e.length ) data = $.trim(e[0].innerHTML); } else if ( elem.getAttribute != undefined ) { var attr = elem.getAttribute( settings.name ); if ( attr ) data = attr; } if ( data.indexOf( '{' ) <0 ) data = "{" + data + "}"; data = eval("(" + data + ")"); $.data( elem, settings.single, data ); return data; } } }); /** * Returns the metadata object for the first member of the jQuery object. * * @name metadata * @descr Returns element's metadata object * @param Object opts An object contianing settings to override the defaults * @type jQuery * @cat Plugins/Metadata */ $.fn.metadata = function( opts ){ return $.metadata.get( this[0], opts ); }; })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/lib/jquery.mockjax.js ================================================ /*! * MockJax - jQuery Plugin to Mock Ajax requests * * Version: 1.4.0 * Released: 2011-02-04 * Source: http://github.com/appendto/jquery-mockjax * Docs: http://enterprisejquery.com/2010/07/mock-your-ajax-requests-with-mockjax-for-rapid-development * Plugin: mockjax * Author: Jonathan Sharp (http://jdsharp.com) * License: MIT,GPL * * Copyright (c) 2010 appendTo LLC. * Dual licensed under the MIT or GPL licenses. * http://appendto.com/open-source-licenses */ (function($) { var _ajax = $.ajax, mockHandlers = []; function parseXML(xml) { if ( window['DOMParser'] == undefined && window.ActiveXObject ) { DOMParser = function() { }; DOMParser.prototype.parseFromString = function( xmlString ) { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.async = 'false'; doc.loadXML( xmlString ); return doc; }; } try { var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' ); if ( $.isXMLDoc( xmlDoc ) ) { var err = $('parsererror', xmlDoc); if ( err.length == 1 ) { throw('Error: ' + $(xmlDoc).text() ); } } else { throw('Unable to parse XML'); } } catch( e ) { var msg = ( e.name == undefined ? e : e.name + ': ' + e.message ); $(document).trigger('xmlParseError', [ msg ]); return undefined; } return xmlDoc; } $.extend({ ajax: function(origSettings) { var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings), mock = false; // Iterate over our mock handlers (in registration order) until we find // one that is willing to intercept the request $.each(mockHandlers, function(k, v) { if ( !mockHandlers[k] ) { return; } var m = null; // If the mock was registered with a function, let the function decide if we // want to mock this request if ( $.isFunction(mockHandlers[k]) ) { m = mockHandlers[k](s); } else { m = mockHandlers[k]; // Inspect the URL of the request and check if the mock handler's url // matches the url for this ajax request if ( $.isFunction(m.url.test) ) { // The user provided a regex for the url, test it if ( !m.url.test( s.url ) ) { m = null; } } else { // Look for a simple wildcard '*' or a direct URL match var star = m.url.indexOf('*'); if ( ( m.url != '*' && m.url != s.url && star == -1 ) || ( star > -1 && m.url.substr(0, star) != s.url.substr(0, star) ) ) { // The url we tested did not match the wildcard * m = null; } } if ( m ) { // Inspect the data submitted in the request (either POST body or GET query string) if ( m.data && s.data ) { var identical = false; // Deep inspect the identity of the objects (function ident(mock, live) { // Test for situations where the data is a querystring (not an object) if (typeof live === 'string') { // Querystring may be a regex identical = $.isFunction( mock.test ) ? mock.test(live) : mock == live; return identical; } $.each(mock, function(k, v) { if ( live[k] === undefined ) { identical = false; return false; } else { identical = true; if ( typeof live[k] == 'object' ) { return ident(mock[k], live[k]); } else { if ( $.isFunction( mock[k].test ) ) { identical = mock[k].test(live[k]); } else { identical = ( mock[k] == live[k] ); } return identical; } } }); })(m.data, s.data); // They're not identical, do not mock this request if ( identical == false ) { m = null; } } // Inspect the request type if ( m && m.type && m.type != s.type ) { // The request type doesn't match (GET vs. POST) m = null; } } } if ( m ) { mock = true; // Handle console logging var c = $.extend({}, $.mockjaxSettings, m); if ( c.log && $.isFunction(c.log) ) { c.log('MOCK ' + s.type.toUpperCase() + ': ' + s.url, $.extend({}, s)); } var jsre = /=\?(&|$)/, jsc = (new Date()).getTime(); // Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here // because there isn't an easy hook for the cross domain script tag of jsonp if ( s.dataType === "jsonp" ) { if ( s.type.toUpperCase() === "GET" ) { if ( !jsre.test( s.url ) ) { s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?"; } } else if ( !s.data || !jsre.test(s.data) ) { s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; } s.dataType = "json"; } // Build temporary JSONP function if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) { jsonp = s.jsonpCallback || ("jsonp" + jsc++); // Replace the =? sequence both in the query string and the data if ( s.data ) { s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); } s.url = s.url.replace(jsre, "=" + jsonp + "$1"); // We need to make sure // that a JSONP style response is executed properly s.dataType = "script"; // Handle JSONP-style loading window[ jsonp ] = window[ jsonp ] || function( tmp ) { data = tmp; success(); complete(); // Garbage collect window[ jsonp ] = undefined; try { delete window[ jsonp ]; } catch(e) {} if ( head ) { head.removeChild( script ); } }; } var rurl = /^(\w+:)?\/\/([^\/?#]+)/, parts = rurl.exec( s.url ), remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host); // Test if we are going to create a script tag (if so, intercept & mock) if ( s.dataType === "script" && s.type.toUpperCase() === "GET" && remote ) { // Synthesize the mock request for adding a script tag var callbackContext = origSettings && origSettings.context || s; function success() { // If a local callback was specified, fire it and pass it the data if ( s.success ) { s.success.call( callbackContext, ( m.response ? m.response.toString() : m.responseText || ''), status, {} ); } // Fire the global callback if ( s.global ) { trigger( "ajaxSuccess", [{}, s] ); } } function complete() { // Process result if ( s.complete ) { s.complete.call( callbackContext, {} , status ); } // The request was completed if ( s.global ) { trigger( "ajaxComplete", [{}, s] ); } // Handle the global AJAX counter if ( s.global && ! --jQuery.active ) { jQuery.event.trigger( "ajaxStop" ); } } function trigger(type, args) { (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args); } if ( m.response && $.isFunction(m.response) ) { m.response(origSettings); } else { $.globalEval(m.responseText); } success(); complete(); return false; } mock = _ajax.call($, $.extend(true, {}, origSettings, { // Mock the XHR object xhr: function() { // Extend with our default mockjax settings m = $.extend({}, $.mockjaxSettings, m); if ( m.contentType ) { m.headers['content-type'] = m.contentType; } // Return our mock xhr object return { status: m.status, readyState: 1, open: function() { }, send: function() { // This is a substitute for < 1.4 which lacks $.proxy var process = (function(that) { return function() { return (function() { // The request has returned this.status = m.status; this.readyState = 4; // We have an executable function, call it to give // the mock handler a chance to update it's data if ( $.isFunction(m.response) ) { m.response(origSettings); } // Copy over our mock to our xhr object before passing control back to // jQuery's onreadystatechange callback if ( s.dataType == 'json' && ( typeof m.responseText == 'object' ) ) { this.responseText = JSON.stringify(m.responseText); } else if ( s.dataType == 'xml' ) { if ( typeof m.responseXML == 'string' ) { this.responseXML = parseXML(m.responseXML); } else { this.responseXML = m.responseXML; } } else { this.responseText = m.responseText; } // jQuery < 1.4 doesn't have onreadystate change for xhr if ( $.isFunction(this.onreadystatechange) ) { this.onreadystatechange( m.isTimeout ? 'timeout' : undefined ); } }).apply(that); }; })(this); if ( m.proxy ) { // We're proxying this request and loading in an external file instead _ajax({ global: false, url: m.proxy, type: m.proxyType, data: m.data, dataType: s.dataType, complete: function(xhr, txt) { m.responseXML = xhr.responseXML; m.responseText = xhr.responseText; this.responseTimer = setTimeout(process, m.responseTime || 0); } }); } else { // type == 'POST' || 'GET' || 'DELETE' if ( s.async === false ) { // TODO: Blocking delay process(); } else { this.responseTimer = setTimeout(process, m.responseTime || 50); } } }, abort: function() { clearTimeout(this.responseTimer); }, setRequestHeader: function() { }, getResponseHeader: function(header) { // 'Last-modified', 'Etag', 'content-type' are all checked by jQuery if ( m.headers && m.headers[header] ) { // Return arbitrary headers return m.headers[header]; } else if ( header.toLowerCase() == 'last-modified' ) { return m.lastModified || (new Date()).toString(); } else if ( header.toLowerCase() == 'etag' ) { return m.etag || ''; } else if ( header.toLowerCase() == 'content-type' ) { return m.contentType || 'text/plain'; } }, getAllResponseHeaders: function() { var headers = ''; $.each(m.headers, function(k, v) { headers += k + ': ' + v + "\n"; }); return headers; } }; } })); return false; } }); // We don't have a mock request, trigger a normal request if ( !mock ) { return _ajax.apply($, arguments); } else { return mock; } } }); $.mockjaxSettings = { //url: null, //type: 'GET', log: function(msg) { window['console'] && window.console.log && window.console.log(msg); }, status: 200, responseTime: 500, isTimeout: false, contentType: 'text/plain', response: '', responseText: '', responseXML: '', proxy: '', proxyType: 'GET', lastModified: null, etag: '', headers: { etag: 'IJF@H#@923uf8023hFO@I#H#', 'content-type' : 'text/plain' } }; $.mockjax = function(settings) { var i = mockHandlers.length; mockHandlers[i] = settings; return i; }; $.mockjaxClear = function(i) { if ( arguments.length == 1 ) { mockHandlers[i] = null; } else { mockHandlers = []; } }; })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ar.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: AR (Arabic; العربية) */ jQuery.extend(jQuery.validator.messages, { required: "هذا الحقل إلزامي", remote: "يرجى تصحيح هذا الحقل للمتابعة", email: "رجاء إدخال عنوان بريد إلكتروني صحيح", url: "رجاء إدخال عنوان موقع إلكتروني صحيح", date: "رجاء إدخال تاريخ صحيح", dateISO: "رجاء إدخال تاريخ صحيح (ISO)", number: "رجاء إدخال عدد بطريقة صحيحة", digits: "رجاء إدخال أرقام فقط", creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح", equalTo: "رجاء إدخال نفس القيمة", accept: "رجاء إدخال ملف بامتداد موافق عليه", maxlength: jQuery.validator.format("الحد الأقصى لعدد الحروف هو {0}"), minlength: jQuery.validator.format("الحد الأدنى لعدد الحروف هو {0}"), rangelength: jQuery.validator.format("عدد الحروف يجب أن يكون بين {0} و {1}"), range: jQuery.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"), max: jQuery.validator.format("رجاء إدخال عدد أقل من أو يساوي (0}"), min: jQuery.validator.format("رجاء إدخال عدد أكبر من أو يساوي (0}") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_bg.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: BG (Bulgarian; български език) */ jQuery.extend(jQuery.validator.messages, { required: "Полето е задължително.", remote: "Моля, въведете правилната стойност.", email: "Моля, въведете валиден email.", url: "Моля, въведете валидно URL.", date: "Моля, въведете валидна дата.", dateISO: "Моля, въведете валидна дата (ISO).", number: "Моля, въведете валиден номер.", digits: "Моля, въведете само цифри", creditcard: "Моля, въведете валиден номер на кредитна карта.", equalTo: "Моля, въведете същата стойност отново.", accept: "Моля, въведете стойност с валидно разширение.", maxlength: $.validator.format("Моля, въведете повече от {0} символа."), minlength: $.validator.format("Моля, въведете поне {0} символа."), rangelength: $.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."), range: $.validator.format("Моля, въведете стойност между {0} и {1}."), max: $.validator.format("Моля, въведете стойност по-малка или равна на {0}."), min: $.validator.format("Моля, въведете стойност по-голяма или равна на {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ca.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: CA (Catalan; català) */ jQuery.extend(jQuery.validator.messages, { required: "Aquest camp és obligatori.", remote: "Si us plau, omple aquest camp.", email: "Si us plau, escriu una adreça de correu-e vàlida", url: "Si us plau, escriu una URL vàlida.", date: "Si us plau, escriu una data vàlida.", dateISO: "Si us plau, escriu una data (ISO) vàlida.", number: "Si us plau, escriu un número enter vàlid.", digits: "Si us plau, escriu només dígits.", creditcard: "Si us plau, escriu un número de tarjeta vàlid.", equalTo: "Si us plau, escriu el maateix valor de nou.", accept: "Si us plau, escriu un valor amb una extensió acceptada.", maxlength: jQuery.validator.format("Si us plau, no escriguis més de {0} caracters."), minlength: jQuery.validator.format("Si us plau, no escriguis menys de {0} caracters."), rangelength: jQuery.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."), range: jQuery.validator.format("Si us plau, escriu un valor entre {0} i {1}."), max: jQuery.validator.format("Si us plau, escriu un valor menor o igual a {0}."), min: jQuery.validator.format("Si us plau, escriu un valor major o igual a {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_cs.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: CS (Czech; čeština, český jazyk) */ jQuery.extend(jQuery.validator.messages, { required: "Tento údaj je povinný.", remote: "Prosím, opravte tento údaj.", email: "Prosím, zadejte platný e-mail.", url: "Prosím, zadejte platné URL.", date: "Prosím, zadejte platné datum.", dateISO: "Prosím, zadejte platné datum (ISO).", number: "Prosím, zadejte číslo.", digits: "Prosím, zadávejte pouze číslice.", creditcard: "Prosím, zadejte číslo kreditní karty.", equalTo: "Prosím, zadejte znovu stejnou hodnotu.", accept: "Prosím, zadejte soubor se správnou příponou.", maxlength: jQuery.validator.format("Prosím, zadejte nejvíce {0} znaků."), minlength: jQuery.validator.format("Prosím, zadejte nejméně {0} znaků."), rangelength: jQuery.validator.format("Prosím, zadejte od {0} do {1} znaků."), range: jQuery.validator.format("Prosím, zadejte hodnotu od {0} do {1}."), max: jQuery.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."), min: jQuery.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_da.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: DA (Danish; dansk) */ jQuery.extend(jQuery.validator.messages, { required: "Dette felt er påkrævet.", maxlength: jQuery.validator.format("Indtast højst {0} tegn."), minlength: jQuery.validator.format("Indtast mindst {0} tegn."), rangelength: jQuery.validator.format("Indtast mindst {0} og højst {1} tegn."), email: "Indtast en gyldig email-adresse.", url: "Indtast en gyldig URL.", date: "Indtast en gyldig dato.", number: "Indtast et tal.", digits: "Indtast kun cifre.", equalTo: "Indtast den samme værdi igen.", range: jQuery.validator.format("Angiv en værdi mellem {0} og {1}."), max: jQuery.validator.format("Angiv en værdi der højst er {0}."), min: jQuery.validator.format("Angiv en værdi der mindst er {0}."), creditcard: "Indtast et gyldigt kreditkortnummer." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_de.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: DE (German, Deutsch) */ jQuery.extend(jQuery.validator.messages, { required: "Dieses Feld ist ein Pflichtfeld.", maxlength: jQuery.validator.format("Geben Sie bitte maximal {0} Zeichen ein."), minlength: jQuery.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."), rangelength: jQuery.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."), email: "Geben Sie bitte eine gültige E-Mail Adresse ein.", url: "Geben Sie bitte eine gültige URL ein.", date: "Bitte geben Sie ein gültiges Datum ein.", number: "Geben Sie bitte eine Nummer ein.", digits: "Geben Sie bitte nur Ziffern ein.", equalTo: "Bitte denselben Wert wiederholen.", range: jQuery.validator.format("Geben Sie bitte einen Wert zwischen {0} und {1} ein."), max: jQuery.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."), min: jQuery.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."), creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_el.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: EL (Greek; ελληνικά) */ jQuery.extend(jQuery.validator.messages, { required: "Αυτό το πεδίο είναι υποχρεωτικό.", remote: "Παρακαλώ διορθώστε αυτό το πεδίο.", email: "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.", url: "Παρακαλώ εισάγετε ένα έγκυρο URL.", date: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.", dateISO: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).", number: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό.", digits: "Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.", creditcard: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.", equalTo: "Παρακαλώ εισάγετε την ίδια τιμή ξανά.", accept: "Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.", maxlength: $.validator.format("Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες."), minlength: $.validator.format("Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες."), rangelength: $.validator.format("Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων."), range: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}."), max: $.validator.format("Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}."), min: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_es.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: ES (Spanish; Español) */ jQuery.extend(jQuery.validator.messages, { required: "Este campo es obligatorio.", remote: "Por favor, rellena este campo.", email: "Por favor, escribe una dirección de correo válida", url: "Por favor, escribe una URL válida.", date: "Por favor, escribe una fecha válida.", dateISO: "Por favor, escribe una fecha (ISO) válida.", number: "Por favor, escribe un número entero válido.", digits: "Por favor, escribe sólo dígitos.", creditcard: "Por favor, escribe un número de tarjeta válido.", equalTo: "Por favor, escribe el mismo valor de nuevo.", accept: "Por favor, escribe un valor con una extensión aceptada.", maxlength: jQuery.validator.format("Por favor, no escribas más de {0} caracteres."), minlength: jQuery.validator.format("Por favor, no escribas menos de {0} caracteres."), rangelength: jQuery.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."), range: jQuery.validator.format("Por favor, escribe un valor entre {0} y {1}."), max: jQuery.validator.format("Por favor, escribe un valor menor o igual a {0}."), min: jQuery.validator.format("Por favor, escribe un valor mayor o igual a {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_et.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: ET (Estonian; eesti, eesti keel) */ jQuery.extend(jQuery.validator.messages, { required: "See väli peab olema täidetud.", maxlength: jQuery.validator.format("Palun sisestage vähem kui {0} tähemärki."), minlength: jQuery.validator.format("Palun sisestage vähemalt {0} tähemärki."), rangelength: jQuery.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."), email: "Palun sisestage korrektne e-maili aadress.", url: "Palun sisestage korrektne URL.", date: "Palun sisestage korrektne kuupäev.", dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).", number: "Palun sisestage korrektne number.", digits: "Palun sisestage ainult numbreid.", equalTo: "Palun sisestage sama väärtus uuesti.", range: jQuery.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."), max: jQuery.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."), min: jQuery.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."), creditcard: "Palun sisestage korrektne krediitkaardi number." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_eu.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: EU (Basque; euskara, euskera) */ jQuery.extend(jQuery.validator.messages, { required: "Eremu hau beharrezkoa da.", remote: "Mesedez, bete eremu hau.", email: "Mesedez, idatzi baliozko posta helbide bat.", url: "Mesedez, idatzi baliozko URL bat.", date: "Mesedez, idatzi baliozko data bat.", dateISO: "Mesedez, idatzi baliozko (ISO) data bat.", number: "Mesedez, idatzi baliozko zenbaki oso bat.", digits: "Mesedez, idatzi digituak soilik.", creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.", equalTo: "Mesedez, idatzi berdina berriro ere.", accept: "Mesedez, idatzi onartutako luzapena duen balio bat.", maxlength: jQuery.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."), minlength: jQuery.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."), rangelength: jQuery.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."), range: jQuery.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."), max: jQuery.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."), min: jQuery.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_fa.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: FA (Persian; فارسی) */ jQuery.extend(jQuery.validator.messages, { required: "تکمیل این فیلد اجباری است.", remote: "لطفا این فیلد را تصحیح کنید.", email: ".لطفا یک ایمیل صحیح وارد کنید", url: "لطفا آدرس صحیح وارد کنید.", date: "لطفا یک تاریخ صحیح وارد کنید", dateISO: "لطفا تاریخ صحیح وارد کنید (ISO).", number: "لطفا عدد صحیح وارد کنید.", digits: "لطفا تنها رقم وارد کنید", creditcard: "لطفا کریدیت کارت صحیح وارد کنید.", equalTo: "لطفا مقدار برابری وارد کنید", accept: "لطفا مقداری وارد کنید که ", maxlength: jQuery.validator.format("لطفا بیشتر از {0} حرف وارد نکنید."), minlength: jQuery.validator.format("لطفا کمتر از {0} حرف وارد نکنید."), rangelength: jQuery.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."), range: jQuery.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."), max: jQuery.validator.format("لطفا مقداری کمتر از {0} حرف وارد کنید."), min: jQuery.validator.format("لطفا مقداری بیشتر از {0} حرف وارد کنید.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_fi.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: FI (Finnish; suomi, suomen kieli) */ jQuery.extend(jQuery.validator.messages, { required: "Tämä kenttä on pakollinen.", maxlength: jQuery.validator.format("Voit syöttää enintään {0} merkkiä."), minlength: jQuery.validator.format("Vähintään {0} merkkiä."), rangelength: jQuery.validator.format("Syötä vähintään {0} ja enintään {1} merkkiä."), email: "Syötä oikea sähköpostiosoite.", url: "Syötä oikea URL osoite.", date: "Syötä oike päivämäärä.", dateISO: "Syötä oike päivämäärä (VVVV-MM-DD).", number: "Syötä numero.", digits: "Syötä pelkästään numeroita.", equalTo: "Syötä sama arvo uudestaan.", range: jQuery.validator.format("Syötä arvo {0} ja {1} väliltä."), max: jQuery.validator.format("Syötä arvo joka on pienempi tai yhtä suuri kuin {0}."), min: jQuery.validator.format("Syötä arvo joka on yhtä suuri tai suurempi kuin {0}."), creditcard: "Syötä voimassa oleva luottokorttinumero." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_fr.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: FR (French; français) */ jQuery.extend(jQuery.validator.messages, { required: "Ce champ est obligatoire.", remote: "Veuillez corriger ce champ.", email: "Veuillez fournir une adresse électronique valide.", url: "Veuillez fournir une adresse URL valide.", date: "Veuillez fournir une date valide.", dateISO: "Veuillez fournir une date valide (ISO).", number: "Veuillez fournir un numéro valide.", digits: "Veuillez fournir seulement des chiffres.", creditcard: "Veuillez fournir un numéro de carte de crédit valide.", equalTo: "Veuillez fournir encore la même valeur.", accept: "Veuillez fournir une valeur avec une extension valide.", maxlength: $.validator.format("Veuillez fournir au plus {0} caractères."), minlength: $.validator.format("Veuillez fournir au moins {0} caractères."), rangelength: $.validator.format("Veuillez fournir une valeur qui contient entre {0} et {1} caractères."), range: $.validator.format("Veuillez fournir une valeur entre {0} et {1}."), max: $.validator.format("Veuillez fournir une valeur inférieur ou égal à {0}."), min: $.validator.format("Veuillez fournir une valeur supérieur ou égal à {0}."), maxWords: $.validator.format("Veuillez fournir au plus {0} mots."), minWords: $.validator.format("Veuillez fournir au moins {0} mots."), rangeWords: $.validator.format("Veuillez fournir entre {0} et {1} mots."), letterswithbasicpunc: "Veuillez fournir seulement des lettres et des signes de ponctuation.", alphanumeric: "Veuillez fournir seulement des lettres, nombres, espaces et soulignages", lettersonly: "Veuillez fournir seulement des lettres.", nowhitespace: "Veuillez ne pas inscrire d'espaces blancs.", ziprange: "Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.", integer: "Veuillez fournir un nombre non décimal qui est positif ou négatif.", vinUS: "Veuillez fournir un numéro d'identification du véhicule (VIN).", dateITA: "Veuillez fournir une date valide.", time: "Veuillez fournir une heure valide entre 00:00 et 23:59.", phoneUS: "Veuillez fournir un numéro de téléphone valide.", phoneUK: "Veuillez fournir un numéro de téléphone valide.", mobileUK: "Veuillez fournir un numéro de téléphone mobile valide.", strippedminlength: jQuery.validator.format("Veuillez fournir au moins {0} caractères."), email2: "Veuillez fournir une adresse électronique valide.", url2: "Veuillez fournir une adresse URL valide.", creditcardtypes: "Veuillez fournir un numéro de carte de crédit valide.", ipv4: "Veuillez fournir une adresse IP v4 valide.", ipv6: "Veuillez fournir une adresse IP v6 valide." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_he.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: HE (Hebrew; עברית) */ jQuery.extend(jQuery.validator.messages, { required: ".השדה הזה הינו שדה חובה", remote: "נא לתקן שדה זה.", email: "נא למלא כתובת דוא\"ל חוקית", url: "נא למלא כתובת אינטרנט חוקית.", date: "נא למלא תאריך חוקי", dateISO: "נא למלא תאריך חוקי (ISO).", number: "נא למלא מספר.", digits: ".נא למלא רק מספרים", creditcard: "נא למלא מספר כרטיס אשראי חוקי.", equalTo: "נא למלא את אותו ערך שוב.", accept: "נא למלא ערך עם סיומת חוקית.", maxlength: jQuery.validator.format(".נא לא למלא יותר מ- {0} תווים"), minlength: jQuery.validator.format("נא למלא לפחות {0} תווים."), rangelength: jQuery.validator.format("נא למלא ערך בין {0} ל- {1} תווים."), range: jQuery.validator.format("נא למלא ערך בין {0} ל- {1}."), max: jQuery.validator.format("נא למלא ערך קטן או שווה ל- {0}."), min: jQuery.validator.format("נא למלא ערך גדול או שווה ל- {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_hr.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: HR (Croatia; hrvatski jezik) */ jQuery.extend(jQuery.validator.messages, { required: "Ovo polje je obavezno.", remote: "Ovo polje treba popraviti.", email: "Unesite ispravnu e-mail adresu.", url: "Unesite ispravan URL.", date: "Unesite ispravan datum.", dateISO: "Unesite ispravan datum (ISO).", number: "Unesite ispravan broj.", digits: "Unesite samo brojeve.", creditcard: "Unesite ispravan broj kreditne kartice.", equalTo: "Unesite ponovo istu vrijednost.", accept: "Unesite vrijednost sa ispravnom ekstenzijom.", maxlength: $.validator.format("Maksimalni broj znakova je {0} ."), minlength: $.validator.format("Minimalni broj znakova je {0} ."), rangelength: $.validator.format("Unesite vrijednost između {0} i {1} znakova."), range: $.validator.format("Unesite vrijednost između {0} i {1}."), max: $.validator.format("Unesite vrijednost manju ili jednaku {0}."), min: $.validator.format("Unesite vrijednost veću ili jednaku {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_hu.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: HU (Hungarian; Magyar) */ jQuery.extend(jQuery.validator.messages, { required: "Kötelező megadni.", maxlength: jQuery.validator.format("Legfeljebb {0} karakter hosszú legyen."), minlength: jQuery.validator.format("Legalább {0} karakter hosszú legyen."), rangelength: jQuery.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."), email: "Érvényes e-mail címnek kell lennie.", url: "Érvényes URL-nek kell lennie.", date: "Dátumnak kell lennie.", number: "Számnak kell lennie.", digits: "Csak számjegyek lehetnek.", equalTo: "Meg kell egyeznie a két értéknek.", range: jQuery.validator.format("{0} és {1} közé kell esnie."), max: jQuery.validator.format("Nem lehet nagyobb, mint {0}."), min: jQuery.validator.format("Nem lehet kisebb, mint {0}."), creditcard: "Érvényes hitelkártyaszámnak kell lennie." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_it.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: IT (Italian; Italiano) */ jQuery.extend(jQuery.validator.messages, { required: "Campo obbligatorio.", remote: "Controlla questo campo.", email: "Inserisci un indirizzo email valido.", url: "Inserisci un indirizzo web valido.", date: "Inserisci una data valida.", dateISO: "Inserisci una data valida (ISO).", number: "Inserisci un numero valido.", digits: "Inserisci solo numeri.", creditcard: "Inserisci un numero di carta di credito valido.", equalTo: "Il valore non corrisponde.", accept: "Inserisci un valore con un'estensione valida.", maxlength: jQuery.validator.format("Non inserire più di {0} caratteri."), minlength: jQuery.validator.format("Inserisci almeno {0} caratteri."), rangelength: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri."), range: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1}."), max: jQuery.validator.format("Inserisci un valore minore o uguale a {0}."), min: jQuery.validator.format("Inserisci un valore maggiore o uguale a {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ja.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: JA (Japanese; 日本語) */ jQuery.extend(jQuery.validator.messages, { required: "このフィールドは必須です。", remote: "このフィールドを修正してください。", email: "有効なEメールアドレスを入力してください。", url: "有効なURLを入力してください。", date: "有効な日付を入力してください。", dateISO: "有効な日付(ISO)を入力してください。", number: "有効な数字を入力してください。", digits: "数字のみを入力してください。", creditcard: "有効なクレジットカード番号を入力してください。", equalTo: "同じ値をもう一度入力してください。", accept: "有効な拡張子を含む値を入力してください。", maxlength: jQuery.format("{0} 文字以内で入力してください。"), minlength: jQuery.format("{0} 文字以上で入力してください。"), rangelength: jQuery.format("{0} 文字から {1} 文字までの値を入力してください。"), range: jQuery.format("{0} から {1} までの値を入力してください。"), max: jQuery.format("{0} 以下の値を入力してください。"), min: jQuery.format("{0} 以上の値を入力してください。") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ka.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: KA (Georgian; ქართული) */ jQuery.extend(jQuery.validator.messages, { required: "ამ ველის შევსება აუცილებელია.", remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.", email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.", url: "გთხოვთ მიუთითოთ კორექტული URL.", date: "გთხოვთ მიუთითოთ კორექტული თარიღი.", dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.", number: "გთხოვთ მიუთითოთ ციფრი.", digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.", creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.", equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.", accept: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.", maxlength: jQuery.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."), minlength: jQuery.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."), rangelength: jQuery.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."), range: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."), max: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."), min: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_kk.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: KK (Kazakh; қазақ тілі) */ jQuery.extend(jQuery.validator.messages, { required: "Бұл өрісті міндетті түрде толтырыңыз.", remote: "Дұрыс мағына енгізуіңізді сұраймыз.", email: "Нақты электронды поштаңызды енгізуіңізді сұраймыз.", url: "Нақты URL-ды енгізуіңізді сұраймыз.", date: "Нақты URL-ды енгізуіңізді сұраймыз.", dateISO: "Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.", number: "Күнді енгізуіңізді сұраймыз.", digits: "Тек қана сандарды енгізуіңізді сұраймыз.", creditcard: "Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.", equalTo: "Осы мәнді қайта енгізуіңізді сұраймыз.", accept: "Файлдың кеңейтуін дұрыс таңдаңыз.", maxlength: jQuery.format("Ұзындығы {0} символдан көр болмасын."), minlength: jQuery.format("Ұзындығы {0} символдан аз болмасын."), rangelength: jQuery.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз."), range: jQuery.format("Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз."), max: jQuery.format("{0} аз немесе тең санын енгізуіңіді сұраймыз."), min: jQuery.format("{0} көп немесе тең санын енгізуіңізді сұраймыз.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_lt.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: LT (Lithuanian; lietuvių kalba) */ jQuery.extend(jQuery.validator.messages, { required: "Šis laukas yra privalomas.", remote: "Prašau pataisyti šį lauką.", email: "Prašau įvesti teisingą elektroninio pašto adresą.", url: "Prašau įvesti teisingą URL.", date: "Prašau įvesti teisingą datą.", dateISO: "Prašau įvesti teisingą datą (ISO).", number: "Prašau įvesti teisingą skaičių.", digits: "Prašau naudoti tik skaitmenis.", creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.", equalTo: "Prašau įvestį tą pačią reikšmę dar kartą.", accept: "Prašau įvesti reikšmę su teisingu plėtiniu.", maxlength: $.format("Prašau įvesti ne daugiau kaip {0} simbolių."), minlength: $.format("Prašau įvesti bent {0} simbolius."), rangelength: $.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."), range: $.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."), max: $.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."), min: $.format("Prašau įvesti reikšmę didesnę arba lygią {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_lv.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: LV (Latvian; latviešu valoda) */ jQuery.extend(jQuery.validator.messages, { required: "Šis lauks ir obligāts.", remote: "Lūdzu, pārbaudiet šo lauku.", email: "Lūdzu, ievadiet derīgu e-pasta adresi.", url: "Lūdzu, ievadiet derīgu URL adresi.", date: "Lūdzu, ievadiet derīgu datumu.", dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).", number: "Lūdzu, ievadiet derīgu numuru.", digits: "Lūdzu, ievadiet tikai ciparus.", creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.", equalTo: "Lūdzu, ievadiet to pašu vēlreiz.", accept: "Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.", maxlength: jQuery.validator.format("Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes."), minlength: jQuery.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."), rangelength: jQuery.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."), range: jQuery.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."), max: jQuery.validator.format("Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}."), min: jQuery.validator.format("Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_nl.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: NL (Dutch; Nederlands, Vlaams) */ jQuery.extend(jQuery.validator.messages, { required: "Dit is een verplicht veld.", remote: "Controleer dit veld.", email: "Vul hier een geldig e-mailadres in.", url: "Vul hier een geldige URL in.", date: "Vul hier een geldige datum in.", dateISO: "Vul hier een geldige datum in (ISO-formaat).", number: "Vul hier een geldig getal in.", digits: "Vul hier alleen getallen in.", creditcard: "Vul hier een geldig creditcardnummer in.", equalTo: "Vul hier dezelfde waarde in.", accept: "Vul hier een waarde in met een geldige extensie.", maxlength: jQuery.validator.format("Vul hier maximaal {0} tekens in."), minlength: jQuery.validator.format("Vul hier minimaal {0} tekens in."), rangelength: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."), range: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."), max: jQuery.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."), min: jQuery.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_no.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: NO (Norwegian; Norsk) */ jQuery.extend(jQuery.validator.messages, { required: "Dette feltet er obligatorisk.", maxlength: jQuery.validator.format("Maksimalt {0} tegn."), minlength: jQuery.validator.format("Minimum {0} tegn."), rangelength: jQuery.validator.format("Angi minimum {0} og maksimum {1} tegn."), email: "Oppgi en gyldig epostadresse.", url: "Angi en gyldig URL.", date: "Angi en gyldig dato.", dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).", dateSE: "Angi en gyldig dato.", number: "Angi et gyldig nummer.", numberSE: "Angi et gyldig nummer.", digits: "Skriv kun tall.", equalTo: "Skriv samme verdi igjen.", range: jQuery.validator.format("Angi en verdi mellom {0} og {1}."), max: jQuery.validator.format("Angi en verdi som er mindre eller lik {0}."), min: jQuery.validator.format("Angi en verdi som er større eller lik {0}."), creditcard: "Angi et gyldig kredittkortnummer." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_pl.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: PL (Polish; język polski, polszczyzna) */ jQuery.extend(jQuery.validator.messages, { required: "To pole jest wymagane.", remote: "Proszę o wypełnienie tego pola.", email: "Proszę o podanie prawidłowego adresu email.", url: "Proszę o podanie prawidłowego URL.", date: "Proszę o podanie prawidłowej daty.", dateISO: "Proszę o podanie prawidłowej daty (ISO).", number: "Proszę o podanie prawidłowej liczby.", digits: "Proszę o podanie samych cyfr.", creditcard: "Proszę o podanie prawidłowej karty kredytowej.", equalTo: "Proszę o podanie tej samej wartości ponownie.", accept: "Proszę o podanie wartości z prawidłowym rozszerzeniem.", maxlength: jQuery.validator.format("Proszę o podanie nie więcej niż {0} znaków."), minlength: jQuery.validator.format("Proszę o podanie przynajmniej {0} znaków."), rangelength: jQuery.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."), range: jQuery.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."), max: jQuery.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."), min: jQuery.validator.format("Proszę o podanie wartości większej bądź równej {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_pt_BR.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: PT (Portuguese; português) * Region: BR (Brazil) */ jQuery.extend(jQuery.validator.messages, { required: "Este campo é requerido.", remote: "Por favor, corrija este campo.", email: "Por favor, forneça um endereço eletrônico válido.", url: "Por favor, forneça uma URL válida.", date: "Por favor, forneça uma data válida.", dateISO: "Por favor, forneça uma data válida (ISO).", number: "Por favor, forneça um número válido.", digits: "Por favor, forneça somente dígitos.", creditcard: "Por favor, forneça um cartão de crédito válido.", equalTo: "Por favor, forneça o mesmo valor novamente.", accept: "Por favor, forneça um valor com uma extensão válida.", maxlength: jQuery.validator.format("Por favor, forneça não mais que {0} caracteres."), minlength: jQuery.validator.format("Por favor, forneça ao menos {0} caracteres."), rangelength: jQuery.validator.format("Por favor, forneça um valor entre {0} e {1} caracteres de comprimento."), range: jQuery.validator.format("Por favor, forneça um valor entre {0} e {1}."), max: jQuery.validator.format("Por favor, forneça um valor menor ou igual a {0}."), min: jQuery.validator.format("Por favor, forneça um valor maior ou igual a {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_pt_PT.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: PT (Portuguese; português) * Region: PT (Portugal) */ jQuery.extend(jQuery.validator.messages, { required: "Campo de preenchimento obrigatório.", remote: "Por favor, corrija este campo.", email: "Por favor, introduza um endereço eletrónico válido.", url: "Por favor, introduza um URL válido.", date: "Por favor, introduza uma data válida.", dateISO: "Por favor, introduza uma data válida (ISO).", number: "Por favor, introduza um número válido.", digits: "Por favor, introduza apenas dígitos.", creditcard: "Por favor, introduza um número de cartão de crédito válido.", equalTo: "Por favor, introduza de novo o mesmo valor.", accept: "Por favor, introduza um ficheiro com uma extensão válida.", maxlength: jQuery.validator.format("Por favor, não introduza mais do que {0} caracteres."), minlength: jQuery.validator.format("Por favor, introduza pelo menos {0} caracteres."), rangelength: jQuery.validator.format("Por favor, introduza entre {0} e {1} caracteres."), range: jQuery.validator.format("Por favor, introduza um valor entre {0} e {1}."), max: jQuery.validator.format("Por favor, introduza um valor menor ou igual a {0}."), min: jQuery.validator.format("Por favor, introduza um valor maior ou igual a {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ro.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: RO (Romanian, limba română) */ jQuery.extend(jQuery.validator.messages, { required: "Acest câmp este obligatoriu.", remote: "Te rugăm să completezi acest câmp.", email: "Te rugăm să introduci o adresă de email validă", url: "Te rugăm sa introduci o adresă URL validă.", date: "Te rugăm să introduci o dată corectă.", dateISO: "Te rugăm să introduci o dată (ISO) corectă.", number: "Te rugăm să introduci un număr întreg valid.", digits: "Te rugăm să introduci doar cifre.", creditcard: "Te rugăm să introduci un numar de carte de credit valid.", equalTo: "Te rugăm să reintroduci valoarea.", accept: "Te rugăm să introduci o valoare cu o extensie validă.", maxlength: jQuery.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."), minlength: jQuery.validator.format("Te rugăm să introduci cel puțin {0} caractere."), rangelength: jQuery.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."), range: jQuery.validator.format("Te rugăm să introduci o valoare între {0} și {1}."), max: jQuery.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."), min: jQuery.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_ru.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: RU (Russian; русский язык) */ jQuery.extend(jQuery.validator.messages, { required: "Это поле необходимо заполнить.", remote: "Пожалуйста, введите правильное значение.", email: "Пожалуйста, введите корректный адрес электронной почты.", url: "Пожалуйста, введите корректный URL.", date: "Пожалуйста, введите корректную дату.", dateISO: "Пожалуйста, введите корректную дату в формате ISO.", number: "Пожалуйста, введите число.", digits: "Пожалуйста, вводите только цифры.", creditcard: "Пожалуйста, введите правильный номер кредитной карты.", equalTo: "Пожалуйста, введите такое же значение ещё раз.", accept: "Пожалуйста, выберите файл с правильным расширением.", maxlength: jQuery.validator.format("Пожалуйста, введите не больше {0} символов."), minlength: jQuery.validator.format("Пожалуйста, введите не меньше {0} символов."), rangelength: jQuery.validator.format("Пожалуйста, введите значение длиной от {0} до {1} символов."), range: jQuery.validator.format("Пожалуйста, введите число от {0} до {1}."), max: jQuery.validator.format("Пожалуйста, введите число, меньшее или равное {0}."), min: jQuery.validator.format("Пожалуйста, введите число, большее или равное {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_si.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: SI (Slovenian) */ jQuery.extend(jQuery.validator.messages, { required: "To polje je obvezno.", remote: "Vpis v tem polju ni v pravi obliki.", email: "Prosimo, vnesite pravi email naslov.", url: "Prosimo, vnesite pravi URL.", date: "Prosimo, vnesite pravi datum.", dateISO: "Prosimo, vnesite pravi datum (ISO).", number: "Prosimo, vnesite pravo številko.", digits: "Prosimo, vnesite samo številke.", creditcard: "Prosimo, vnesite pravo številko kreditne kartice.", equalTo: "Prosimo, ponovno vnesite enako vsebino.", accept: "Prosimo, vnesite vsebino z pravo končnico.", maxlength: $.validator.format("Prosimo, da ne vnašate več kot {0} znakov."), minlength: $.validator.format("Prosimo, vnesite vsaj {0} znakov."), rangelength: $.validator.format("Prosimo, vnesite od {0} do {1} znakov."), range: $.validator.format("Prosimo, vnesite vrednost med {0} in {1}."), max: $.validator.format("Prosimo, vnesite vrednost manjšo ali enako {0}."), min: $.validator.format("Prosimo, vnesite vrednost večjo ali enako {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_sk.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: SK (Slovak; slovenčina, slovenský jazyk) */ jQuery.extend(jQuery.validator.messages, { required: "Povinné zadať.", maxlength: jQuery.validator.format("Maximálne {0} znakov."), minlength: jQuery.validator.format("Minimálne {0} znakov."), rangelength: jQuery.validator.format("Minimálne {0} a Maximálne {0} znakov."), email: "E-mailová adresa musí byť platná.", url: "URL musí byť platný.", date: "Musí byť dátum.", number: "Musí byť číslo.", digits: "Môže obsahovať iba číslice.", equalTo: "Dva hodnoty sa musia rovnať.", range: jQuery.validator.format("Musí byť medzi {0} a {1}."), max: jQuery.validator.format("Nemôže byť viac ako{0}."), min: jQuery.validator.format("Nemôže byť menej ako{0}."), creditcard: "Číslo platobnej karty musí byť platné." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_sl.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Language: SL (Slovenian; slovenski jezik) */ jQuery.extend(jQuery.validator.messages, { required: "To polje je obvezno.", remote: "Prosimo popravite to polje.", email: "Prosimo vnesite veljaven email naslov.", url: "Prosimo vnesite veljaven URL naslov.", date: "Prosimo vnesite veljaven datum.", dateISO: "Prosimo vnesite veljaven ISO datum.", number: "Prosimo vnesite veljavno število.", digits: "Prosimo vnesite samo števila.", creditcard: "Prosimo vnesite veljavno številko kreditne kartice.", equalTo: "Prosimo ponovno vnesite vrednost.", accept: "Prosimo vnesite vrednost z veljavno končnico.", maxlength: jQuery.validator.format("Prosimo vnesite največ {0} znakov."), minlength: jQuery.validator.format("Prosimo vnesite najmanj {0} znakov."), rangelength: jQuery.validator.format("Prosimo vnesite najmanj {0} in največ {1} znakov."), range: jQuery.validator.format("Prosimo vnesite vrednost med {0} in {1}."), max: jQuery.validator.format("Prosimo vnesite vrednost manjše ali enako {0}."), min: jQuery.validator.format("Prosimo vnesite vrednost večje ali enako {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_sr.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: SR (Serbian; српски језик) */ jQuery.extend(jQuery.validator.messages, { required: "Поље је обавезно.", remote: "Средите ово поље.", email: "Унесите исправну и-мејл адресу", url: "Унесите исправан URL.", date: "Унесите исправан датум.", dateISO: "Унесите исправан датум (ISO).", number: "Унесите исправан број.", digits: "Унесите само цифе.", creditcard: "Унесите исправан број кредитне картице.", equalTo: "Унесите исту вредност поново.", accept: "Унесите вредност са одговарајућом екстензијом.", maxlength: $.validator.format("Унесите мање од {0}карактера."), minlength: $.validator.format("Унесите барем {0} карактера."), rangelength: $.validator.format("Унесите вредност дугачку између {0} и {1} карактера."), range: $.validator.format("Унесите вредност између {0} и {1}."), max: $.validator.format("Унесите вредност мању или једнаку {0}."), min: $.validator.format("Унесите вредност већу или једнаку {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_sv.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: SV (Swedish; Svenska) */ jQuery.extend(jQuery.validator.messages, { required: "Detta fält är obligatoriskt.", maxlength: jQuery.validator.format("Du får ange högst {0} tecken."), minlength: jQuery.validator.format("Du måste ange minst {0} tecken."), rangelength: jQuery.validator.format("Ange minst {0} och max {1} tecken."), email: "Ange en korrekt e-postadress.", url: "Ange en korrekt URL.", date: "Ange ett korrekt datum.", dateISO: "Ange ett korrekt datum (&ARING;&ARING;&ARING;&ARING;-MM-DD).", number: "Ange ett korrekt nummer.", digits: "Ange endast siffror.", equalTo: "Ange samma värde igen.", range: jQuery.validator.format("Ange ett värde mellan {0} och {1}."), max: jQuery.validator.format("Ange ett värde som är mindre eller lika med {0}."), min: jQuery.validator.format("Ange ett värde som är större eller lika med {0}."), creditcard: "Ange ett korrekt kreditkortsnummer." }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_th.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: TH (Thai; ไทย) */ jQuery.extend(jQuery.validator.messages, { required: "โปรดระบุ", remote: "โปรดแก้ไขให้ถูกต้อง", email: "โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง", url: "โปรดระบุ URL ที่ถูกต้อง", date: "โปรดระบุวันที่ ที่ถูกต้อง", dateISO: "โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).", number: "โปรดระบุทศนิยมที่ถูกต้อง", digits: "โปรดระบุจำนวนเต็มที่ถูกต้อง", creditcard: "โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง", equalTo: "โปรดระบุค่าเดิมอีกครั้ง", accept: "โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง", maxlength: jQuery.validator.format("โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ"), minlength: jQuery.validator.format("โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ"), rangelength: jQuery.validator.format("โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ"), range: jQuery.validator.format("โปรดระบุค่าระหว่าง {0} และ {1}"), max: jQuery.validator.format("โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}"), min: jQuery.validator.format("โปรดระบุค่ามากกว่าหรือเท่ากับ {0}") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_tr.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: TR (Turkish; Türkçe) */ jQuery.extend(jQuery.validator.messages, { required: "Bu alanın doldurulması zorunludur.", remote: "Lütfen bu alanı düzeltin.", email: "Lütfen geçerli bir e-posta adresi giriniz.", url: "Lütfen geçerli bir web adresi (URL) giriniz.", date: "Lütfen geçerli bir tarih giriniz.", dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)", number: "Lütfen geçerli bir sayı giriniz.", digits: "Lütfen sadece sayısal karakterler giriniz.", creditcard: "Lütfen geçerli bir kredi kartı giriniz.", equalTo: "Lütfen aynı değeri tekrar giriniz.", accept: "Lütfen geçerli uzantıya sahip bir değer giriniz.", maxlength: jQuery.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."), minlength: jQuery.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."), rangelength: jQuery.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."), range: jQuery.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."), max: jQuery.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."), min: jQuery.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_uk.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: UK (Ukrainian; українська мова) */ jQuery.extend(jQuery.validator.messages, { required: "Це поле необхідно заповнити.", remote: "Будь ласка, введіть правильне значення.", email: "Будь ласка, введіть коректну адресу електронної пошти.", url: "Будь ласка, введіть коректний URL.", date: "Будь ласка, введіть коректну дату.", dateISO: "Будь ласка, введіть коректну дату у форматі ISO.", number: "Будь ласка, введіть число.", digits: "Вводите потрібно лише цифри.", creditcard: "Будь ласка, введіть правильний номер кредитної карти.", equalTo: "Будь ласка, введіть таке ж значення ще раз.", accept: "Будь ласка, виберіть файл з правильним розширенням.", maxlength: jQuery.validator.format("Будь ласка, введіть не більше {0} символів."), minlength: jQuery.validator.format("Будь ласка, введіть не менше {0} символів."), rangelength: jQuery.validator.format("Будь ласка, введіть значення довжиною від {0} до {1} символів."), range: jQuery.validator.format("Будь ласка, введіть число від {0} до {1}."), max: jQuery.validator.format("Будь ласка, введіть число, менше або рівно {0}."), min: jQuery.validator.format("Будь ласка, введіть число, більше або рівно {0}.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_vi.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: VI (Vietnamese; Tiếng Việt) */ jQuery.extend(jQuery.validator.messages, { required: "Hãy nhập.", remote: "Hãy sửa cho đúng.", email: "Hãy nhập email.", url: "Hãy nhập URL.", date: "Hãy nhập ngày.", dateISO: "Hãy nhập ngày (ISO).", number: "Hãy nhập số.", digits: "Hãy nhập chữ số.", creditcard: "Hãy nhập số thẻ tín dụng.", equalTo: "Hãy nhập thêm lần nữa.", accept: "Phần mở rộng không đúng.", maxlength: jQuery.format("Hãy nhập từ {0} kí tự trở xuống."), minlength: jQuery.format("Hãy nhập từ {0} kí tự trở lên."), rangelength: jQuery.format("Hãy nhập từ {0} đến {1} kí tự."), range: jQuery.format("Hãy nhập từ {0} đến {1}."), max: jQuery.format("Hãy nhập từ {0} trở xuống."), min: jQuery.format("Hãy nhập từ {1} trở lên.") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_zh.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語) */ jQuery.extend(jQuery.validator.messages, { required: "必选字段", remote: "请修正该字段", email: "请输入正确格式的电子邮件", url: "请输入合法的网址", date: "请输入合法的日期", dateISO: "请输入合法的日期 (ISO).", number: "请输入合法的数字", digits: "只能输入整数", creditcard: "请输入合法的信用卡号", equalTo: "请再次输入相同的值", accept: "请输入拥有合法后缀名的字符串", maxlength: jQuery.validator.format("请输入一个长度最多是 {0} 的字符串"), minlength: jQuery.validator.format("请输入一个长度最少是 {0} 的字符串"), rangelength: jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"), range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"), max: jQuery.validator.format("请输入一个最大为 {0} 的值"), min: jQuery.validator.format("请输入一个最小为 {0} 的值") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/messages_zh_TW.js ================================================ /* * Translated default messages for the jQuery validation plugin. * Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語) * Region: TW (Taiwan) */ jQuery.extend(jQuery.validator.messages, { required: "必填", remote: "請修正此欄位", email: "請輸入正確的電子信箱", url: "請輸入合法的URL", date: "請輸入合法的日期", dateISO: "請輸入合法的日期 (ISO).", number: "請輸入數字", digits: "請輸入整數", creditcard: "請輸入合法的信用卡號碼", equalTo: "請重複輸入一次", accept: "請輸入有效的後缀字串", maxlength: jQuery.validator.format("請輸入長度不大於{0} 的字串"), minlength: jQuery.validator.format("請輸入長度不小於 {0} 的字串"), rangelength: jQuery.validator.format("請輸入長度介於 {0} 和 {1} 之間的字串"), range: jQuery.validator.format("請輸入介於 {0} 和 {1} 之間的數值"), max: jQuery.validator.format("請輸入不大於 {0} 的數值"), min: jQuery.validator.format("請輸入不小於 {0} 的數值") }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/methods_de.js ================================================ /* * Localized default methods for the jQuery validation plugin. * Locale: DE */ jQuery.extend(jQuery.validator.methods, { date: function(value, element) { return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); }, number: function(value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/methods_nl.js ================================================ /* * Localized default methods for the jQuery validation plugin. * Locale: NL */ jQuery.extend(jQuery.validator.methods, { date: function(value, element) { return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/localization/methods_pt.js ================================================ /* * Localized default methods for the jQuery validation plugin. * Locale: PT_BR */ jQuery.extend(jQuery.validator.methods, { date: function(value, element) { return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value); } }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/package.json ================================================ { "name": "jquery-validation", "title": "jQuery Validation Plugin", "description": "Form validation made easy", "version": "1.10.0", "homepage": "https://github.com/jzaefferer/jquery-validation", "author": { "name": "Jörn Zaefferer", "email": "joern.zaefferer@gmail.com", "url": "http://bassistance.de" }, "repository": { "type": "git", "url": "git://github.com/jzaefferer/jquery-validation.git" }, "bugs": { "url": "https://github.com/jzaefferer/jquery-validation/issues" }, "licenses": [ { "type": "MIT", "url": "http://www.opensource.org/licenses/MIT" }, { "type": "GPL", "url": "http://www.opensource.org/licenses/GPL-2.0" } ], "dependencies": {}, "devDependencies": { "grunt": "0.3.x", "zipstream": "0.2.x" }, "keywords": [] } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/events.html ================================================ Test for jQuery validate() plugin
        A simple comment form with submit validation and default messages

        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/firebug/firebug.css ================================================ html, body { margin: 0; background: #FFFFFF; font-family: Lucida Grande, Tahoma, sans-serif; font-size: 11px; overflow: hidden; } a { text-decoration: none; } a:hover { text-decoration: underline; } .toolbar { height: 14px; border-top: 1px solid ThreeDHighlight; border-bottom: 1px solid ThreeDShadow; padding: 2px 6px; background: ThreeDFace; } .toolbarRight { position: absolute; top: 4px; right: 6px; } #log { overflow: auto; position: absolute; left: 0; width: 100%; } #commandLine { position: absolute; bottom: 0; left: 0; width: 100%; height: 18px; border: none; border-top: 1px solid ThreeDShadow; } /************************************************************************************************/ .logRow { position: relative; border-bottom: 1px solid #D7D7D7; padding: 2px 4px 1px 6px; background-color: #FFFFFF; } .logRow-command { font-family: Monaco, monospace; color: blue; } .objectBox-null { padding: 0 2px; border: 1px solid #666666; background-color: #888888; color: #FFFFFF; } .objectBox-string { font-family: Monaco, monospace; color: red; white-space: pre; } .objectBox-number { color: #000088; } .objectBox-function { font-family: Monaco, monospace; color: DarkGreen; } .objectBox-object { color: DarkGreen; font-weight: bold; } /************************************************************************************************/ .logRow-info, .logRow-error, .logRow-warning { background: #FFFFFF no-repeat 2px 2px; padding-left: 20px; padding-bottom: 3px; } .logRow-info { background-image: url(infoIcon.png); } .logRow-warning { background-color: cyan; background-image: url(warningIcon.png); } .logRow-error { background-color: LightYellow; background-image: url(errorIcon.png); } .errorMessage { vertical-align: top; color: #FF0000; } .objectBox-sourceLink { position: absolute; right: 4px; top: 2px; padding-left: 8px; font-family: Lucida Grande, sans-serif; font-weight: bold; color: #0000FF; } /************************************************************************************************/ .logRow-group { background: #EEEEEE; border-bottom: none; } .logGroup { background: #EEEEEE; } .logGroupBox { margin-left: 24px; border-top: 1px solid #D7D7D7; border-left: 1px solid #D7D7D7; } /************************************************************************************************/ .selectorTag, .selectorId, .selectorClass { font-family: Monaco, monospace; font-weight: normal; } .selectorTag { color: #0000FF; } .selectorId { color: DarkBlue; } .selectorClass { color: red; } /************************************************************************************************/ .objectBox-element { font-family: Monaco, monospace; color: #000088; } .nodeChildren { margin-left: 16px; } .nodeTag { color: blue; } .nodeValue { color: #FF0000; font-weight: normal; } .nodeText, .nodeComment { margin: 0 2px; vertical-align: top; } .nodeText { color: #333333; } .nodeComment { color: DarkGreen; } /************************************************************************************************/ .propertyNameCell { vertical-align: top; } .propertyName { font-weight: bold; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/firebug/firebug.html ================================================ Firebug
        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/firebug/firebug.js ================================================ if (!("console" in window) || !("firebug" in console)) { (function() { window.console = { log: function() { logFormatted(arguments, ""); }, debug: function() { logFormatted(arguments, "debug"); }, info: function() { logFormatted(arguments, "info"); }, warn: function() { logFormatted(arguments, "warning"); }, error: function() { logFormatted(arguments, "error"); }, assert: function(truth, message) { if (!truth) { var args = []; for (var i = 1; i < arguments.length; ++i) args.push(arguments[i]); logFormatted(args.length ? args : ["Assertion Failure"], "error"); throw message ? message : "Assertion Failure"; } }, dir: function(object) { var html = []; var pairs = []; for (var name in object) { try { pairs.push([name, object[name]]); } catch (exc) { } } pairs.sort(function(a, b) { return a[0] < b[0] ? -1 : 1; }); html.push(''); for (var i = 0; i < pairs.length; ++i) { var name = pairs[i][0], value = pairs[i][1]; html.push('', '', ''); } html.push('
        ', escapeHTML(name), ''); appendObject(value, html); html.push('
        '); logRow(html, "dir"); }, dirxml: function(node) { var html = []; appendNode(node, html); logRow(html, "dirxml"); }, group: function() { logRow(arguments, "group", pushGroup); }, groupEnd: function() { logRow(arguments, "", popGroup); }, time: function(name) { timeMap[name] = (new Date()).getTime(); }, timeEnd: function(name) { if (name in timeMap) { var delta = (new Date()).getTime() - timeMap[name]; logFormatted([name+ ":", delta+"ms"]); delete timeMap[name]; } }, count: function() { this.warn(["count() not supported."]); }, trace: function() { this.warn(["trace() not supported."]); }, profile: function() { this.warn(["profile() not supported."]); }, profileEnd: function() { }, clear: function() { consoleBody.innerHTML = ""; }, open: function() { toggleConsole(true); }, close: function() { if (frameVisible) toggleConsole(); } }; // ******************************************************************************************** var consoleFrame = null; var consoleBody = null; var commandLine = null; var frameVisible = false; var messageQueue = []; var groupStack = []; var timeMap = {}; var clPrefix = ">>> "; var isFirefox = navigator.userAgent.indexOf("Firefox") != -1; var isIE = navigator.userAgent.indexOf("MSIE") != -1; var isOpera = navigator.userAgent.indexOf("Opera") != -1; var isSafari = navigator.userAgent.indexOf("AppleWebKit") != -1; // ******************************************************************************************** function toggleConsole(forceOpen) { frameVisible = forceOpen || !frameVisible; if (consoleFrame) consoleFrame.style.visibility = frameVisible ? "visible" : "hidden"; else waitForBody(); } function focusCommandLine() { toggleConsole(true); if (commandLine) commandLine.focus(); } function waitForBody() { if (document.body) createFrame(); else setTimeout(waitForBody, 200); } function createFrame() { if (consoleFrame) return; window.onFirebugReady = function(doc) { window.onFirebugReady = null; var toolbar = doc.getElementById("toolbar"); toolbar.onmousedown = onSplitterMouseDown; commandLine = doc.getElementById("commandLine"); addEvent(commandLine, "keydown", onCommandLineKeyDown); addEvent(doc, isIE || isSafari ? "keydown" : "keypress", onKeyDown); consoleBody = doc.getElementById("log"); layout(); flush(); } var baseURL = getFirebugURL(); consoleFrame = document.createElement("iframe"); consoleFrame.setAttribute("src", baseURL+"/firebug.html"); consoleFrame.setAttribute("frameBorder", "0"); consoleFrame.style.visibility = (frameVisible ? "visible" : "hidden"); consoleFrame.style.zIndex = "2147483647"; consoleFrame.style.position = "fixed"; consoleFrame.style.width = "100%"; consoleFrame.style.left = "0"; consoleFrame.style.bottom = "0"; consoleFrame.style.height = "200px"; document.body.appendChild(consoleFrame); } function getFirebugURL() { var scripts = document.getElementsByTagName("script"); for (var i = 0; i < scripts.length; ++i) { if (scripts[i].src.indexOf("firebug.js") != -1) { var lastSlash = scripts[i].src.lastIndexOf("/"); return scripts[i].src.substr(0, lastSlash); } } } function evalCommandLine() { var text = commandLine.value; commandLine.value = ""; logRow([clPrefix, text], "command"); var value; try { value = eval(text); } catch (exc) { } console.log(value); } function layout() { var toolbar = consoleBody.ownerDocument.getElementById("toolbar"); var height = consoleFrame.offsetHeight - (toolbar.offsetHeight + commandLine.offsetHeight); consoleBody.style.top = toolbar.offsetHeight + "px"; consoleBody.style.height = height + "px"; commandLine.style.top = (consoleFrame.offsetHeight - commandLine.offsetHeight) + "px"; } function logRow(message, className, handler) { if (consoleBody) writeMessage(message, className, handler); else { messageQueue.push([message, className, handler]); waitForBody(); } } function flush() { var queue = messageQueue; messageQueue = []; for (var i = 0; i < queue.length; ++i) writeMessage(queue[i][0], queue[i][1], queue[i][2]); } function writeMessage(message, className, handler) { var isScrolledToBottom = consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight; if (!handler) handler = writeRow; handler(message, className); if (isScrolledToBottom) consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight; } function appendRow(row) { var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody; container.appendChild(row); } function writeRow(message, className) { var row = consoleBody.ownerDocument.createElement("div"); row.className = "logRow" + (className ? " logRow-"+className : ""); row.innerHTML = message.join(""); appendRow(row); } function pushGroup(message, className) { logFormatted(message, className); var groupRow = consoleBody.ownerDocument.createElement("div"); groupRow.className = "logGroup"; var groupRowBox = consoleBody.ownerDocument.createElement("div"); groupRowBox.className = "logGroupBox"; groupRow.appendChild(groupRowBox); appendRow(groupRowBox); groupStack.push(groupRowBox); } function popGroup() { groupStack.pop(); } // ******************************************************************************************** function logFormatted(objects, className) { var html = []; var format = objects[0]; var objIndex = 0; if (typeof(format) != "string") { format = ""; objIndex = -1; } var parts = parseFormat(format); for (var i = 0; i < parts.length; ++i) { var part = parts[i]; if (part && typeof(part) == "object") { var object = objects[++objIndex]; part.appender(object, html); } else appendText(part, html); } for (var i = objIndex+1; i < objects.length; ++i) { appendText(" ", html); var object = objects[i]; if (typeof(object) == "string") appendText(object, html); else appendObject(object, html); } logRow(html, className); } function parseFormat(format) { var parts = []; var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/; var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat}; for (var m = reg.exec(format); m; m = reg.exec(format)) { var type = m[8] ? m[8] : m[5]; var appender = type in appenderMap ? appenderMap[type] : appendObject; var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0); parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1)); parts.push({appender: appender, precision: precision}); format = format.substr(m.index+m[0].length); } parts.push(format); return parts; } function escapeHTML(value) { function replaceChars(ch) { switch (ch) { case "<": return "<"; case ">": return ">"; case "&": return "&"; case "'": return "'"; case '"': return """; } return "?"; }; return String(value).replace(/[<>&"']/g, replaceChars); } function objectToString(object) { try { return object+""; } catch (exc) { return null; } } // ******************************************************************************************** function appendText(object, html) { html.push(escapeHTML(objectToString(object))); } function appendNull(object, html) { html.push('', escapeHTML(objectToString(object)), ''); } function appendString(object, html) { html.push('"', escapeHTML(objectToString(object)), '"'); } function appendInteger(object, html) { html.push('', escapeHTML(objectToString(object)), ''); } function appendFloat(object, html) { html.push('', escapeHTML(objectToString(object)), ''); } function appendFunction(object, html) { var reName = /function ?(.*?)\(/; var m = reName.exec(objectToString(object)); var name = m ? m[1] : "function"; html.push('', escapeHTML(name), '()'); } function appendObject(object, html) { try { if (object == undefined) appendNull("undefined", html); else if (object == null) appendNull("null", html); else if (typeof object == "string") appendString(object, html); else if (typeof object == "number") appendInteger(object, html); else if (typeof object == "function") appendFunction(object, html); else if (object.nodeType == 1) appendSelector(object, html); else if (typeof object == "object") appendObjectFormatted(object, html); else appendText(object, html); } catch (exc) { } } function appendObjectFormatted(object, html) { var text = objectToString(object); var reObject = /\[object (.*?)\]/; var m = reObject.exec(text); html.push('', m ? m[1] : text, '') } function appendSelector(object, html) { html.push(''); html.push('', escapeHTML(object.nodeName.toLowerCase()), ''); if (object.id) html.push('#', escapeHTML(object.id), ''); if (object.className) html.push('.', escapeHTML(object.className), ''); html.push(''); } function appendNode(node, html) { if (node.nodeType == 1) { html.push( '
        ', '<', node.nodeName.toLowerCase(), ''); for (var i = 0; i < node.attributes.length; ++i) { var attr = node.attributes[i]; if (!attr.specified) continue; html.push(' ', attr.nodeName.toLowerCase(), '="', escapeHTML(attr.nodeValue), '"') } if (node.firstChild) { html.push('>
        '); for (var child = node.firstChild; child; child = child.nextSibling) appendNode(child, html); html.push('
        </', node.nodeName.toLowerCase(), '>
        '); } else html.push('/>
        '); } else if (node.nodeType == 3) { html.push('
        ', escapeHTML(node.nodeValue), '
        '); } } // ******************************************************************************************** function addEvent(object, name, handler) { if (document.all) object.attachEvent("on"+name, handler); else object.addEventListener(name, handler, false); } function removeEvent(object, name, handler) { if (document.all) object.detachEvent("on"+name, handler); else object.removeEventListener(name, handler, false); } function cancelEvent(event) { if (document.all) event.cancelBubble = true; else event.stopPropagation(); } function onError(msg, href, lineNo) { var html = []; var lastSlash = href.lastIndexOf("/"); var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1); html.push( '', msg, '', '' ); logRow(html, "error"); }; function onKeyDown(event) { if (event.keyCode == 123) toggleConsole(); else if ((event.keyCode == 108 || event.keyCode == 76) && event.shiftKey && (event.metaKey || event.ctrlKey)) focusCommandLine(); else return; cancelEvent(event); } function onSplitterMouseDown(event) { if (isSafari || isOpera) return; addEvent(document, "mousemove", onSplitterMouseMove); addEvent(document, "mouseup", onSplitterMouseUp); for (var i = 0; i < frames.length; ++i) { addEvent(frames[i].document, "mousemove", onSplitterMouseMove); addEvent(frames[i].document, "mouseup", onSplitterMouseUp); } } function onSplitterMouseMove(event) { var win = document.all ? event.srcElement.ownerDocument.parentWindow : event.target.ownerDocument.defaultView; var clientY = event.clientY; if (win != win.parent) clientY += win.frameElement ? win.frameElement.offsetTop : 0; var height = consoleFrame.offsetTop + consoleFrame.clientHeight; var y = height - clientY; consoleFrame.style.height = y + "px"; layout(); } function onSplitterMouseUp(event) { removeEvent(document, "mousemove", onSplitterMouseMove); removeEvent(document, "mouseup", onSplitterMouseUp); for (var i = 0; i < frames.length; ++i) { removeEvent(frames[i].document, "mousemove", onSplitterMouseMove); removeEvent(frames[i].document, "mouseup", onSplitterMouseUp); } } function onCommandLineKeyDown(event) { if (event.keyCode == 13) evalCommandLine(); else if (event.keyCode == 27) commandLine.value = ""; } window.onerror = onError; addEvent(document, isIE || isSafari ? "keydown" : "keypress", onKeyDown); if (document.documentElement.getAttribute("debug") == "true") toggleConsole(true); })(); } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/firebug/firebugx.js ================================================ if (!("console" in window) || !("firebug" in console)) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {} } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/index.html ================================================ jQuery - Validation Test Suite

        jQuery Validation Plugin Test Suite jQuery 1.3.2 jQuery 1.4.2 jQuery 1.4.4 jQuery 1.5.2 jQuery 1.6.1 jQuery 1.7.2 jQuery Latest (git)

          See this blog entry for more information.

          Here are some links in a normal paragraph: Google, Google Groups. This link has class="blog": diveintomark

          Everything inside the red border is inside a div with id="foo".

          This is a normal link: Yahoo

          This link has class="blog": Simon Willison's Weblog

          Try them out:

                ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/jquery.js ================================================ (function() { var parts = document.location.search.slice( 1 ).split( "&" ), length = parts.length, i = 0, current, version = "1.3.2", file = "http://code.jquery.com/jquery-git.js"; for ( ; i < length; i++ ) { current = parts[ i ].split( "=" ); if ( current[ 0 ] === "jquery" ) { version = current[ 1 ]; break; } } if (version != "git") { file = "../lib/jquery-" + version + ".js"; } document.write( "" ); })(); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/large.html ================================================ Test for jQuery validate() plugin
                A simple comment form with submit validation and default messages

                ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/messages.js ================================================ module("messages"); test("predefined message not overwritten by addMethod(a, b, undefined)", function() { var message = "my custom message"; $.validator.messages.custom = message; $.validator.addMethod("custom", function() {}); deepEqual(message, $.validator.messages.custom); delete $.validator.messages.custom; delete $.validator.methods.custom; }); test("group error messages", function() { $.validator.addClassRules({ requiredDateRange: {required:true, date:true, dateRange:true} }); $.validator.addMethod("dateRange", function() { return new Date($("#fromDate").val()) < new Date($("#toDate").val()); }, "Please specify a correct date range."); var form = $("#dateRangeForm"); form.validate({ groups: { dateRange: "fromDate toDate" }, errorPlacement: function(error) { form.find(".errorContainer").append(error); } }); ok( !form.valid() ); equal( 1, form.find(".errorContainer *").length ); equal( "Please enter a valid date.", form.find(".errorContainer label.error").text() ); $("#fromDate").val("12/03/2006"); $("#toDate").val("12/01/2006"); ok( !form.valid() ); equal( "Please specify a correct date range.", form.find(".errorContainer label.error").text() ); $("#toDate").val("12/04/2006"); ok( form.valid() ); ok( form.find(".errorContainer label.error").is(":hidden") ); }); test("read messages from metadata", function() { var form = $("#testForm9") form.validate(); var e = $("#testEmail9") e.valid(); equal( form.find("label").text(), "required" ); e.val("bla").valid(); equal( form.find("label").text(), "email" ); }); test("read messages from metadata, with meta option specified, but no metadata in there", function() { var form = $("#testForm1clean") form.validate({ meta: "validate", rules: { firstname: "required" } }); ok(!form.valid(), "not valid"); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/methods.js ================================================ (function($) { function methodTest( methodName ) { var v = jQuery("#form").validate(); var method = $.validator.methods[methodName]; var element = $("#firstname")[0]; return function(value, param) { element.value = value; return method.call( v, value, element, param ); }; } module("methods"); test("default messages", function() { var m = $.validator.methods; $.each(m, function(key) { ok( jQuery.validator.messages[key], key + " has a default message." ); }); }); test("digit", function() { var method = methodTest("digits"); ok( method( "123" ), "Valid digits" ); ok(!method( "123.000" ), "Invalid digits" ); ok(!method( "123.000,00" ), "Invalid digits" ); ok(!method( "123.0.0,0" ), "Invalid digits" ); ok(!method( "x123" ), "Invalid digits" ); ok(!method( "100.100,0,0" ), "Invalid digits" ); }); test("url", function() { var method = methodTest("url"); ok( method( "http://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "https://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "ftp://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "http://www.føtex.dk/" ), "Valid url, danish unicode characters" ); ok( method( "http://bösendorfer.de/" ), "Valid url, german unicode characters" ); ok( method( "http://192.168.8.5" ), "Valid IP Address" ) ok(!method( "http://192.168.8." ), "Invalid IP Address" ) ok(!method( "http://bassistance" ), "Invalid url" ); // valid ok(!method( "http://bassistance." ), "Invalid url" ); // valid ok(!method( "http://bassistance,de" ), "Invalid url" ); ok(!method( "http://bassistance;de" ), "Invalid url" ); ok(!method( "http://.bassistancede" ), "Invalid url" ); ok(!method( "bassistance.de" ), "Invalid url" ); }); test("url2 (tld optional)", function() { var method = methodTest("url2"); ok( method( "http://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "https://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "ftp://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" ); ok( method( "http://www.føtex.dk/" ), "Valid url, danish unicode characters" ); ok( method( "http://bösendorfer.de/" ), "Valid url, german unicode characters" ); ok( method( "http://192.168.8.5" ), "Valid IP Address" ) ok(!method( "http://192.168.8." ), "Invalid IP Address" ) ok( method( "http://bassistance" ), "Invalid url" ); ok( method( "http://bassistance." ), "Invalid url" ); ok(!method( "http://bassistance,de" ), "Invalid url" ); ok(!method( "http://bassistance;de" ), "Invalid url" ); ok(!method( "http://.bassistancede" ), "Invalid url" ); ok(!method( "bassistance.de" ), "Invalid url" ); }); test("email", function() { var method = methodTest("email"); ok( method( "name@domain.tld" ), "Valid email" ); ok( method( "name@domain.tl" ), "Valid email" ); ok( method( "bart+bart@tokbox.com" ), "Valid email" ); ok( method( "bart+bart@tokbox.travel" ), "Valid email" ); ok( method( "n@d.tld" ), "Valid email" ); ok( method( "ole@føtex.dk"), "Valid email" ); ok( method( "jörn@bassistance.de"), "Valid email" ); ok( method( "bla.blu@g.mail.com"), "Valid email" ); ok( method( "\"Scott Gonzalez\"@example.com" ), "Valid email" ); ok( method( "\"Scott González\"@example.com" ), "Valid email" ); ok( method( "\"name.\"@domain.tld" ), "Valid email" ); // valid without top label ok( method( "\"name,\"@domain.tld" ), "Valid email" ); // valid without top label ok( method( "\"name;\"@domain.tld" ), "Valid email" ); // valid without top label ok(!method( "name" ), "Invalid email" ); ok(!method( "name@" ), "Invalid email" ); ok(!method( "name@domain" ), "Invalid email" ); ok(!method( "name.@domain.tld" ), "Invalid email" ); ok(!method( "name,@domain.tld" ), "Invalid email" ); ok(!method( "name;@domain.tld" ), "Invalid email" ); ok(!method( "name;@domain.tld." ), "Invalid email" ); }); test("email2 (tld optional)", function() { var method = methodTest("email2"); ok( method( "name@domain.tld" ), "Valid email" ); ok( method( "name@domain.tl" ), "Valid email" ); ok( method( "bart+bart@tokbox.com" ), "Valid email" ); ok( method( "bart+bart@tokbox.travel" ), "Valid email" ); ok( method( "n@d.tld" ), "Valid email" ); ok( method( "ole@føtex.dk"), "Valid email" ); ok( method( "jörn@bassistance.de"), "Valid email" ); ok( method( "bla.blu@g.mail.com"), "Valid email" ); ok( method( "\"Scott Gonzalez\"@example.com" ), "Valid email" ); ok( method( "\"Scott González\"@example.com" ), "Valid email" ); ok( method( "\"name.\"@domain.tld" ), "Valid email" ); // valid without top label ok( method( "\"name,\"@domain.tld" ), "Valid email" ); // valid without top label ok( method( "\"name;\"@domain.tld" ), "Valid email" ); // valid without top label ok(!method( "name" ), "Invalid email" ); ok(!method( "name@" ), "Invalid email" ); ok( method( "name@domain" ), "Invalid email" ); ok(!method( "name.@domain.tld" ), "Invalid email" ); ok(!method( "name,@domain.tld" ), "Invalid email" ); ok(!method( "name;@domain.tld" ), "Invalid email" ); }); test("number", function() { var method = methodTest("number"); ok( method( "123" ), "Valid number" ); ok( method( "-123" ), "Valid number" ); ok( method( "123,000" ), "Valid number" ); ok( method( "-123,000" ), "Valid number" ); ok( method( "123,000.00" ), "Valid number" ); ok( method( "-123,000.00" ), "Valid number" ); ok(!method( "123.000,00" ), "Invalid number" ); ok(!method( "123.0.0,0" ), "Invalid number" ); ok(!method( "x123" ), "Invalid number" ); ok(!method( "100.100,0,0" ), "Invalid number" ); ok( method( "" ), "Blank is valid" ); ok( method( "123" ), "Valid decimal" ); ok( method( "123000" ), "Valid decimal" ); ok( method( "123000.12" ), "Valid decimal" ); ok( method( "-123000.12" ), "Valid decimal" ); ok( method( "123.000" ), "Valid decimal" ); ok( method( "123,000.00" ), "Valid decimal" ); ok( method( "-123,000.00" ), "Valid decimal" ); ok( method( ".100" ), "Valid decimal" ); ok(!method( "1230,000.00" ), "Invalid decimal" ); ok(!method( "123.0.0,0" ), "Invalid decimal" ); ok(!method( "x123" ), "Invalid decimal" ); ok(!method( "100.100,0,0" ), "Invalid decimal" ); }); /* disabled for now, need to figure out how to test localized methods test("numberDE", function() { var method = methodTest("numberDE"); ok( method( "123" ), "Valid numberDE" ); ok( method( "-123" ), "Valid numberDE" ); ok( method( "123.000" ), "Valid numberDE" ); ok( method( "-123.000" ), "Valid numberDE" ); ok( method( "123.000,00" ), "Valid numberDE" ); ok( method( "-123.000,00" ), "Valid numberDE" ); ok(!method( "123,000.00" ), "Invalid numberDE" ); ok(!method( "123,0,0.0" ), "Invalid numberDE" ); ok(!method( "x123" ), "Invalid numberDE" ); ok(!method( "100,100.0.0" ), "Invalid numberDE" ); ok( method( "" ), "Blank is valid" ); ok( method( "123" ), "Valid decimalDE" ); ok( method( "123000" ), "Valid decimalDE" ); ok( method( "123000,12" ), "Valid decimalDE" ); ok( method( "-123000,12" ), "Valid decimalDE" ); ok( method( "123.000" ), "Valid decimalDE" ); ok( method( "123.000,00" ), "Valid decimalDE" ); ok( method( "-123.000,00" ), "Valid decimalDE" ) ok(!method( "123.0.0,0" ), "Invalid decimalDE" ); ok(!method( "x123" ), "Invalid decimalDE" ); ok(!method( "100,100.0.0" ), "Invalid decimalDE" ); }); */ test("date", function() { var method = methodTest("date"); ok( method( "06/06/1990" ), "Valid date" ); ok( method( "6/6/06" ), "Valid date" ); ok(!method( "1990x-06-06" ), "Invalid date" ); }); test("dateISO", function() { var method = methodTest("dateISO"); ok( method( "1990-06-06" ), "Valid date" ); ok( method( "1990/06/06" ), "Valid date" ); ok( method( "1990-6-6" ), "Valid date" ); ok( method( "1990/6/6" ), "Valid date" ); ok(!method( "1990-106-06" ), "Invalid date" ); ok(!method( "190-06-06" ), "Invalid date" ); }); /* disabled for now, need to figure out how to test localized methods test("dateDE", function() { var method = methodTest("dateDE"); ok( method( "03.06.1984" ), "Valid dateDE" ); ok( method( "3.6.84" ), "Valid dateDE" ); ok(!method( "6-6-06" ), "Invalid dateDE" ); ok(!method( "1990-06-06" ), "Invalid dateDE" ); ok(!method( "06/06/1990" ), "Invalid dateDE" ); ok(!method( "6/6/06" ), "Invalid dateDE" ); }); */ test("required", function() { var v = jQuery("#form").validate(), method = $.validator.methods.required, e = $('#text1, #text1b, #hidden2, #select1, #select2'); ok( method.call( v, e[0].value, e[0]), "Valid text input" ); ok(!method.call( v, e[1].value, e[1]), "Invalid text input" ); ok(!method.call( v, e[1].value, e[2]), "Invalid text input" ); ok(!method.call( v, e[2].value, e[3]), "Invalid select" ); ok( method.call( v, e[3].value, e[4]), "Valid select" ); e = $('#area1, #area2, #pw1, #pw2'); ok( method.call( v, e[0].value, e[0]), "Valid textarea" ); ok(!method.call( v, e[1].value, e[1]), "Invalid textarea" ); ok( method.call( v, e[2].value, e[2]), "Valid password input" ); ok(!method.call( v, e[3].value, e[3]), "Invalid password input" ); e = $('#radio1, #radio2, #radio3'); ok(!method.call( v, e[0].value, e[0]), "Invalid radio" ); ok( method.call( v, e[1].value, e[1]), "Valid radio" ); ok( method.call( v, e[2].value, e[2]), "Valid radio" ); e = $('#check1, #check2'); ok( method.call( v, e[0].value, e[0]), "Valid checkbox" ); ok(!method.call( v, e[1].value, e[1]), "Invalid checkbox" ); e = $('#select1, #select2, #select3, #select4'); ok(!method.call( v, e[0].value, e[0]), "Invalid select" ); ok( method.call( v, e[1].value, e[1]), "Valid select" ); ok( method.call( v, e[2].value, e[2]), "Valid select" ); ok( method.call( v, e[3].value, e[3]), "Valid select" ); }); test("required with dependencies", function() { var v = jQuery("#form").validate(), method = $.validator.methods.required, e = $('#hidden2, #select1, #area2, #radio1, #check2'); ok( method.call( v, e[0].value, e[0], "asffsaa"), "Valid text input due to depencie not met" ); ok(!method.call( v, e[0].value, e[0], "input"), "Invalid text input" ); ok( method.call( v, e[0].value, e[0], function() { return false; }), "Valid text input due to depencie not met" ); ok(!method.call( v, e[0].value, e[0], function() { return true; }), "Invalid text input" ); ok( method.call( v, e[1].value, e[1], "asfsfa"), "Valid select due to dependency not met" ); ok(!method.call( v, e[1].value, e[1], "input"), "Invalid select" ); ok( method.call( v, e[2].value, e[2], "asfsafsfa"), "Valid textarea due to dependency not met" ); ok(!method.call( v, e[2].value, e[2], "input"), "Invalid textarea" ); ok( method.call( v, e[3].value, e[3], "asfsafsfa"), "Valid radio due to dependency not met" ); ok(!method.call( v, e[3].value, e[3], "input"), "Invalid radio" ); ok( method.call( v, e[4].value, e[4], "asfsafsfa"), "Valid checkbox due to dependency not met" ); ok(!method.call( v, e[4].value, e[4], "input"), "Invalid checkbox" ); }); test("minlength", function() { var v = jQuery("#form").validate(), method = $.validator.methods.minlength, param = 2, e = $('#text1, #text1c, #text2, #text3'); ok( method.call( v, e[0].value, e[0], param), "Valid text input" ); ok(!method.call( v, e[1].value, e[1], param), "Invalid text input" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" ); ok( method.call( v, e[3].value, e[3], param), "Valid text input" ); e = $('#check1, #check2, #check3'); ok(!method.call( v, e[0].value, e[0], param), "Valid checkbox" ); ok( method.call( v, e[1].value, e[1], param), "Valid checkbox" ); ok( method.call( v, e[2].value, e[2], param), "Invalid checkbox" ); e = $('#select1, #select2, #select3, #select4, #select5'); ok(method.call( v, e[0].value, e[0], param), "Valid select " + e[0].id ); ok(!method.call( v, e[1].value, e[1], param), "Invalid select " + e[1].id ); ok( method.call( v, e[2].value, e[2], param), "Valid select " + e[2].id ); ok( method.call( v, e[3].value, e[3], param), "Valid select " + e[3].id ); ok( method.call( v, e[4].value, e[4], param), "Valid select " + e[4].id ); }); test("maxlength", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.maxlength, param = 4, e = $('#text1, #text2, #text3'); ok( method.call( v, e[0].value, e[0], param), "Valid text input" ); ok( method.call( v, e[1].value, e[1], param), "Valid text input" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" ); e = $('#check1, #check2, #check3'); ok( method.call( v, e[0].value, e[0], param), "Valid checkbox" ); ok( method.call( v, e[1].value, e[1], param), "Invalid checkbox" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid checkbox" ); e = $('#select1, #select2, #select3, #select4'); ok( method.call( v, e[0].value, e[0], param), "Valid select" ); ok( method.call( v, e[1].value, e[1], param), "Valid select" ); ok( method.call( v, e[2].value, e[2], param), "Valid select" ); ok(!method.call( v, e[3].value, e[3], param), "Invalid select" ); }); test("rangelength", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.rangelength, param = [2, 4], e = $('#text1, #text2, #text3'); ok( method.call( v, e[0].value, e[0], param), "Valid text input" ); ok(!method.call( v, e[1].value, e[1], param), "Invalid text input" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" ); }); test("min", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.min, param = 8, e = $('#value1, #value2, #value3'); ok(!method.call( v, e[0].value, e[0], param), "Invalid text input" ); ok( method.call( v, e[1].value, e[1], param), "Valid text input" ); ok( method.call( v, e[2].value, e[2], param), "Valid text input" ); }); test("max", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.max, param = 12, e = $('#value1, #value2, #value3'); ok( method.call( v, e[0].value, e[0], param), "Valid text input" ); ok( method.call( v, e[1].value, e[1], param), "Valid text input" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" ); }); test("range", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.range, param = [4,12], e = $('#value1, #value2, #value3'); ok(!method.call( v, e[0].value, e[0], param), "Invalid text input" ); ok( method.call( v, e[1].value, e[1], param), "Valid text input" ); ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" ); }); test("equalTo", function() { var v = jQuery("#form").validate(); var method = $.validator.methods.equalTo, e = $('#text1, #text2'); ok( method.call( v, "Test", e[0], "#text1"), "Text input" ); ok( method.call( v, "T", e[1], "#text2"), "Another one" ); }); test("creditcard", function() { var method = methodTest("creditcard"); ok( method( "446-667-651" ), "Valid creditcard number" ); ok( method( "446 667 651" ), "Valid creditcard number" ); ok( !method( "asdf" ), "Invalid creditcard number" ); }); test("extension", function() { var method = methodTest("extension"); ok( method( "picture.gif" ), "Valid default accept type" ); ok( method( "picture.jpg" ), "Valid default accept type" ); ok( method( "picture.jpeg" ), "Valid default accept type" ); ok( method( "picture.png" ), "Valid default accept type" ); ok( !method( "picture.pgn" ), "Invalid default accept type" ); var v = jQuery("#form").validate(), method = function(value, param) { return $.validator.methods.extension.call(v, value, $('#text1')[0], param); }; ok( method( "picture.doc", "doc"), "Valid custom accept type" ); ok( method( "picture.pdf", "doc|pdf"), "Valid custom accept type" ); ok( method( "picture.pdf", "pdf|doc"), "Valid custom accept type" ); ok( !method( "picture.pdf", "doc"), "Invalid custom accept type" ); ok( !method( "picture.doc", "pdf"), "Invalid custom accept type" ); ok( method( "picture.pdf", "doc,pdf"), "Valid custom accept type, comma seperated" ); ok( method( "picture.pdf", "pdf,doc"), "Valid custom accept type, comma seperated" ); ok( !method( "picture.pdf", "gop,top"), "Invalid custom accept type, comma seperated" ); }); test("remote", function() { expect(7); stop(); var e = $("#username"); var v = $("#userForm").validate({ rules: { username: { required: true, remote: "users.php" } }, messages: { username: { required: "Please", remote: jQuery.validator.format("{0} in use") } }, submitHandler: function() { ok( false, "submitHandler may never be called when validating only elements"); } }); $(document).ajaxStop(function() { $(document).unbind("ajaxStop"); equal( 1, v.size(), "There must be one error" ); equal( "Peter in use", v.errorList[0].message ); $(document).ajaxStop(function() { $(document).unbind("ajaxStop"); equal( 1, v.size(), "There must be one error" ); equal( "Peter2 in use", v.errorList[0].message ); start(); }); e.val("Peter2"); strictEqual( v.element(e), true, "new value, new request; dependency-mismatch considered as valid though" ); }); strictEqual( v.element(e), false, "invalid element, nothing entered yet" ); e.val("Peter"); strictEqual( v.element(e), true, "still invalid, because remote validation must block until it returns; dependency-mismatch considered as valid though" ); }); test("remote, customized ajax options", function() { expect(2); stop(); var v = $("#userForm").validate({ rules: { username: { required: true, remote: { url: "users.php", type: "POST", beforeSend: function(request, settings) { deepEqual(settings.type, "POST"); deepEqual(settings.data, "username=asdf&email=email.com"); }, data: { email: function() { return "email.com"; } }, complete: function() { start(); } } } } }); $("#username").val("asdf"); $("#userForm").valid(); }); test("remote extensions", function() { expect(5); stop(); var e = $("#username"); var v = $("#userForm").validate({ rules: { username: { required: true, remote: "users2.php" } }, messages: { username: { required: "Please" } }, submitHandler: function() { ok( false, "submitHandler may never be called when validating only elements"); } }); $(document).ajaxStop(function() { $(document).unbind("ajaxStop"); equal( 1, v.size(), "There must be one error" ); equal( v.errorList[0].message, "asdf is already taken, please try something else" ); v.element(e); equal( v.errorList[0].message, "asdf is already taken, please try something else", "message doesn't change on revalidation" ); start(); }); strictEqual( v.element(e), false, "invalid element, nothing entered yet" ); e.val("asdf"); strictEqual( v.element(e), true, "still invalid, because remote validation must block until it returns; dependency-mismatch considered as valid though" ); }); asyncTest("remote radio correct value sent", function() { expect(1); var e = $("#testForm10Radio2"); e.attr('checked', 'checked'); var v = $("#testForm10").validate({ rules: { testForm10Radio: { required: true, remote: { url: "echo.php", dataType: "json", success: function(data) { equal( data['testForm10Radio'], '2', ' correct radio value sent' ); start(); } } }, } }); v.element(e); }); asyncTest("remote reset clear old value", function() { expect(1); var e = $("#username"); var v = $("#userForm").validate({ rules: { username: { required: true, remote: { url: "echo.php", dataFilter: function(data) { var json = JSON.parse(data); if(json.username == 'asdf') { return "\"asdf is already taken\""; } return "\"" + true + "\""; } } } } }); $(document).ajaxStop(function() { var waitTimeout; $(document).unbind("ajaxStop"); $(document).ajaxStop(function() { clearTimeout(waitTimeout); ok( true, "Remote request sent to server" ); start(); }); v.resetForm(); e.val("asdf"); waitTimeout = setTimeout(function() { ok( false, "Remote server did not get request"); start(); }, 200); v.element(e); }); e.val("asdf"); v.element(e); }); module("additional methods"); test("phone (us)", function() { var method = methodTest("phoneUS"); ok( method( "1(212)-999-2345" ), "Valid us phone number" ); ok( method( "212 999 2344" ), "Valid us phone number" ); ok( method( "212-999-0983" ), "Valid us phone number" ); ok(!method( "111-123-5434" ), "Invalid us phone number" ); ok(!method( "212 123 4567" ), "Invalid us phone number" ); }); test("mobileUK", function() { var method = methodTest("mobileUK"); ok( method( "07734234323" ), "Valid UK Mobile Number" ); ok( method( "+447734234323" ), "Valid UK Mobile Number" ); ok( !method( "07034234323" ), "Invalid UK Mobile Number" ); ok( !method( "0753423432" ), "Invalid UK Mobile Number" ); ok( !method( "07604234323" ), "Invalid UK Mobile Number" ); ok( !method( "077342343234" ), "Invalid UK Mobile Number" ); ok( !method( "044342343234" ), "Invalid UK Mobile Number" ); ok( !method( "+44753423432" ), "Invalid UK Mobile Number" ); ok( !method( "+447604234323" ), "Invalid UK Mobile Number" ); ok( !method( "+4477342343234" ), "Invalid UK Mobile Number" ); ok( !method( "+4444342343234" ), "Invalid UK Mobile Number" ); }); test("dateITA", function() { var method = methodTest("dateITA"); ok( method( "01/01/1900" ), "Valid date ITA" ); ok(!method( "01/13/1990" ), "Invalid date ITA" ); ok(!method( "01.01.1900" ), "Invalid date ITA" ); }); test("time", function() { var method = methodTest("time"); ok( method("00:00"), "Valid time, lower bound" ); ok( method("23:59"), "Valid time, upper bound" ); ok( !method("12"), "Invalid time" ); ok( !method("00:60"), "Invalid time" ); ok( !method("24:60"), "Invalid time" ); ok( !method("24:00"), "Invalid time" ); ok( !method("29:59"), "Invalid time" ); ok( !method("30:00"), "Invalid time" ); }); test("time12h", function() { var method = methodTest("time12h"); ok( method("12:00 AM"), "Valid time, lower bound, am" ); ok( method("11:59 AM"), "Valid time, upper bound, am" ); ok( method("12:00 PM"), "Valid time, lower bound, pm" ); ok( method("11:59 PM"), "Valid time, upper bound, pm" ); ok( method("11:59 am"), "Valid time, also accept lowercase" ); ok( method("11:59 pm"), "Valid time, also accept lowercase" ); ok( !method("12:00"), "Invalid time" ); ok( !method("12:61 am"), "Invalid time" ); ok( !method("13:00 am"), "Invalid time" ); }); test("minWords", function() { var method = methodTest("minWords"); ok( method("hello worlds", 2), "plain text, valid" ); ok( method("hello world", 2), "html, valid" ); ok( !method("hello", 2), "plain text, invalid" ); ok( !method("world", 2), "html, invalid" ); ok( !method("world
                ", 2), "html, invalid" ); }); test("maxWords", function() { var method = methodTest("maxWords"); ok( method("hello", 2), "plain text, valid" ); ok( method("world", 2), "html, valid" ); ok( method("world
                ", 2), "html, valid" ); ok( method("hello worlds", 2), "plain text, valid" ); ok( method("hello world", 2), "html, valid" ); ok( !method("hello 123 world", 2), "plain text, invalid" ); ok( !method("hello 123 world", 2), "html, invalid" ); }); test("rangeWords", function() { var method = methodTest("rangeWords"); ok( method("hello", [0, 2]), "plain text, valid" ); ok( method("hello worlds", [0, 2]), "plain text, valid" ); ok( method("hello world", [0, 2]), "html, valid" ); ok( !method("hello worlds what is up", [0, 2]), "plain text, invalid" ); ok( !method("Hello world hello", [0, 2]), "html, invalid" ); }); test("pattern", function() { var method = methodTest("pattern"); ok( method( "AR1004", "AR\\d{4}" ), "Correct format for the given RegExp" ); ok( method( "AR1004", /^AR\d{4}$/ ), "Correct format for the given RegExp" ); ok( !method( "BR1004", /^AR\d{4}$/ ), "Invalid format for the given RegExp" ); }); function testCardTypeByNumber(number, cardname, expected) { $("#cardnumber").val(number); var actual = $("#ccform").valid(); equal(actual, expected, $.format("Expect card number {0} to validate to {1}, actually validated to ", number, expected)); } test('creditcardtypes, all', function() { $("#ccform").validate({ rules: { cardnumber: { creditcard: true, creditcardtypes: { all: true } } } }); testCardTypeByNumber("4111-1111-1111-1111", "VISA", true) testCardTypeByNumber("5111-1111-1111-1118", "MasterCard", true) testCardTypeByNumber("6111-1111-1111-1116", "Discover", true) testCardTypeByNumber("3400-0000-0000-009", "AMEX", true); testCardTypeByNumber("4111-1111-1111-1110", "VISA", false) testCardTypeByNumber("5432-1111-1111-1111", "MasterCard", false) testCardTypeByNumber("6611-6611-6611-6611", "Discover", false) testCardTypeByNumber("3777-7777-7777-7777", "AMEX", false) }); test('creditcardtypes, visa', function() { $("#ccform").validate({ rules: { cardnumber: { creditcard: true, creditcardtypes: { visa: true } } } }); testCardTypeByNumber("4111-1111-1111-1111", "VISA", true) testCardTypeByNumber("5111-1111-1111-1118", "MasterCard", false) testCardTypeByNumber("6111-1111-1111-1116", "Discover", false) testCardTypeByNumber("3400-0000-0000-009", "AMEX", false); }); test('creditcardtypes, mastercard', function() { $("#ccform").validate({ rules: { cardnumber: { creditcard: true, creditcardtypes: { mastercard: true } } } }); testCardTypeByNumber("5111-1111-1111-1118", "MasterCard", true) testCardTypeByNumber("6111-1111-1111-1116", "Discover", false) testCardTypeByNumber("3400-0000-0000-009", "AMEX", false); testCardTypeByNumber("4111-1111-1111-1111", "VISA", false); }); function fillFormWithValuesAndExpect(formSelector, inputValues, expected) { for (i=0; i < inputValues.length; i++) { $(formSelector + ' input:eq(' + i + ')').val(inputValues[i]); } var actual = $(formSelector).valid(); equal(actual, expected, $.format("Filled inputs of form '{0}' with {1} values ({2})", formSelector, inputValues.length, inputValues.toString())); } test('require_from_group', function() { $("#productInfo").validate({ rules: { partnumber: {require_from_group: [2,".productInfo"]}, description: {require_from_group: [2,".productInfo"]}, discount: {require_from_group: [2,".productInfo"]} } }); fillFormWithValuesAndExpect('#productInfo', [], false); fillFormWithValuesAndExpect('#productInfo', [123], false); $('#productInfo input[type="checkbox"]').attr('checked', 'checked'); fillFormWithValuesAndExpect('#productInfo', [123], true); $('#productInfo input[type="checkbox"]').removeAttr('checked'); fillFormWithValuesAndExpect('#productInfo', [123, 'widget'], true); fillFormWithValuesAndExpect('#productInfo', [123, 'widget', 'red'], true); fillFormWithValuesAndExpect('#productInfo', [123, 'widget', 'red'], true); }); test('skip_or_fill_minimum', function() { $("#productInfo").validate({ rules: { partnumber: {skip_or_fill_minimum: [2,".productInfo"]}, description: {skip_or_fill_minimum: [2,".productInfo"]}, color: {skip_or_fill_minimum: [2,".productInfo"]} } }); fillFormWithValuesAndExpect('#productInfo', [], true); fillFormWithValuesAndExpect('#productInfo', [123], false); fillFormWithValuesAndExpect('#productInfo', [123, 'widget'], true); fillFormWithValuesAndExpect('#productInfo', [123, 'widget', 'red'], true); }); test("zipcodeUS", function() { var method = methodTest("zipcodeUS"); ok( method( "12345" ), "Valid zip" ); ok( method( "12345-2345" ), "Valid zip" ); ok(!method( "1" ), "Invalid zip" ); ok(!method( "1234" ), "Invalid zip" ); ok(!method( "123-23" ), "Invalid zip" ); ok(!method( "12345-43" ), "Invalid zip" ); }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/qunit/qunit.css ================================================ /** * QUnit v1.5.0 - A JavaScript Unit Testing Framework * * http://docs.jquery.com/QUnit * * Copyright (c) 2012 John Resig, Jörn Zaefferer * Dual licensed under the MIT (MIT-LICENSE.txt) * or GPL (GPL-LICENSE.txt) licenses. */ /** Font Family and Sizes */ #qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; } #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } #qunit-tests { font-size: smaller; } /** Resets */ #qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { margin: 0; padding: 0; } /** Header */ #qunit-header { padding: 0.5em 0 0.5em 1em; color: #8699a4; background-color: #0d3349; font-size: 1.5em; line-height: 1em; font-weight: normal; border-radius: 15px 15px 0 0; -moz-border-radius: 15px 15px 0 0; -webkit-border-top-right-radius: 15px; -webkit-border-top-left-radius: 15px; } #qunit-header a { text-decoration: none; color: #c2ccd1; } #qunit-header a:hover, #qunit-header a:focus { color: #fff; } #qunit-header label { display: inline-block; } #qunit-banner { height: 5px; } #qunit-testrunner-toolbar { padding: 0.5em 0 0.5em 2em; color: #5E740B; background-color: #eee; } #qunit-userAgent { padding: 0.5em 0 0.5em 2.5em; background-color: #2b81af; color: #fff; text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; } /** Tests: Pass/Fail */ #qunit-tests { list-style-position: inside; } #qunit-tests li { padding: 0.4em 0.5em 0.4em 2.5em; border-bottom: 1px solid #fff; list-style-position: inside; } #qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { display: none; } #qunit-tests li strong { cursor: pointer; } #qunit-tests li a { padding: 0.5em; color: #c2ccd1; text-decoration: none; } #qunit-tests li a:hover, #qunit-tests li a:focus { color: #000; } #qunit-tests ol { margin-top: 0.5em; padding: 0.5em; background-color: #fff; border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius: 15px; box-shadow: inset 0px 2px 13px #999; -moz-box-shadow: inset 0px 2px 13px #999; -webkit-box-shadow: inset 0px 2px 13px #999; } #qunit-tests table { border-collapse: collapse; margin-top: .2em; } #qunit-tests th { text-align: right; vertical-align: top; padding: 0 .5em 0 0; } #qunit-tests td { vertical-align: top; } #qunit-tests pre { margin: 0; white-space: pre-wrap; word-wrap: break-word; } #qunit-tests del { background-color: #e0f2be; color: #374e0c; text-decoration: none; } #qunit-tests ins { background-color: #ffcaca; color: #500; text-decoration: none; } /*** Test Counts */ #qunit-tests b.counts { color: black; } #qunit-tests b.passed { color: #5E740B; } #qunit-tests b.failed { color: #710909; } #qunit-tests li li { margin: 0.5em; padding: 0.4em 0.5em 0.4em 0.5em; background-color: #fff; border-bottom: none; list-style-position: inside; } /*** Passing Styles */ #qunit-tests li li.pass { color: #5E740B; background-color: #fff; border-left: 26px solid #C6E746; } #qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } #qunit-tests .pass .test-name { color: #366097; } #qunit-tests .pass .test-actual, #qunit-tests .pass .test-expected { color: #999999; } #qunit-banner.qunit-pass { background-color: #C6E746; } /*** Failing Styles */ #qunit-tests li li.fail { color: #710909; background-color: #fff; border-left: 26px solid #EE5757; white-space: pre; } #qunit-tests > li:last-child { border-radius: 0 0 15px 15px; -moz-border-radius: 0 0 15px 15px; -webkit-border-bottom-right-radius: 15px; -webkit-border-bottom-left-radius: 15px; } #qunit-tests .fail { color: #000000; background-color: #EE5757; } #qunit-tests .fail .test-name, #qunit-tests .fail .module-name { color: #000000; } #qunit-tests .fail .test-actual { color: #EE5757; } #qunit-tests .fail .test-expected { color: green; } #qunit-banner.qunit-fail { background-color: #EE5757; } /** Result */ #qunit-testresult { padding: 0.5em 0.5em 0.5em 2.5em; color: #2b81af; background-color: #D2E0E6; border-bottom: 1px solid white; } #qunit-testresult .module-name { font-weight: bold; } /** Fixture */ #qunit-fixture { position: absolute; top: -10000px; left: -10000px; width: 1000px; height: 1000px; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/qunit/qunit.js ================================================ /** * QUnit v1.5.0 - A JavaScript Unit Testing Framework * * http://docs.jquery.com/QUnit * * Copyright (c) 2012 John Resig, Jörn Zaefferer * Dual licensed under the MIT (MIT-LICENSE.txt) * or GPL (GPL-LICENSE.txt) licenses. */ (function(window) { var defined = { setTimeout: typeof window.setTimeout !== "undefined", sessionStorage: (function() { var x = "qunit-test-string"; try { sessionStorage.setItem(x, x); sessionStorage.removeItem(x); return true; } catch(e) { return false; } }()) }; var testId = 0, toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty; var Test = function(name, testName, expected, async, callback) { this.name = name; this.testName = testName; this.expected = expected; this.async = async; this.callback = callback; this.assertions = []; }; Test.prototype = { init: function() { var tests = id("qunit-tests"); if (tests) { var b = document.createElement("strong"); b.innerHTML = "Running " + this.name; var li = document.createElement("li"); li.appendChild( b ); li.className = "running"; li.id = this.id = "test-output" + testId++; tests.appendChild( li ); } }, setup: function() { if (this.module != config.previousModule) { if ( config.previousModule ) { runLoggingCallbacks('moduleDone', QUnit, { name: config.previousModule, failed: config.moduleStats.bad, passed: config.moduleStats.all - config.moduleStats.bad, total: config.moduleStats.all } ); } config.previousModule = this.module; config.moduleStats = { all: 0, bad: 0 }; runLoggingCallbacks( 'moduleStart', QUnit, { name: this.module } ); } else if (config.autorun) { runLoggingCallbacks( 'moduleStart', QUnit, { name: this.module } ); } config.current = this; this.testEnvironment = extend({ setup: function() {}, teardown: function() {} }, this.moduleTestEnvironment); runLoggingCallbacks( 'testStart', QUnit, { name: this.testName, module: this.module }); // allow utility functions to access the current test environment // TODO why?? QUnit.current_testEnvironment = this.testEnvironment; if ( !config.pollution ) { saveGlobal(); } if ( config.notrycatch ) { this.testEnvironment.setup.call(this.testEnvironment); return; } try { this.testEnvironment.setup.call(this.testEnvironment); } catch(e) { QUnit.pushFailure( "Setup failed on " + this.testName + ": " + e.message, extractStacktrace( e, 1 ) ); } }, run: function() { config.current = this; var running = id("qunit-testresult"); if ( running ) { running.innerHTML = "Running:
                " + this.name; } if ( this.async ) { QUnit.stop(); } if ( config.notrycatch ) { this.callback.call(this.testEnvironment); return; } try { this.callback.call(this.testEnvironment); } catch(e) { QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + ": " + e.message, extractStacktrace( e, 1 ) ); // else next test will carry the responsibility saveGlobal(); // Restart the tests if they're blocking if ( config.blocking ) { QUnit.start(); } } }, teardown: function() { config.current = this; if ( config.notrycatch ) { this.testEnvironment.teardown.call(this.testEnvironment); return; } else { try { this.testEnvironment.teardown.call(this.testEnvironment); } catch(e) { QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + e.message, extractStacktrace( e, 1 ) ); } } checkPollution(); }, finish: function() { config.current = this; if ( this.expected != null && this.expected != this.assertions.length ) { QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" ); } else if ( this.expected == null && !this.assertions.length ) { QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions." ); } var good = 0, bad = 0, li, i, tests = id("qunit-tests"); config.stats.all += this.assertions.length; config.moduleStats.all += this.assertions.length; if ( tests ) { var ol = document.createElement("ol"); for ( i = 0; i < this.assertions.length; i++ ) { var assertion = this.assertions[i]; li = document.createElement("li"); li.className = assertion.result ? "pass" : "fail"; li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed"); ol.appendChild( li ); if ( assertion.result ) { good++; } else { bad++; config.stats.bad++; config.moduleStats.bad++; } } // store result when possible if ( QUnit.config.reorder && defined.sessionStorage ) { if (bad) { sessionStorage.setItem("qunit-test-" + this.module + "-" + this.testName, bad); } else { sessionStorage.removeItem("qunit-test-" + this.module + "-" + this.testName); } } if (bad === 0) { ol.style.display = "none"; } var b = document.createElement("strong"); b.innerHTML = this.name + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; var a = document.createElement("a"); a.innerHTML = "Rerun"; a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); addEvent(b, "click", function() { var next = b.nextSibling.nextSibling, display = next.style.display; next.style.display = display === "none" ? "block" : "none"; }); addEvent(b, "dblclick", function(e) { var target = e && e.target ? e.target : window.event.srcElement; if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) { target = target.parentNode; } if ( window.location && target.nodeName.toLowerCase() === "strong" ) { window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); } }); li = id(this.id); li.className = bad ? "fail" : "pass"; li.removeChild( li.firstChild ); li.appendChild( b ); li.appendChild( a ); li.appendChild( ol ); } else { for ( i = 0; i < this.assertions.length; i++ ) { if ( !this.assertions[i].result ) { bad++; config.stats.bad++; config.moduleStats.bad++; } } } QUnit.reset(); runLoggingCallbacks( 'testDone', QUnit, { name: this.testName, module: this.module, failed: bad, passed: this.assertions.length - bad, total: this.assertions.length } ); }, queue: function() { var test = this; synchronize(function() { test.init(); }); function run() { // each of these can by async synchronize(function() { test.setup(); }); synchronize(function() { test.run(); }); synchronize(function() { test.teardown(); }); synchronize(function() { test.finish(); }); } // defer when previous test run passed, if storage is available var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-test-" + this.module + "-" + this.testName); if (bad) { run(); } else { synchronize(run, true); } } }; var QUnit = { // call on start of module test to prepend name to all tests module: function(name, testEnvironment) { config.currentModule = name; config.currentModuleTestEnviroment = testEnvironment; }, asyncTest: function(testName, expected, callback) { if ( arguments.length === 2 ) { callback = expected; expected = null; } QUnit.test(testName, expected, callback, true); }, test: function(testName, expected, callback, async) { var name = '' + escapeInnerText(testName) + ''; if ( arguments.length === 2 ) { callback = expected; expected = null; } if ( config.currentModule ) { name = '' + config.currentModule + ": " + name; } if ( !validTest(config.currentModule + ": " + testName) ) { return; } var test = new Test(name, testName, expected, async, callback); test.module = config.currentModule; test.moduleTestEnvironment = config.currentModuleTestEnviroment; test.queue(); }, // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. expect: function(asserts) { config.current.expected = asserts; }, // Asserts true. // @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); ok: function(result, msg) { if (!config.current) { throw new Error("ok() assertion outside test context, was " + sourceFromStacktrace(2)); } result = !!result; var details = { result: result, message: msg }; msg = escapeInnerText(msg || (result ? "okay" : "failed")); if ( !result ) { var source = sourceFromStacktrace(2); if (source) { details.source = source; msg += '
                Source:
                ' + escapeInnerText(source) + '
                '; } } runLoggingCallbacks( 'log', QUnit, details ); config.current.assertions.push({ result: result, message: msg }); }, // Checks that the first two arguments are equal, with an optional message. Prints out both actual and expected values. // @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); equal: function(actual, expected, message) { QUnit.push(expected == actual, actual, expected, message); }, notEqual: function(actual, expected, message) { QUnit.push(expected != actual, actual, expected, message); }, deepEqual: function(actual, expected, message) { QUnit.push(QUnit.equiv(actual, expected), actual, expected, message); }, notDeepEqual: function(actual, expected, message) { QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message); }, strictEqual: function(actual, expected, message) { QUnit.push(expected === actual, actual, expected, message); }, notStrictEqual: function(actual, expected, message) { QUnit.push(expected !== actual, actual, expected, message); }, raises: function(block, expected, message) { var actual, ok = false; if (typeof expected === 'string') { message = expected; expected = null; } try { block.call(config.current.testEnvironment); } catch (e) { actual = e; } if (actual) { // we don't want to validate thrown error if (!expected) { ok = true; // expected is a regexp } else if (QUnit.objectType(expected) === "regexp") { ok = expected.test(actual); // expected is a constructor } else if (actual instanceof expected) { ok = true; // expected is a validation function which returns true is validation passed } else if (expected.call({}, actual) === true) { ok = true; } } QUnit.ok(ok, message); }, start: function(count) { config.semaphore -= count || 1; if (config.semaphore > 0) { // don't start until equal number of stop-calls return; } if (config.semaphore < 0) { // ignore if start is called more often then stop config.semaphore = 0; } // A slight delay, to avoid any current callbacks if ( defined.setTimeout ) { window.setTimeout(function() { if (config.semaphore > 0) { return; } if ( config.timeout ) { clearTimeout(config.timeout); } config.blocking = false; process(true); }, 13); } else { config.blocking = false; process(true); } }, stop: function(count) { config.semaphore += count || 1; config.blocking = true; if ( config.testTimeout && defined.setTimeout ) { clearTimeout(config.timeout); config.timeout = window.setTimeout(function() { QUnit.ok( false, "Test timed out" ); config.semaphore = 1; QUnit.start(); }, config.testTimeout); } } }; //We want access to the constructor's prototype (function() { function F(){} F.prototype = QUnit; QUnit = new F(); //Make F QUnit's constructor so that we can add to the prototype later QUnit.constructor = F; }()); // deprecated; still export them to window to provide clear error messages // next step: remove entirely QUnit.equals = function() { QUnit.push(false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead"); }; QUnit.same = function() { QUnit.push(false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead"); }; // Maintain internal state var config = { // The queue of tests to run queue: [], // block until document ready blocking: true, // when enabled, show only failing tests // gets persisted through sessionStorage and can be changed in UI via checkbox hidepassed: false, // by default, run previously failed tests first // very useful in combination with "Hide passed tests" checked reorder: true, // by default, modify document.title when suite is done altertitle: true, urlConfig: ['noglobals', 'notrycatch'], //logging callback queues begin: [], done: [], log: [], testStart: [], testDone: [], moduleStart: [], moduleDone: [] }; // Load paramaters (function() { var location = window.location || { search: "", protocol: "file:" }, params = location.search.slice( 1 ).split( "&" ), length = params.length, urlParams = {}, current; if ( params[ 0 ] ) { for ( var i = 0; i < length; i++ ) { current = params[ i ].split( "=" ); current[ 0 ] = decodeURIComponent( current[ 0 ] ); // allow just a key to turn on a flag, e.g., test.html?noglobals current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; urlParams[ current[ 0 ] ] = current[ 1 ]; } } QUnit.urlParams = urlParams; config.filter = urlParams.filter; // Figure out if we're running the tests from a server or not QUnit.isLocal = location.protocol === 'file:'; }()); // Expose the API as global variables, unless an 'exports' // object exists, in that case we assume we're in CommonJS - export everything at the end if ( typeof exports === "undefined" || typeof require === "undefined" ) { extend(window, QUnit); window.QUnit = QUnit; } // define these after exposing globals to keep them in these QUnit namespace only extend(QUnit, { config: config, // Initialize the configuration options init: function() { extend(config, { stats: { all: 0, bad: 0 }, moduleStats: { all: 0, bad: 0 }, started: +new Date(), updateRate: 1000, blocking: false, autostart: true, autorun: false, filter: "", queue: [], semaphore: 0 }); var qunit = id( "qunit" ); if ( qunit ) { qunit.innerHTML = '

                ' + escapeInnerText( document.title ) + '

                ' + '

                ' + '
                ' + '

                ' + '
                  '; } var tests = id( "qunit-tests" ), banner = id( "qunit-banner" ), result = id( "qunit-testresult" ); if ( tests ) { tests.innerHTML = ""; } if ( banner ) { banner.className = ""; } if ( result ) { result.parentNode.removeChild( result ); } if ( tests ) { result = document.createElement( "p" ); result.id = "qunit-testresult"; result.className = "result"; tests.parentNode.insertBefore( result, tests ); result.innerHTML = 'Running...
                   '; } }, // Resets the test setup. Useful for tests that modify the DOM. // If jQuery is available, uses jQuery's html(), otherwise just innerHTML. reset: function() { if ( window.jQuery ) { jQuery( "#qunit-fixture" ).html( config.fixture ); } else { var main = id( 'qunit-fixture' ); if ( main ) { main.innerHTML = config.fixture; } } }, // Trigger an event on an element. // @example triggerEvent( document.body, "click" ); triggerEvent: function( elem, type, event ) { if ( document.createEvent ) { event = document.createEvent("MouseEvents"); event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); elem.dispatchEvent( event ); } else if ( elem.fireEvent ) { elem.fireEvent("on"+type); } }, // Safe object type checking is: function( type, obj ) { return QUnit.objectType( obj ) == type; }, objectType: function( obj ) { if (typeof obj === "undefined") { return "undefined"; // consider: typeof null === object } if (obj === null) { return "null"; } var type = toString.call( obj ).match(/^\[object\s(.*)\]$/)[1] || ''; switch (type) { case 'Number': if (isNaN(obj)) { return "nan"; } return "number"; case 'String': case 'Boolean': case 'Array': case 'Date': case 'RegExp': case 'Function': return type.toLowerCase(); } if (typeof obj === "object") { return "object"; } return undefined; }, push: function(result, actual, expected, message) { if (!config.current) { throw new Error("assertion outside test context, was " + sourceFromStacktrace()); } var details = { result: result, message: message, actual: actual, expected: expected }; message = escapeInnerText(message) || (result ? "okay" : "failed"); message = '' + message + ""; var output = message; if (!result) { expected = escapeInnerText(QUnit.jsDump.parse(expected)); actual = escapeInnerText(QUnit.jsDump.parse(actual)); output += ''; if (actual != expected) { output += ''; output += ''; } var source = sourceFromStacktrace(); if (source) { details.source = source; output += ''; } output += "
                  Expected:
                  ' + expected + '
                  Result:
                  ' + actual + '
                  Diff:
                  ' + QUnit.diff(expected, actual) +'
                  Source:
                  ' + escapeInnerText(source) + '
                  "; } runLoggingCallbacks( 'log', QUnit, details ); config.current.assertions.push({ result: !!result, message: output }); }, pushFailure: function(message, source) { var details = { result: false, message: message }; var output = escapeInnerText(message); if (source) { details.source = source; output += '
                  Source:
                  ' + escapeInnerText(source) + '
                  '; } runLoggingCallbacks( 'log', QUnit, details ); config.current.assertions.push({ result: false, message: output }); }, url: function( params ) { params = extend( extend( {}, QUnit.urlParams ), params ); var querystring = "?", key; for ( key in params ) { if ( !hasOwn.call( params, key ) ) { continue; } querystring += encodeURIComponent( key ) + "=" + encodeURIComponent( params[ key ] ) + "&"; } return window.location.pathname + querystring.slice( 0, -1 ); }, extend: extend, id: id, addEvent: addEvent }); //QUnit.constructor is set to the empty F() above so that we can add to it's prototype later //Doing this allows us to tell if the following methods have been overwritten on the actual //QUnit object, which is a deprecated way of using the callbacks. extend(QUnit.constructor.prototype, { // Logging callbacks; all receive a single argument with the listed properties // run test/logs.html for any related changes begin: registerLoggingCallback('begin'), // done: { failed, passed, total, runtime } done: registerLoggingCallback('done'), // log: { result, actual, expected, message } log: registerLoggingCallback('log'), // testStart: { name } testStart: registerLoggingCallback('testStart'), // testDone: { name, failed, passed, total } testDone: registerLoggingCallback('testDone'), // moduleStart: { name } moduleStart: registerLoggingCallback('moduleStart'), // moduleDone: { name, failed, passed, total } moduleDone: registerLoggingCallback('moduleDone') }); if ( typeof document === "undefined" || document.readyState === "complete" ) { config.autorun = true; } QUnit.load = function() { runLoggingCallbacks( 'begin', QUnit, {} ); // Initialize the config, saving the execution queue var oldconfig = extend({}, config); QUnit.init(); extend(config, oldconfig); config.blocking = false; var urlConfigHtml = '', len = config.urlConfig.length; for ( var i = 0, val; i < len; i++ ) { val = config.urlConfig[i]; config[val] = QUnit.urlParams[val]; urlConfigHtml += ''; } var userAgent = id("qunit-userAgent"); if ( userAgent ) { userAgent.innerHTML = navigator.userAgent; } var banner = id("qunit-header"); if ( banner ) { banner.innerHTML = ' ' + banner.innerHTML + ' ' + urlConfigHtml; addEvent( banner, "change", function( event ) { var params = {}; params[ event.target.name ] = event.target.checked ? true : undefined; window.location = QUnit.url( params ); }); } var toolbar = id("qunit-testrunner-toolbar"); if ( toolbar ) { var filter = document.createElement("input"); filter.type = "checkbox"; filter.id = "qunit-filter-pass"; addEvent( filter, "click", function() { var ol = document.getElementById("qunit-tests"); if ( filter.checked ) { ol.className = ol.className + " hidepass"; } else { var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; ol.className = tmp.replace(/ hidepass /, " "); } if ( defined.sessionStorage ) { if (filter.checked) { sessionStorage.setItem("qunit-filter-passed-tests", "true"); } else { sessionStorage.removeItem("qunit-filter-passed-tests"); } } }); if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) { filter.checked = true; var ol = document.getElementById("qunit-tests"); ol.className = ol.className + " hidepass"; } toolbar.appendChild( filter ); var label = document.createElement("label"); label.setAttribute("for", "qunit-filter-pass"); label.innerHTML = "Hide passed tests"; toolbar.appendChild( label ); } var main = id('qunit-fixture'); if ( main ) { config.fixture = main.innerHTML; } if (config.autostart) { QUnit.start(); } }; addEvent(window, "load", QUnit.load); // addEvent(window, "error") gives us a useless event object window.onerror = function( message, file, line ) { if ( QUnit.config.current ) { QUnit.pushFailure( message, file + ":" + line ); } else { QUnit.test( "global failure", function() { QUnit.pushFailure( message, file + ":" + line ); }); } }; function done() { config.autorun = true; // Log the last module results if ( config.currentModule ) { runLoggingCallbacks( 'moduleDone', QUnit, { name: config.currentModule, failed: config.moduleStats.bad, passed: config.moduleStats.all - config.moduleStats.bad, total: config.moduleStats.all } ); } var banner = id("qunit-banner"), tests = id("qunit-tests"), runtime = +new Date() - config.started, passed = config.stats.all - config.stats.bad, html = [ 'Tests completed in ', runtime, ' milliseconds.
                  ', '', passed, ' tests of ', config.stats.all, ' passed, ', config.stats.bad, ' failed.' ].join(''); if ( banner ) { banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); } if ( tests ) { id( "qunit-testresult" ).innerHTML = html; } if ( config.altertitle && typeof document !== "undefined" && document.title ) { // show ✖ for good, ✔ for bad suite result in title // use escape sequences in case file gets loaded with non-utf-8-charset document.title = [ (config.stats.bad ? "\u2716" : "\u2714"), document.title.replace(/^[\u2714\u2716] /i, "") ].join(" "); } // clear own sessionStorage items if all tests passed if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) { var key; for ( var i = 0; i < sessionStorage.length; i++ ) { key = sessionStorage.key( i++ ); if ( key.indexOf("qunit-test-") === 0 ) { sessionStorage.removeItem( key ); } } } runLoggingCallbacks( 'done', QUnit, { failed: config.stats.bad, passed: passed, total: config.stats.all, runtime: runtime } ); } function validTest( name ) { var filter = config.filter, run = false; if ( !filter ) { return true; } var not = filter.charAt( 0 ) === "!"; if ( not ) { filter = filter.slice( 1 ); } if ( name.indexOf( filter ) !== -1 ) { return !not; } if ( not ) { run = true; } return run; } // so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions) // Later Safari and IE10 are supposed to support error.stack as well // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack function extractStacktrace( e, offset ) { offset = offset || 3; if (e.stacktrace) { // Opera return e.stacktrace.split("\n")[offset + 3]; } else if (e.stack) { // Firefox, Chrome var stack = e.stack.split("\n"); if (/^error$/i.test(stack[0])) { stack.shift(); } return stack[offset]; } else if (e.sourceURL) { // Safari, PhantomJS // hopefully one day Safari provides actual stacktraces // exclude useless self-reference for generated Error objects if ( /qunit.js$/.test( e.sourceURL ) ) { return; } // for actual exceptions, this is useful return e.sourceURL + ":" + e.line; } } function sourceFromStacktrace(offset) { try { throw new Error(); } catch ( e ) { return extractStacktrace( e, offset ); } } function escapeInnerText(s) { if (!s) { return ""; } s = s + ""; return s.replace(/[\&<>]/g, function(s) { switch(s) { case "&": return "&"; case "<": return "<"; case ">": return ">"; default: return s; } }); } function synchronize( callback, last ) { config.queue.push( callback ); if ( config.autorun && !config.blocking ) { process(last); } } function process( last ) { function next() { process( last ); } var start = new Date().getTime(); config.depth = config.depth ? config.depth + 1 : 1; while ( config.queue.length && !config.blocking ) { if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) { config.queue.shift()(); } else { window.setTimeout( next, 13 ); break; } } config.depth--; if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { done(); } } function saveGlobal() { config.pollution = []; if ( config.noglobals ) { for ( var key in window ) { if ( !hasOwn.call( window, key ) ) { continue; } config.pollution.push( key ); } } } function checkPollution( name ) { var old = config.pollution; saveGlobal(); var newGlobals = diff( config.pollution, old ); if ( newGlobals.length > 0 ) { QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") ); } var deletedGlobals = diff( old, config.pollution ); if ( deletedGlobals.length > 0 ) { QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") ); } } // returns a new Array with the elements that are in a but not in b function diff( a, b ) { var result = a.slice(); for ( var i = 0; i < result.length; i++ ) { for ( var j = 0; j < b.length; j++ ) { if ( result[i] === b[j] ) { result.splice(i, 1); i--; break; } } } return result; } function extend(a, b) { for ( var prop in b ) { if ( b[prop] === undefined ) { delete a[prop]; // Avoid "Member not found" error in IE8 caused by setting window.constructor } else if ( prop !== "constructor" || a !== window ) { a[prop] = b[prop]; } } return a; } function addEvent(elem, type, fn) { if ( elem.addEventListener ) { elem.addEventListener( type, fn, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, fn ); } else { fn(); } } function id(name) { return !!(typeof document !== "undefined" && document && document.getElementById) && document.getElementById( name ); } function registerLoggingCallback(key){ return function(callback){ config[key].push( callback ); }; } // Supports deprecated method of completely overwriting logging callbacks function runLoggingCallbacks(key, scope, args) { //debugger; var callbacks; if ( QUnit.hasOwnProperty(key) ) { QUnit[key].call(scope, args); } else { callbacks = config[key]; for( var i = 0; i < callbacks.length; i++ ) { callbacks[i].call( scope, args ); } } } // Test for equality any JavaScript type. // Author: Philippe Rathé QUnit.equiv = (function() { var innerEquiv; // the real equiv function var callers = []; // stack to decide between skip/abort functions var parents = []; // stack to avoiding loops from circular referencing // Call the o related callback with the given arguments. function bindCallbacks(o, callbacks, args) { var prop = QUnit.objectType(o); if (prop) { if (QUnit.objectType(callbacks[prop]) === "function") { return callbacks[prop].apply(callbacks, args); } else { return callbacks[prop]; // or undefined } } } var getProto = Object.getPrototypeOf || function (obj) { return obj.__proto__; }; var callbacks = (function () { // for string, boolean, number and null function useStrictEquality(b, a) { if (b instanceof a.constructor || a instanceof b.constructor) { // to catch short annotaion VS 'new' annotation of a // declaration // e.g. var i = 1; // var j = new Number(1); return a == b; } else { return a === b; } } return { "string" : useStrictEquality, "boolean" : useStrictEquality, "number" : useStrictEquality, "null" : useStrictEquality, "undefined" : useStrictEquality, "nan" : function(b) { return isNaN(b); }, "date" : function(b, a) { return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf(); }, "regexp" : function(b, a) { return QUnit.objectType(b) === "regexp" && // the regex itself a.source === b.source && // and its modifers a.global === b.global && // (gmi) ... a.ignoreCase === b.ignoreCase && a.multiline === b.multiline; }, // - skip when the property is a method of an instance (OOP) // - abort otherwise, // initial === would have catch identical references anyway "function" : function() { var caller = callers[callers.length - 1]; return caller !== Object && typeof caller !== "undefined"; }, "array" : function(b, a) { var i, j, loop; var len; // b could be an object literal here if (QUnit.objectType(b) !== "array") { return false; } len = a.length; if (len !== b.length) { // safe and faster return false; } // track reference to avoid circular references parents.push(a); for (i = 0; i < len; i++) { loop = false; for (j = 0; j < parents.length; j++) { if (parents[j] === a[i]) { loop = true;// dont rewalk array } } if (!loop && !innerEquiv(a[i], b[i])) { parents.pop(); return false; } } parents.pop(); return true; }, "object" : function(b, a) { var i, j, loop; var eq = true; // unless we can proove it var aProperties = [], bProperties = []; // collection of // strings // comparing constructors is more strict than using // instanceof if (a.constructor !== b.constructor) { // Allow objects with no prototype to be equivalent to // objects with Object as their constructor. if (!((getProto(a) === null && getProto(b) === Object.prototype) || (getProto(b) === null && getProto(a) === Object.prototype))) { return false; } } // stack constructor before traversing properties callers.push(a.constructor); // track reference to avoid circular references parents.push(a); for (i in a) { // be strict: don't ensures hasOwnProperty // and go deep loop = false; for (j = 0; j < parents.length; j++) { if (parents[j] === a[i]) { // don't go down the same path twice loop = true; } } aProperties.push(i); // collect a's properties if (!loop && !innerEquiv(a[i], b[i])) { eq = false; break; } } callers.pop(); // unstack, we are done parents.pop(); for (i in b) { bProperties.push(i); // collect b's properties } // Ensures identical properties name return eq && innerEquiv(aProperties.sort(), bProperties.sort()); } }; }()); innerEquiv = function() { // can take multiple arguments var args = Array.prototype.slice.apply(arguments); if (args.length < 2) { return true; // end transition } return (function(a, b) { if (a === b) { return true; // catch the most you can } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) { return false; // don't lose time with error prone cases } else { return bindCallbacks(a, callbacks, [ b, a ]); } // apply transition with (1..n) arguments }(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length - 1))); }; return innerEquiv; }()); /** * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | * http://flesler.blogspot.com Licensed under BSD * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 * * @projectDescription Advanced and extensible data dumping for Javascript. * @version 1.0.0 * @author Ariel Flesler * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} */ QUnit.jsDump = (function() { function quote( str ) { return '"' + str.toString().replace(/"/g, '\\"') + '"'; } function literal( o ) { return o + ''; } function join( pre, arr, post ) { var s = jsDump.separator(), base = jsDump.indent(), inner = jsDump.indent(1); if ( arr.join ) { arr = arr.join( ',' + s + inner ); } if ( !arr ) { return pre + post; } return [ pre, inner + arr, base + post ].join(s); } function array( arr, stack ) { var i = arr.length, ret = new Array(i); this.up(); while ( i-- ) { ret[i] = this.parse( arr[i] , undefined , stack); } this.down(); return join( '[', ret, ']' ); } var reName = /^function (\w+)/; var jsDump = { parse: function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance stack = stack || [ ]; var parser = this.parsers[ type || this.typeOf(obj) ]; type = typeof parser; var inStack = inArray(obj, stack); if (inStack != -1) { return 'recursion('+(inStack - stack.length)+')'; } //else if (type == 'function') { stack.push(obj); var res = parser.call( this, obj, stack ); stack.pop(); return res; } // else return (type == 'string') ? parser : this.parsers.error; }, typeOf: function( obj ) { var type; if ( obj === null ) { type = "null"; } else if (typeof obj === "undefined") { type = "undefined"; } else if (QUnit.is("RegExp", obj)) { type = "regexp"; } else if (QUnit.is("Date", obj)) { type = "date"; } else if (QUnit.is("Function", obj)) { type = "function"; } else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") { type = "window"; } else if (obj.nodeType === 9) { type = "document"; } else if (obj.nodeType) { type = "node"; } else if ( // native arrays toString.call( obj ) === "[object Array]" || // NodeList objects ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) ) ) { type = "array"; } else { type = typeof obj; } return type; }, separator: function() { return this.multiline ? this.HTML ? '
                  ' : '\n' : this.HTML ? ' ' : ' '; }, indent: function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing if ( !this.multiline ) { return ''; } var chr = this.indentChar; if ( this.HTML ) { chr = chr.replace(/\t/g,' ').replace(/ /g,' '); } return new Array( this._depth_ + (extra||0) ).join(chr); }, up: function( a ) { this._depth_ += a || 1; }, down: function( a ) { this._depth_ -= a || 1; }, setParser: function( name, parser ) { this.parsers[name] = parser; }, // The next 3 are exposed so you can use them quote: quote, literal: literal, join: join, // _depth_: 1, // This is the list of parsers, to modify them, use jsDump.setParser parsers: { window: '[Window]', document: '[Document]', error: '[ERROR]', //when no parser is found, shouldn't happen unknown: '[Unknown]', 'null': 'null', 'undefined': 'undefined', 'function': function( fn ) { var ret = 'function', name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE if ( name ) { ret += ' ' + name; } ret += '('; ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join(''); return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' ); }, array: array, nodelist: array, 'arguments': array, object: function( map, stack ) { var ret = [ ], keys, key, val, i; QUnit.jsDump.up(); if (Object.keys) { keys = Object.keys( map ); } else { keys = []; for (key in map) { keys.push( key ); } } keys.sort(); for (i = 0; i < keys.length; i++) { key = keys[ i ]; val = map[ key ]; ret.push( QUnit.jsDump.parse( key, 'key' ) + ': ' + QUnit.jsDump.parse( val, undefined, stack ) ); } QUnit.jsDump.down(); return join( '{', ret, '}' ); }, node: function( node ) { var open = QUnit.jsDump.HTML ? '<' : '<', close = QUnit.jsDump.HTML ? '>' : '>'; var tag = node.nodeName.toLowerCase(), ret = open + tag; for ( var a in QUnit.jsDump.DOMAttrs ) { var val = node[QUnit.jsDump.DOMAttrs[a]]; if ( val ) { ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' ); } } return ret + close + open + '/' + tag + close; }, functionArgs: function( fn ) {//function calls it internally, it's the arguments part of the function var l = fn.length; if ( !l ) { return ''; } var args = new Array(l); while ( l-- ) { args[l] = String.fromCharCode(97+l);//97 is 'a' } return ' ' + args.join(', ') + ' '; }, key: quote, //object calls it internally, the key part of an item in a map functionCode: '[code]', //function calls it internally, it's the content of the function attribute: quote, //node calls it internally, it's an html attribute value string: quote, date: quote, regexp: literal, //regex number: literal, 'boolean': literal }, DOMAttrs:{//attributes to dump from nodes, name=>realName id:'id', name:'name', 'class':'className' }, HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) indentChar:' ',//indentation unit multiline:true //if true, items in a collection, are separated by a \n, else just a space. }; return jsDump; }()); // from Sizzle.js function getText( elems ) { var ret = "", elem; for ( var i = 0; elems[i]; i++ ) { elem = elems[i]; // Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue; // Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += getText( elem.childNodes ); } } return ret; } //from jquery.js function inArray( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } } return -1; } /* * Javascript Diff Algorithm * By John Resig (http://ejohn.org/) * Modified by Chu Alan "sprite" * * Released under the MIT license. * * More Info: * http://ejohn.org/projects/javascript-diff-algorithm/ * * Usage: QUnit.diff(expected, actual) * * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick brown fox jumped jumps over" */ QUnit.diff = (function() { function diff(o, n) { var ns = {}; var os = {}; var i; for (i = 0; i < n.length; i++) { if (ns[n[i]] == null) { ns[n[i]] = { rows: [], o: null }; } ns[n[i]].rows.push(i); } for (i = 0; i < o.length; i++) { if (os[o[i]] == null) { os[o[i]] = { rows: [], n: null }; } os[o[i]].rows.push(i); } for (i in ns) { if ( !hasOwn.call( ns, i ) ) { continue; } if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) { n[ns[i].rows[0]] = { text: n[ns[i].rows[0]], row: os[i].rows[0] }; o[os[i].rows[0]] = { text: o[os[i].rows[0]], row: ns[i].rows[0] }; } } for (i = 0; i < n.length - 1; i++) { if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && n[i + 1] == o[n[i].row + 1]) { n[i + 1] = { text: n[i + 1], row: n[i].row + 1 }; o[n[i].row + 1] = { text: o[n[i].row + 1], row: i + 1 }; } } for (i = n.length - 1; i > 0; i--) { if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null && n[i - 1] == o[n[i].row - 1]) { n[i - 1] = { text: n[i - 1], row: n[i].row - 1 }; o[n[i].row - 1] = { text: o[n[i].row - 1], row: i - 1 }; } } return { o: o, n: n }; } return function(o, n) { o = o.replace(/\s+$/, ''); n = n.replace(/\s+$/, ''); var out = diff(o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/)); var str = ""; var i; var oSpace = o.match(/\s+/g); if (oSpace == null) { oSpace = [" "]; } else { oSpace.push(" "); } var nSpace = n.match(/\s+/g); if (nSpace == null) { nSpace = [" "]; } else { nSpace.push(" "); } if (out.n.length === 0) { for (i = 0; i < out.o.length; i++) { str += '' + out.o[i] + oSpace[i] + ""; } } else { if (out.n[0].text == null) { for (n = 0; n < out.o.length && out.o[n].text == null; n++) { str += '' + out.o[n] + oSpace[n] + ""; } } for (i = 0; i < out.n.length; i++) { if (out.n[i].text == null) { str += '' + out.n[i] + nSpace[i] + ""; } else { var pre = ""; for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { pre += '' + out.o[n] + oSpace[n] + ""; } str += " " + out.n[i].text + nSpace[i] + pre; } } } return str; }; }()); // for CommonJS enviroments, export everything if ( typeof exports !== "undefined" || typeof require !== "undefined" ) { extend(exports, QUnit); } // get at whatever the global object is, like window in browsers }( (function() {return this;}.call()) )); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/rules.js ================================================ module("rules"); test("rules() - internal - input", function() { var element = $('#firstname'); var v = $('#testForm1').validate(); deepEqual( element.rules(), { required: true, minlength: 2 } ); }); test("rules(), ignore method:false", function() { var element = $('#firstnamec'); var v = $('#testForm1clean').validate({ rules: { firstname: { required: false, minlength: 2 } } }); deepEqual( element.rules(), { minlength: 2 } ); }); test("rules() HTML5 required (no value)", function() { var element = $('#testForm11text1'); var v = $('#testForm11').validate(); deepEqual( element.rules(), { required: true } ); }); test("rules() - internal - select", function() { var element = $('#meal'); var v = $('#testForm3').validate(); deepEqual( element.rules(), {required: true} ); }); test("rules() - external", function() { var element = $('#text1'); var v = $('#form').validate({ rules: { action: {date: true, min: 5} } }); deepEqual( element.rules(), {date: true, min: 5} ); }); test("rules() - external - complete form", function() { expect(1); var methods = $.extend({}, $.validator.methods); var messages = $.extend({}, $.validator.messages); $.validator.addMethod("verifyTest", function() { ok( true, "method executed" ); return true; }); var v = $('#form').validate({ rules: { action: {verifyTest: true} } }); v.form(); $.validator.methods = methods; $.validator.messages = messages; }); test("rules() - internal - input", function() { var element = $('#form8input'); var v = $('#testForm8').validate(); deepEqual( element.rules(), {required: true, number: true, rangelength: [2, 8]}); }); test("rules(), merge min/max to range, minlength/maxlength to rangelength", function() { jQuery.validator.autoCreateRanges = true; var v = $("#testForm1clean").validate({ rules: { firstname: { min: 5, max: 12 }, lastname: { minlength: 2, maxlength: 8 } } }); deepEqual( $("#firstnamec").rules(), {range: [5, 12]}); deepEqual( $("#lastnamec").rules(), {rangelength: [2, 8]} ); jQuery.validator.autoCreateRanges = false; }); test("rules(), gurantee that required is at front", function() { $("#testForm1").validate(); var v = $("#v2").validate(); $("#subformRequired").validate(); function flatRules(element) { var result = []; jQuery.each($(element).rules(), function(key, value) { result.push(key) }); return result.join(" "); } equal( "required minlength", flatRules("#firstname") ); equal( "required maxlength minlength", flatRules("#v2-i6") ); equal( "required maxlength", flatRules("#co_name") ); QUnit.reset(); jQuery.validator.autoCreateRanges = true; v = $("#v2").validate(); equal( "required rangelength", flatRules("#v2-i6") ); $("#subformRequired").validate({ rules: { co_name: "required" } }); $("#co_name").removeClass(); equal( "required maxlength", flatRules("#co_name") ); jQuery.validator.autoCreateRanges = false; }); test("rules(), evaluate dynamic parameters", function() { expect(2); var v = $("#testForm1clean").validate({ rules: { firstname: { min: function(element) { equal( $("#firstnamec")[0], element ); return 12; } } } }); deepEqual( $("#firstnamec").rules(), {min:12}); }); test("rules(), class and attribute combinations", function() { $.validator.addMethod("customMethod1", function() { return false; }, ""); $.validator.addMethod("customMethod2", function() { return false; }, ""); var v = $("#v2").validate({ rules: { 'v2-i7': { required: true, minlength: 2, customMethod: true } } }); deepEqual( $("#v2-i1").rules(), { required: true }); deepEqual( $("#v2-i2").rules(), { required: true, email: true }); deepEqual( $("#v2-i3").rules(), { url: true }); deepEqual( $("#v2-i4").rules(), { required: true, minlength: 2 }); deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" }); jQuery.validator.autoCreateRanges = true; deepEqual( $("#v2-i5").rules(), { required: true, customMethod1: "123", rangelength: [2, 5] }); deepEqual( $("#v2-i6").rules(), { required: true, customMethod2: true, rangelength: [2, 5] }); jQuery.validator.autoCreateRanges = false; deepEqual( $("#v2-i7").rules(), { required: true, minlength: 2, customMethod: true }); delete $.validator.methods.customMethod1; delete $.validator.messages.customMethod1; delete $.validator.methods.customMethod2; delete $.validator.messages.customMethod2; }); test("rules(), dependency checks", function() { var v = $("#testForm1clean").validate({ rules: { firstname: { min: { param: 5, depends: function(el) { return /^a/.test($(el).val()); } } }, lastname: { max: { param: 12 }, email: { depends: function() { return true; } } } } }); var rules = $("#firstnamec").rules(); equal( 0, v.objectLength(rules) ); $("#firstnamec").val('ab'); deepEqual( $("#firstnamec").rules(), {min:5}); deepEqual( $("#lastnamec").rules(), {max:12, email:true}); }); test("rules(), add and remove", function() { $.validator.addMethod("customMethod1", function() { return false; }, ""); $("#v2").validate(); var removedAttrs = $("#v2-i5").removeClass("required").removeAttrs("minlength maxlength"); deepEqual( $("#v2-i5").rules(), { customMethod1: "123" }); $("#v2-i5").addClass("required").attr(removedAttrs); deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" }); $("#v2-i5").addClass("email").attr({min: 5}); deepEqual( $("#v2-i5").rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" }); $("#v2-i5").removeClass("required email").removeAttrs("minlength maxlength customMethod1 min"); deepEqual( $("#v2-i5").rules(), {}); delete $.validator.methods.customMethod1; delete $.validator.messages.customMethod1; }); test("rules(), add and remove static rules", function() { var v = $("#testForm1clean").validate({ rules: { firstname: "required date" } }); deepEqual( $("#firstnamec").rules(), { required: true, date: true } ); $("#firstnamec").rules("remove", "date") deepEqual( $("#firstnamec").rules(), { required: true } ); $("#firstnamec").rules("add", "email"); deepEqual( $("#firstnamec").rules(), { required: true, email: true } ); $("#firstnamec").rules("remove", "required"); deepEqual( $("#firstnamec").rules(), { email: true } ); deepEqual( $("#firstnamec").rules("remove"), { email: true } ); deepEqual( $("#firstnamec").rules(), { } ); $("#firstnamec").rules("add", "required email"); deepEqual( $("#firstnamec").rules(), { required: true, email: true } ); deepEqual( $("#lastnamec").rules(), {} ); $("#lastnamec").rules("add", "required"); $("#lastnamec").rules("add", { minlength: 2 }); deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } ); var removedRules = $("#lastnamec").rules("remove", "required email"); deepEqual( $("#lastnamec").rules(), { minlength: 2 } ); $("#lastnamec").rules("add", removedRules); deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } ); }); test("rules(), add messages", function() { $("#firstnamec").attr("title", null); var v = $("#testForm1clean").validate({ rules: { firstname: "required" } }); $("#testForm1clean").valid(); $("#firstnamec").valid(); deepEqual( v.settings.messages.firstname, undefined ); $("#firstnamec").rules("add", { messages: { required: "required" } }); $("#firstnamec").valid(); deepEqual( v.errorList[0] && v.errorList[0].message, "required" ); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/selects/index.html ================================================ Fun with jQuery Mission: CODE
                  ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/tabs.html ================================================ Test for jQuery validate() plugin
                  A simple comment form with submit validation and default messages

                  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
                  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.

                  ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/jquery-validation/test/test.js ================================================ window.sessionStorage && sessionStorage.clear(); jQuery.validator.defaults.debug = true; $.mockjaxSettings.log = $.noop; $.mockjax({ url: "form.php?user=Peter&password=foobar", responseText: 'Hi Peter, welcome back.', responseStatus: 200, responseTime: 1 }); $.mockjax({ url: "users.php", data: { username: /Peter2?|asdf/}, responseText: 'false', responseStatus: 200, responseTime: 1 }); $.mockjax({ url: "users2.php", data: { username: "asdf"}, responseText: '"asdf is already taken, please try something else"', responseStatus: 200, responseTime: 1 }); $.mockjax({ url: "echo.php", response: function(data) { this.responseText = JSON.stringify(data.data); }, responseTime: 100 }); module("validator"); test("Constructor", function() { var v1 = $("#testForm1").validate(); var v2 = $("#testForm1").validate(); equal( v1, v2, "Calling validate() multiple times must return the same validator instance" ); equal( v1.elements().length, 3, "validator elements" ); }); test("validate() without elements, with non-form elements", 0, function() { $("#doesn'texist").validate(); }); test("valid() plugin method", function() { var form = $("#userForm"); form.validate(); ok ( !form.valid(), "Form isn't valid yet" ); var input = $("#username"); ok ( !input.valid(), "Input isn't valid either" ); input.val("Hello world"); ok ( form.valid(), "Form is now valid" ); ok ( input.valid(), "Input is valid, too" ); }); test("valid() plugin method", function() { var form = $("#testForm1"); form.validate(); var inputs = form.find("input"); ok( !inputs.valid(), "all invalid" ); inputs.not(":first").val("ok"); ok( !inputs.valid(), "just one invalid" ); inputs.val("ok"); ok( inputs.valid(), "all valid" ); }); test("valid() plugin method, special handling for checkable groups", function() { // rule is defined on first checkbox, must apply to others, too var checkable = $("#checkable2"); ok( !checkable.valid(), "must be invalid, not checked yet" ); checkable.attr("checked", true); ok( checkable.valid(), "valid, is now checked" ); checkable.attr("checked", false); ok( !checkable.valid(), "invalid again" ); $("#checkable3").attr("checked", true); ok( checkable.valid(), "valid, third box is checked" ); }); test("addMethod", function() { expect( 3 ); $.validator.addMethod("hi", function(value) { return value == "hi"; }, "hi me too"); var method = $.validator.methods.hi, e = $('#text1')[0]; ok( !method(e.value, e), "Invalid" ); e.value = "hi"; ok( method(e.value, e), "Invalid" ); ok( jQuery.validator.messages.hi == "hi me too", "Check custom message" ); }); test("addMethod2", function() { expect( 4 ); $.validator.addMethod("complicatedPassword", function(value, element, param) { return this.optional(element) || /\D/.test(value) && /\d/.test(value) }, "Your password must contain at least one number and one letter"); var v = jQuery("#form").validate({ rules: { action: { complicatedPassword: true } } }); var rule = $.validator.methods.complicatedPassword, e = $('#text1')[0]; e.value = ""; strictEqual( v.element(e), true, "Rule is optional, valid" ); equal( 0, v.size() ); e.value = "ko"; ok( !v.element(e), "Invalid, doesn't contain one of the required characters" ); e.value = "ko1"; ok( v.element(e) ); }); test("form(): simple", function() { expect( 2 ); var form = $('#testForm1')[0]; var v = $(form).validate(); ok( !v.form(), 'Invalid form' ); $('#firstname').val("hi"); $('#lastname').val("hi"); ok( v.form(), 'Valid form' ); }); test("form(): checkboxes: min/required", function() { expect( 3 ); var form = $('#testForm6')[0]; var v = $(form).validate(); ok( !v.form(), 'Invalid form' ); $('#form6check1').attr("checked", true); ok( !v.form(), 'Invalid form' ); $('#form6check2').attr("checked", true); ok( v.form(), 'Valid form' ); }); test("form(): radio buttons: required", function () { expect( 6 ); var form = $('#testForm10')[0]; var v = $(form).validate({ rules: { testForm10Radio: "required"} }); ok(!v.form(), 'Invalid Form'); equal($('#testForm10Radio1').attr('class'), 'error'); equal($('#testForm10Radio2').attr('class'), 'error'); $('#testForm10Radio2').attr("checked", true); ok(v.form(), 'Valid form'); equal($('#testForm10Radio1').attr('class'), 'valid'); equal($('#testForm10Radio2').attr('class'), 'valid'); }); test("form(): selects: min/required", function() { expect( 3 ); var form = $('#testForm7')[0]; var v = $(form).validate(); ok( !v.form(), 'Invalid form' ); $("#optionxa").attr("selected", true); ok( !v.form(), 'Invalid form' ); $("#optionxb").attr("selected", true); ok( v.form(), 'Valid form' ); }); test("form(): with equalTo", function() { expect( 2 ); var form = $('#testForm5')[0]; var v = $(form).validate(); ok( !v.form(), 'Invalid form' ); $('#x1, #x2').val("hi"); ok( v.form(), 'Valid form' ); }); test("form(): with equalTo and onfocusout=false", function() { expect( 4 ); var form = $('#testForm5')[0]; var v = $(form).validate({ onfocusout: false, showErrors: function() { ok(true, 'showErrors should only be called twice'); this.defaultShowErrors(); } }); $('#x1, #x2').val("hi"); ok( v.form(), 'Valid form' ); $('#x2').val('not equal').blur(); ok( !v.form(), 'Invalid form' ); }); test("check(): simple", function() { expect( 3 ); var element = $('#firstname')[0]; var v = $('#testForm1').validate(); ok( v.size() == 0, 'No errors yet' ); v.check(element); ok( v.size() == 1, 'error exists' ); v.errorList = []; $('#firstname').val("hi"); v.check(element); ok( !v.size() == 1, 'No more errors' ); }); test("hide(): input", function() { expect( 3 ); var errorLabel = $('#errorFirstname'); var element = $('#firstname')[0]; element.value ="bla"; var v = $('#testForm1').validate(); errorLabel.show(); ok( errorLabel.is(":visible"), "Error label visible before validation" ); ok( v.element(element) ); ok( errorLabel.is(":hidden"), "Error label not visible after validation" ); }); test("hide(): radio", function() { expect( 2 ); var errorLabel = $('#agreeLabel'); var element = $('#agb')[0]; element.checked = true; var v = $('#testForm2').validate({ errorClass: "xerror" }); errorLabel.show(); ok( errorLabel.is(":visible"), "Error label visible after validation" ); v.element(element); ok( errorLabel.is(":hidden"), "Error label not visible after hiding it" ); }); test("hide(): errorWrapper", function() { expect(2); var errorLabel = $('#errorWrapper'); var element = $('#meal')[0]; element.selectedIndex = 1; errorLabel.show(); ok( errorLabel.is(":visible"), "Error label visible after validation" ); var v = $('#testForm3').validate({ wrapper: "li", errorLabelContainer: $("#errorContainer") }); v.element(element); ok( errorLabel.is(":hidden"), "Error label not visible after hiding it" ); }); test("hide(): container", function() { expect(4); var errorLabel = $('#errorContainer'); var element = $('#testForm3')[0]; var v = $('#testForm3').validate({ errorWrapper: "li", errorContainer: $("#errorContainer") }); v.form(); ok( errorLabel.is(":visible"), "Error label visible after validation" ); $('#meal')[0].selectedIndex = 1; v.form(); ok( errorLabel.is(":hidden"), "Error label not visible after hiding it" ); $('#meal')[0].selectedIndex = -1; v.element("#meal"); ok( errorLabel.is(":visible"), "Error label visible after validation" ); $('#meal')[0].selectedIndex = 1; v.element("#meal"); ok( errorLabel.is(":hidden"), "Error label not visible after hiding it" ); }); test("valid()", function() { expect(4); var errorList = [{name:"meal",message:"foo", element:$("#meal")[0]}]; var v = $('#testForm3').validate(); ok( v.valid(), "No errors, must be valid" ); v.errorList = errorList; ok( !v.valid(), "One error, must be invalid" ); QUnit.reset(); v = $('#testForm3').validate({ submitHandler: function() { ok( false, "Submit handler was called" ); }}); ok( v.valid(), "No errors, must be valid and returning true, even with the submit handler" ); v.errorList = errorList; ok( !v.valid(), "One error, must be invalid, no call to submit handler" ); }); test("submitHandler keeps submitting button", function() { $("#userForm").validate({ debug: true, submitHandler: function(form) { // dunno how to test this better; this tests the implementation that uses a hidden input var hidden = $(form).find("input:hidden")[0]; deepEqual(hidden.value, button.value) deepEqual(hidden.name, button.name) } }); $("#username").val("bla"); var button = $("#userForm :submit")[0] var event = $.Event("click"); event.preventDefault(); $.event.trigger(event, null, button); $("#userForm").submit(); }); test("showErrors()", function() { expect( 4 ); var errorLabel = $('#errorFirstname').hide(); var element = $('#firstname')[0]; var v = $('#testForm1').validate(); ok( errorLabel.is(":hidden") ); equal( 0, $("label.error[for=lastname]").size() ); v.showErrors({"firstname": "required", "lastname": "bla"}); equal( true, errorLabel.is(":visible") ); equal( true, $("label.error[for=lastname]").is(":visible") ); }); test("showErrors(), allow empty string and null as default message", function() { $("#userForm").validate({ rules: { username: { required: true, minlength: 3 } }, messages: { username: { required: "", minlength: "too short" } } }); ok( !$("#username").valid() ); equal( "", $("label.error[for=username]").text() ); $("#username").val("ab"); ok( !$("#username").valid() ); equal( "too short", $("label.error[for=username]").text() ); $("#username").val("abc"); ok( $("#username").valid() ); ok( $("label.error[for=username]").is(":hidden") ); }); test("showErrors() - external messages", function() { expect( 4 ); var methods = $.extend({}, $.validator.methods); var messages = $.extend({}, $.validator.messages); $.validator.addMethod("foo", function() { return false; }); $.validator.addMethod("bar", function() { return false; }); equal( 0, $("#testForm4 label.error[for=f1]").size() ); equal( 0, $("#testForm4 label.error[for=f2]").size() ); var form = $('#testForm4')[0]; var v = $(form).validate({ messages: { f1: "Please!", f2: "Wohoo!" } }); v.form(); equal( $("#testForm4 label.error[for=f1]").text(), "Please!" ); equal( $("#testForm4 label.error[for=f2]").text(), "Wohoo!" ); $.validator.methods = methods; $.validator.messages = messages; }); test("showErrors() - custom handler", function() { expect(5); var v = $('#testForm1').validate({ showErrors: function(errorMap, errorList) { equal( v, this ); equal( v.errorList, errorList ); equal( v.errorMap, errorMap ); equal( "buga", errorMap.firstname ); equal( "buga", errorMap.lastname ); } }); v.form(); }); test("option: (un)highlight, default", function() { $("#testForm1").validate(); var e = $("#firstname") ok( !e.hasClass("error") ); ok( !e.hasClass("valid") ); e.valid() ok( e.hasClass("error") ); ok( !e.hasClass("valid") ); e.val("hithere").valid() ok( !e.hasClass("error") ); ok( e.hasClass("valid") ); }); test("option: (un)highlight, nothing", function() { expect(3); $("#testForm1").validate({ highlight: false, unhighlight: false }); var e = $("#firstname") ok( !e.hasClass("error") ); e.valid() ok( !e.hasClass("error") ); e.valid() ok( !e.hasClass("error") ); }); test("option: (un)highlight, custom", function() { expect(5); $("#testForm1clean").validate({ highlight: function(element, errorClass) { equal( "invalid", errorClass ); $(element).hide(); }, unhighlight: function(element, errorClass) { equal( "invalid", errorClass ) $(element).show(); }, errorClass: "invalid", rules: { firstname: "required" } }); var e = $("#firstnamec") ok( e.is(":visible") ); e.valid() ok( !e.is(":visible") ); e.val("hithere").valid() ok( e.is(":visible") ); }); test("option: (un)highlight, custom2", function() { expect(6); $("#testForm1").validate({ highlight: function(element, errorClass) { $(element).addClass(errorClass); $(element.form).find("label[for=" + element.id + "]").addClass(errorClass); }, unhighlight: function(element, errorClass) { $(element).removeClass(errorClass); $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass); }, errorClass: "invalid" }); var e = $("#firstname") var l = $("#errorFirstname") ok( !e.is(".invalid") ); ok( !l.is(".invalid") ); e.valid() ok( e.is(".invalid") ); ok( l.is(".invalid") ); e.val("hithere").valid() ok( !e.is(".invalid") ); ok( !l.is(".invalid") ); }); test("option: focusCleanup default false", function() { var form = $("#userForm") form.validate(); form.valid(); ok( form.is(":has(label.error[for=username]:visible)")); $("#username").focus(); ok( form.is(":has(label.error[for=username]:visible)")); }); test("option: focusCleanup true", function() { var form = $("#userForm") form.validate({ focusCleanup: true }); form.valid(); ok( form.is(":has(label.error[for=username]:visible)") ); $("#username").focus().trigger("focusin"); ok( !form.is(":has(label.error[for=username]:visible)") ); }); test("option: focusCleanup with wrapper", function() { var form = $("#userForm") form.validate({ focusCleanup: true, wrapper: "span" }); form.valid(); ok( form.is(":has(span:visible:has(label.error[for=username]))") ); $("#username").focus().trigger("focusin"); ok( !form.is(":has(span:visible:has(label.error[for=username]))") ); }); test("option: errorClass with multiple classes", function() { var form = $("#userForm") form.validate({ focusCleanup: true, wrapper: "span", errorClass: "error error1" }); form.valid(); ok( form.is(":has(span:visible:has(label.error[for=username]))") ); ok( form.is(":has(span:visible:has(label.error1[for=username]))") ); $("#username").focus().trigger("focusin"); ok( !form.is(":has(span:visible:has(label.error[for=username]))") ); ok( !form.is(":has(span:visible:has(label.error1[for=username]))") ); }); test("elements() order", function() { var container = $("#orderContainer"); var v = $("#elementsOrder").validate({ errorLabelContainer: container, wrap: "li" }); deepEqual( v.elements().map(function() { return $(this).attr("id"); }).get(), ["order1", "order2", "order3", "order4", "order5", "order6"], "elements must be in document order" ); v.form(); deepEqual( container.children().map(function() { return $(this).attr("for"); }).get(), ["order1", "order2", "order3", "order4", "order5", "order6"], "labels in error container must be in document order" ); }); test("defaultMessage(), empty title is ignored", function() { var v = $("#userForm").validate(); equal( "This field is required.", v.defaultMessage($("#username")[0], "required") ); }); test("formatAndAdd", function() { expect(4); var v = $("#form").validate(); var fakeElement = { form: $("#form")[0], name: "bar" }; v.formatAndAdd(fakeElement, {method: "maxlength", parameters: 2}) equal( "Please enter no more than 2 characters.", v.errorList[0].message ); equal( "bar", v.errorList[0].element.name ); v.formatAndAdd(fakeElement, {method: "range", parameters:[2,4]}) equal( "Please enter a value between 2 and 4.", v.errorList[1].message ); v.formatAndAdd(fakeElement, {method: "range", parameters:[0,4]}) equal( "Please enter a value between 0 and 4.", v.errorList[2].message ); }); test("formatAndAdd2", function() { expect(3); var v = $("#form").validate(); var fakeElement = { form: $("#form")[0], name: "bar" }; jQuery.validator.messages.test1 = function(param, element) { equal( v, this ); equal( 0, param ); return "element " + element.name + " is not valid"; }; v.formatAndAdd(fakeElement, {method: "test1", parameters: 0}) equal( "element bar is not valid", v.errorList[0].message ); }); test("formatAndAdd, auto detect substitution string", function() { var v = $("#testForm1clean").validate({ rules: { firstname: { required: true, rangelength: [5, 10] } }, messages: { firstname: { rangelength: "at least ${0}, up to {1}" } } }); $("#firstnamec").val("abc"); v.form(); equal( "at least 5, up to 10", v.errorList[0].message ); }) test("error containers, simple", function() { expect(14); var container = $("#simplecontainer"); var v = $("#form").validate({ errorLabelContainer: container, showErrors: function() { container.find("h3").html( jQuery.validator.format("There are {0} errors in your form.", this.size()) ); this.defaultShowErrors(); } }); v.prepareForm(); ok( v.valid(), "form is valid" ); equal( 0, container.find("label").length, "There should be no error labels" ); equal( "", container.find("h3").html() ); v.prepareForm(); v.errorList = [{message:"bar", element: {name:"foo"}}, {message: "necessary", element: {name:"required"}}]; ok( !v.valid(), "form is not valid after adding errors manually" ); v.showErrors(); equal( container.find("label").length, 2, "There should be two error labels" ); ok( container.is(":visible"), "Check that the container is visible" ); container.find("label").each(function() { ok( $(this).is(":visible"), "Check that each label is visible" ); }); equal( "There are 2 errors in your form.", container.find("h3").html() ); v.prepareForm(); ok( v.valid(), "form is valid after a reset" ); v.showErrors(); equal( container.find("label").length, 2, "There should still be two error labels" ); ok( container.is(":hidden"), "Check that the container is hidden" ); container.find("label").each(function() { ok( $(this).is(":hidden"), "Check that each label is hidden" ); }); }); test("error containers, with labelcontainer I", function() { expect(16); var container = $("#container"), labelcontainer = $("#labelcontainer"); var v = $("#form").validate({ errorContainer: container, errorLabelContainer: labelcontainer, wrapper: "li" }); ok( v.valid(), "form is valid" ); equal( 0, container.find("label").length, "There should be no error labels in the container" ); equal( 0, labelcontainer.find("label").length, "There should be no error labels in the labelcontainer" ); equal( 0, labelcontainer.find("li").length, "There should be no lis labels in the labelcontainer" ); v.errorList = [{message:"bar", element: {name:"foo"}}, {name: "required", message: "necessary", element: {name:"required"}}]; ok( !v.valid(), "form is not valid after adding errors manually" ); v.showErrors(); equal( 0, container.find("label").length, "There should be no error label in the container" ); equal( 2, labelcontainer.find("label").length, "There should be two error labels in the labelcontainer" ); equal( 2, labelcontainer.find("li").length, "There should be two error lis in the labelcontainer" ); ok( container.is(":visible"), "Check that the container is visible" ); ok( labelcontainer.is(":visible"), "Check that the labelcontainer is visible" ); var labels = labelcontainer.find("label").each(function() { ok( $(this).is(":visible"), "Check that each label is visible1" ); equal( "li", $(this).parent()[0].tagName.toLowerCase(), "Check that each label is wrapped in an li" ); ok( $(this).parent("li").is(":visible"), "Check that each parent li is visible" ); }); }); test("errorcontainer, show/hide only on submit", function() { expect(14); var container = $("#container"); var labelContainer = $("#labelcontainer"); var v = $("#testForm1").bind("invalid-form.validate", function() { ok( true, "invalid-form event triggered called" ); }).validate({ errorContainer: container, errorLabelContainer: labelContainer, showErrors: function() { container.html( jQuery.validator.format("There are {0} errors in your form.", this.numberOfInvalids()) ); ok( true, "showErrors called" ); this.defaultShowErrors(); } }); equal( "", container.html(), "must be empty" ); equal( "", labelContainer.html(), "must be empty" ); // validate whole form, both showErrors and invalidHandler must be called once // preferably invalidHandler first, showErrors second ok( !v.form(), "invalid form" ); equal( 2, labelContainer.find("label").length ); equal( "There are 2 errors in your form.", container.html() ); ok( labelContainer.is(":visible"), "must be visible" ); ok( container.is(":visible"), "must be visible" ); $("#firstname").val("hix").keyup(); $("#testForm1").triggerHandler("keyup", [jQuery.event.fix({ type: "keyup", target: $("#firstname")[0] })]); equal( 1, labelContainer.find("label:visible").length ); equal( "There are 1 errors in your form.", container.html() ); $("#lastname").val("abc"); ok( v.form(), "Form now valid, trigger showErrors but not invalid-form" ); }); test("option invalidHandler", function() { expect(1); var v = $("#testForm1clean").validate({ invalidHandler: function() { ok( true, "invalid-form event triggered called" ); start(); } }); $("#usernamec").val("asdf").rules("add", { required: true, minlength: 5 }); stop(); $("#testForm1clean").submit(); }); test("findByName()", function() { deepEqual( new $.validator({}, document.getElementById("form")).findByName(document.getElementById("radio1").name).get(), $("#form").find("[name=radio1]").get() ); }); test("focusInvalid()", function() { // TODO when using custom focusin, this is triggered just once // TODO when using 1.4 focusin, triggered twice; fix once not testing against 1.3 anymore // expect(1); var inputs = $("#testForm1 input").focus(function() { equal( inputs[0], this, "focused first element" ); }); var v = $("#testForm1").validate(); v.form(); v.focusInvalid(); }); test("findLastActive()", function() { expect(3); var v = $("#testForm1").validate(); ok( !v.findLastActive() ); v.form(); v.focusInvalid(); equal( v.findLastActive(), $("#firstname")[0] ); var lastActive = $("#lastname").trigger("focus").trigger("focusin")[0]; equal( v.lastActive, lastActive ); }); test("validating multiple checkboxes with 'required'", function() { expect(3); var checkboxes = $("#form input[name=check3]").attr("checked", false); equal(checkboxes.size(), 5); var v = $("#form").validate({ rules: { check3: "required" } }); v.form(); equal(v.size(), 1); checkboxes.filter(":last").attr("checked", true); v.form(); equal(v.size(), 0); }); test("dynamic form", function() { var counter = 0; function add() { $("").appendTo("#testForm2"); } function errors(expected, message) { equal(expected, v.size(), message ); } var v = $("#testForm2").validate(); v.form(); errors(1); add(); v.form(); errors(2); add(); v.form(); errors(3); $("#testForm2 input[name=list1]").remove(); v.form(); errors(2); add(); v.form(); errors(3); $("#testForm2 input[name^=list]").remove(); v.form(); errors(1); $("#agb").attr("disabled", true); v.form(); errors(0); $("#agb").attr("disabled", false); v.form(); errors(1); }); test("idOrName()", function() { expect(4); var v = $("#testForm1").validate(); equal( "form8input", v.idOrName( $("#form8input")[0] ) ); equal( "check", v.idOrName( $("#form6check1")[0] ) ); equal( "agree", v.idOrName( $("#agb")[0] ) ); equal( "button", v.idOrName( $("#form :button")[0] ) ); }); test("resetForm()", function() { function errors(expected, message) { equal(expected, v.size(), message ); } var v = $("#testForm1").validate(); v.form(); errors(2); $("#firstname").val("hiy"); v.resetForm(); errors(0); equal("", $("#firstname").val(), "form plugin is included, therefor resetForm must also reset inputs, not only errors"); }); test("message from title", function() { var v = $("#withTitle").validate(); v.checkForm(); equal(v.errorList[0].message, "fromtitle", "title not used"); }); test("ignoreTitle", function() { var v = $("#withTitle").validate({ignoreTitle:true}); v.checkForm(); equal(v.errorList[0].message, $.validator.messages["required"], "title used when it should have been ignored"); }); test("ajaxSubmit", function() { expect(1); stop(); $("#user").val("Peter"); $("#password").val("foobar"); jQuery("#signupForm").validate({ submitHandler: function(form) { jQuery(form).ajaxSubmit({ success: function(response) { equal("Hi Peter, welcome back.", response); start(); } }); } }); jQuery("#signupForm").triggerHandler("submit"); }); module("misc"); test("success option", function() { expect(7); equal( "", $("#firstname").val() ); var v = $("#testForm1").validate({ success: "valid" }); var label = $("#testForm1 label"); ok( label.is(".error") ); ok( !label.is(".valid") ); v.form(); ok( label.is(".error") ); ok( !label.is(".valid") ); $("#firstname").val("hi"); v.form(); ok( label.is(".error") ); ok( label.is(".valid") ); }); test("success option2", function() { expect(5); equal( "", $("#firstname").val() ); var v = $("#testForm1").validate({ success: "valid" }); var label = $("#testForm1 label"); ok( label.is(".error") ); ok( !label.is(".valid") ); $("#firstname").val("hi"); v.form(); ok( label.is(".error") ); ok( label.is(".valid") ); }); test("success option3", function() { expect(5); equal( "", $("#firstname").val() ); $("#errorFirstname").remove(); var v = $("#testForm1").validate({ success: "valid" }); equal( 0, $("#testForm1 label").size() ); $("#firstname").val("hi"); v.form(); var labels = $("#testForm1 label"); equal( 3, labels.size() ); ok( labels.eq(0).is(".valid") ); ok( !labels.eq(1).is(".valid") ); }); test("successlist", function() { var v = $("#form").validate({ success: "xyz" }); v.form(); equal(0, v.successList.length); }); test("success isn't called for optional elements", function() { expect(4); equal( "", $("#firstname").removeClass().val() ); $("#something").remove(); $("#lastname").remove(); $("#errorFirstname").remove(); var v = $("#testForm1").validate({ success: function() { ok( false, "don't call success for optional elements!" ); }, rules: { firstname: "email" } }); equal( 0, $("#testForm1 label").size() ); v.form(); equal( 0, $("#testForm1 label").size() ); $("#firstname").valid(); equal( 0, $("#testForm1 label").size() ); }); test("success callback with element", function() { expect(1); var v = $("#userForm").validate({ success: function( label, element ) { equal( element, $('#username').get(0) ); } }); $("#username").val("hi"); v.form(); }); test("all rules are evaluated even if one returns a dependency-mistmatch", function() { expect(6); equal( "", $("#firstname").removeClass().val() ); $("#lastname").remove(); $("#errorFirstname").remove(); $.validator.addMethod("custom1", function() { ok( true, "custom method must be evaluated" ); return true; }, ""); var v = $("#testForm1").validate({ rules: { firstname: {email:true, custom1: true} } }); equal( 0, $("#testForm1 label").size() ); v.form(); equal( 0, $("#testForm1 label").size() ); $("#firstname").valid(); equal( 0, $("#testForm1 label").size() ); delete $.validator.methods.custom1; delete $.validator.messages.custom1; }); test("messages", function() { var m = jQuery.validator.messages; equal( "Please enter no more than 0 characters.", m.maxlength(0) ); equal( "Please enter at least 1 characters.", m.minlength(1) ); equal( "Please enter a value between 1 and 2 characters long.", m.rangelength([1, 2]) ); equal( "Please enter a value less than or equal to 1.", m.max(1) ); equal( "Please enter a value greater than or equal to 0.", m.min(0) ); equal( "Please enter a value between 1 and 2.", m.range([1, 2]) ); }); test("jQuery.validator.format", function() { equal( "Please enter a value between 0 and 1.", jQuery.validator.format("Please enter a value between {0} and {1}.", 0, 1) ); equal( "0 is too fast! Enter a value smaller then 0 and at least -15", jQuery.validator.format("{0} is too fast! Enter a value smaller then {0} and at least {1}", 0, -15) ); var template = jQuery.validator.format("{0} is too fast! Enter a value smaller then {0} and at least {1}"); equal( "0 is too fast! Enter a value smaller then 0 and at least -15", template(0, -15) ); template = jQuery.validator.format("Please enter a value between {0} and {1}."); equal( "Please enter a value between 1 and 2.", template([1, 2]) ); }); test("option: ignore", function() { var v = $("#testForm1").validate({ ignore: "[name=lastname]" }); v.form(); equal( 1, v.size() ); }); test("option: subformRequired", function() { jQuery.validator.addMethod("billingRequired", function(value, element) { if ($("#bill_to_co").is(":checked")) return $(element).parents("#subform").length; return !this.optional(element); }, ""); var v = $("#subformRequired").validate(); v.form(); equal( 1, v.size() ); $("#bill_to_co").attr("checked", false); v.form(); equal( 2, v.size() ); delete $.validator.methods.billingRequired; delete $.validator.messages.billingRequired; }); module("expressions"); test("expression: :blank", function() { var e = $("#lastname")[0]; equal( 1, $(e).filter(":blank").length ); e.value = " "; equal( 1, $(e).filter(":blank").length ); e.value = " " equal( 1, $(e).filter(":blank").length ); e.value= " a "; equal( 0, $(e).filter(":blank").length ); }); test("expression: :filled", function() { var e = $("#lastname")[0]; equal( 0, $(e).filter(":filled").length ); e.value = " "; equal( 0, $(e).filter(":filled").length ); e.value = " " equal( 0, $(e).filter(":filled").length ); e.value= " a "; equal( 1, $(e).filter(":filled").length ); }); test("expression: :unchecked", function() { var e = $("#check2")[0]; equal( 1, $(e).filter(":unchecked").length ); e.checked = true; equal( 0, $(e).filter(":unchecked").length ); e.checked = false; equal( 1, $(e).filter(":unchecked").length ); }); module("events"); test("validate on blur", function() { function errors(expected, message) { equal(v.size(), expected, message ); } function labels(expected) { equal(v.errors().filter(":visible").size(), expected); } function blur(target) { target.trigger("blur").trigger("focusout"); } $("#errorFirstname").hide(); var e = $("#firstname"); var v = $("#testForm1").validate(); $("#something").val(""); blur(e); errors(0, "No value yet, required is skipped on blur"); labels(0); e.val("h"); blur(e); errors(1, "Required was ignored, but as something was entered, check other rules, minlength isn't met"); labels(1); e.val("hh"); blur(e); errors(0, "All is fine"); labels(0); e.val(""); v.form(); errors(3, "Submit checks all rules, both fields invalid"); labels(3); blur(e); errors(1, "Blurring the field results in emptying the error list first, then checking the invalid field: its still invalid, don't remove the error" ); labels(3); e.val("h"); blur(e); errors(1, "Entering a single character fulfills required, but not minlength: 2, still invalid"); labels(3); e.val("hh"); blur(e); errors(0, "Both required and minlength are met, no errors left"); labels(2); }); test("validate on keyup", function() { function errors(expected, message) { equal(expected, v.size(), message ); } function keyup(target) { target.trigger("keyup"); } var e = $("#firstname"); var v = $("#testForm1").validate(); keyup(e); errors(0, "No value, no errors"); e.val("a"); keyup(e); errors(0, "Value, but not invalid"); e.val(""); v.form(); errors(2, "Both invalid"); keyup(e); errors(1, "Only one field validated, still invalid"); e.val("hh"); keyup(e); errors(0, "Not invalid anymore"); e.val("h"); keyup(e); errors(1, "Field didn't loose focus, so validate again, invalid"); e.val("hh"); keyup(e); errors(0, "Valid"); }); test("validate on not keyup, only blur", function() { function errors(expected, message) { equal(expected, v.size(), message ); } var e = $("#firstname"); var v = $("#testForm1").validate({ onkeyup: false }); errors(0); e.val("a"); e.trigger("keyup"); e.keyup(); errors(0); e.trigger("blur").trigger("focusout"); errors(1); }); test("validate on keyup and blur", function() { function errors(expected, message) { equal(expected, v.size(), message ); } var e = $("#firstname"); var v = $("#testForm1").validate(); errors(0); e.val("a"); e.trigger("keyup"); errors(0); e.trigger("blur").trigger("focusout"); errors(1); }); test("validate email on keyup and blur", function() { function errors(expected, message) { equal(expected, v.size(), message ); } var e = $("#firstname"); var v = $("#testForm1").validate(); v.form(); errors(2); e.val("a"); e.trigger("keyup"); errors(1); e.val("aa"); e.trigger("keyup"); errors(0); }); test("validate checkbox on click", function() { function errors(expected, message) { equal(expected, v.size(), message ); } function trigger(element) { element.click(); // triggered click event screws up checked-state in 1.4 element.valid(); } var e = $("#check2"); var v = $("#form").validate({ rules: { check2: "required" } }); trigger(e); errors(0); trigger(e); equal( false, v.form() ); errors(1); trigger(e); errors(0); trigger(e); errors(1); }); test("validate multiple checkbox on click", function() { function errors(expected, message) { equal(expected, v.size(), message ); } function trigger(element) { element.click(); // triggered click event screws up checked-state in 1.4 element.valid(); } var e1 = $("#check1").attr("checked", false); var e2 = $("#check1b"); var v = $("#form").validate({ rules: { check: { required: true, minlength: 2 } } }); trigger(e1); trigger(e2); errors(0); trigger(e2); equal( false, v.form() ); errors(1); trigger(e2); errors(0); trigger(e2); errors(1); }); test("correct checkbox receives the error", function(){ function trigger(element) { element.click(); // triggered click event screws up checked-state in 1.4 element.valid(); } var e1 = $("#check1").attr("checked", false); var e2 = $("#check1b").attr("checked", false); var v = $("#form").find('[type=checkbox]').attr('checked', false).end().validate({ rules:{ check: { required: true, minlength: 2 } } }); equal(false, v.form()); trigger(e1); equal(false, v.form()); ok(v.errorList[0].element.id === v.currentElements[0].id, "the proper checkbox has the error AND is present in currentElements"); }); test("validate radio on click", function() { function errors(expected, message) { equal(expected, v.size(), message ); } function trigger(element) { element.click(); // triggered click event screws up checked-state in 1.4 element.valid(); } var e1 = $("#radio1"); var e2 = $("#radio1a"); var v = $("#form").validate({ rules: { radio1: "required" } }); errors(0); equal( false, v.form() ); errors(1); trigger(e2); errors(0); trigger(e1); errors(0); }); test("validate input with no type attribute, defaulting to text", function() { function errors(expected, message) { equal(expected, v.size(), message ); } var v = $("#testForm12").validate(); var e = $("#testForm12text"); errors(0); e.valid(); errors(1); e.val('test'); e.trigger('keyup'); errors(0); }); test("ignore hidden elements", function(){ var form = $('#userForm'); var validate = form.validate({ rules:{ "username": "required" } }); form.get(0).reset(); ok(! validate.form(), "form should be initially invalid"); $('#userForm [name=username]').hide(); ok(validate.form(), "hidden elements should be ignored by default"); }); test("ignore hidden elements at start", function(){ var form = $('#userForm'); var validate = form.validate({ rules:{ "username": "required" } }); form.get(0).reset(); $('#userForm [name=username]').hide(); ok(validate.form(), "hidden elements should be ignored by default"); $('#userForm [name=username]').show(); ok(! validate.form(), "form should be invalid when required element is visible"); }); test("Specify error messages through data attributes", function() { var form = $('#dataMessages'); var name = $('#dataMessagesName'); var v = form.validate(); form.get(0).reset(); name.valid(); var label = $('#dataMessages label'); equal( label.text(), "You must enter a value here", "Correct error label" ); }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/multiselect/.gitignore ================================================ .DS_Store ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/multiselect/LICENSE.txt ================================================ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/multiselect/css/multi-select.css ================================================ .ms-container{ background: transparent url('../img/switch.png') no-repeat 170px 80px; } .ms-container:after{ content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden; } .ms-container .ms-selectable, .ms-container .ms-selection{ background: #fff; color: #555555; float: left; } .ms-container .ms-list{ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-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 linear 0.2s, box-shadow linear 0.2s; -moz-transition: border linear 0.2s, box-shadow linear 0.2s; -ms-transition: border linear 0.2s, box-shadow linear 0.2s; -o-transition: border linear 0.2s, box-shadow linear 0.2s; transition: border linear 0.2s, box-shadow linear 0.2s; border: 1px solid #ccc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .ms-selected{ display:none; } .ms-container .ms-selectable{ margin-right: 40px; } .ms-container .ms-list.ms-focus{ border-color: rgba(82, 168, 236, 0.8); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); outline: 0; outline: thin dotted \9; } .ms-container ul{ margin: 0; list-style-type: none; padding: 0; } .ms-container .ms-optgroup-container{ width: 100%; } .ms-container ul.ms-list{ width: 160px; height: 200px; padding: 0; overflow-y: auto; } .ms-container .ms-optgroup-label{ margin: 0; padding: 5px 0px 0px 5px; cursor: pointer; color: #999; } .ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection{ border-bottom: 1px #eee solid; padding: 2px 10px; color: #555; font-size: 14px; } .ms-container .ms-selectable li.ms-hover, .ms-container .ms-selection li.ms-hover{ cursor: pointer; color: #fff; text-decoration: none; background-color: #08c; } .ms-container .ms-selectable li.disabled, .ms-container .ms-selection li.disabled{ background-color: #eee; color: #aaa; cursor: text; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/multiselect/js/jquery.multi-select.js ================================================ /* * MultiSelect v0.9.5 * Copyright (c) 2012 Louis Cuny * * This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ !function ($) { "use strict"; /* MULTISELECT CLASS DEFINITION * ====================== */ var MultiSelect = function (element, options) { this.options = options; this.$element = $(element); var id = this.$element.attr('id'); this.$container = $('
                  ', { 'id': "ms-"+id, 'class': "ms-container" }); this.$selectableContainer = $('
                  ', { 'class': 'ms-selectable' }); this.$selectionContainer = $('
                  ', { 'class': 'ms-selection' }); this.$selectableUl = $('
                    ', { 'class': "ms-list" }); this.$selectionUl = $('
                      ', { 'class': "ms-list" }); this.scrollTo = 0; this.sanitizeRegexp = new RegExp("\\W+", 'gi'); }; MultiSelect.prototype = { constructor: MultiSelect, init: function(){ var that = this, ms = this.$element; if (ms.next('.ms-container').length === 0){ ms.css({ position: 'absolute', left: '-9999px' }); ms.attr('id', ms.attr('id') ? ms.attr('id') : 'ms-'+Math.ceil(Math.random()*1000)); var optgroupLabel = null, optgroupId = null, optgroupCpt = 0, optgroupContainerTemplate = '
                    • ', optgroupUlTemplate = '
                        ', optgroupLiTemplate = '
                      • '; ms.find('optgroup, option').each(function(){ if ($(this).is('optgroup')){ optgroupLabel = ''+$(this).attr('label')+''; optgroupId = 'ms-'+ms.attr('id')+'-optgroup-'+optgroupCpt; var optgroup = $(this), optgroupSelectable = $(optgroupContainerTemplate), optgroupSelection = $(optgroupContainerTemplate), optgroupSelectionLi = $(optgroupLiTemplate), optgroupSelectableLi = $(optgroupLiTemplate); if (that.options.selectableOptgroup){ optgroupSelectableLi.on('click', function(){ var values = optgroup.children(':not(:selected)').map(function(){ return $(this).val(); }).get(); that.select(values); }); optgroupSelectionLi.on('click', function(){ var values = optgroup.children(':selected').map(function(){ return $(this).val(); }).get(); that.deselect(values); }); } optgroupSelectableLi.html(optgroupLabel); optgroupSelectable.attr('id', optgroupId+'-selectable') .append($(optgroupUlTemplate) .append(optgroupSelectableLi)); that.$selectableUl.append(optgroupSelectable); optgroupSelectionLi.html(optgroupLabel); optgroupSelection.attr('id', optgroupId+'-selection') .append($(optgroupUlTemplate) .append(optgroupSelectionLi)); that.$selectionUl.append(optgroupSelection); optgroupCpt++; } else { var attributes = ""; for (var cpt = 0; cpt < this.attributes.length; cpt++){ var attr = this.attributes[cpt]; if(that.isDomNode(attr.name)){ attributes += attr.name+'="'+attr.value+'" '; } } var selectableLi = $('
                      • '+$(this).text()+'
                      • '), selectedLi = selectableLi.clone(); var value = $(this).val(), msId = that.sanitize(value, that.sanitizeRegexp); selectableLi .data('ms-value', value) .addClass('ms-elem-selectable') .attr('id', msId+'-selectable'); selectedLi .data('ms-value', value) .addClass('ms-elem-selection') .attr('id', msId+'-selection') .hide(); that.$selectionUl.find('.ms-optgroup-label').hide(); if ($(this).prop('disabled') || ms.prop('disabled')){ if (this.selected) { selectedLi.prop('disabled', true); selectedLi.addClass(that.options.disabledClass); } else { selectableLi.prop('disabled', true); selectableLi.addClass(that.options.disabledClass); } } if (optgroupId){ that.$selectableUl.children('#'+optgroupId+'-selectable').find('ul').first().append(selectableLi); that.$selectionUl.children('#'+optgroupId+'-selection').find('ul').first().append(selectedLi); } else { that.$selectableUl.append(selectableLi); that.$selectionUl.append(selectedLi); } } }); if (that.options.selectableHeader){ that.$selectableContainer.append(that.options.selectableHeader); } that.$selectableContainer.append(that.$selectableUl); if (that.options.selectableFooter){ that.$selectableContainer.append(that.options.selectableFooter); } if (that.options.selectionHeader){ that.$selectionContainer.append(that.options.selectionHeader); } that.$selectionContainer.append(that.$selectionUl); if (that.options.selectionFooter){ that.$selectionContainer.append(that.options.selectionFooter); } that.$container.append(that.$selectableContainer); that.$container.append(that.$selectionContainer); ms.after(that.$container); that.$selectableUl.on('mouseenter', '.ms-elem-selectable', function(){ $('li', that.$container).removeClass('ms-hover'); $(this).addClass('ms-hover'); }).on('mouseleave', function(){ $('li', that.$container).removeClass('ms-hover'); }); var action = that.options.dblClick ? 'dblclick' : 'click'; that.$selectableUl.on(action, '.ms-elem-selectable', function(){ that.select($(this).data('ms-value')); }); that.$selectionUl.on(action, '.ms-elem-selection', function(){ that.deselect($(this).data('ms-value')); }); that.$selectionUl.on('mouseenter', '.ms-elem-selection', function(){ $('li', that.$selectionUl).removeClass('ms-hover'); $(this).addClass('ms-hover'); }).on('mouseleave', function(){ $('li', that.$selectionUl).removeClass('ms-hover'); }); that.$selectableUl.on('focusin', function(){ $(this).addClass('ms-focus'); that.$selectionUl.focusout(); }).on('focusout', function(){ $(this).removeClass('ms-focus'); $('li', that.$container).removeClass('ms-hover'); }); that.$selectionUl.on('focusin', function(){ $(this).addClass('ms-focus'); }).on('focusout', function(){ $(this).removeClass('ms-focus'); $('li', that.$container).removeClass('ms-hover'); }); ms.on('focusin', function(){ ms.focusout(); that.$selectableUl.focusin(); }).on('focusout', function(){ that.$selectableUl.removeClass('ms-focus'); that.$selectionUl.removeClass('ms-focus'); }); ms.onKeyDown = function(e, keyContainer){ var ul = that.$container.find('.'+keyContainer).find('.ms-list'), lis = ul.find('li:visible:not(.ms-optgroup-label, .ms-optgroup-container)'), lisNumber = lis.length, liFocused = ul.find('li.ms-hover'), liFocusedIndex = liFocused.length > 0 ? lis.index(liFocused) : -1, ulHeight = ul.innerHeight(), liHeight = lis.first().outerHeight(true), numberOfLisDisplayed = Math.floor(ulHeight / liHeight), ulPosition = null; if (e.keyCode === 32){ // space if (liFocused.length >0){ if (keyContainer === 'ms-selectable'){ that.select(liFocused.data('ms-value')); } else { that.deselect(liFocused.data('ms-value')); } lis.removeClass('ms-hover'); that.scrollTo = 0; ul.scrollTop(that.scrollTo); } } else if (e.keyCode === 40){ // Down if (lis.length > 0){ var nextLiIndex = liFocusedIndex+1, nextLi = (lisNumber !== nextLiIndex) ? lis.eq(nextLiIndex) : lis.first(), nextLiPosition = nextLi.position().top; ulPosition = ul.position().top; lis.removeClass('ms-hover'); nextLi.addClass('ms-hover'); if (lisNumber === nextLiIndex){ that.scrollTo = 0; } else if (nextLiPosition >= (ulPosition + (numberOfLisDisplayed * liHeight))){ that.scrollTo += liHeight; } ul.scrollTop(that.scrollTo); } } else if (e.keyCode === 38){ // Up if (lis.length > 0){ var prevLiIndex = Math.max(liFocusedIndex-1, -1), prevLi = lis.eq(prevLiIndex), prevLiPosition = prevLi.position().top; ulPosition = ul.position().top; lis.removeClass('ms-hover'); prevLi.addClass('ms-hover'); if (prevLiPosition <= ulPosition){ that.scrollTo -= liHeight; } else if (prevLiIndex < 0){ that.scrollTo = (lisNumber - numberOfLisDisplayed) * liHeight; } ul.scrollTop(that.scrollTo); } } else if (e.keyCode === 37 || e.keyCode === 39){ if (that.$selectableUl.hasClass('ms-focus')){ that.$selectableUl.focusout(); that.$selectionUl.focusin(); } else { that.$selectableUl.focusin(); that.$selectionUl.focusout(); } } }; ms.on('keydown', function(e){ if (ms.is(':focus')){ var keyContainer = that.$selectableUl.hasClass('ms-focus') ? 'ms-selectable' : 'ms-selection'; ms.onKeyDown(e, keyContainer); } }); } var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get(); that.select(selectedValues, 'init'); if (typeof that.options.afterInit === 'function') { that.options.afterInit.call(this, this.$container); } }, 'refresh' : function() { this.destroy(); this.$element.multiSelect(this.options); }, 'destroy' : function(){ $("#ms-"+this.$element.attr("id")).remove(); this.$element.removeData('multiselect'); }, 'select' : function(value, method){ if (typeof value === 'string'){ value = [value]; } var that = this, ms = this.$element, msIds = $.map(value, function(val){ return(that.sanitize(val, that.sanitizeRegexp)); }), selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'), selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection'), options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); }); if (selectables.length > 0){ selectables.addClass('ms-selected').hide(); selections.addClass('ms-selected').show(); options.prop('selected', true); var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); if (selectableOptgroups.length > 0){ selectableOptgroups.each(function(){ var selectablesLi = $(this).find('.ms-elem-selectable'); if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){ $(this).find('.ms-optgroup-label').hide(); } }); var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); selectionOptgroups.each(function(){ var selectionsLi = $(this).find('.ms-elem-selection'); if (selectionsLi.filter('.ms-selected').length > 0){ $(this).find('.ms-optgroup-label').show(); } }); } if (method !== 'init'){ that.$selectionUl.focusout(); that.$selectableUl.focusin(); ms.trigger('change'); if (typeof that.options.afterSelect === 'function') { that.options.afterSelect.call(this, value); } } } }, 'deselect' : function(value){ if (typeof value === 'string'){ value = [value]; } var that = this, ms = this.$element, msIds = $.map(value, function(val){ return(that.sanitize(val, that.sanitizeRegexp)); }), selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'), selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected'), options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); }); if (selections.length > 0){ selectables.removeClass('ms-selected').show(); selections.removeClass('ms-selected').hide(); options.prop('selected', false); var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); if (selectableOptgroups.length > 0){ selectableOptgroups.each(function(){ var selectablesLi = $(this).find('.ms-elem-selectable'); if (selectablesLi.filter(':not(.ms-selected)').length > 0){ $(this).find('.ms-optgroup-label').show(); } }); var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); selectionOptgroups.each(function(){ var selectionsLi = $(this).find('.ms-elem-selection'); if (selectionsLi.filter('.ms-selected').length === 0){ $(this).find('.ms-optgroup-label').hide(); } }); } this.$selectableUl.focusout(); this.$selectionUl.focusin(); ms.trigger('change'); if (typeof that.options.afterDeselect === 'function') { that.options.afterDeselect.call(this, value); } } }, 'select_all' : function(){ var ms = this.$element, values = ms.val(); ms.find('option').prop('selected', true); this.$selectableUl.find('.ms-elem-selectable').addClass('ms-selected').hide(); this.$selectionUl.find('.ms-optgroup-label').show(); this.$selectableUl.find('.ms-optgroup-label').hide(); this.$selectionUl.find('.ms-elem-selection').addClass('ms-selected').show(); this.$selectionUl.focusin(); this.$selectableUl.focusout(); ms.trigger('change'); if (typeof this.options.afterSelect === 'function') { var selectedValues = $.grep(ms.val(), function(item){ return $.inArray(item, values) < 0; }); this.options.afterSelect.call(this, selectedValues); } }, 'deselect_all' : function(){ var ms = this.$element, values = ms.val(); ms.find('option').prop('selected', false); this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show(); this.$selectionUl.find('.ms-optgroup-label').hide(); this.$selectableUl.find('.ms-optgroup-label').show(); this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide(); this.$selectableUl.focusin(); this.$selectionUl.focusout(); ms.trigger('change'); if (typeof this.options.afterDeselect === 'function') { this.options.afterDeselect.call(this, values); } }, isDomNode: function (attr){ return ( attr && typeof attr === "object" && typeof attr.nodeType === "number" && typeof attr.nodeName === "string" ); }, sanitize: function(value, reg){ return(value.replace(reg, '_')); } }; /* MULTISELECT PLUGIN DEFINITION * ======================= */ $.fn.multiSelect = function () { var option = arguments[0], args = arguments; return this.each(function () { var $this = $(this), data = $this.data('multiselect'), options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option); if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); } if (typeof option === 'string'){ data[option](args[1]); } else { data.init(); } }); }; $.fn.multiSelect.defaults = { selectableOptgroup: false, disabledClass : 'disabled', dblClick : false }; $.fn.multiSelect.Constructor = MultiSelect; }(window.jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/pixelmatrix-uniform/README.textile ================================================ h1. Uniform Sexy form elements with jQuery Version 1.7.5 Requires jQuery 1.4 or newer. Licensed under: MIT License - http://www.opensource.org/licenses/mit-license.php h2. Installation Installation of Uniform is quite simple. First, make sure you have jQuery 1.4+ installed. Then you’ll want to link to the jquery.uniform.js file and uniform.default.css in the head area of your page: bc. h2. Basic usage Using Uniform can be quite easy as well. Simply call: $("select").uniform(); To “uniform” all possible form elements, just do something like this: $("select, input[type=checkbox], input[type=radio], input[type=file], input[type=submit], a.button, button").uniform(); A complete tag in the HEAD section of your site can therefore look like this: bc. Remember that it is essential to first follow the steps in the Installation section here above. h2. Extra parameters You can pass in extra parameters to control certain aspects of Uniform. To pass in parameters, use syntax like this: bc. $("select").uniform({ param1: value, param2: value, param3: value }); h3. _NEW!_ autoHide(boolean) *Default:* true If this option is set to true, Uniform will hide the new elements if the existing elements are currently hidden using display: none; *REMEMBER*: If you want to show a select or checkbox you'll need to show the new Uniform div instead of the child element. h3. selectClass (string) *Default:* “selector” Sets the class given to the wrapper div for select elements. @$("select").uniform({selectClass: 'mySelectClass'});@ h3. radioClass (string) *Default:* “radio” Sets the class given to the wrapper div for radio elements. @$(":radio").uniform({radioClass: 'myRadioClass'});@ h3. checkboxClass (string) *Default:* “checker” Sets the class given to the wrapper div for checkbox elements. @$(":checkbox").uniform({checkboxClass: 'myCheckClass'});@ h3. fileClass (string) *Default:* “uploader” Sets the class given to the wrapper div for file upload elements. @$(":file").uniform({fileClass: 'myFileClass'});@ h3. filenameClass (string) *Default:* “filename” Sets the class given to div inside a file upload container that spits out the filename. @$(":file").uniform({filenameClass: 'myFilenameClass'});@ h3. fileBtnClass (string) *Default:* “action” Sets the class given to div inside a file upload container that acts as the “Choose file” button. @$(":file").uniform({fileBtnClass: 'myFileBtnClass'});@ h3. fileDefaultText (string) *Default:* “No file selected” Sets the text written in the filename div of a file upload input when there is no file selected. @$(":file").uniform({fileDefaultText: 'Select a file please'});@ h3. fileBtnText(string) *Default:* “Choose File” Sets the text written on the action button inside a file upload input. @$(":file").uniform({fileBtnText: 'Choose…'});@ h3. buttonClass(string) *Default:* "button" Sets the class given to a button that's been uniformed @$("input[type=button]").uniform({buttonClass: 'myBtnClass'});@ h3. checkedClass (string) *Default:* “checked” Sets the class given to elements when they are checked (radios and checkboxes). @$(":radio, :checkbox").uniform({checkedClass: 'myCheckedClass'});@ h3. focusClass (string) *Default:* “focus” Sets the class given to elements when they are focused. @$("select").uniform({focusClass: 'myFocusClass'});@ h3. disabledClass (string) *Default:* “disabled” Sets the class given to elements when they are disabled. @$("select").uniform({disabledClass: 'myDisabledClass'});@ h3. activeClass (string) *Default:* “active” Sets the class given to elements when they are active (pressed). @$("select").uniform({activeClass: 'myActiveClass'});@ h3. hoverClass (string) *Default:* “hover” Sets the class given to elements when they are currently hovered. @$("select").uniform({hoverClass: 'myHoverClass'});@ h3. useID (boolean) *Default:* true If true, sets an ID on the container div of each form element. The ID is a prefixed version of the same ID of the form element. @$("select").uniform({useID: false});@ h3. idPrefix (string) *Default:* “uniform” If useID is set to true, this string is prefixed to element ID’s and attached to the container div of each uniformed element. If you have a checkbox with the ID of “remember-me” the container div would have the ID “uniform-remember-me”. @$("select").uniform({idPrefix: 'container'});@ h3. resetSelector (boolean/string) *Default:* false This parameter allows you to use a jQuery-style selector to point to a “reset” button in your form if you have one. Use false if you have no “reset” button, or a selector string that points to the reset button if you have one. @$("select").uniform({resetSelector: 'input[type="reset"]'});@ h2. Additional functions In addition to the parameters, there are a couple of other ways you can interact with Uniform. h3. $.uniform.update([elem/selector string]); If you need to change values on the form dynamically you must tell Uniform to update that element’s style. Fortunately, it’s very simple. Just call this function, and Uniform will do the rest. @$.uniform.update("#myUpdatedCheckbox");@ If you are lazy, or just don’t specifically know which element to update, you can just leave out the parameter (see below) and Uniform will update all Uniformed elements on the page: @$.uniform.update();@ h3. $.uniform.restore([elem/selector string]); If you want to "un-uniform" something, simply call this function. It will remove the inline styles, extra dom elements, and event handlers, effectively restoring the element to it's previous state. @$.uniform.restore("select");@ h3. $.uniform.elements[] You can get an array of all the elements that have been Uniformed at any time using this public variable. Wouldn’t advise changing the contents though! @var uniforms = $.uniform.elements;@ h2. Customizing CSS To edit the CSS of Uniform it is highly recommended to not edit the theme files, but to override them using CSS. Make sure your CSS file comes after the uniform theme css file in the HEAD section. It's common to want to resize the selects or other elements. The best way is to set the width property on the div element, span element and the form element itself. Look through the theme CSS in the _presentation_ section to see where the width property is currently set. h2. Tips & tricks Uniform is supposed to be pretty simple, but there are a few things that can be tricky. Here are some tips that may make your experience simpler: Remember to change the CSS classes in the theme if you change the parameters for elements’ classes. This can be tedious work, but if you don’t do it, it’s not going to look correct. Find and Replace is your friend. Uniform cannot automatically sniff out dynamic value changes. If you make changes to elements in Javascript or using a Reset button of some kind remember to call $.uniform.update(); to sync the changes with Uniform. Uniform is disabled in IE6. It’s not possible to fix due to the way IE6 handles form elements. If you care about IE6 users, give it a quick look to make sure your “naked” form elements look alright in there. You’re on your own for styling text inputs and more. Fortunately, things that are not handled by Uniform are pretty easy to skin. :) If you have ideas, or bugs, please post them in GitHub. We rely on our users for ideas for improvements and bug reports. Otherwise Uniform will stay static. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/pixelmatrix-uniform/css/uniform.default.css ================================================ /* Uniform Theme: Uniform Default Version: 1.6 By: Josh Pyles License: MIT License --- For use with the Uniform plugin: http://pixelmatrixdesign.com/uniform/ --- Generated by Uniform Theme Generator: http://pixelmatrixdesign.com/uniform/themer.html */ /* Global Declaration */ div.selector, div.selector span, div.checker span, div.radio span, div.uploader, div.uploader span.action, div.button, div.button span { background-image: url(../images/sprite.png); background-repeat: no-repeat; -webkit-font-smoothing: antialiased; } .selector, .radio, .checker, .uploader, .button, .selector *, .radio *, .checker *, .uploader *, .button *{ margin: 0; padding: 0; } /* INPUT & TEXTAREA */ input.text, input.email, input.password, textarea.uniform { font-size: 12px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; padding: 3px; color: #777; background: url('../images/bg-input-focus.png') repeat-x 0px 0px; background: url('../images/bg-input.png') repeat-x 0px 0px; border-top: solid 1px #aaa; border-left: solid 1px #aaa; border-bottom: solid 1px #ccc; border-right: solid 1px #ccc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; outline: 0; } input.text:focus, input.email:focus, input.password:focus, textarea.uniform:focus { -webkit-box-shadow: 0px 0px 4px rgba(0,0,0,0.3); -moz-box-shadow: 0px 0px 4px rgba(0,0,0,0.3); box-shadow: 0px 0px 4px rgba(0,0,0,0.3); border-color: #999; background: url('../images/bg-input-focus.png') repeat-x 0px 0px; } /* SPRITES */ /* Select */ div.selector { background-position: -483px -130px; line-height: 26px; height: 26px; } div.selector span { background-position: right 0px; height: 26px; line-height: 26px; } div.selector select { /* change these to adjust positioning of select element */ top: 0px; left: 0px; } div.selector:active, div.selector.active { background-position: -483px -156px; } div.selector:active span, div.selector.active span { background-position: right -26px; } div.selector.focus, div.selector.hover, div.selector:hover { background-position: -483px -182px; } div.selector.focus span, div.selector.hover span, div.selector:hover span { background-position: right -52px; } div.selector.focus:active, div.selector.focus.active, div.selector:hover:active, div.selector.active:hover { background-position: -483px -208px; } div.selector.focus:active span, div.selector:hover:active span, div.selector.active:hover span, div.selector.focus.active span { background-position: right -78px; } div.selector.disabled { background-position: -483px -234px; } div.selector.disabled span { background-position: right -104px; } /* Checkbox */ div.checker { width: 19px; height: 19px; } div.checker input { width: 19px; height: 19px; } div.checker span { background-position: 0px -260px; height: 19px; width: 19px; } div.checker:active span, div.checker.active span { background-position: -19px -260px; } div.checker.focus span, div.checker:hover span { background-position: -38px -260px; } div.checker.focus:active span, div.checker:active:hover span, div.checker.active:hover span, div.checker.focus.active span { background-position: -57px -260px; } div.checker span.checked { background-position: -76px -260px; } div.checker:active span.checked, div.checker.active span.checked { background-position: -95px -260px; } div.checker.focus span.checked, div.checker:hover span.checked { background-position: -114px -260px; } div.checker.focus:active span.checked, div.checker:hover:active span.checked, div.checker.active:hover span.checked, div.checker.active.focus span.checked { background-position: -133px -260px; } div.checker.disabled span, div.checker.disabled:active span, div.checker.disabled.active span { background-position: -152px -260px; } div.checker.disabled span.checked, div.checker.disabled:active span.checked, div.checker.disabled.active span.checked { background-position: -171px -260px; } /* Radio */ div.radio { width: 18px; height: 18px; } div.radio input { width: 18px; height: 18px; } div.radio span { height: 18px; width: 18px; background-position: 0px -279px; } div.radio:active span, div.radio.active span { background-position: -18px -279px; } div.radio.focus span, div.radio:hover span { background-position: -36px -279px; } div.radio.focus:active span, div.radio:active:hover span, div.radio.active:hover span, div.radio.active.focus span { background-position: -54px -279px; } div.radio span.checked { background-position: -72px -279px; } div.radio:active span.checked, div.radio.active span.checked { background-position: -90px -279px; } div.radio.focus span.checked, div.radio:hover span.checked { background-position: -108px -279px; } div.radio.focus:active span.checked, div.radio:hover:active span.checked, div.radio.focus.active span.checked, div.radio.active:hover span.checked { background-position: -126px -279px; } div.radio.disabled span, div.radio.disabled:active span, div.radio.disabled.active span { background-position: -144px -279px; } div.radio.disabled span.checked, div.radio.disabled:active span.checked, div.radio.disabled.active span.checked { background-position: -162px -279px; } /* Uploader */ div.uploader { background-position: 0px -297px; height: 28px; } div.uploader span.action { background-position: right -409px; height: 24px; line-height: 24px; } div.uploader span.filename { height: 24px; /* change this line to adjust positioning of filename area */ margin: 2px 0px 2px 2px; line-height: 24px; } div.uploader.focus, div.uploader.hover, div.uploader:hover { background-position: 0px -353px; } div.uploader.focus span.action, div.uploader.hover span.action, div.uploader:hover span.action { background-position: right -437px; } div.uploader.active span.action, div.uploader:active span.action { background-position: right -465px; } div.uploader.focus.active span.action, div.uploader:focus.active span.action, div.uploader.focus:active span.action, div.uploader:focus:active span.action { background-position: right -493px; } div.uploader.disabled { background-position: 0px -325px; } div.uploader.disabled span.action { background-position: right -381px; } div.button { background-position: 0px -523px; } div.button span { background-position: right -643px; } div.button.focus, div.button:focus, div.button:hover, div.button.hover { background-position: 0px -553px; } div.button.focus span, div.button:focus span, div.button:hover span, div.button.hover span { background-position: right -673px; } div.button.active, div.button:active { background-position: 0px -583px; } div.button.active span, div.button:active span { background-position: right -703px; color: #555; } div.button.disabled, div.button:disabled { background-position: 0px -613px; } div.button.disabled span, div.button:disabled span { background-position: right -733px; color: #bbb; cursor: default; } /* PRESENTATION */ /* Button */ div.button { height: 30px; } div.button span { margin-left: 13px; height: 22px; padding-top: 8px; font-weight: bold; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; letter-spacing: 1px; text-transform: uppercase; padding-left: 2px; padding-right: 15px; } /* Select */ div.selector { width: 190px; font-size: 12px; } div.selector select { min-width: 190px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; border: solid 1px #fff; } div.selector span { padding: 0px 25px 0px 2px; cursor: pointer; } div.selector span { color: #666; width: 158px; text-shadow: 0 1px 0 #fff; } div.selector.disabled span { color: #bbb; } /* Checker */ div.checker { margin-right: 5px; } /* Radio */ div.radio { margin-right: 3px; } /* Uploader */ div.uploader { width: 190px; cursor: pointer; } div.uploader span.action { width: 85px; text-align: center; text-shadow: #fff 0px 1px 0px; background-color: #fff; font-size: 11px; font-weight: bold; } div.uploader span.filename { color: #777; width: 82px; border-right: solid 1px #bbb; font-size: 11px; } div.uploader input { width: 190px; } div.uploader.disabled span.action { color: #aaa; } div.uploader.disabled span.filename { border-color: #ddd; color: #aaa; } /* CORE FUNCTIONALITY Not advised to edit stuff below this line ----------------------------------------------------- */ .selector, .checker, .button, .radio, .uploader { display: -moz-inline-box; display: inline-block; vertical-align: middle; zoom: 1; *display: inline; } .selector select:focus, .radio input:focus, .checker input:focus, .uploader input:focus { outline: 0; } /* Button */ div.button a, div.button button, div.button input { position: absolute; } div.button { cursor: pointer; position: relative; } div.button span { display: -moz-inline-box; display: inline-block; line-height: 1; text-align: center; } /* Select */ div.selector { position: relative; padding-left: 10px; overflow: hidden; } div.selector span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } div.selector select { position: absolute; opacity: 0; filter: alpha(opacity:0); height: 25px; border: none; background: none; } /* Checker */ div.checker { position: relative; } div.checker span { display: -moz-inline-box; display: inline-block; text-align: center; } div.checker input { opacity: 0; filter: alpha(opacity:0); display: inline-block; background: none; } /* Radio */ div.radio { position: relative; } div.radio span { display: -moz-inline-box; display: inline-block; text-align: center; } div.radio input { opacity: 0; filter: alpha(opacity:0); text-align: center; display: inline-block; background: none; } /* Uploader */ div.uploader { position: relative; overflow: hidden; cursor: default; } div.uploader span.action { float: left; display: inline; padding: 2px 0px; overflow: hidden; cursor: pointer; } div.uploader span.filename { padding: 0px 10px; float: left; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: default; } div.uploader input { opacity: 0; filter: alpha(opacity:0); position: absolute; top: 0; right: 0; bottom: 0; float: right; height: 25px; border: none; cursor: default; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/pixelmatrix-uniform/demo/demo.html ================================================

                        Uniform Demo

                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/pixelmatrix-uniform/jquery.uniform.js ================================================ /* Uniform v1.7.5 Copyright © 2009 Josh Pyles / Pixelmatrix Design LLC http://pixelmatrixdesign.com Requires jQuery 1.4 or newer Much thanks to Thomas Reynolds and Buck Wilson for their help and advice on this Disabling text selection is made possible by Mathias Bynens and his noSelect plugin. Also, thanks to David Kaneda and Eugene Bond for their contributions to the plugin License: MIT License - http://www.opensource.org/licenses/mit-license.php Enjoy! */ (function($) { $.uniform = { options: { selectClass: 'selector', radioClass: 'radio', checkboxClass: 'checker', fileClass: 'uploader', filenameClass: 'filename', fileBtnClass: 'action', fileDefaultText: 'No file selected', fileBtnText: 'Choose File', checkedClass: 'checked', focusClass: 'focus', disabledClass: 'disabled', buttonClass: 'button', activeClass: 'active', hoverClass: 'hover', useID: true, idPrefix: 'uniform', resetSelector: false, autoHide: true }, elements: [] }; if($.browser.msie && $.browser.version < 7){ $.support.selectOpacity = false; }else{ $.support.selectOpacity = true; } $.fn.uniform = function(options) { options = $.extend($.uniform.options, options); var el = this; //code for specifying a reset button if(options.resetSelector != false){ $(options.resetSelector).mouseup(function(){ function resetThis(){ $.uniform.update(el); } setTimeout(resetThis, 10); }); } function doInput(elem){ $el = $(elem); $el.addClass($el.attr("type")); storeElement(elem); } function doTextarea(elem){ $(elem).addClass("uniform"); storeElement(elem); } function doButton(elem){ var $el = $(elem); var divTag = $("
                        "), spanTag = $(""); divTag.addClass(options.buttonClass); if(options.useID && $el.attr("id") != "") divTag.attr("id", options.idPrefix+"-"+$el.attr("id")); var btnText; if($el.is("a") || $el.is("button")){ btnText = $el.text(); }else if($el.is(":submit") || $el.is(":reset") || $el.is("input[type=button]")){ btnText = $el.attr("value"); } btnText = btnText == "" ? $el.is(":reset") ? "Reset" : "Submit" : btnText; spanTag.html(btnText); $el.css("opacity", 0); $el.wrap(divTag); $el.wrap(spanTag); //redefine variables divTag = $el.closest("div"); spanTag = $el.closest("span"); if($el.is(":disabled")) divTag.addClass(options.disabledClass); divTag.bind({ "mouseenter.uniform": function(){ divTag.addClass(options.hoverClass); }, "mouseleave.uniform": function(){ divTag.removeClass(options.hoverClass); divTag.removeClass(options.activeClass); }, "mousedown.uniform touchbegin.uniform": function(){ divTag.addClass(options.activeClass); }, "mouseup.uniform touchend.uniform": function(){ divTag.removeClass(options.activeClass); }, "click.uniform touchend.uniform": function(e){ if($(e.target).is("span") || $(e.target).is("div")){ if(elem[0].dispatchEvent){ var ev = document.createEvent('MouseEvents'); ev.initEvent( 'click', true, true ); elem[0].dispatchEvent(ev); }else{ elem[0].click(); } } } }); elem.bind({ "focus.uniform": function(){ divTag.addClass(options.focusClass); }, "blur.uniform": function(){ divTag.removeClass(options.focusClass); } }); $.uniform.noSelect(divTag); storeElement(elem); } function doSelect(elem){ var $el = $(elem); var divTag = $('
                        '), spanTag = $(''); if(!$el.css("display") == "none" && options.autoHide){ divTag.hide(); } divTag.addClass(options.selectClass); if(options.useID && elem.attr("id") != ""){ divTag.attr("id", options.idPrefix+"-"+elem.attr("id")); } var selected = elem.find(":selected:first"); if(selected.length == 0){ selected = elem.find("option:first"); } spanTag.html(selected.html()); elem.css('opacity', 0); elem.wrap(divTag); elem.before(spanTag); //redefine variables divTag = elem.parent("div"); spanTag = elem.siblings("span"); elem.bind({ "change.uniform": function() { spanTag.text(elem.find(":selected").html()); divTag.removeClass(options.activeClass); }, "focus.uniform": function() { divTag.addClass(options.focusClass); }, "blur.uniform": function() { divTag.removeClass(options.focusClass); divTag.removeClass(options.activeClass); }, "mousedown.uniform touchbegin.uniform": function() { divTag.addClass(options.activeClass); }, "mouseup.uniform touchend.uniform": function() { divTag.removeClass(options.activeClass); }, "click.uniform touchend.uniform": function(){ divTag.removeClass(options.activeClass); }, "mouseenter.uniform": function() { divTag.addClass(options.hoverClass); }, "mouseleave.uniform": function() { divTag.removeClass(options.hoverClass); divTag.removeClass(options.activeClass); }, "keyup.uniform": function(){ spanTag.text(elem.find(":selected").html()); } }); //handle disabled state if($(elem).attr("disabled")){ //box is checked by default, check our box divTag.addClass(options.disabledClass); } $.uniform.noSelect(spanTag); storeElement(elem); } function doCheckbox(elem){ var $el = $(elem); var divTag = $('
                        '), spanTag = $(''); if(!$el.css("display") == "none" && options.autoHide){ divTag.hide(); } divTag.addClass(options.checkboxClass); //assign the id of the element if(options.useID && elem.attr("id") != ""){ divTag.attr("id", options.idPrefix+"-"+elem.attr("id")); } //wrap with the proper elements $(elem).wrap(divTag); $(elem).wrap(spanTag); //redefine variables spanTag = elem.parent(); divTag = spanTag.parent(); //hide normal input and add focus classes $(elem) .css("opacity", 0) .bind({ "focus.uniform": function(){ divTag.addClass(options.focusClass); }, "blur.uniform": function(){ divTag.removeClass(options.focusClass); }, "click.uniform touchend.uniform": function(){ if(!$(elem).attr("checked")){ //box was just unchecked, uncheck span spanTag.removeClass(options.checkedClass); }else{ //box was just checked, check span. spanTag.addClass(options.checkedClass); } }, "mousedown.uniform touchbegin.uniform": function() { divTag.addClass(options.activeClass); }, "mouseup.uniform touchend.uniform": function() { divTag.removeClass(options.activeClass); }, "mouseenter.uniform": function() { divTag.addClass(options.hoverClass); }, "mouseleave.uniform": function() { divTag.removeClass(options.hoverClass); divTag.removeClass(options.activeClass); } }); //handle defaults if($(elem).attr("checked")){ //box is checked by default, check our box spanTag.addClass(options.checkedClass); } //handle disabled state if($(elem).attr("disabled")){ //box is checked by default, check our box divTag.addClass(options.disabledClass); } storeElement(elem); } function doRadio(elem){ var $el = $(elem); var divTag = $('
                        '), spanTag = $(''); if(!$el.css("display") == "none" && options.autoHide){ divTag.hide(); } divTag.addClass(options.radioClass); if(options.useID && elem.attr("id") != ""){ divTag.attr("id", options.idPrefix+"-"+elem.attr("id")); } //wrap with the proper elements $(elem).wrap(divTag); $(elem).wrap(spanTag); //redefine variables spanTag = elem.parent(); divTag = spanTag.parent(); //hide normal input and add focus classes $(elem) .css("opacity", 0) .bind({ "focus.uniform": function(){ divTag.addClass(options.focusClass); }, "blur.uniform": function(){ divTag.removeClass(options.focusClass); }, "click.uniform touchend.uniform": function(){ if(!$(elem).attr("checked")){ //box was just unchecked, uncheck span spanTag.removeClass(options.checkedClass); }else{ //box was just checked, check span var classes = options.radioClass.split(" ")[0]; $("." + classes + " span." + options.checkedClass + ":has([name='" + $(elem).attr('name') + "'])").removeClass(options.checkedClass); spanTag.addClass(options.checkedClass); } }, "mousedown.uniform touchend.uniform": function() { if(!$(elem).is(":disabled")){ divTag.addClass(options.activeClass); } }, "mouseup.uniform touchbegin.uniform": function() { divTag.removeClass(options.activeClass); }, "mouseenter.uniform touchend.uniform": function() { divTag.addClass(options.hoverClass); }, "mouseleave.uniform": function() { divTag.removeClass(options.hoverClass); divTag.removeClass(options.activeClass); } }); //handle defaults if($(elem).attr("checked")){ //box is checked by default, check span spanTag.addClass(options.checkedClass); } //handle disabled state if($(elem).attr("disabled")){ //box is checked by default, check our box divTag.addClass(options.disabledClass); } storeElement(elem); } function doFile(elem){ //sanitize input var $el = $(elem); var divTag = $('
                        '), filenameTag = $(''+options.fileDefaultText+''), btnTag = $(''+options.fileBtnText+''); if(!$el.css("display") == "none" && options.autoHide){ divTag.hide(); } divTag.addClass(options.fileClass); filenameTag.addClass(options.filenameClass); btnTag.addClass(options.fileBtnClass); if(options.useID && $el.attr("id") != ""){ divTag.attr("id", options.idPrefix+"-"+$el.attr("id")); } //wrap with the proper elements $el.wrap(divTag); $el.after(btnTag); $el.after(filenameTag); //redefine variables divTag = $el.closest("div"); filenameTag = $el.siblings("."+options.filenameClass); btnTag = $el.siblings("."+options.fileBtnClass); //set the size if(!$el.attr("size")){ var divWidth = divTag.width(); //$el.css("width", divWidth); $el.attr("size", divWidth/10); } //actions var setFilename = function() { var filename = $el.val(); if (filename === '') { filename = options.fileDefaultText; } else { filename = filename.split(/[\/\\]+/); filename = filename[(filename.length-1)]; } filenameTag.text(filename); }; // Account for input saved across refreshes setFilename(); $el .css("opacity", 0) .bind({ "focus.uniform": function(){ divTag.addClass(options.focusClass); }, "blur.uniform": function(){ divTag.removeClass(options.focusClass); }, "mousedown.uniform": function() { if(!$(elem).is(":disabled")){ divTag.addClass(options.activeClass); } }, "mouseup.uniform": function() { divTag.removeClass(options.activeClass); }, "mouseenter.uniform": function() { divTag.addClass(options.hoverClass); }, "mouseleave.uniform": function() { divTag.removeClass(options.hoverClass); divTag.removeClass(options.activeClass); } }); // IE7 doesn't fire onChange until blur or second fire. if ($.browser.msie){ // IE considers browser chrome blocking I/O, so it // suspends tiemouts until after the file has been selected. $el.bind('click.uniform.ie7', function() { setTimeout(setFilename, 0); }); }else{ // All other browsers behave properly $el.bind('change.uniform', setFilename); } //handle defaults if($el.attr("disabled")){ //box is checked by default, check our box divTag.addClass(options.disabledClass); } $.uniform.noSelect(filenameTag); $.uniform.noSelect(btnTag); storeElement(elem); } $.uniform.restore = function(elem){ if(elem == undefined){ elem = $($.uniform.elements); } $(elem).each(function(){ if($(this).is(":checkbox")){ //unwrap from span and div $(this).unwrap().unwrap(); }else if($(this).is("select")){ //remove sibling span $(this).siblings("span").remove(); //unwrap parent div $(this).unwrap(); }else if($(this).is(":radio")){ //unwrap from span and div $(this).unwrap().unwrap(); }else if($(this).is(":file")){ //remove sibling spans $(this).siblings("span").remove(); //unwrap parent div $(this).unwrap(); }else if($(this).is("button, :submit, :reset, a, input[type='button']")){ //unwrap from span and div $(this).unwrap().unwrap(); } //unbind events $(this).unbind(".uniform"); //reset inline style $(this).css("opacity", "1"); //remove item from list of uniformed elements var index = $.inArray($(elem), $.uniform.elements); $.uniform.elements.splice(index, 1); }); }; function storeElement(elem){ //store this element in our global array elem = $(elem).get(); if(elem.length > 1){ $.each(elem, function(i, val){ $.uniform.elements.push(val); }); }else{ $.uniform.elements.push(elem); } } //noSelect v1.0 $.uniform.noSelect = function(elem) { function f() { return false; }; $(elem).each(function() { this.onselectstart = this.ondragstart = f; // Webkit & IE $(this) .mousedown(f) // Webkit & Opera .css({ MozUserSelect: 'none' }); // Firefox }); }; $.uniform.update = function(elem){ if(elem == undefined){ elem = $($.uniform.elements); } //sanitize input elem = $(elem); elem.each(function(){ //do to each item in the selector //function to reset all classes var $e = $(this); if($e.is("select")){ //element is a select var spanTag = $e.siblings("span"); var divTag = $e.parent("div"); divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass); //reset current selected text spanTag.html($e.find(":selected").html()); if($e.is(":disabled")){ divTag.addClass(options.disabledClass); }else{ divTag.removeClass(options.disabledClass); } }else if($e.is(":checkbox")){ //element is a checkbox var spanTag = $e.closest("span"); var divTag = $e.closest("div"); divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass); spanTag.removeClass(options.checkedClass); if($e.is(":checked")){ spanTag.addClass(options.checkedClass); } if($e.is(":disabled")){ divTag.addClass(options.disabledClass); }else{ divTag.removeClass(options.disabledClass); } }else if($e.is(":radio")){ //element is a radio var spanTag = $e.closest("span"); var divTag = $e.closest("div"); divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass); spanTag.removeClass(options.checkedClass); if($e.is(":checked")){ spanTag.addClass(options.checkedClass); } if($e.is(":disabled")){ divTag.addClass(options.disabledClass); }else{ divTag.removeClass(options.disabledClass); } }else if($e.is(":file")){ var divTag = $e.parent("div"); var filenameTag = $e.siblings(options.filenameClass); btnTag = $e.siblings(options.fileBtnClass); divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass); filenameTag.text($e.val()); if($e.is(":disabled")){ divTag.addClass(options.disabledClass); }else{ divTag.removeClass(options.disabledClass); } }else if($e.is(":submit") || $e.is(":reset") || $e.is("button") || $e.is("a") || elem.is("input[type=button]")){ var divTag = $e.closest("div"); divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass); if($e.is(":disabled")){ divTag.addClass(options.disabledClass); }else{ divTag.removeClass(options.disabledClass); } } }); }; return this.each(function() { if($.support.selectOpacity){ var elem = $(this); if(elem.is("select")){ //element is a select if(elem.attr("multiple") != true){ //element is not a multi-select if(elem.attr("size") == undefined || elem.attr("size") <= 1){ doSelect(elem); } } }else if(elem.is(":checkbox")){ //element is a checkbox doCheckbox(elem); }else if(elem.is(":radio")){ //element is a radio doRadio(elem); }else if(elem.is(":file")){ //element is a file upload doFile(elem); }else if(elem.is(":text, :password, input[type='email']")){ doInput(elem); }else if(elem.is("textarea")){ doTextarea(elem); }else if(elem.is("a") || elem.is(":submit") || elem.is(":reset") || elem.is("button") || elem.is("input[type=button]")){ doButton(elem); } } }); }; })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/changelog.txt ================================================ Version 1.5.4 (2012-04-12) Flash: Disable scripting if swf was loaded from another domain. Version 1.5.3 (2012-04-05) HTML5: Check if xhr object is initialized, before calling abort() on it. HTML4: Postpone form removal until uploaders state changes, to avoid error on resuming stopped uploads. BrowserPlus: Fix mechanical typo, that caused error during mime type check. BrowserPlus: browserPlus.Uploader.Cancel() has two required parameters, dies with the error if not passed. Flash: Improve runtime's behaviour during upload cancellation. Flash: Survive the case when GPSVersionID contains unexpected value. Flash: Fix random freeze in Chrome's bundled Flash Player. Flash: Avoid the silent break when URLStream not yet open, but close is called on it. Flash: Move Destroy handler out of Flash:Init handler, since it might be called not only after Flash:Init but also before it. Flash: Avoid warning during build with mxmlc. Try removeEventListener first in IE and only if it fails - detachEvent. Fix plupload.getPos to return proper value in IE8+. Do not initiate plupload.STARTED state, if file queue is empty. Additional language packs: Estonian, Polish, Korean, French-Canadian, Greek, Persian/Farsi. Version 1.5.2 (2012-01-06) UI Widget: Do not show UI if no runtime can be initialized. UI Widget: Timely update file size and total size if resize in action. UI Widget: Constrain renaming feature to queued files only. UI Widget: Disable Add button properly, if requested, rather then just hide. HTML4/HTML5/BrowserPlus: Avoid adding mime type twice to dialog trigger. HTML5: fix regression, when unresized images were failing on FF3.6. HTML5: Constrain Gecko 2,5,6 workaround to multipart mode only. HTML5/Flash: Take into account weird possibilities of ExifVersion being a string, rather then standard Undefined. Flash: Simplify event dispatching in BitmapDataUnlimited class, in order to avoid freezing on resizing in FP11. Add ability to disable file dialog trigger on request (uploader.disableBrowse(true/false)). Support for immediate abort of upload process, be it chunked upload or regular one. Abort all activity, before destroying uploader. Revive temporary file removal logic in upload.php. Fix potential vulnerability in dump.php and upload.php. Additional MIME types: application/vnd.openxmlformats-officedocument.*, application/x-javascript, application/json, text/css,css, application/vnd.oasis.opendocument.formula-templat. Additional language packs: Hungarian, Croatian, Serbian, Romanian. Version 1.5.1.1 (2011-09-27) HTML5: Fix mechanical typo, that successfully broke drag and drop, wherever could. Version 1.5.1 (2011-09-26) HTML4: Add support for server responses in HTML format. HTML5: Disable multiple file selection in Safari 5.x for Windows (see #363). HTML5: Gecko 2/5/6 should upload chunks as binary strings when in chunking mode and client side resize is requested. Flash: Enforce URLStream mode when custom headers are passed. Flash: Fix embedding problems in IE9 (and all other IEs). Flash/Gears/BrowserPlus/SilverLight: Expose multi_selection feature, to be used in required_features (mainly to overcome Safari for Windows problem). SilverLight: Properly handle custom and null headers. UploadComplete moved to fire after the last StateChanged event. Additional language packs: Finnish. Version 1.5b (2011-09-11) UI Widget: Fix sortable logic. UI Widget: Fix bug, when message was displayed simultaneously across all Plupload UI instances on the page. UI Widget: notify() method is now public - users can throw their own messages into the widget header. HTML4/HTML5: Revise input[type=file] placement logic to support cursor styling on Geko 2+. HTML5: Revise Drag'n'Drop detection logic. HTML5: Make Exif and GPS information available to user, introduce two new events: ExifData and GpsData. HTML5: Add support for File.prototype.slice() method (mozSlice/webkitSlice) in order to be able to upload files in chunks without preloading. HTML5: Remove any JPEG headers before restoring them, 'cause user agent (like Chrome), might be inserting it's own. Flash: Remove a limit on the depth of image header check, since it still fails in some cases and performance gain is negligible. Flash: Fix regression, when runtime hanged when not images where passed in as images. SilverLight: Fix bug, when JSON serializer was failing on null. SilverLight: Remove cast to integer for chunk boundary, which resulted in a wrong size for last chunks on huge files. SilverLight: Increase read buffer, add disposal of ImageStream and FileStream, optimize for performance. Updated build.xml to include language packs in release package under js/ folder. Gears/BrowserPlus: Add support for * file filter. BeforeUpload now can cancel upload if required. Additional MIME types: text/csv, image/photoshop, video/x-ms-wmv, video/avi, video/webm support Additional language packs: Japanese Cleaned examples. Version 1.4.3.2 (2011-04-13) Fixed bug in HTML5 runtime, when was reduced by a factor of 100 after every upload. Version 1.4.3.1 (2011-04-12) Fixed build script, mistakenly populating jquery.plupload.queue directory from jquery.ui.plupload sources. Fixed script urls in all examples, build script now will alter them automatically from dev to release when needed. Fixed isEmptyObj undefined error in HTML4 runtime. Fixed bug in UI Widget preventing UploadComplete from triggering. Version 1.4.3 (2011-04-11) Added Latvian language pack and updated French. Fixed bug in Flash runtime when JPEG header was not investigated deep enough to reach SOFn marker in large images. Fixed bug, when PNGs were cropped to width in Flash runtimes, rather then resized. Fixed Flash to allow multiple uploading of the same file, with different settings. Fixed Flash runtime to clean anonymous listeners properly. Fixed HTML5 runtime to resolve to mimeType in case-insensitive way. Fixed HTML5/Flash/SilverLight/Gears runtimes for inconsistency in naming of chunks feature, comparing to other runtimes. Fixed HTML4/HTML5 runtimes for input[type=file] to outsize contaner effectively enough to fill the whole click area. Fixed all runtimes to preserve position (relative/absolute) rule on containers that already have it. Fixed SilverLight runtime to support large files (over 2GB). Restructured the examples, src and build scripts to make it more clear that jQuery is optional. Added support for *.* filter. Added support for preserving ICC and IPTC headers when resizing JPEGs. Added Image.onerror/onabort handlers to HTML5 in order to gracefully bypass faulty images. Added ability to drop image size (by lowering quality), while preserving original dimension (HTML5/Flash/Gears). Ported EXIF, ICC, IPTC preservation code to Flash runtime. Version 1.4.2 (2011-02-20) Added Brazilian Portuguese, German, Russian and Spanish translations. Added support for file_data_name option to SilverLight runtime. Added support for better quality image resizing to Flash runtime. Added support for properly handling images with dimensions up to 8191x8191 pixels to Flash runtime. Added 'updatelist' event to UI Widget, which will be triggered every time file list will get redrawn. Added support for dynamically changing options to UI Widget. Fixed HTML4 runtime bug, when UploadFile handler was attached twice. Fixed HTML5 to use FileReader.readAsBinaryString() instead of File.getAsBinary() on newer WebKit browsers (like Chrome 9). Fixed Flash runtime from sending duplicate Filename param, when using FileReference.upload(). Updated S3 example to illustrate support for a proper progress indication. Version 1.4.1 (2011-02-01) Added an example on how to use Plupload with Amazon S3 written in PHP but can easily be ported to other languages. Fixed bug where hidden input elements wasn't created when the multiple_queues option wasn't used. Fixed bug where FF4 would produce an exception about missing BlobBuilder. Version 1.4.0 (2011-01-26) Added removeEvent and removeAllEvents methods and modified addEvent accordingly, in order to support dynamic unload. Added unbindAll method. Added UploadComplete event, which fires when internal iterator reaches the end of the queue. Added public destroy method to plupload object, new event - Destroy, and corresponding handlers to all runtimes. Added Czech, Italian, French, Dutch translations. Added support for translatable error messages. Added two new options: browse_button_hover and browse_button_active, in order to support browse_button interactivity. Added support for 'multi_selection: false' to Silverlight runtime. Added support for video/mp4, video/x-m4v and audio/mp4 MIME Types. Added artificial sendAsBinary method to XMLHttpRequest.prototype for browsers that have support for BlobBuilder and typed arrays. Added version tracking variable into plupload object and version comment to the header of every file. Fixed measurements of browse_button element in order to size and position input[type=file] element to fit it fully. Fixed Flash runtime behavior for multiple_select=false and other simpleUpload usage cases: basically new FileReference has to be created for every select dialog. Fixed browser sniffer to match only Safari, for fakeSafariDragDrop (seems like Safari on Mac doesn't require it either). Fixed so that ExternalInterface escapes strings properly, before passing them to JS. Fixed eventual reinitialization of flash/silverlight runtimes, especially for cases when object wrapper needed to be programmatically hidden and then shown again. Fixed so that Plupload will now ignore files with duplicate names when adding to the queue, in one set. Mainly introduced to work around Safari on Windows bug (https://bugs.webkit.org/show_bug.cgi?id=37957). Fixed bug, when final UploadProgress was firing after FileUploaded for Flash simpleUpload. Fixed bug where upload would fail if an error was produced inside the FilesAdded event. Fixed bug in Flash runtime when it used a wrong size when resizing, but not chunking. Fixed bug in Silverlight runtime that would keep sending 0 byte packages when a picture was chunked before resized. Disabled blur filter (is going to be replaced with some bilinear resampling in next release). Completely revised UI Widget, to be more jQuery UI oriented. Optionally depends on UI Button, UI Sortable, UI ProgressBar. Version 1.3.0 (2010-11-24) Added new jQuery UI widget that supports jQuery UI themes. Added new multiple_queues option that enables you to upload multiple times in the queue widgets. Added support for crossdomain loading of the XAP and SWF files and crossdomain upload. Added new multiple_queues option that enables you to upload multiple times in the queue widgets. Added support for crossdomain loading of the XAP and SWF files and crossdomain upload. Added preinit/init options to to ease up the binding of custom events to queueWidget and the Uploader class. Added drag/drop support for Safari until they fix the broken drag/drop support on Windows. Added events example file that show how to bind all events and display event specific data. Added support for retaining Exif data on images when they where resized using the HTML5 runtime. Fixed logic issue with the upload.php example file. Chunking wasn't working correctly. Fixed issue with HTML4 not handling the form encoding correctly on older IE versions. Patch contributed by jinxdone. Fixed so the HTML4 runtime only submits the defined multipart_params arguments. Fixes issue where it wasn't possible to dynamically override url or mutlipart_params for the HTML4 runtime. Fixed so all runtimes pass the name, chunk and chunks parameters as multipart parameters instead of querystring parameters. Fixed so files are read using the newer FileReader class if it's available if not it tries the older getAsXXX on Gecko. Fixed bug where IE 9 beta 1 wouldn't render Silverlight properly. Fixed bug where Flash would do extra empty requests if images below a specific size would be uploaded. Fixed bug where Google Gears would resize and re-encode images even if the it wasn't changed in scale. Fixed bug where the HTML5 runtime wouldn't free memory after each request on Gecko. Version 1.2.4 (2010-09-08) Added new BeforeUpload event to make it easier to override settings before a file is uploaded. Added new automatic usage of FileReference in Flash if it's possible. Contributed by Marcel Jackwerth. Added new chunking support for Chrome 5 and Firefox 3.6 using the HTML 5 runtime. Added new multipart upload support for WebKit using the HTML 5 runtime and the FormData object. Added new image scaling method for the Flash runtime contributed by rcoopman. Added new alert error message if the user selected invalid files. Added new automatic unique name generation to the example.php script. Contributed by Brandon Kelly. Changed so the default upload method is multipart and the default chunk size is 0. Fixed progress issue with the HTML5 runtime running on Gecko. Fixed so longer extensions can be used such as .tar.gz. Fixed so the file extension is retained when using the unique_names option. Version 1.2.3 (2010-05-27) Added new drag/drop support for HTML5 running on Chrome beta. Added new multipart state for the features object. It's now possible to detect multipart support. Added new getFeatures function to all runtime. Basic concept by Javier Martinez Fernandez. Fixed bug where runtimes where initialized even if they didn't match the required_features setting. Version 1.2.2.1 (2010-05-04) Added new headers option, enables you to set custom headers for the upload requests. Fixed bug where the file extension checking was case sensitive. Version 1.2.2 (2010-04-26) Added new file_data_name option that enables you to set the multipart file data param. Patch contributed by Alex Ganov. Added new FILE_SIZE_ERROR type that will be triggered if the user selected a file that is to large or zero bytes. Added new FILE_EXTENSION_ERROR type that will be triggered if you add a file with an invalid file extension. Added new required_features setting, enables you to specify a list of required features that the runtime must have. Fixed so the plupload.buildUrl function uses the UTF compatible encodeURIComponent method instead of escape. Fixed so that all file types can be selected if you don't specify a filter setting. Fixed so more valid HTTP status codes are accepted as valid responses. Fixed so all runtimes fills the features object with available features. Fixed some issues with the HTML4 runtime if there wasn't any existing forms on the page. Fixed some conflict issues with HTML4 runtime and forms with the input names of action or target. Fixed bug where some Gecko versions would produce exceptions when checking the HTTP status of a XHR. Version 1.2.1 (2010-03-22) Fixed bug with incorrect aspect ratio in Flash image scaling. Fixed bug where chunked uploads could get scrambled in the Flash runtime. Patch contributed by Grady Werner. Fixed bug where a beta version of Chrome wouldn't handle drag/drop correctly because of missing drag effect. Fixed so the HTML 4 runtime displays N/A for file sizes and the progress is based on uploaded files instead of bytes. Fixed so chunking can be disabled properly in Flash but that will affect the progress bar. Fixed so queue widget displays the drag/drop message if file queue is emptied. Fixed small files are uploaded as one single chunk and not forced into 4 chunks in the Flash runtime. Version 1.2 (2010-03-09) Added new rename file support for jQuery queue widget, click on a file name to rename it if it's enabled. Added official ChunkUploaded event, it similar to FileUploaded but executed for each chunk. Added bytes per second support to total queue progress. Added better error handling to core API using the new Error event. Added better error handling to jQuery queue widget. Fixed so chunking uploads is dispatch from JS not from inside Flash/Silverlight. Version 1.1.1 (2010-02-25) Added new setup setting to queue widget. Makes it easier to bind custom events to uploader instance. Fixed so it's possible to disable chunking compleatly. It's now disabled by default. Fixed bug where multipart mode was enabled all the time in the Flash runtime. Fixed bug where chunked uploading in Silverlight would fail. Fixed bug where the delete button was visible while uploading. Fixed bug where unique_names setting wasn't working when the core API was used. Fixed bug where the queue widget wouldn't display the currently uploaded file if the unique_names was enabled. Version 1.1 (2010-02-24) Added new multipart and multipart_params support. Added new container option, enables you to specify where flash/silverlight objects would be added. Added chunking support to BrowserPlus runtime, contributed by Steve Spencer. Added FileUploaded event that fires when a file is uploaded. Added more easily understandable buttons to queue widget. Added html4 runtime, contributed by Ryan Demmer. Fixed issues with i18n support and added a Swedish and Danish language pack. Fixed bug where the Flash runtime could do empty requests if the image was scaled down. Fixed bug where uploading small images in Silverlight would produce an exception. Fixed so the runtime list can include whitespace or missing runtimes. Patch contributed by yvind Sean Kinsey. Fixed so to large files are ignored and never dispatched to the FilesAdded event. Version 1.0 (2010-02-03) First official release of Plupload. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.File.html ================================================ Class: plupload.File

                        plupload.File

                        Namespace plupload
                        Class File
                        File instance.

                        Public Properties

                        Property Defined By
                        id : String
                        File id this is a globally unique id for the specific file.
                        File
                        loaded : Number
                        Number of bytes uploaded of the files total size.
                        File
                        name : String
                        File name for example "myfile.
                        File
                        percent : Number
                        Number of percentage uploaded of the file.
                        File
                        size : Number
                        File size in bytes.
                        File
                        status : Number
                        Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE.
                        File

                        Public Methods

                        Method Defined By
                        File(id:String, name:String, size:Number)
                        Constructs a new file instance.
                        File

                        Property details

                        idproperty

                        public id : String
                        File id this is a globally unique id for the specific file.

                        loadedproperty

                        public loaded : Number
                        Number of bytes uploaded of the files total size.

                        nameproperty

                        public name : String
                        File name for example "myfile.gif".

                        percentproperty

                        public percent : Number
                        Number of percentage uploaded of the file.

                        sizeproperty

                        public size : Number
                        File size in bytes.

                        statusproperty

                        public status : Number
                        Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE.

                        See Also

                        Method details

                        Fileconstructor

                        public function File(id:String, name:String, size:Number)
                        Constructs a new file instance.

                        Parameters

                        id:String Unique file id.
                        name:String File name.
                        size:Number File size in bytes.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.QueueProgress.html ================================================ Class: plupload.QueueProgress

                        plupload.QueueProgress

                        Namespace plupload
                        Class QueueProgress
                        Runtime class gets implemented by each upload runtime.

                        Public Properties

                        Property Defined By
                        bytesPerSec : Number
                        Bytes uploaded per second.
                        QueueProgress
                        failed : Number
                        Number of files failed to upload.
                        QueueProgress
                        loaded : Number
                        Total bytes uploaded.
                        QueueProgress
                        percent : Number
                        Total percent of the uploaded bytes.
                        QueueProgress
                        queued : Number
                        Number of files yet to be uploaded.
                        QueueProgress
                        size : Number
                        Total queue file size.
                        QueueProgress
                        uploaded : Number
                        Number of files uploaded.
                        QueueProgress

                        Public Methods

                        Method Defined By
                        Constructs a queue progress.
                        QueueProgress
                        reset():void
                        Resets the progress to it's initial values.
                        QueueProgress

                        Property details

                        bytesPerSecproperty

                        public bytesPerSec : Number
                        Bytes uploaded per second.

                        failedproperty

                        public failed : Number
                        Number of files failed to upload.

                        loadedproperty

                        public loaded : Number
                        Total bytes uploaded.

                        percentproperty

                        public percent : Number
                        Total percent of the uploaded bytes.

                        queuedproperty

                        public queued : Number
                        Number of files yet to be uploaded.

                        sizeproperty

                        public size : Number
                        Total queue file size.

                        uploadedproperty

                        public uploaded : Number
                        Number of files uploaded.

                        Method details

                        QueueProgressconstructor

                        public function QueueProgress()
                        Constructs a queue progress.

                        resetmethod

                        public function reset():void
                        Resets the progress to it's initial values.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.Runtime.html ================================================ Class: plupload.Runtime

                        plupload.Runtime

                        Namespace plupload
                        Class Runtime
                        Type Singleton
                        Subclasses BrowserPlus, Flash, Gears, Html4, Html5, Silverlight
                        Runtime class gets implemented by each upload runtime.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Runtime

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback function to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.Uploader.html ================================================ Class: plupload.Uploader

                        plupload.Uploader

                        Namespace plupload
                        Class Uploader
                        Uploader class, an instance of this class will be created for each upload field.

                        Example

                        var uploader = new plupload.Uploader({
                            runtimes : 'gears,html5,flash',
                            browse_button : 'button_id'
                        });
                        
                        uploader.bind('Init', function(up) {
                            alert('Supports drag/drop: ' + (!!up.features.dragdrop));
                        });
                        
                        uploader.bind('FilesAdded', function(up, files) {
                            alert('Selected files: ' + files.length);
                        });
                        
                        uploader.bind('QueueChanged', function(up) {
                            alert('Queued files: ' + uploader.files.length);
                        });
                        
                        uploader.init();

                        Public Properties

                        Property Defined By
                        features : Object
                        Map of features that are available for the uploader runtime.
                        Uploader
                        files : Array
                        Current upload queue, an array of File instances.
                        Uploader
                        id : String
                        Unique id for the Uploader instance.
                        Uploader
                        runtime : String
                        Current runtime name.
                        Uploader
                        settings : Object
                        Object with name/value settings.
                        Uploader
                        state : Number
                        Current state of the total uploading progress.
                        Uploader
                        Total progess information.
                        Uploader

                        Public Methods

                        Method Defined By
                        Uploader(settings:Object)
                        Constructs a new uploader instance.
                        Uploader
                        bind(name:String, func:function, scope:Object):void
                        Adds an event listener by name.
                        Uploader
                        destroy():void
                        Destroys Plupload instance and cleans after itself.
                        Uploader
                        getFile(id:String):File
                        Returns the specified file object by id.
                        Uploader
                        init():void
                        Initializes the Uploader instance and adds internal event listeners.
                        Uploader
                        refresh():void
                        Refreshes the upload instance by dispatching out a refresh event to all runtimes.
                        Uploader
                        removeFile(file:File):void
                        Removes a specific file.
                        Uploader
                        splice(start:Number, length:Number):Array
                        Removes part of the queue and returns the files removed.
                        Uploader
                        start():void
                        Starts uploading the queued files.
                        Uploader
                        stop():void
                        Stops the upload of the queued files.
                        Uploader
                        trigger(name:String, Multiple:Object..):void
                        Dispatches the specified event name and it's arguments to all listeners.
                        Uploader
                        unbind(name:String, func:function):void
                        Removes the specified event listener.
                        Uploader
                        unbindAll():void
                        Removes all event listeners.
                        Uploader

                        Public Events

                        Event Defined By
                        BeforeUpload(uploader:Uploader, file:File)
                        Fires when just before a file is uploaded.
                        Uploader
                        ChunkUploaded(uploader:Uploader, file:File, response:Object)
                        Fires when file chunk is uploaded.
                        Uploader
                        Destroy(uploader:Uploader)
                        Fires when destroy method is called.
                        Uploader
                        Error(uploader:Uploader, error:Object)
                        Fires when a error occurs.
                        Uploader
                        FilesAdded(uploader:Uploader, files:Array)
                        Fires while when the user selects files to upload.
                        Uploader
                        FilesRemoved(uploader:Uploader, files:Array)
                        Fires while a file was removed from queue.
                        Uploader
                        FileUploaded(uploader:Uploader, file:File, response:Object)
                        Fires when a file is successfully uploaded.
                        Uploader
                        Init(uploader:Uploader)
                        Fires when the current RunTime has been initialized.
                        Uploader
                        PostInit(uploader:Uploader)
                        Fires after the init event incase you need to perform actions there.
                        Uploader
                        Fires when the file queue is changed.
                        Uploader
                        Refresh(uploader:Uploader)
                        Fires when the silverlight/flash or other shim needs to move.
                        Uploader
                        Fires when the overall state is being changed for the upload queue.
                        Uploader
                        UploadComplete(uploader:Uploader, files:Array)
                        Fires when all files in a queue are uploaded.
                        Uploader
                        UploadFile(uploader:Uploader, file:File)
                        Fires when a file is to be uploaded by the runtime.
                        Uploader
                        UploadProgress(uploader:Uploader, file:File)
                        Fires while a file is being uploaded.
                        Uploader

                        Property details

                        featuresproperty

                        public features : Object
                        Map of features that are available for the uploader runtime. Features will be filled before the init event is called, these features can then be used to alter the UI for the end user. Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize.

                        filesproperty

                        public files : Array
                        Current upload queue, an array of File instances.

                        See Also

                        idproperty

                        public id : String
                        Unique id for the Uploader instance.

                        runtimeproperty

                        public runtime : String
                        Current runtime name.

                        settingsproperty

                        public settings : Object
                        Object with name/value settings.

                        stateproperty

                        public state : Number
                        Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED. These states are controlled by the stop/start methods. The default value is STOPPED.

                        totalproperty

                        public total : QueueProgress
                        Total progess information. How many files has been uploaded, total percent etc.

                        Method details

                        Uploaderconstructor

                        public function Uploader(settings:Object)
                        Constructs a new uploader instance.

                        Parameters

                        settings:Object Initialization settings, to be used by the uploader instance and runtimes.

                        bindmethod

                        public function bind(name:String, func:function, scope:Object):void
                        Adds an event listener by name.

                        Parameters

                        name:String Event name to listen for.
                        func:function Function to call ones the event gets fired.
                        scope:Object Optional scope to execute the specified function in.

                        destroymethod

                        public function destroy():void
                        Destroys Plupload instance and cleans after itself.

                        getFilemethod

                        public function getFile(id:String):File
                        Returns the specified file object by id.

                        Parameters

                        id:String File id to look for.

                        Returns

                        File - File object or undefined if it wasn't found;

                        initmethod

                        public function init():void
                        Initializes the Uploader instance and adds internal event listeners.

                        refreshmethod

                        public function refresh():void
                        Refreshes the upload instance by dispatching out a refresh event to all runtimes. This would for example reposition flash/silverlight shims on the page.

                        removeFilemethod

                        public function removeFile(file:File):void
                        Removes a specific file.

                        Parameters

                        file:File File to remove from queue.

                        splicemethod

                        public function splice(start:Number, length:Number):Array
                        Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events.

                        Parameters

                        start:Number (Optional) Start index to remove from.
                        length:Number (Optional) Lengh of items to remove.

                        Returns

                        Array - Array of files that was removed.

                        startmethod

                        public function start():void
                        Starts uploading the queued files.

                        stopmethod

                        public function stop():void
                        Stops the upload of the queued files.

                        triggermethod

                        public function trigger(name:String, Multiple:Object..):void
                        Dispatches the specified event name and it's arguments to all listeners.

                        Parameters

                        name:String Event name to fire.
                        Multiple:Object.. arguments to pass along to the listener functions.

                        unbindmethod

                        public function unbind(name:String, func:function):void
                        Removes the specified event listener.

                        Parameters

                        name:String Name of event to remove.
                        func:function Function to remove from listener.

                        unbindAllmethod

                        public function unbindAll():void
                        Removes all event listeners.

                        Event details

                        BeforeUploadevent

                        public event BeforeUpload(uploader:Uploader, file:File)
                        Fires when just before a file is uploaded. This event enables you to override settings on the uploader instance before the file is uploaded.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        file:File File to be uploaded.

                        ChunkUploadedevent

                        public event ChunkUploaded(uploader:Uploader, file:File, response:Object)
                        Fires when file chunk is uploaded.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        file:File File that the chunk was uploaded for.
                        response:Object Object with response properties.

                        Destroyevent

                        public event Destroy(uploader:Uploader)
                        Fires when destroy method is called.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        Errorevent

                        public event Error(uploader:Uploader, error:Object)
                        Fires when a error occurs.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        error:Object Contains code, message and sometimes file and other details.

                        FilesAddedevent

                        public event FilesAdded(uploader:Uploader, files:Array)
                        Fires while when the user selects files to upload.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        files:Array Array of file objects that was added to queue/selected by the user.

                        FilesRemovedevent

                        public event FilesRemoved(uploader:Uploader, files:Array)
                        Fires while a file was removed from queue.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        files:Array Array of files that got removed.

                        FileUploadedevent

                        public event FileUploaded(uploader:Uploader, file:File, response:Object)
                        Fires when a file is successfully uploaded.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        file:File File that was uploaded.
                        response:Object Object with response properties.

                        Initevent

                        public event Init(uploader:Uploader)
                        Fires when the current RunTime has been initialized.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        PostInitevent

                        public event PostInit(uploader:Uploader)
                        Fires after the init event incase you need to perform actions there.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        QueueChangedevent

                        public event QueueChanged(uploader:Uploader)
                        Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        Refreshevent

                        public event Refresh(uploader:Uploader)
                        Fires when the silverlight/flash or other shim needs to move.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        StateChangedevent

                        public event StateChanged(uploader:Uploader)
                        Fires when the overall state is being changed for the upload queue.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.

                        UploadCompleteevent

                        public event UploadComplete(uploader:Uploader, files:Array)
                        Fires when all files in a queue are uploaded.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        files:Array Array of file objects that was added to queue/selected by the user.

                        UploadFileevent

                        public event UploadFile(uploader:Uploader, file:File)
                        Fires when a file is to be uploaded by the runtime.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        file:File File to be uploaded.

                        UploadProgressevent

                        public event UploadProgress(uploader:Uploader, file:File)
                        Fires while a file is being uploaded. Use this event to update the current file upload progress.

                        Parameters

                        uploader:Uploader Uploader instance sending the event.
                        file:File File that is currently being uploaded.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.html ================================================ Class: plupload

                        plupload

                        Class plupload
                        Type Singleton
                        Plupload class with some global constants and functions.

                        Example

                        // Encode entities
                        console.log(plupload.xmlEncode("My string <>"));
                        
                        // Generate unique id
                        console.log(plupload.guid());

                        Public Properties

                        Property Defined By
                        DONE : Object
                        [static] File has been uploaded successfully
                        plupload
                        FAILED : Object
                        [static] File has failed to be uploaded
                        plupload
                        [static] File extension error.
                        plupload
                        FILE_SIZE_ERROR : Object
                        [static] File size error.
                        plupload
                        GENERIC_ERROR : Object
                        [static] Generic error for example if an exception is thrown inside Silverlight.
                        plupload
                        HTTP_ERROR : Object
                        [static] HTTP transport error.
                        plupload
                        INIT_ERROR : Object
                        [static] Initialization error.
                        plupload
                        IO_ERROR : Object
                        [static] Generic I/O error.
                        plupload
                        mimeTypes : Object
                        [static] Mime type lookup table.
                        plupload
                        QUEUED : Object
                        [static] File is queued for upload
                        plupload
                        SECURITY_ERROR : Object
                        [static] Generic I/O error.
                        plupload
                        STARTED : Object
                        [static] Upload process is running
                        plupload
                        STOPPED : Object
                        [static] Inital state of the queue and also the state ones it's finished all it's uploads.
                        plupload
                        UPLOADING : Object
                        [static] File is being uploaded
                        plupload

                        Public Methods

                        Method Defined By
                        addRuntime(name:String, obj:Object):void
                        [static] Adds a specific upload runtime like for example flash or gears.
                        plupload
                        cleanName(s:String):String
                        [static] Cleans the specified name from national characters (diacritics).
                        plupload
                        extend(target:Object, obj:Object..):Object
                        [static] Extends the specified object with another object.
                        plupload
                        formatSize(size:Number):String
                        [static] Formats the specified number as a size string for example 1024 becomes 1 KB.
                        plupload
                        getPos(node:Element, root:Element):object
                        [static] Returns the absolute x, y position of an Element.
                        plupload
                        guid():String
                        [static] Generates an unique ID.
                        plupload
                        parseSize(size:String/Number):Number
                        [static] Parses the specified size string into a byte value.
                        plupload
                        toArray(obj:Object):Array
                        [static] Forces anything into an array.
                        plupload
                        xmlEncode(s:String):String
                        [static] Encodes the specified string.
                        plupload

                        Property details

                        DONEproperty

                        public static DONE : Object
                        File has been uploaded successfully

                        FAILEDproperty

                        public static FAILED : Object
                        File has failed to be uploaded

                        FILE_EXTENSION_ERRORproperty

                        public static FILE_EXTENSION_ERROR : Object
                        File extension error. If the user selects a file that isn't valid according to the filters setting.

                        FILE_SIZE_ERRORproperty

                        public static FILE_SIZE_ERROR : Object
                        File size error. If the user selects a file that is to large it will be blocked and an error of this type will be triggered.

                        GENERIC_ERRORproperty

                        public static GENERIC_ERROR : Object
                        Generic error for example if an exception is thrown inside Silverlight.

                        HTTP_ERRORproperty

                        public static HTTP_ERROR : Object
                        HTTP transport error. For example if the server produces a HTTP status other than 200.

                        INIT_ERRORproperty

                        public static INIT_ERROR : Object
                        Initialization error. Will be triggered if no runtime was initialized.

                        IO_ERRORproperty

                        public static IO_ERROR : Object
                        Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine.

                        mimeTypesproperty

                        public static mimeTypes : Object
                        Mime type lookup table.

                        QUEUEDproperty

                        public static QUEUED : Object
                        File is queued for upload

                        SECURITY_ERRORproperty

                        public static SECURITY_ERROR : Object
                        Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine.

                        STARTEDproperty

                        public static STARTED : Object
                        Upload process is running

                        STOPPEDproperty

                        public static STOPPED : Object
                        Inital state of the queue and also the state ones it's finished all it's uploads.

                        UPLOADINGproperty

                        public static UPLOADING : Object
                        File is being uploaded

                        Method details

                        addRuntimemethod

                        public static function addRuntime(name:String, obj:Object):void
                        Adds a specific upload runtime like for example flash or gears.

                        Parameters

                        name:String Runtime name for example flash.
                        obj:Object Object containing init/destroy method.

                        cleanNamemethod

                        public static function cleanName(s:String):String
                        Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _.

                        Parameters

                        s:String String to clean up.

                        Returns

                        String - Cleaned string.

                        extendmethod

                        public static function extend(target:Object, obj:Object..):Object
                        Extends the specified object with another object.

                        Parameters

                        target:Object Object to extend.
                        obj:Object.. Multiple objects to extend with.

                        Returns

                        Object - Same as target, the extended object.

                        formatSizemethod

                        public static function formatSize(size:Number):String
                        Formats the specified number as a size string for example 1024 becomes 1 KB.

                        Parameters

                        size:Number Size to format as string.

                        Returns

                        String - Formatted size string.

                        getPosmethod

                        public static function getPos(node:Element, root:Element):object
                        Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields.

                        Parameters

                        node:Element HTML element or element id to get x, y position from.
                        root:Element Optional root element to stop calculations at.

                        Returns

                        object - Absolute position of the specified element object with x, y fields.

                        guidmethod

                        public static function guid():String
                        Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. It's more probable for the earth to be hit with an ansteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property to an user unique key.

                        Returns

                        String - Virtually unique id.

                        parseSizemethod

                        public static function parseSize(size:String/Number):Number
                        Parses the specified size string into a byte value. For example 10kb becomes 10240.

                        Parameters

                        size:String/Number String to parse or number to just pass through.

                        Returns

                        Number - Size in bytes.

                        toArraymethod

                        public static function toArray(obj:Object):Array
                        Forces anything into an array.

                        Parameters

                        obj:Object Object with length field.

                        Returns

                        Array - Array object containing all items.

                        xmlEncodemethod

                        public static function xmlEncode(s:String):String
                        Encodes the specified string.

                        Parameters

                        s:String String to encode.

                        Returns

                        String - Encoded string.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.BrowserPlus.html ================================================ Class: plupload.runtimes.BrowserPlus

                        plupload.runtimes.BrowserPlus

                        Namespace plupload.runtimes
                        Class BrowserPlus
                        Type Singleton
                        Inheritance BrowserPlus Runtime
                        Yahoo BrowserPlus implementation. This runtime supports these features: dragdrop, jpgresize, pngresize.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the browserplus runtime.
                        BrowserPlus

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the browserplus runtime.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.Flash.html ================================================ Class: plupload.runtimes.Flash

                        plupload.runtimes.Flash

                        Namespace plupload.runtimes
                        Class Flash
                        Type Singleton
                        Inheritance Flash Runtime
                        FlashRuntime implementation. This runtime supports these features: jpgresize, pngresize, chunks.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Flash

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.Gears.html ================================================ Class: plupload.runtimes.Gears

                        plupload.runtimes.Gears

                        Namespace plupload.runtimes
                        Class Gears
                        Type Singleton
                        Inheritance Gears Runtime
                        Gears implementation. This runtime supports these features: dragdrop, jpgresize, pngresize, chunks.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Gears

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.Html4.html ================================================ Class: plupload.runtimes.Html4

                        plupload.runtimes.Html4

                        Namespace plupload.runtimes
                        Class Html4
                        Type Singleton
                        Inheritance Html4 Runtime
                        HTML4 implementation. This runtime has no special features it uses an form that posts files into an hidden iframe.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Html4

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.Html5.html ================================================ Class: plupload.runtimes.Html5

                        plupload.runtimes.Html5

                        Namespace plupload.runtimes
                        Class Html5
                        Type Singleton
                        Inheritance Html5 Runtime
                        HMTL5 implementation. This runtime supports these features: dragdrop, jpgresize, pngresize.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Html5

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/class_plupload.runtimes.Silverlight.html ================================================ Class: plupload.runtimes.Silverlight

                        plupload.runtimes.Silverlight

                        Namespace plupload.runtimes
                        Class Silverlight
                        Type Singleton
                        Inheritance Silverlight Runtime
                        Silverlight implementation. This runtime supports these features: jpgresize, pngresize, chunks.

                        Public Methods

                        Method Defined By
                        init(uploader:Uploader, callback:function):void
                        [static] Initializes the upload runtime.
                        Silverlight

                        Method details

                        initmethod

                        public static function init(uploader:Uploader, callback:function):void
                        Initializes the upload runtime. This runtime supports these features: jpgresize, pngresize, chunks.

                        Parameters

                        uploader:Uploader Uploader instance that needs to be initialized.
                        callback:function Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true.
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/general.css ================================================ body, html { overflow: hidden; background-color: #DFE8F6; } #doc3 { margin: 0; /* Fix for scrolling issue on Gecko */ position: fixed; width: 100%; top: 0; left: 0; } #bd, #bd, #yui-main, #detailsView, #classView { height: 100%; } #hd { background: #1E4176; border-bottom: 1px solid #99BBE8; } #hd h1 { font-family:Verdana,Arial,Helvetica,sans-serif; font-size: 16px; padding: 4px 0 4px 8px; color: #fff; } #yui-main #detailsView { overflow: auto; margin: 4px; margin-left: 260px; border: 1px solid #99BBE8; background: #FFF; } #bd #classView { overflow: auto; width: 250px; margin: 4px; border: 1px solid #99BBE8; background: #FFF; } .classDetailsContent, .memberDetailsContent { margin: 10px; line-height: 150%; } body, td, th { font-family: "Trebuchet MS", "Bitstream Vera Sans", Tahoma,Verdana,Arial,Helvetica,sans-serif; font-size: 13px; } h1, h2, h3, h4, h5, h6 { font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; font-weight: bold; letter-spacing: 1px; margin-bottom: 3px; margin-top: 3px; width: 90%; } h1 { font-size: 20px; } h2 { font-size: 16px; } h3 { font-size: 16px; } h4 { font-size: 13px; } a, a:visited, a:active, a:link { color: #0000CC; text-decoration: none; } a:hover { text-decoration: underline; } table.summary { border: 1px solid #999999; margin-bottom: 20px; margin-right: 10px; margin-top: 10px; width: 100%; border-collapse: collapse; } table.summary th { font-weight: bold; text-align: left; vertical-align: bottom; background-color: #627C9D; color: #FFFFFF; white-space: nowrap; padding: 4px; } table.summary td { border: 1px solid #999999; padding: 4px; } table.summary a.memberName { font-weight: bold; } table.summary tr.even { background: #f2f2f2; } table.summary td.first div { margin-left: 30px; } table.summary td.first { width: 95%; } table.summary td.last { width: 5%; } table.summary .deprecated { margin: 0; } .params, .returns, .see { margin-left: 20px; margin-bottom: 10px; } .params td.last { padding-left: 10px; } .classDescription, .memberDescription, .deprecated { margin: 10px 0 10px 0; } .inherited td.first { background: url(../img/inherited.gif) no-repeat 10px 5px; } .inheritageList span { padding-right: 20px; margin-right: 5px; background: url(../img/inherit-arrow.gif) no-repeat center right; } .inheritageList span.last { background: transparent; } .classDetails .first { font-weight: bold; padding-right: 20px; } .memberDetails { margin-bottom: 10px; } pre { background-color: #F2F2F2; font-family: "Lucida Console","Courier New",Courier,monospace; font-size: 12px; margin-bottom: 10px; margin-top: 10px; overflow: auto; padding: 5px 5px 5px 5px; } .memberType { padding-left: 10px; font-size: 13px; font-weight: normal; } .selected { font-weight: bold; } .memberDetails { border-bottom: 1px solid gray; margin-bottom: 10px; } .details { padding-bottom: 10px; } .details .last { border: 0; } .details h2 { width: 100%; background-color: #627C9D; color: #FFF; padding: 4px; } .memberDetails { padding-left: 15px; } code.syntax { background-color: #F2F2F2; } .deprecated { font-weight: bold; } .static { color: gray; } .version span, .author span { font-weight: bold; } #yui-main #detailsView.loading { background: #FFF url('../img/loader.gif') no-repeat center center; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/grids.css ================================================ /* Copyright (c) 2009, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 2.7.0 */ /** * YUI Grids * @module grids * @namespace yui- * @requires reset, fonts */ /** * Note: Throughout this file, the *property (star-property) filter is used * to give a value to IE that other browsers do not see. _property is only seen * by IE7, so the combo of *prop and _prop can target between IE6 and IE7. * * More information on these filters and related validation errors: * http://tech.groups.yahoo.com/group/ydn-javascript/message/40059 */ /** * Section: General Rules */ body { text-align: center; } /** * Section: Page Width Rules (#doc, #doc2, #doc3, #doc4) */ #doc,#doc2,#doc3,#doc4, .yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7 { margin: auto; text-align: left; width: 57.69em; *width: 56.25em; } /* 950 Centered (doc2) */ #doc2 { width: 73.076em; *width: 71.25em; } /* 100% (doc3) */ #doc3 { /** * Left and Right margins are not a structural part of Grids. Without them * Grids works fine, but content bleeds to the very edge of the document, which * often impairs readability and usability. They are provided because they * prevent the content from "bleeding" into the browser's chrome. */ margin: auto 10px; width: auto; } /* 974 Centered (doc4) */ #doc4 { width: 74.923em; *width: 73.05em; } /** * Section: Preset Template Rules (.yui-t[1-6]) */ .yui-b { /* to preserve source-order independence for Gecko */ position: relative; } .yui-b { /* to preserve source-order independence for IE */ _position: static; } #yui-main .yui-b { /* to preserve source-order independence for Gecko */ position: static; } #yui-main, .yui-g .yui-u .yui-g { width: 100%; } .yui-t1 #yui-main, .yui-t2 #yui-main, .yui-t3 #yui-main { float: right; /* IE: preserve layout at narrow widths */ margin-left: -25em; } .yui-t4 #yui-main, .yui-t5 #yui-main, .yui-t6 #yui-main { float: left; /* IE: preserve layout at narrow widths */ margin-right: -25em; } /** * For Specific Template Presets */ .yui-t1 .yui-b { float: left; width: 12.30769em; *width: 12.00em; } .yui-t1 #yui-main .yui-b { margin-left: 13.30769em; *margin-left: 13.05em; } .yui-t2 .yui-b { float: left; width: 13.8461em; *width: 13.50em; } .yui-t2 #yui-main .yui-b { margin-left: 14.8461em; *margin-left: 14.55em; } .yui-t3 .yui-b { float: left; width: 23.0769em; *width: 22.50em; } .yui-t3 #yui-main .yui-b { margin-left: 24.0769em; *margin-left: 23.62em; } .yui-t4 .yui-b { float: right; width: 13.8456em; *width: 13.50em; } .yui-t4 #yui-main .yui-b { margin-right: 14.8456em; *margin-right: 14.55em; } .yui-t5 .yui-b { float: right; width: 18.4615em; *width: 18.00em; } .yui-t5 #yui-main .yui-b { margin-right: 19.4615em; *margin-right: 19.125em; } .yui-t6 .yui-b { float: right; width: 23.0769em; *width: 22.50em; } .yui-t6 #yui-main .yui-b { margin-right: 24.0769em; *margin-right: 23.62em; } .yui-t7 #yui-main .yui-b { display: block; margin: 0 0 1em 0; } #yui-main .yui-b { float: none; width: auto; } /** * Section: Grids and Nesting Grids */ /* Children generally take half the available space */ .yui-gb .yui-u, .yui-g .yui-gb .yui-u, .yui-gb .yui-g, .yui-gb .yui-gb, .yui-gb .yui-gc, .yui-gb .yui-gd, .yui-gb .yui-ge, .yui-gb .yui-gf, .yui-gc .yui-u, .yui-gc .yui-g, .yui-gd .yui-u { float: left; } /* Float units (and sub grids) to the right */ .yui-g .yui-u, .yui-g .yui-g, .yui-g .yui-gb, .yui-g .yui-gc, .yui-g .yui-gd, .yui-g .yui-ge, .yui-g .yui-gf, .yui-gc .yui-u, .yui-gd .yui-g, .yui-g .yui-gc .yui-u, .yui-ge .yui-u, .yui-ge .yui-g, .yui-gf .yui-g, .yui-gf .yui-u { float: right; } /*Float units (and sub grids) to the left */ .yui-g div.first, .yui-gb div.first, .yui-gc div.first, .yui-gd div.first, .yui-ge div.first, .yui-gf div.first, .yui-g .yui-gc div.first, .yui-g .yui-ge div.first, .yui-gc div.first div.first { float: left; } .yui-g .yui-u, .yui-g .yui-g, .yui-g .yui-gb, .yui-g .yui-gc, .yui-g .yui-gd, .yui-g .yui-ge, .yui-g .yui-gf { width: 49.1%; } .yui-gb .yui-u, .yui-g .yui-gb .yui-u, .yui-gb .yui-g, .yui-gb .yui-gb, .yui-gb .yui-gc, .yui-gb .yui-gd, .yui-gb .yui-ge, .yui-gb .yui-gf, .yui-gc .yui-u, .yui-gc .yui-g, .yui-gd .yui-u { width: 32%; margin-left: 1.99%; } /* Give IE some extra breathing room for 1/3-based rounding issues */ .yui-gb .yui-u { *margin-left: 1.9%; *width: 31.9%; } .yui-gc div.first, .yui-gd .yui-u { width: 66%; } .yui-gd div.first { width: 32%; } .yui-ge div.first, .yui-gf .yui-u { width: 74.2%; } .yui-ge .yui-u, .yui-gf div.first { width: 24%; } .yui-g .yui-gb div.first, .yui-gb div.first, .yui-gc div.first, .yui-gd div.first { margin-left: 0; } /** * Section: Deep Nesting */ .yui-g .yui-g .yui-u, .yui-gb .yui-g .yui-u, .yui-gc .yui-g .yui-u, .yui-gd .yui-g .yui-u, .yui-ge .yui-g .yui-u, .yui-gf .yui-g .yui-u { width: 49%; *width: 48.1%; *margin-left: 0; } .yui-g .yui-g .yui-u { width: 48.1%; } /*SF 1927599 from 1.14 to 2.6.0*/ .yui-g .yui-gb div.first, .yui-gb .yui-gb div.first { *margin-right: 0; *width: 32%; _width: 31.7%; } .yui-g .yui-gc div.first, .yui-gd .yui-g { width: 66%; } .yui-gb .yui-g div.first { *margin-right: 4%; _margin-right: 1.3%; } .yui-gb .yui-gc div.first, .yui-gb .yui-gd div.first { *margin-right: 0; } .yui-gb .yui-gb .yui-u, .yui-gb .yui-gc .yui-u { *margin-left: 1.8%; _margin-left: 4%; } .yui-g .yui-gb .yui-u { _margin-left: 1.0%; } .yui-gb .yui-gd .yui-u { *width: 66%; _width: 61.2%; } .yui-gb .yui-gd div.first { *width: 31%; _width: 29.5%; } .yui-g .yui-gc .yui-u, .yui-gb .yui-gc .yui-u { width: 32%; _float: right; margin-right: 0; _margin-left: 0; } .yui-gb .yui-gc div.first { width: 66%; *float: left; *margin-left: 0; } .yui-gb .yui-ge .yui-u, .yui-gb .yui-gf .yui-u { margin: 0; } .yui-gb .yui-gb .yui-u { _margin-left: .7%; } .yui-gb .yui-g div.first, .yui-gb .yui-gb div.first { *margin-left: 0; } .yui-gc .yui-g .yui-u, .yui-gd .yui-g .yui-u { *width: 48.1%; *margin-left: 0; } .yui-gb .yui-gd div.first { width: 32%; } .yui-g .yui-gd div.first { _width: 29.9%; } .yui-ge .yui-g { width: 24%; } .yui-gf .yui-g { width: 74.2%; } .yui-gb .yui-ge div.yui-u, .yui-gb .yui-gf div.yui-u { float: right; } .yui-gb .yui-ge div.first, .yui-gb .yui-gf div.first { float: left; } /* Width Accommodation for Nested Contexts */ .yui-gb .yui-ge .yui-u, .yui-gb .yui-gf div.first { *width: 24%; _width: 20%; } /* Width Accommodation for Nested Contexts */ .yui-gb .yui-ge div.first, .yui-gb .yui-gf .yui-u { *width: 73.5%; _width: 65.5%; } /* Patch for GD within GE */ .yui-ge div.first .yui-gd .yui-u { width: 65%; } .yui-ge div.first .yui-gd div.first { width: 32%; } /* @group Clearing */ #hd:after, #bd:after, #ft:after, .yui-g:after, .yui-gb:after, .yui-gc:after, .yui-gd:after, .yui-ge:after, .yui-gf:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } #hd, #bd, #ft, .yui-g, .yui-gb, .yui-gc, .yui-gd, .yui-ge, .yui-gf { zoom: 1; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/jquery.treeview.css ================================================ .treeview, .treeview ul { padding: 0; margin: 0; list-style: none; } .treeview ul { background-color: white; margin-top: 4px; } .treeview .hitarea { background: transparent -64px -25px no-repeat; height: 16px; width: 16px; margin-left: -16px; float: left; cursor: pointer; } /* fix for IE6 */ * html .hitarea { display: inline; float: none; } .treeview li { margin: 0; padding: 3px 0pt 3px 16px; } .treeview a.selected { background-color: #eee; } #treecontrol { margin: 1em 0; display: none; } .treeview li { background: transparent 0 0 no-repeat; } .treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } .treeview .expandable-hitarea { background-position: -80px -3px; } .treeview li.last { background-position: 0 -1766px } .treeview li.lastCollapsable { background-position: 0 -111px } .treeview li.lastExpandable { background-position: -32px -67px } .treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } .treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(../img/treeview-famfamfam.gif); } .classtree li { font-family: arial,tahoma,helvetica,sans-serif; font-size: 12px; } .classtree li { padding: 3px 0 2px 16px; } .classtree span { padding: 1px 0 1px 18px; display: block; } .classtree span.root { background: url(../img/root.gif) 0 3px no-repeat;} .classtree span.namespace { background: url(../img/namespace.gif) 0 0 no-repeat;} .classtree span.class { background: url(../img/class.gif) 0 0 no-repeat; } .classtree span.property { background: url(../img/property.gif) 0 0 no-repeat; } .classtree span.method { background: url(../img/method.gif) 0 0 no-repeat; } .classtree span.event { background: url(../img/event.gif) 0 0 no-repeat; } .classtree span.singleton { background: url(../img/static.gif) 0 0 no-repeat; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/reset.css ================================================ /* Copyright (c) 2009, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 2.7.0 */ /** * YUI Reset * @module reset * @namespace * @requires */ html { color: #000; background: #FFF; } body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td { margin: 0; padding: 0; } table { border-collapse: collapse; border-spacing: 0; } fieldset, img { border: 0; } address, caption, cite, code, dfn, em, strong, th, var, optgroup { font-style: inherit; font-weight: inherit; } del, ins { text-decoration: none; } li { list-style: none; } caption, th { text-align: left; } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; } q:before, q:after { content: ''; } abbr, acronym { border: 0; font-variant: normal; } sup { vertical-align: baseline; } sub { vertical-align: baseline; } /*because legend doesn't inherit in IE */ legend { color: #000; } input, button, textarea, select, optgroup, option { font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; } /*@purpose To enable resizing for IE */ /*@branch For IE6-Win, IE7-Win */ input, button, textarea, select { *font-size: 100%; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/shCore.css ================================================ /** * SyntaxHighlighter * http://alexgorbatchev.com/ * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate * * @version * 2.0.320 (May 03 2009) * * @copyright * Copyright (C) 2004-2009 Alex Gorbatchev. * * @license * This file is part of SyntaxHighlighter. * * SyntaxHighlighter is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SyntaxHighlighter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SyntaxHighlighter. If not, see . */ .syntaxhighlighter, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter span { margin: 0 !important; padding: 0 !important; border: 0 !important; outline: 0 !important; background: none !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: "Consolas", "Monaco", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; } .syntaxhighlighter { width: 100% !important; margin: 1em 0 1em 0 !important; padding: 1px !important; /* adds a little border on top and bottom */ position: relative !important; } .syntaxhighlighter code { display: inline !important; } .syntaxhighlighter .bold { font-weight: bold !important; } .syntaxhighlighter .italic { font-style: italic !important; } .syntaxhighlighter .line .number { float: left !important; width: 3em !important; padding-right: .3em !important; text-align: right !important; display: block !important; } /* Disable numbers when no gutter option is set */ .syntaxhighlighter.nogutter .line .number { display: none !important; } .syntaxhighlighter .line .content { margin-left: 3.3em !important; padding-left: .5em !important; display: block !important; } .syntaxhighlighter .line .content .block { display: block !important; padding-left: 1.5em !important; text-indent: -1.5em !important; } .syntaxhighlighter .line .content .spaces { display: none !important; } /* Disable border and margin on the lines when no gutter option is set */ .syntaxhighlighter.nogutter .line .content { margin-left: 0 !important; border-left: none !important; } .syntaxhighlighter .bar { display: none !important; } .syntaxhighlighter .bar.show { display: block !important; } .syntaxhighlighter.collapsed .bar { display: block !important; } .syntaxhighlighter.nogutter .ruler { margin-left: 0 !important; padding-left: 0 !important; } .syntaxhighlighter .ruler { padding: 0 0 .5em .5em !important; margin-left: 3.3em !important; overflow: hidden !important; } /* Adjust some properties when collapsed */ .syntaxhighlighter.collapsed .lines, .syntaxhighlighter.collapsed .ruler { display: none !important; } .syntaxhighlighter .lines.no-wrap { overflow: auto; overflow-y: hidden; } /* Styles for the toolbar */ .syntaxhighlighter .toolbar { position: absolute !important; right: 0px !important; top: 0px !important; font-size: 1px !important; padding: 8px 8px 8px 0 !important; /* in px because images don't scale with ems */ } .syntaxhighlighter.collapsed .toolbar { font-size: 80% !important; padding: .2em 0 .5em .5em !important; position: static !important; } .syntaxhighlighter .toolbar a.item, .syntaxhighlighter .toolbar .item { display: block !important; float: left !important; margin-left: 8px !important; background-repeat: no-repeat !important; overflow: hidden !important; text-indent: -5000px !important; } .syntaxhighlighter.collapsed .toolbar .item { display: none !important; } .syntaxhighlighter.collapsed .toolbar .item.expandSource { background-image: url(../img/magnifier.png) !important; display: inline !important; text-indent: 0 !important; width: auto !important; float: none !important; height: 16px !important; padding-left: 20px !important; } .syntaxhighlighter .toolbar .item.viewSource { background-image: url(../img/page_white_code.png) !important; } .syntaxhighlighter .toolbar .item.printSource { background-image: url(../img/printer.png) !important; } .syntaxhighlighter .toolbar .item.copyToClipboard { text-indent: 0 !important; background: none !important; overflow: visible !important; } .syntaxhighlighter .toolbar .item.about { background-image: url(../img/help.png) !important; } /** * Print view. * Colors are based on the default theme without background. */ .syntaxhighlighter.printing, .syntaxhighlighter.printing .line.alt1 .content, .syntaxhighlighter.printing .line.alt2 .content, .syntaxhighlighter.printing .line.highlighted .number, .syntaxhighlighter.printing .line.highlighted.alt1 .content, .syntaxhighlighter.printing .line.highlighted.alt2 .content, .syntaxhighlighter.printing .line .content .block { background: none !important; } .syntaxhighlighter .no-wrap .line .content .block { white-space: nowrap !important; } /* Gutter line numbers */ .syntaxhighlighter.printing .line .number { color: #bbb !important; } /* Add border to the lines */ .syntaxhighlighter.printing .line .content { color: #000 !important; } /* Toolbar when visible */ .syntaxhighlighter.printing .toolbar, .syntaxhighlighter.printing .ruler { display: none !important; } .syntaxhighlighter.printing a { text-decoration: none !important; } .syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { color: #000 !important; } .syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { color: #008200 !important; } .syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { color: blue !important; } .syntaxhighlighter.printing .keyword { color: #069 !important; font-weight: bold !important; } .syntaxhighlighter.printing .preprocessor { color: gray !important; } .syntaxhighlighter.printing .variable { color: #a70 !important; } .syntaxhighlighter.printing .value { color: #090 !important; } .syntaxhighlighter.printing .functions { color: #ff1493 !important; } .syntaxhighlighter.printing .constants { color: #0066CC !important; } .syntaxhighlighter.printing .script { font-weight: bold !important; } .syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { color: #808080 !important; } .syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { color: #ff1493 !important; } .syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { color: red !important; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/css/shThemeMoxieDoc.css ================================================ /** * SyntaxHighlighter * http://alexgorbatchev.com/ * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate * * @version * 2.0.320 (May 03 2009) * * @copyright * Copyright (C) 2004-2009 Alex Gorbatchev. * * @license * This file is part of SyntaxHighlighter. * * SyntaxHighlighter is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SyntaxHighlighter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SyntaxHighlighter. If not, see . */ /************************************ * Default Syntax Highlighter theme. * * Interface elements. ************************************/ .syntaxhighlighter { background-color: #E7E5DC !important; } /* Highlighed line number */ .syntaxhighlighter .line.highlighted .number { background-color: #6CE26C !important; color: black !important; } /* Highlighed line */ .syntaxhighlighter .line.highlighted.alt1 .content, .syntaxhighlighter .line.highlighted.alt2 .content { background-color: #6CE26C !important; } /* Gutter line numbers */ .syntaxhighlighter .line .number { color: #5C5C5C !important; } /* Add border to the lines */ .syntaxhighlighter .line .content { border-left: 3px solid #99BBE8 !important; color: #000 !important; } .syntaxhighlighter.printing .line .content { border: 0 !important; } /* First line */ .syntaxhighlighter .line.alt1 .content { background-color: #fff !important; } /* Second line */ .syntaxhighlighter .line.alt2 .content { background-color: #F8F8F8 !important; } .syntaxhighlighter .line .content .block { background: url(../img/wrapping.png) 0 1.1em no-repeat !important; } .syntaxhighlighter .ruler { color: silver !important; background-color: #F8F8F8 !important; border-left: 3px solid #6CE26C !important; } .syntaxhighlighter.nogutter .ruler { border: 0 !important; } .syntaxhighlighter .toolbar { background-color: #F8F8F8 !important; border: #E7E5DC solid 1px !important; } .syntaxhighlighter .toolbar a { color: #a0a0a0 !important; } .syntaxhighlighter .toolbar a:hover { color: red !important; } /************************************ * Actual syntax highlighter colors. ************************************/ .syntaxhighlighter .plain, .syntaxhighlighter .plain a { color: #000 !important; } .syntaxhighlighter .comments, .syntaxhighlighter .comments a { color: #008200 !important; } .syntaxhighlighter .string, .syntaxhighlighter .string a { color: blue !important; } .syntaxhighlighter .keyword { color: #069 !important; font-weight: bold !important; } .syntaxhighlighter .preprocessor { color: gray !important; } .syntaxhighlighter .variable { color: #a70 !important; } .syntaxhighlighter .value { color: #090 !important; } .syntaxhighlighter .functions { color: #ff1493 !important; } .syntaxhighlighter .constants { color: #0066CC !important; } .syntaxhighlighter .script { background-color: yellow !important; } .syntaxhighlighter .color1, .syntaxhighlighter .color1 a { color: #808080 !important; } .syntaxhighlighter .color2, .syntaxhighlighter .color2 a { color: #ff1493 !important; } .syntaxhighlighter .color3, .syntaxhighlighter .color3 a { color: red !important; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/index.html ================================================ Plupload API ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/js/general.js ================================================ (function($){ var currentPage, currentHash; function resizeUI() { $('#doc3').css('height', (window.innerHeight || document.documentElement.clientHeight) - $('#hd').height() - 12); } function scrollToHash(hash) { if (hash) { $(hash).each(function() { $(this)[0].scrollIntoView(); }); } } function loadURL(url) { var parts, hash; // Trim away everything but the file name url = /([^\/]+)$/.exec(url)[0]; // Parse out parts parts = /^([^#]+)(#.+)?$/.exec(url); hash = parts[2]; // In page link, no need to load anything if (parts[1] == currentPage) { if (hash) scrollToHash(hash); else $('#detailsView')[0].scrollTop = 0; return; } currentPage = parts[1]; $("#classView a.selected").removeClass('selected'); $("#classView a[href='" + currentPage.replace(/^.*\/([^\/]+)$/, '$1') + "']").addClass('selected').focus().parents("li.expandable").each(function() { var li = $(this).removeClass("expandable").addClass("collapsable"); li.find("> div.expandable-hitarea").removeClass("expandable-hitarea").addClass("collapsable-hitarea"); li.find("> ul").show(); }); $('#detailsView').find("div.page").hide(); // Check if the page has been loaded before if ($("#detailsView div[url='" + currentPage + "']").show().length == 0) { $('#detailsView').addClass("loading"); // Load page and cache it in a div $.get(currentPage, "", function(data) { data = /]*>([\s\S]+)<\/body>/.exec(data); if (data) { $('#detailsView').removeClass("loading").append('
                        ' + data[1] + '
                        ')[0].scrollTop = 0; SyntaxHighlighter.config.clipboardSwf = 'js/clipboard.swf'; SyntaxHighlighter.highlight({gutter : false}); scrollToHash(hash); } }); } else scrollToHash(hash); } $().ready(function(){ $("#browser").treeview(); $(window).resize(resizeUI).trigger('resize'); window.setInterval(function() { var hash = document.location.hash; if (hash != currentHash && hash) { loadURL(hash.replace(/\-/g, '#').substring(1)); currentHash = hash; } }, 100); $("a").live("click", function(e) { var url = e.target.href; if (e.button == 0) { if (url.indexOf('class_') != -1 || url.indexOf('alias_') != -1 || url.indexOf('member_') != -1) { document.location.hash = e.target.href.replace(/^.*\/([^\/]+)/, '$1').replace(/#/g, '-'); loadURL(url); } e.preventDefault(); } }); }); })(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/js/shBrushJScript.js ================================================ /** * SyntaxHighlighter * http://alexgorbatchev.com/ * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate * * @version * 2.0.320 (May 03 2009) * * @copyright * Copyright (C) 2004-2009 Alex Gorbatchev. * * @license * This file is part of SyntaxHighlighter. * * SyntaxHighlighter is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SyntaxHighlighter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SyntaxHighlighter. If not, see . */ SyntaxHighlighter.brushes.JScript = function() { var keywords = 'break case catch continue ' + 'default delete do else false ' + 'for function if in instanceof ' + 'new null return super switch ' + 'this throw true try typeof var while with' ; this.regexList = [ { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords ]; this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags); }; SyntaxHighlighter.brushes.JScript.prototype = new SyntaxHighlighter.Highlighter(); SyntaxHighlighter.brushes.JScript.aliases = ['js', 'jscript', 'javascript']; ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/js/shCore.js ================================================ /** * SyntaxHighlighter * http://alexgorbatchev.com/ * * SyntaxHighlighter is donationware. If you are using it, please donate. * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate * * @version * 2.0.320 (May 03 2009) * * @copyright * Copyright (C) 2004-2009 Alex Gorbatchev. * * @license * This file is part of SyntaxHighlighter. * * SyntaxHighlighter is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SyntaxHighlighter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SyntaxHighlighter. If not, see . */ eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('f(!1q.2E){l 2E=h(){l p={77:{"1e-1f":"","79-2P":1,"1I":u,"6V-70":U,"1C-2A":4,"5f":N,"4Z":U,"1z":U,"56":N,"7G-7F":U,"6Z":N,"4S-1m":U},M:{52:u,5P:16,5S:16,8k:N,8l:N,83:"4R",1k:{3Y:"97 1c",41:"9b 1c",5U:"9O 93 7A",6t:"9B I 9E 23 8w 7A 8o",34:"34",6P:"?",1v:"2E\\n\\n",6F:"8p\'t 8I 87 D: ",7X:"8V 8v\'t bD D 2u-2c bf: ",6H:"<2u ay=\\"2g://6D.6v.6m/as/8r\\"><6l><8T 2g-92=\\"8P-8L\\" 5B=\\"2d/2u; 8E=8s-8\\" /><3B>8C 2E<2L 1n=\\"3N-8x:8Z,9y,9H,9I-9Q;9S-4v:#9K;4v:#9J;3N-2A:9L;2d-6k:6i;\\">2E6f 2.0.9j (9n 9s 6n)2g://6j.4U96 I 94 95.9f 9e-6n 9c 9t."},6T:N},1t:{4D:u,3k:u,3P:u,5K:{}},2B:{},85:{9u:/\\/\\*[\\s\\S]*?\\*\\//4k,9N:/\\/\\/.*$/4k,9M:/#.*$/4k,9P:/"(?:\\.|(\\\\\\")|[^\\""\\n])*"/g,9T:/\'(?:\\.|(\\\\\\\')|[^\\\'\'\\n])*\'/g,9R:/"(?:\\.|(\\\\\\")|[^\\""])*"/g,9z:/\'(?:\\.|(\\\\\\\')|[^\\\'\'])*\'/g,3p:/\\w+:\\/\\/[\\w-.\\/?%&=]*/g,9x:{E:/(&1F;|<)\\?=?/g,13:/\\?(&2o;|>)/g},9v:{E:/(&1F;|<)%=?/g,13:/%(&2o;|>)/g},9w:{E:/(&1F;|<)\\s*2c.*?(&2o;|>)/4x,13:/(&1F;|<)\\/\\s*2c\\s*(&2o;|>)/4x}},1z:{12:h(3s){l 3y=L.1s("3j"),4o=p.1z.65;3y.J="1z";D(l 2Y 23 4o){l 6o=4o[2Y],4J=T 6o(3s),28=4J.12();3s.5I[2Y]=4J;f(28==u){1H}f(9G(28)=="9F"){28=p.1z.6s(28,3s.1g,2Y)}28.J+="5k "+2Y;3y.1G(28)}q 3y},6s:h(4A,6r,4h){l a=L.1s("a"),4Q=a.1n,4P=p.M,4F=4P.5P,48=4P.5S;a.2q="#"+4h;a.3B=4A;a.5M=6r;a.6q=4h;a.1x=4A;f(55(4F)==N){4Q.1S=4F+"5x"}f(55(48)==N){4Q.2t=48+"5x"}a.8t=h(e){8D{p.1z.6p(c,e||1q.6w,c.5M,c.6q)}8m(e){p.B.1v(e.6u)}q N};q a},6p:h(69,68,6h,6g,67){l 3U=p.1t.5K[6h],3X;f(3U==u||(3X=3U.5I[6g])==u){q u}q 3X.2h(69,68,67)},65:{3Y:h(4b){c.12=h(){f(4b.V("56")!=U){q}q p.M.1k.3Y};c.2h=h(42,8X,91){l A=4b.A;42.7T.5a(42);A.J=A.J.C("51","")}},41:h(66){c.12=h(){q p.M.1k.41};c.2h=h(8R,8Q,8J){l 3Q=p.B.3G(66.4W).C(/"+3Q+"");2i.L.5O()}},5U:h(5e){l 3S,8F,5L=5e.1g;c.12=h(){l 2S=p.M;f(2S.52==u){q u}h 1A(5E){l 5s="";D(l 5y 23 5E){5s+="<8S 1f=\'"+5y+"\' 1U=\'"+5E[5y]+"\'/>"}q 5s};h 2v(5t){l 5Q="";D(l 5w 23 5t){5Q+=" "+5w+"=\'"+5t[5w]+"\'"}q 5Q};l 5m={1S:2S.5P,2t:2S.5S,1g:5L+"b8",6N:"b7/x-6a-6b",3B:p.M.1k.5U},5h={b6:"b4",b5:"b9",ba:"5M="+5L,bd:"N"},5g=2S.52,3H;f(/bb/i.1R(5Z.5W)){3H="<6e"+2v({bc:"b3:b2-aU-aT-aS-aQ",aR:"2g://aW.b1.4U/b0/6a/aX/6b/bg.bh#6f=9,0,0,0"})+2v(5m)+">"+1A(5h)+1A({bB:5g})+""}F{3H=""}3S=L.1s("A");3S.1x=3H;q 3S};c.2h=h(bH,bG,5T){l 6d=5T.bE;6z(6d){2N"7u":l 53=p.B.2D(p.B.3G(5e.4W).C(/&1F;/g,"<").C(/&2o;/g,">").C(/&bw;/g,"&"));f(1q.6c){1q.6c.bm("2d",53)}F{q p.B.2D(53)}2N"bk":p.B.1v(p.M.1k.6t);2m;2N"bj":p.B.1v(5T.6u);2m}}},bo:h(58){c.12=h(){q p.M.1k.34};c.2h=h(bu,bt,bs){l 1W=L.1s("bp"),1O=u;f(p.1t.3P!=u){L.2L.5a(p.1t.3P)}p.1t.3P=1W;1W.1n.bq="aP:aO;1S:6L;2t:6L;E:-6K;43:-6K;";L.2L.1G(1W);1O=1W.5c.L;6J(1O,1q.L);1O.3h(""+58.A.1x+"");1O.5O();1W.5c.4d();1W.5c.34();h 6J(6M,64){l 2F=64.82("4Y");D(l i=0;i<2F.v;i++){f(2F[i].6R.ac()=="6Q"&&/aa\\.19$/.1R(2F[i].2q)){6M.3h("<4Y 6N=\\"2d/19\\" 6R=\\"6Q\\" 2q=\\""+2F[i].2q+"\\">")}}}}},af:h(ag){c.12=h(){q p.M.1k.6P};c.2h=h(aj,ah){l 2i=p.B.54("","57",ai,a9,"6O=0"),1O=2i.L;1O.3h(p.M.1k.6H);1O.5O();2i.4d()}}}},B:{5H:h(6G){q 6G+3J.9Y(3J.9W()*9X).2r()},5o:h(5R,5G){l 3m={},1T;D(1T 23 5R){3m[1T]=5R[1T]}D(1T 23 5G){3m[1T]=5G[1T]}q 3m},8d:h(5z){6z(5z){2N"U":q U;2N"N":q N}q 5z},54:h(3p,6x,44,4c,2J){l x=(6y.1S-44)/2,y=(6y.2t-4c)/2;2J+=", E="+x+", 43="+y+", 1S="+44+", 2t="+4c;2J=2J.C(/^,/,"");l 49=1q.a5(3p,6x,2J);49.4d();q 49},7Q:h(1M,25,24){f(1M.6A){1M["e"+25+24]=24;1M[25+24]=h(){1M["e"+25+24](1q.6w)};1M.6A("an"+25,1M[25+24])}F{1M.aG(25,24,N)}},1v:h(z){1v(p.M.1k.1v+z)},4l:h(4M,6B){l 2k=p.1t.4D,3b=u;f(2k==u){2k={};D(l 4G 23 p.2B){l 37=p.2B[4G].aF;f(37==u){1H}D(l i=0;i<37.v;i++){2k[37[i]]=4G}}p.1t.4D=2k}3b=p.2B[2k[4M]];f(3b==u&&6B!=N){p.B.1v(p.M.1k.6F+4M)}q 3b},4n:h(z,6E){l 2U=z.1P("\\n");D(l i=0;i<2U.v;i++){2U[i]=6E(2U[i])}q 2U.5u("\\n")},74:h(){l A=L.1s("A"),3e=L.1s("A"),6C=10,i=1;29(i<=aD){f(i%6C===0){A.1x+=i;i+=(i+"").v}F{A.1x+="&aI;";i++}}3e.J="5f 2P";3e.1G(A);q 3e},6W:h(z){q z.C(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,"")},84:h(z){l 3d,4u={},4p=T R("^\\\\[(?<4q>(.*?))\\\\]$"),6S=T R("(?<1f>[\\\\w-]+)"+"\\\\s*:\\\\s*"+"(?<1U>"+"[\\\\w-%#]+|"+"\\\\[.*?\\\\]|"+"\\".*?\\"|"+"\'.*?\'"+")\\\\s*;?","g");29((3d=6S.Q(z))!=u){l 2f=3d.1U.C(/^[\'"]|[\'"]$/g,"");f(2f!=u&&4p.1R(2f)){l m=4p.Q(2f);2f=m.4q.v>0?m.4q.1P(/\\s*,\\s*/):[]}4u[3d.1f]=2f}q 4u},7g:h(z,19){f(z==u||z.v==0||z=="\\n"){q z}z=z.C(/"+2s+""})}q z},7a:h(61,62){l 2I=61.2r();29(2I.v<62){2I="0"+2I}q 2I},5p:h(){l 3x=L.1s("A"),35,3r=0,5i=L.2L,1g=p.B.5H("5p"),2Q="",4H="";3x.1x=2Q+"7P\\">"+2Q+"1m\\">"+2Q+"2P\\">"+2Q+"5B"+"\\"><1V 1e=\\"7i\\"><1V 1g=\\""+1g+"\\">&1X;"+4H+4H+2V+2V+2V+2V;5i.1G(3x);35=L.ar(1g);f(/aq/i.1R(5Z.5W)){l 63=1q.ao(35,u);3r=7b(63.ap("1S"))}F{3r=35.at}5i.5a(3x);q 3r},76:h(5Y,60){l 1C="";D(l i=0;i<60;i++){1C+=" "}q 5Y.C(/\\t/g,1C)},71:h(2C,4w){l az=2C.1P("\\n"),1C="\\t",40="";D(l i=0;i<50;i++){40+=" "}h 6I(3z,18,5X){q 3z.1Q(0,18)+40.1Q(0,5X)+3z.1Q(18+1,3z.v)};2C=p.B.4n(2C,h(2a){f(2a.1i(1C)==-1){q 2a}l 18=0;29((18=2a.1i(1C))!=-1){l 7r=4w-18%4w;2a=6I(2a,18,7r)}q 2a});q 2C},3G:h(z){l br=/|&1F;br\\s*\\/?&2o;/4x;f(p.M.8k==U){z=z.C(br,"\\n")}f(p.M.8l==U){z=z.C(br,"")}q z},33:h(z){q z.C(/\\s*$/g,"").C(/^\\s*/,"")},2D:h(z){l 21=p.B.3G(z).1P("\\n"),av=T 5V(),8a=/^\\s*/,1Z=ax;D(l i=0;i<21.v&&1Z>0;i++){l 3V=21[i];f(p.B.33(3V).v==0){1H}l 3W=8a.Q(3V);f(3W==u){q z}1Z=3J.1Z(3W[0].v,1Z)}f(1Z>0){D(l i=0;i<21.v;i++){21[i]=21[i].1Q(1Z)}}q 21.5u("\\n")},7d:h(2K,2O){f(2K.G<2O.G){q-1}F{f(2K.G>2O.G){q 1}F{f(2K.v<2O.v){q-1}F{f(2K.v>2O.v){q 1}}}}q 0},30:h(7S,2H){h 7R(4V,7Y){q[T p.4i(4V[0],4V.G,7Y.19)]};l au=0,5N=u,39=[],7Z=2H.4L?2H.4L:7R;29((5N=2H.3q.Q(7S))!=u){39=39.31(7Z(5N,2H))}q 39},7C:h(86){q 86.C(p.85.3p,h(m){q""+m+""})}},1I:h(88,4T){h 81(5j){l 59=[];D(l i=0;i<5j.v;i++){59.K(5j[i])}q 59};l 3g=4T?[4T]:81(L.82(p.M.83)),80="1x",2e=u;f(3g.v===0){q}D(l i=0;i<3g.v;i++){l 2G=3g[i],2l=p.B.84(2G.J),32;2l=p.B.5o(88,2l);32=2l["87"];f(32==u){1H}f(2l["2u-2c"]=="U"){2e=T p.4B(32)}F{l 4O=p.B.4l(32);f(4O){2e=T 4O()}F{1H}}2e.1I(2G[80],2l);l 2p=2e.A;f(p.M.6T){2p=L.1s("aA");2p.1U=2e.A.1x;2p.1n.1S="aB";2p.1n.2t="aK"}2G.7T.aJ(2p,2G)}},aL:h(7U){p.B.7Q(1q,"aM",h(){p.1I(7U)})}};p.4i=h(4j,7V,19){c.1U=4j;c.G=7V;c.v=4j.v;c.19=19};p.4i.Y.2r=h(){q c.1U};p.4B=h(4y){l 1J=p.B.4l(4y),4z=T p.2B.aN(),aH=u;f(1J==u){q}1J=T 1J();c.4E=4z;f(1J.3O==u){p.B.1v(p.M.1k.7X+4y);q}4z.5n.K({3q:1J.3O.I,4L:89});h 3a(4K,7W){D(l j=0;j<4K.v;j++){4K[j].G+=7W}};h 89(17,aC){l 8f=17.I,1L=[],4N=1J.5n,8e=17.G+17.E.v,2Z=1J.3O,1l;D(l i=0;i<4N.v;i++){1l=p.B.30(8f,4N[i]);3a(1l,8e);1L=1L.31(1l)}f(2Z.E!=u&&17.E!=u){1l=p.B.30(17.E,2Z.E);3a(1l,17.G);1L=1L.31(1l)}f(2Z.13!=u&&17.13!=u){1l=p.B.30(17.13,2Z.13);3a(1l,17.G+17[0].aE(17.13));1L=1L.31(1l)}q 1L}};p.4B.Y.1I=h(8h,8i){c.4E.1I(8h,8i);c.A=c.4E.A};p.8b=h(){};p.8b.Y={V:h(8c,8g){l 3Z=c.1A[8c];q p.B.8d(3Z==u?8g:3Z)},12:h(8j){q L.1s(8j)},72:h(38,7O){l 2w=[];f(38!=u){D(l i=0;i<38.v;i++){2w=2w.31(p.B.30(7O,38[i]))}}2w=2w.am(p.B.7d);q 2w},73:h(){l 26=c.2R;D(l i=0;i<26.v;i++){f(26[i]===u){1H}l 2x=26[i],45=2x.G+2x.v;D(l j=i+1;j<26.v&&26[i]!==u;j++){l 20=26[j];f(20===u){1H}F{f(20.G>45){2m}F{f(20.G==2x.G&&20.v>2x.v){c.2R[i]=u}F{f(20.G>=2x.G&&20.G<45){c.2R[j]=u}}}}}}},7m:h(2M){l 36=2M.1P(/\\n/g),3f=7b(c.V("79-2P")),7e=(3f+36.v).2r().v,7f=c.V("1I",[]);2M="";D(l i=0;i<36.v;i++){l 1r=36[i],2y=/^(&1X;|\\s)+/.Q(1r),5A="2P a3"+(i%2==0?1:2),7j=p.B.7a(3f+i,7e),7k=7f.1i((3f+i).2r())!=-1,1E=u;f(2y!=u){1E=2y[0].2r();1r=1r.1Q(1E.v);1E=1E.C(/&1X;/g," ");2y=p.1t.3k*1E.v}F{2y=0}1r=p.B.33(1r);f(1r.v==0){1r="&1X;"}f(7k){5A+=" a6"}2M+=""+""+7j+"."+"<1V 1e=\\"5B\\">"+(1E!=u?""+1E.C(/\\s/g,"&1X;")+"":"")+"<1V 1e=\\"7i\\" 1n=\\"5D-E: "+2y+"5x !78;\\">"+1r+""+""+""}q 2M},7l:h(5v,5r){l 18=0,3o="",3n=p.B.7g;D(l i=0;i<5r.v;i++){l 1N=5r[i];f(1N===u||1N.v===0){1H}3o+=3n(5v.1Q(18,1N.G-18),"7h")+3n(1N.1U,1N.19);18=1N.G+1N.v}3o+=3n(5v.1Q(18),"7h");q 3o},1I:h(1j,6Y){l a1=p.M,3l=p.1t,A,9Z,3i,a0="78";c.1A={};c.A=u;c.1m=u;c.I=u;c.1h=u;c.5I={};c.1g=p.B.5H("a8");3l.5K[c.1g]=c;f(1j===u){1j=""}f(3l.3k===u){3l.3k=p.B.5p()}c.1A=p.B.5o(p.77,6Y||{});f(c.V("6Z")==U){c.1A.1z=c.1A.4Z=N}c.A=A=c.12("3j");c.1m=c.12("3j");c.1m.J="1m";J="7P";A.1g=c.1g;f(c.V("56")){J+=" 51"}f(c.V("4Z")==N){J+=" ak"}f(c.V("4S-1m")==N){c.1m.J+=" al-4S"}J+=" "+c.V("1e-1f");A.J=J;c.4W=1j;c.I=p.B.6W(1j).C(/\\r/g," ");3i=c.V("1C-2A");c.I=c.V("6V-70")==U?p.B.71(c.I,3i):p.B.76(c.I,3i);c.I=p.B.2D(c.I);f(c.V("1z")){c.1h=c.12("3j");c.1h.J="1h";c.1h.1G(p.1z.12(c));A.1G(c.1h);l 1h=c.1h;h 5d(){1h.J=1h.J.C("75","")};A.ab=h(){5d();1h.J+=" 75"};A.ad=h(){5d()}}f(c.V("5f")){A.1G(p.B.74())}A.1G(c.1m);c.2R=c.72(c.5n,c.I);c.73();1j=c.7l(c.I,c.2R);1j=c.7m(p.B.33(1j));f(c.V("7G-7F")){1j=p.B.7C(1j)}c.1m.1x=1j},bn:h(z){z=z.C(/^\\s+|\\s+$/g,"").C(/\\s+/g,"\\\\b|\\\\b");q"\\\\b"+z+"\\\\b"},bl:h(2W){c.3O={E:{3q:2W.E,19:"2c"},13:{3q:2W.13,19:"2c"},I:T R("(?"+2W.E.1c+")"+"(?.*?)"+"(?<13>"+2W.13.1c+")","bv")}}};q p}()}f(!5V.1i){5V.Y.1i=h(7M,3R){3R=3J.bF(3R||0,0);D(l i=3R;i|[7B]{[^}]+})[\\S\\s]?|\\((?=\\?(?!#|<[\\w$]+>)))+|(\\()(?:\\?(?:(#)[^)]*\\)|<([$\\w]+)>))?|\\\\(?:k<([\\w$]+)>|[7B]{([^}]+)})|(\\[\\^?)|([\\S\\s])/g,by:/(?:[^$]+|\\$(?![1-9$&`\']|{[$\\w]+}))+|\\$(?:([1-9]\\d*|[$&`\'])|{([$\\w]+)})/g,3M:/^(?:\\s+|#.*)+/,5F:/^(?:[?*+]|{\\d+(?:,\\d*)?})/,7x:/&&\\[\\^?/g,7v:/]/g},7n=h(5l,5k,4X){D(l i=4X||0;i<5l.v;i++){f(5l[i]===5k){q i}}q-1},7y=/()??/.Q("")[1]!==3K,3w={};R=h(1d,1Y){f(1d 3T 11){f(1Y!==3K){3L 7N("4C\'t 4I bJ 7H aY 7J 11 4X aZ")}q 1d.3C()}l 1Y=1Y||"",7w=1Y.1i("s")>-1,6X=1Y.1i("x")>-1,5q=N,3u=[],14=[],W=1K.W,H,3D,3F,3E,3v;W.O=0;29(H=2z.Q.2n(W,1d)){f(H[2]){f(!1K.5F.1R(1d.15(W.O))){14.K("(?:)")}}F{f(H[1]){3u.K(H[3]||u);f(H[3]){5q=U}14.K("(")}F{f(H[4]){3E=7n(3u,H[4]);14.K(3E>-1?"\\\\"+(3E+1)+(55(1d.5J(W.O))?"":"(?:)"):H[0])}F{f(H[5]){14.K(3w.7t?3w.7t.7u(H[5],H[0].5J(1)==="P"):H[0])}F{f(H[6]){f(1d.5J(W.O)==="]"){14.K(H[6]==="["?"(?!)":"[\\\\S\\\\s]");W.O++}F{3D=R.7q("&&"+1d.15(H.G),1K.7x,1K.7v,"",{7s:"\\\\"})[0];14.K(H[6]+3D+"]");W.O+=3D.v+1}}F{f(H[7]){f(7w&&H[7]==="."){14.K("[\\\\S\\\\s]")}F{f(6X&&1K.3M.1R(H[7])){3F=2z.Q.2n(1K.3M,1d.15(W.O-1))[0].v;f(!1K.5F.1R(1d.15(W.O-1+3F))){14.K("(?:)")}W.O+=3F-1}F{14.K(H[7])}}}F{14.K(H[0])}}}}}}}3v=11(14.5u(""),2z.C.2n(1Y,/[8y]+/g,""));3v.1u={1c:1d,2j:5q?3u:u};q 3v};R.8B=h(1f,o){3w[1f]=o};11.Y.Q=h(z){l 1b=2z.Q.2n(c,z),1f,i,5C;f(1b){f(7y&&1b.v>1){5C=T 11("^"+c.1c+"$(?!\\\\s)",c.4a());2z.C.2n(1b[0],5C,h(){D(i=1;i<7z.v-2;i++){f(7z[i]===3K){1b[i]=3K}}})}f(c.1u&&c.1u.2j){D(i=1;i<1b.v;i++){1f=c.1u.2j[i-1];f(1f){1b[1f]=1b[i]}}}f(c.3A&&c.O>(1b.G+1b[0].v)){c.O--}}q 1b}})()}11.Y.4a=h(){q(c.3A?"g":"")+(c.8M?"i":"")+(c.7D?"m":"")+(c.3M?"x":"")+(c.8Y?"y":"")};11.Y.3C=h(7o){l 4g=T R(c.1c,(7o||"")+c.4a());f(c.1u){4g.1u={1c:c.1u.1c,2j:c.1u.2j?c.1u.2j.15(0):u}}q 4g};11.Y.2n=h(90,z){q c.Q(z)};11.Y.8W=h(8U,7p){q c.Q(7p[0])};R.47=h(4f,4e){l 46="/"+4f+"/"+(4e||"");q R.47[46]||(R.47[46]=T R(4f,4e))};R.3t=h(z){q z.C(/[-[\\]{}()*+?.\\\\^$|,#\\s]/g,"\\\\$&")};R.7q=h(z,E,Z,1a,2T){l 2T=2T||{},2X=2T.7s,X=2T.8A,1a=1a||"",4s=1a.1i("g")>-1,7E=1a.1i("i")>-1,7L=1a.1i("m")>-1,4t=1a.1i("y")>-1,1a=1a.C(/y/g,""),E=E 3T 11?(E.3A?E:E.3C("g")):T R(E,"g"+1a),Z=Z 3T 11?(Z.3A?Z:Z.3C("g")):T R(Z,"g"+1a),1D=[],2b=0,1o=0,1p=0,1y=0,27,22,1w,1B,3I,4m;f(2X){f(2X.v>1){3L 8n("4C\'t 4I 8q 8z 7J 3t 7I")}f(7L){3L 7N("4C\'t 4I 3t 7I 7H 9U 9D 7D 9C")}3I=R.3t(2X);4m=T 11("^(?:"+3I+"[\\\\S\\\\s]|(?:(?!"+E.1c+"|"+Z.1c+")[^"+3I+"])+)+",7E?"i":"")}29(U){E.O=Z.O=1p+(2X?(4m.Q(z.15(1p))||[""])[0].v:0);1w=E.Q(z);1B=Z.Q(z);f(1w&&1B){f(1w.G<=1B.G){1B=u}F{1w=u}}f(1w||1B){1o=(1w||1B).G;1p=(1w?E:Z).O}F{f(!2b){2m}}f(4t&&!2b&&1o>1y){2m}f(1w){f(!2b++){27=1o;22=1p}}F{f(1B&&2b){f(!--2b){f(X){f(X[0]&&27>1y){1D.K([X[0],z.15(1y,27),1y,27])}f(X[1]){1D.K([X[1],z.15(27,22),27,22])}f(X[2]){1D.K([X[2],z.15(22,1o),22,1o])}f(X[3]){1D.K([X[3],z.15(1o,1p),1o,1p])}}F{1D.K(z.15(22,1o))}1y=1p;f(!4s){2m}}}F{E.O=Z.O=0;3L 9q("9A 9i 9a 9d 8u")}}f(1o===1p){1p++}}f(4s&&!4t&&X&&X[0]&&z.v>1y){1D.K([X[0],z.15(1y),1y,z.v])}E.O=Z.O=0;q 1D};',62,728,'||||||||||||this|||if||function||||var||||sh|return||||null|length||||str|div|utils|replace|for|left|else|index|_10f|code|className|push|document|config|false|lastIndex||exec|XRegExp||new|true|getParam|part|vN|prototype|_127||RegExp|create|right|_10d|slice||_c4|pos|css|_128|_117|source|_107|class|name|id|bar|indexOf|_f0|strings|_cb|lines|style|_132|_133|window|_e3|createElement|vars|_x|alert|_137|innerHTML|_134|toolbar|params|_138|tab|_130|_e8|lt|appendChild|continue|highlight|_be|lib|_c7|obj|_ef|doc|split|substr|test|width|_4b|value|span|_3c|nbsp|_108|min|_dc|_98|_136|in|_57|_56|_d7|_135|_8|while|_91|_131|script|text|_b2|_6e|http|execute|wnd|captureNames|_5b|_b5|break|call|gt|_b8|href|toString|_75|height|html|attributes|_d5|_d9|_e4|_fe|size|brushes|_88|unindent|SyntaxHighlighter|_40|_b4|_a2|_7a|_51|m1|body|_dd|case|m2|line|_80|matches|_28|_129|_62|_81|_fa|_12a|_5|_ca|getMatches|concat|_b6|trim|print|_7c|_de|_5e|_d3|_a7|offsetMatches|_5c|_76|_6a|_65|_df|_b0|write|_f6|DIV|spaceWidth|_f3|_4a|_ed|_ec|url|regex|_7d|_2|escape|_10c|_113|_106|_7b|_3|_8e|global|title|addFlags|cc|_112|len|fixInputString|_32|_139|Math|undefined|throw|extended|font|htmlScript|printFrame|_22|_fc|_25|instanceof|_17|_9d|_9e|_18|expandSource|_d1|_8c|viewSource|_1a|top|_4f|_da|key|cache|_10|win|getNativeFlags|_19|_50|focus|_122|_121|_11c|_b|Match|_ba|gm|findBrush|esc|eachLine|_4|_6c|values|_73|_12c|_12f|_6b|color|_89|gi|_bd|_bf|_9|HtmlScript|can|discoveredBrushes|xmlBrush|_f|_5d|_82|supply|_7|_c1|func|_59|_c8|_b7|_e|_d|pre|wrap|_ac|com|_a3|originalCode|from|link|gutter||collapsed|clipboardSwf|_37|popup|isNaN|collapse|_blank|_38|_ae|removeChild|String|contentWindow|hide|_24|ruler|swf|_30|_7e|_ad|item|_101|_2f|regexList|merge|measureSpace|_10b|_ea|_2a|_2c|join|_e9|_2e|px|_2b|_4c|_e5|content|r2|margin|_29|quantifier|_49|guid|toolbarCommands|charAt|highlighters|_27|highlighterId|_a6|close|toolbarItemWidth|_2d|_48|toolbarItemHeight|_35|copyToClipboard|Array|userAgent|_90|_84|navigator|_85|_78|_79|_83|_3f|items|_1e|_16|_13|_12|shockwave|flash|clipboardData|_36|object|version|_15|_14|center|alexgorbatchev|align|head|org|2009|_6|executeCommand|commandName|_a|createButton|copyToClipboardConfirmation|message|w3|event|_4e|screen|switch|attachEvent|_5a|_66|www|_61|noBrush|_47|aboutDialog|insertSpaces|copyStyles|500px|0px|_3e|type|scrollbars|help|stylesheet|rel|_6d|debug|DTD|smart|trimFirstAndLastLines|_10a|_f1|light|tabs|processSmartTabs|findMatches|removeNestedMatches|createRuler|show|processTabs|defaults|important|first|padNumber|parseInt|xhtml1|matchesSortCallback|_e0|_e1|decorate|plain|block|_e6|_e7|processMatches|createDisplayLines|_100|_11b|args|matchRecursive|_93|escapeChar|unicode|get|classRight|_109|classLeft|_105|arguments|clipboard|pP|processUrls|multiline|_12d|links|auto|when|character|one|match|_12e|_fb|TypeError|_d4|syntaxhighlighter|addEvent|defaultAdd|_a1|parentNode|_b9|_bb|_c2|brushNotHtmlScript|_a4|_a8|_b1|toArray|getElementsByTagName|tagName|parseParams|regexLib|_a9|brush|_ab|process|_9a|Highlighter|_cf|toBoolean|_c9|_c6|_d0|_cd|_ce|_d2|bloggerMode|stripBrs|catch|SyntaxError|now|Can|more|xhtml|utf|onclick|delimiters|wasn|your|family|sx|than|valueNames|addPlugin|About|try|charset|_26|400|750|find|_21|location|Type|ignoreCase|menubar|resizable|Content|_20|_1f|param|meta|_11f|Brush|apply|_1b|sticky|Geneva|_11d|_1c|equiv|to|syntax|highlighter|JavaScript|expand|none|3em|contains|view|Alex|unbalanced|2004|Copyright|decoration|0099FF|data|320|4em|bottom|75em|May|large|xx|Error|target|03|Gorbatchev|multiLineCComments|aspScriptTags|scriptScriptTags|phpScriptTags|Arial|multiLineSingleQuotedString|subject|The|flag|the|is|string|typeof|Helvetica|sans|000|fff|1em|singleLinePerlComments|singleLineCComments|copy|doubleQuotedString|serif|multiLineDoubleQuotedString|background|singleQuotedString|using|W3C|random|1000000|round|_f5|_f7|_f2|spaces|alt|transitional|open|highlighted|number|highlighter_|250|shCore|onmouseover|toLowerCase|onmouseout|printing|about|_42|_44|500|_43|nogutter|no|sort|on|getComputedStyle|getPropertyValue|opera|getElementById|1999|offsetWidth|_a5|_99|dtd|1000|xmlns|_8a|textarea|70em|_c5|150|lastIndexOf|aliases|addEventListener|_c0|middot|replaceChild|30em|all|load|Xml|absolute|position|444553540000|codebase|96b8|11cf|ae6d|PUBLIC|download|cabs|constructing|another|pub|macromedia|d27cdb6e|clsid|always|wmode|allowScriptAccess|application|_clipboard|transparent|flashVars|msie|classid|menu|DOCTYPE|option|swflash|cab|TR|error|ok|forHtmlScript|setData|getKeywords|printSource|IFRAME|cssText||_3b|_3a|_39|sgi|amp|Transitional|replaceVar|XHTML|embed|movie|src|configured|command|max|_34|_33|EN|flags'.split('|'),0,{})) ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/model.xml ================================================ Yahoo BrowserPlus implementation. This runtime supports these features: dragdrop, jpgresize, pngresize. Initializes the browserplus runtime. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. FlashRuntime implementation. This runtime supports these features: jpgresize, pngresize, chunks. Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. Gears implementation. This runtime supports these features: dragdrop, jpgresize, pngresize, chunks. Initializes the upload runtime. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. HTML4 implementation. This runtime has no special features it uses an form that posts files into an hidden iframe. Initializes the upload runtime. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. HMTL5 implementation. This runtime supports these features: dragdrop, jpgresize, pngresize. Initializes the upload runtime. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. Silverlight implementation. This runtime supports these features: jpgresize, pngresize, chunks. Initializes the upload runtime. This runtime supports these features: jpgresize, pngresize, chunks. Uploader instance that needs to be initialized. Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. Uploader class, an instance of this class will be created for each upload field. var uploader = new plupload.Uploader({ runtimes : 'gears,html5,flash', browse_button : 'button_id' }); uploader.bind('Init', function(up) { alert('Supports drag/drop: ' + (!!up.features.dragdrop)); }); uploader.bind('FilesAdded', function(up, files) { alert('Selected files: ' + files.length); }); uploader.bind('QueueChanged', function(up) { alert('Queued files: ' + uploader.files.length); }); uploader.init(); Constructs a new uploader instance. Initialization settings, to be used by the uploader instance and runtimes. Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED. These states are controlled by the stop/start methods. The default value is STOPPED. Current runtime name. Map of features that are available for the uploader runtime. Features will be filled before the init event is called, these features can then be used to alter the UI for the end user. Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize. Current upload queue, an array of File instances. Object with name/value settings. Total progess information. How many files has been uploaded, total percent etc. Unique id for the Uploader instance. Initializes the Uploader instance and adds internal event listeners. Refreshes the upload instance by dispatching out a refresh event to all runtimes. This would for example reposition flash/silverlight shims on the page. Starts uploading the queued files. Stops the upload of the queued files. Returns the specified file object by id. File id to look for. File object or undefined if it wasn't found; Removes a specific file. File to remove from queue. Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events. (Optional) Start index to remove from. (Optional) Lengh of items to remove. Array of files that was removed. Dispatches the specified event name and it's arguments to all listeners. Event name to fire. arguments to pass along to the listener functions. Adds an event listener by name. Event name to listen for. Function to call ones the event gets fired. Optional scope to execute the specified function in. Removes the specified event listener. Name of event to remove. Function to remove from listener. Removes all event listeners. Destroys Plupload instance and cleans after itself. Fires when the current RunTime has been initialized. Uploader instance sending the event. Fires after the init event incase you need to perform actions there. Uploader instance sending the event. Fires when the silverlight/flash or other shim needs to move. Uploader instance sending the event. Fires when the overall state is being changed for the upload queue. Uploader instance sending the event. Fires when a file is to be uploaded by the runtime. Uploader instance sending the event. File to be uploaded. Fires when just before a file is uploaded. This event enables you to override settings on the uploader instance before the file is uploaded. Uploader instance sending the event. File to be uploaded. Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance. Uploader instance sending the event. Fires while a file is being uploaded. Use this event to update the current file upload progress. Uploader instance sending the event. File that is currently being uploaded. Fires while a file was removed from queue. Uploader instance sending the event. Array of files that got removed. Fires while when the user selects files to upload. Uploader instance sending the event. Array of file objects that was added to queue/selected by the user. Fires when a file is successfully uploaded. Uploader instance sending the event. File that was uploaded. Object with response properties. Fires when file chunk is uploaded. Uploader instance sending the event. File that the chunk was uploaded for. Object with response properties. Fires when all files in a queue are uploaded. Uploader instance sending the event. Array of file objects that was added to queue/selected by the user. Fires when a error occurs. Uploader instance sending the event. Contains code, message and sometimes file and other details. Fires when destroy method is called. Uploader instance sending the event. File instance. Name of the file. File size. Constructs a new file instance. Unique file id. File name. File size in bytes. File id this is a globally unique id for the specific file. File name for example "myfile.gif". File size in bytes. Number of bytes uploaded of the files total size. Number of percentage uploaded of the file. Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. Runtime class gets implemented by each upload runtime. Initializes the upload runtime. This method should add necessary items to the DOM and register events needed for operation. Uploader instance that needs to be initialized. Callback function to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. Runtime class gets implemented by each upload runtime. Constructs a queue progress. Total queue file size. Total bytes uploaded. Number of files uploaded. Number of files failed to upload. Number of files yet to be uploaded. Total percent of the uploaded bytes. Bytes uploaded per second. Resets the progress to it's initial values. Plupload class with some global constants and functions. // Encode entities console.log(plupload.xmlEncode("My string &lt;&gt;")); // Generate unique id console.log(plupload.guid()); Inital state of the queue and also the state ones it's finished all it's uploads. Upload process is running File is queued for upload File is being uploaded File has failed to be uploaded File has been uploaded successfully Generic error for example if an exception is thrown inside Silverlight. HTTP transport error. For example if the server produces a HTTP status other than 200. Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine. Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine. Initialization error. Will be triggered if no runtime was initialized. File size error. If the user selects a file that is to large it will be blocked and an error of this type will be triggered. File extension error. If the user selects a file that isn't valid according to the filters setting. Mime type lookup table. Extends the specified object with another object. Object to extend. Multiple objects to extend with. Same as target, the extended object. Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _. String to clean up. Cleaned string. Adds a specific upload runtime like for example flash or gears. Runtime name for example flash. Object containing init/destroy method. Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. It's more probable for the earth to be hit with an ansteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property to an user unique key. Virtually unique id. Formats the specified number as a size string for example 1024 becomes 1 KB. Size to format as string. Formatted size string. Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. HTML element or element id to get x, y position from. Optional root element to stop calculations at. Absolute position of the specified element object with x, y fields. Parses the specified size string into a byte value. For example 10kb becomes 10240. String to parse or number to just pass through. Size in bytes. Encodes the specified string. String to encode. Encoded string. Forces anything into an array. Object with length field. Array object containing all items. ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/docs/api/plupload.vsdoc.js ================================================ // Namespaces plupload = {} plupload.runtimes = {} // Classes plupload.runtimes.BrowserPlus = function() { /// Yahoo BrowserPlus implementation. } plupload.runtimes.BrowserPlus.init = function(uploader, callback) { /// Initializes the browserplus runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.runtimes.Flash = function() { /// FlashRuntime implementation. } plupload.runtimes.Flash.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.runtimes.Gears = function() { /// Gears implementation. } plupload.runtimes.Gears.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.runtimes.Html4 = function() { /// HTML4 implementation. } plupload.runtimes.Html4.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.runtimes.Html5 = function() { /// HMTL5 implementation. } plupload.runtimes.Html5.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.runtimes.Silverlight = function() { /// Silverlight implementation. } plupload.runtimes.Silverlight.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.Uploader = function(settings) { /// Uploader class, an instance of this class will be created for each upload field. /// Initialization settings, to be used by the uploader instance and runtimes. /// Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED. These states are controlled by the stop/start methods. The default value is STOPPED. /// Current runtime name. /// Map of features that are available for the uploader runtime. Features will be filled before the init event is called, these features can then be used to alter the UI for the end user. Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize. /// Current upload queue, an array of File instances. /// Object with name/value settings. /// Total progess information. How many files has been uploaded, total percent etc. /// Unique id for the Uploader instance. } plupload.Uploader.prototype.init = function() { /// Initializes the Uploader instance and adds internal event listeners. } plupload.Uploader.prototype.refresh = function() { /// Refreshes the upload instance by dispatching out a refresh event to all runtimes. } plupload.Uploader.prototype.start = function() { /// Starts uploading the queued files. } plupload.Uploader.prototype.stop = function() { /// Stops the upload of the queued files. } plupload.Uploader.prototype.getFile = function(id) { /// Returns the specified file object by id. /// File id to look for. /// File object or undefined if it wasn't found; } plupload.Uploader.prototype.removeFile = function(file) { /// Removes a specific file. /// File to remove from queue. } plupload.Uploader.prototype.splice = function(start, length) { /// Removes part of the queue and returns the files removed. /// (Optional) Start index to remove from. /// (Optional) Lengh of items to remove. /// Array of files that was removed. } plupload.Uploader.prototype.trigger = function(name, Multiple) { /// Dispatches the specified event name and it's arguments to all listeners. /// Event name to fire. /// arguments to pass along to the listener functions. } plupload.Uploader.prototype.bind = function(name, func, scope) { /// Adds an event listener by name. /// Event name to listen for. /// Function to call ones the event gets fired. /// Optional scope to execute the specified function in. } plupload.Uploader.prototype.unbind = function(name, func) { /// Removes the specified event listener. /// Name of event to remove. /// Function to remove from listener. } plupload.Uploader.prototype.unbindAll = function() { /// Removes all event listeners. } plupload.Uploader.prototype.destroy = function() { /// Destroys Plupload instance and cleans after itself. } plupload.File = function(id, name, size) { /// File instance. /// Unique file id. /// File name. /// File size in bytes. /// File id this is a globally unique id for the specific file. /// File name for example "myfile.gif". /// File size in bytes. /// Number of bytes uploaded of the files total size. /// Number of percentage uploaded of the file. /// Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. } plupload.Runtime = function() { /// Runtime class gets implemented by each upload runtime. } plupload.Runtime.init = function(uploader, callback) { /// Initializes the upload runtime. /// Uploader instance that needs to be initialized. /// Callback function to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. } plupload.QueueProgress = function() { /// Runtime class gets implemented by each upload runtime. /// Total queue file size. /// Total bytes uploaded. /// Number of files uploaded. /// Number of files failed to upload. /// Number of files yet to be uploaded. /// Total percent of the uploaded bytes. /// Bytes uploaded per second. } plupload.QueueProgress.prototype.reset = function() { /// Resets the progress to it's initial values. } // Namespaces plupload.STOPPED = new Object(); plupload.STARTED = new Object(); plupload.QUEUED = new Object(); plupload.UPLOADING = new Object(); plupload.FAILED = new Object(); plupload.DONE = new Object(); plupload.GENERIC_ERROR = new Object(); plupload.HTTP_ERROR = new Object(); plupload.IO_ERROR = new Object(); plupload.SECURITY_ERROR = new Object(); plupload.INIT_ERROR = new Object(); plupload.FILE_SIZE_ERROR = new Object(); plupload.FILE_EXTENSION_ERROR = new Object(); plupload.mimeTypes = new Object(); plupload.extend = function(target, obj) { /// Extends the specified object with another object. /// Object to extend. /// Multiple objects to extend with. /// Same as target, the extended object. } plupload.cleanName = function(s) { /// Cleans the specified name from national characters (diacritics). /// String to clean up. /// Cleaned string. } plupload.addRuntime = function(name, obj) { /// Adds a specific upload runtime like for example flash or gears. /// Runtime name for example flash. /// Object containing init/destroy method. } plupload.guid = function() { /// Generates an unique ID. /// Virtually unique id. } plupload.formatSize = function(size) { /// Formats the specified number as a size string for example 1024 becomes 1 KB. /// Size to format as string. /// Formatted size string. } plupload.getPos = function(node, root) { /// Returns the absolute x, y position of an Element. /// HTML element or element id to get x, y position from. /// Optional root element to stop calculations at. /// Absolute position of the specified element object with x, y fields. } plupload.parseSize = function(size) { /// Parses the specified size string into a byte value. /// String to parse or number to just pass through. /// Size in bytes. } plupload.xmlEncode = function(s) { /// Encodes the specified string. /// String to encode. /// Encoded string. } plupload.toArray = function(obj) { /// Forces anything into an array. /// Object with length field. /// Array object containing all items. } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/custom.html ================================================ Plupload - Custom example

                        Custom example

                        Shows you how to use the core plupload API.

                        No runtime found.

                        [Select files] [Upload files]
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/dump.php ================================================ Plupload - Form dump

                        Post dump

                        Shows the form items posted.

                        $value) { ?>
                        Name Value
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/jquery/events.html ================================================ Plupload - Events example

                        Events example

                        Shows how to bind and use all available events.

                        Log messages

                        Queue widget

                        You browser doesn't support upload.
                        Clear queue
                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/jquery/jquery_ui_widget.html ================================================ Plupload - jQuery UI Widget

                        jQuery UI Widget

                        You can see this example with different themes on the www.plupload.com website.

                        You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.

                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/jquery/queue_widget.html ================================================ Plupload - Queue widget example

                        Queue widget example

                        Shows the jQuery Plupload Queue widget and under different runtimes.

                        Flash runtime

                        You browser doesn't have Flash installed.

                        Gears runtime

                        You browser doesn't have Gears installed.

                        Silverlight runtime

                        You browser doesn't have Silverlight installed.

                        HTML 5 runtime

                        You browser doesn't support native upload. Try Firefox 3 or Safari 4.

                        BrowserPlus runtime

                        You browser doesn't have BrowserPlus installed.

                        HTML 4 runtime

                        You browser doesn't have HTML 4 support.

                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/jquery/s3.php ================================================ In our tests SilverLight didn't require anything special and worked with this configuration just fine. It may fail back to the same crossdomain.xml as last resort. !!!Important!!! Plupload UI Widget here, is used only for demo purposes and is not required for uploading to S3. */ // important variables that will be used throughout this example $bucket = 'BUCKET'; // these can be found on your Account page, under Security Credentials > Access Keys $accessKeyId = 'ACCESS_KEY_ID'; $secret = 'SECRET_ACCESS_KEY'; // hash_hmac — Generate a keyed hash value using the HMAC method // (PHP 5 >= 5.1.2, PECL hash >= 1.1) if (!function_exists('hash_hmac')) : // based on: http://www.php.net/manual/en/function.sha1.php#39492 function hash_hmac($algo, $data, $key, $raw_output = false) { $blocksize = 64; if (strlen($key) > $blocksize) $key = pack('H*', $algo($key)); $key = str_pad($key, $blocksize, chr(0x00)); $ipad = str_repeat(chr(0x36), $blocksize); $opad = str_repeat(chr(0x5c), $blocksize); $hmac = pack('H*', $algo(($key^$opad) . pack('H*', $algo(($key^$ipad) . $data)))); return $raw_output ? $hmac : bin2hex($hmac); } endif; // prepare policy $policy = base64_encode(json_encode(array( // ISO 8601 - date('c'); generates uncompatible date, so better do it manually 'expiration' => date('Y-m-d\TH:i:s.000\Z', strtotime('+1 day')), 'conditions' => array( array('bucket' => $bucket), array('acl' => 'public-read'), array('starts-with', '$key', ''), // for demo purposes we are accepting only images array('starts-with', '$Content-Type', 'image/'), // "Some versions of the Adobe Flash Player do not properly handle HTTP responses that have an empty body. // To configure POST to return a response that does not have an empty body, set success_action_status to 201. // When set, Amazon S3 returns an XML document with a 201 status code." // http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTFlash.html array('success_action_status' => '201'), // Plupload internally adds name field, so we need to mention it here array('starts-with', '$name', ''), // One more field to take into account: Filename - gets silently sent by FileReference.upload() in Flash // http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTFlash.html array('starts-with', '$Filename', ''), ) ))); // sign policy $signature = base64_encode(hash_hmac('sha1', $policy, $secret, true)); ?> Plupload to Amazon S3 Example

                        Plupload to Amazon S3 Example

                        You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.

                        ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/examples/upload.php ================================================ ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/cs.js ================================================ // .po file like language pack plupload.addI18n({ 'Select files' : 'Vyberte soubory', 'Add files to the upload queue and click the start button.' : 'Přidejte soubory do fronty a pak spusťte nahrávání.', 'Filename' : 'Název souboru', 'Status' : 'Status', 'Size' : 'Velikost', 'Add Files' : 'Přidat soubory', 'Stop current upload' : 'Zastavit nahrávání', 'Start uploading queue' : 'Spustit frontu nahrávání', 'Drag files here.' : 'Sem přetáhněte soubory.', 'Start Upload': 'Spustit nahrávání', 'Uploaded %d/%d files': 'Nahráno %d/%d souborů' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/da.js ================================================ // .po file like language pack plupload.addI18n({ 'Select files' : 'Vælg filer', 'Add files to the upload queue and click the start button.' : 'Tilføj filer til køen, og tryk på start.', 'Filename' : 'Filnavn', 'Status' : 'Status', 'Size' : 'Størrelse', 'Add files' : 'Tilføj filer', 'Stop current upload' : 'Stop upload', 'Start uploading queue' : 'Start upload', 'Drag files here.' : 'Træk filer her.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/de.js ================================================ // German plupload.addI18n({ 'Select files' : 'Dateien hochladen', 'Add files to the upload queue and click the start button.' : 'Dateien hinzufügen und auf \'Hochladen\' klicken.', 'Filename' : 'Dateiname', 'Status' : 'Status', 'Size' : 'Größe', 'Add files' : 'Dateien', // hinzufügen', 'Stop current upload' : 'Aktuelles Hochladen stoppen', 'Start uploading queue' : 'Hochladen starten', 'Uploaded %d/%d files': '%d/%d Dateien sind hochgeladen', 'N/A' : 'Nicht verfügbar', 'Drag files here.' : 'Ziehen Sie die Dateien hier hin', 'File extension error.': 'Fehler bei Dateiendung', 'File size error.': 'Fehler bei Dateigröße', 'Init error.': 'Initialisierungsfehler', 'HTTP Error.': 'HTTP-Fehler', 'Security error.': 'Sicherheitsfehler', 'Generic error.': 'Typischer Fehler', 'IO error.': 'Ein/Ausgabe-Fehler', 'Stop Upload': 'Hochladen stoppen', 'Start upload': 'Hochladen', '%d files queued': '%d Dateien in der Warteschlange' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/el.js ================================================ // Greek plupload.addI18n({ 'Select files' : 'Επιλέξτε Αρχεία', 'Add files to the upload queue and click the start button.' : 'Προσθήκη αρχείων στην ουρά μεταφόρτωσης', 'Filename' : 'Όνομα αρχείου', 'Status' : 'Κατάσταση', 'Size' : 'Μέγεθος', 'Add Files' : 'Προσθέστε αρχεία', 'Stop current upload' : 'Διακοπή τρέχουσας μεταφόρτωσης', 'Start uploading queue' : 'Εκκίνηση μεταφόρτωσης ουράς αρχείων', 'Drag files here.' : 'Σύρετε αρχεία εδώ', 'Start Upload': 'Εκκίνηση μεταφόρτωσης', 'Uploaded %d/%d files': 'Ανέβηκαν %d/%d αρχεία' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/es.js ================================================ // Spanish plupload.addI18n({ 'Select files' : 'Elija archivos:', 'Add files to the upload queue and click the start button.' : 'Agregue archivos a la cola de subida y haga click en el boton de iniciar.', 'Filename' : 'Nombre de archivo', 'Status' : 'Estado', 'Size' : 'Tamaño', 'Add files' : 'Agregue archivos', 'Stop current upload' : 'Detener subida actual', 'Start uploading queue' : 'Iniciar subida de cola', 'Uploaded %d/%d files': 'Subidos %d/%d archivos', 'N/A' : 'No disponible', 'Drag files here.' : 'Arrastre archivos aquí', 'File extension error.': 'Error de extensión de archivo.', 'File size error.': 'Error de tamaño de archivo.', 'Init error.': 'Error de inicialización.', 'HTTP Error.': 'Error de HTTP.', 'Security error.': 'Error de seguridad.', 'Generic error.': 'Error genérico.', 'IO error.': 'Error de entrada/salida.', 'Stop Upload': 'Detener Subida.', 'Add Files': 'Agregar Archivos', 'Start Upload': 'Comenzar Subida.', '%d files queued': '%d archivos en cola.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/et.js ================================================ // Estonian translation, et.js plupload.addI18n({ 'Select files' : 'Vali faile', 'Add files to the upload queue and click the start button.' : 'Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.', 'Filename' : 'Failinimi', 'Status' : 'Olek', 'Size' : 'Suurus', 'Add files' : 'Lisa faile', 'Stop current upload' : 'Praeguse üleslaadimise peatamine', 'Start uploading queue' : 'Järjekorras ootavate failide üleslaadimise alustamine', 'Drag files here.' : 'Lohista failid siia.', 'Start upload' : 'Alusta üleslaadimist', 'Uploaded %d/%d files': 'Üles laaditud %d/%d', 'Stop upload': 'Peata üleslaadimine', 'Start upload': 'Alusta üleslaadimist', '%d files queued': 'Järjekorras on %d faili', 'File: %s': 'Fail: %s', 'Close': 'Sulge', 'Using runtime: ': 'Kasutatakse varianti: ', 'File: %f, size: %s, max file size: %m': 'Fail: %f, suurus: %s, suurim failisuurus: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.', 'Upload URL might be wrong or doesn\'t exist': 'Üleslaadimise URL võib olla vale või seda pole', 'Error: File too large: ': 'Viga: fail on liiga suur: ', 'Error: Invalid file extension: ': 'Viga: sobimatu faililaiend: ', 'File extension error.': 'Faililaiendi viga.', 'File size error.': 'Failisuuruse viga.', 'File count error.': 'Failide arvu viga.', 'Init error.': 'Lähtestamise viga.', 'HTTP Error.': 'HTTP ühenduse viga.', 'Security error.': 'Turvaviga.', 'Generic error.': 'Üldine viga.', 'IO error.': 'S/V (I/O) viga.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/fa.js ================================================ // Persian plupload.addI18n({ 'Select files' : 'انتخاب فایل', 'Add files to the upload queue and click the start button.' : 'اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.', 'Filename' : 'نام فایل', 'Status' : 'وضعیت', 'Size' : 'سایز', 'Add Files' : 'افزودن فایل', 'Stop Upload' : 'توقف انتقال', 'Start Upload' : 'شروع انتقال', 'Add files' : 'افزودن فایل', 'Add files.' : 'افزودن فایل', 'Stop current upload' : 'توقف انتقال جاری', 'Start uploading queue' : 'شروع صف انتقال', 'Stop upload' : 'توقف انتقال', 'Start upload' : 'شروع انتقال', 'Uploaded %d/%d files': 'منتقل شد %d/%d از فایلها', 'N/A' : 'N/A', 'Drag files here.' : 'بکشید فایل ها رو به اینجا', 'File extension error.': 'خطا پیشوند فایل', 'File size error.': 'خطای سایز فایل', 'File count error.': 'خطای تعداد فایل', 'Init error.': 'خطا در استارت اسکریپت', 'HTTP Error.': 'HTTP خطای', 'Security error.': 'خطای امنیتی', 'Generic error.': 'خطای عمومی', 'IO error.': 'IO خطای', 'File: %s': ' فایل ها : %s', 'Close': 'بستن', '%d files queued': '%d فایل در صف', 'Using runtime: ': 'استفاده میکنید از : ', 'File: %f, size: %s, max file size: %m': فایل: %f, سایز: %s, بزرگترین سایز فایل: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'عنصر بارگذار فقط %d فایل رو در یک زمان می پذیرد. سایر فایل ها مجرد از این موضوع هستند.', 'Upload URL might be wrong or doesn\'t exist': 'آدرس آپلود اشتباه می باشد یا وجود ندارد', 'Error: File too large: ': 'خطا: فایل حجیم است :: ', 'Error: Invalid file extension: ': 'خطا پسوند فایل معتبر نمی باشد : ' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/fi.js ================================================ // .fi file like language pack plupload.addI18n({ 'Select files' : 'Valitse tiedostoja', 'Add files to the upload queue and click the start button.' : 'Lisää tiedostoja latausjonoon ja klikkaa aloita-nappia.', 'Filename' : 'Tiedostonimi', 'Status' : 'Tila', 'Size' : 'Koko', 'Add files' : 'Lisää tiedostoja', 'Stop current upload' : 'Pysäytä nykyinen lataus', 'Start uploading queue' : 'Aloita jonon lataus', 'Drag files here.' : 'Raahaa tiedostot tänne.', 'Start upload' : 'Aloita lataus', 'Uploaded %d/%d files': 'Ladattu %d/%d tiedostoa', 'Stop upload': 'Pysäytä lataus', 'Start upload': 'Aloita lataus', '%d files queued': '%d tiedostoa jonossa', 'File: %s': 'Tiedosto: %s', 'Close': 'Sulje', 'Using runtime: ': 'Käytetään ajonaikaista: ', 'File: %f, size: %s, max file size: %m': 'Tiedosto: %f, koko: %s, maksimi tiedostokoko: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Latauselementti sallii ladata vain %d tiedosto(a) kerrallaan. Ylimääräiset tiedostot ohitettiin.', 'Upload URL might be wrong or doesn\'t exist': 'Lataus URL saattaa olla väärin tai ei ole olemassa', 'Error: File too large: ': 'Virhe: Tiedosto liian suuri: ', 'Error: Invalid file extension: ': 'Virhe: Kelpaamaton tiedostopääte: ', 'File extension error.': 'Tiedostopäätevirhe.', 'File size error.': 'Tiedostokokovirhe.', 'File count error.': 'Tiedostolaskentavirhe.', 'Init error.': 'Init virhe.', 'HTTP Error.': 'HTTP virhe.', 'Security error.': 'Tietoturvavirhe.', 'Generic error.': 'Yleinen virhe.', 'IO error.': 'I/O virhe.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/fr-ca.js ================================================ // French-Canadian plupload.addI18n({ 'Select files' : 'Sélectionnez les fichiers', 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file d\'attente et appuyez sur le bouton démarrer.', 'Filename' : 'Nom du fichier', 'Status' : 'Statut', 'Size' : 'Taille', 'Add files' : 'Ajouter Fichiers', 'Stop current upload' : 'Arrêter le téléversement actuel', 'Start uploading queue' : 'Démarrer le téléversement', 'Uploaded %d/%d files': '%d/%d fichiers envoyés', 'N/A' : 'Non applicable', 'Drag files here.' : 'Glisser-déposer les fichiers ici', 'File extension error.': 'Erreur d\'extension de fichier', 'File size error.': 'Erreur de taille de fichier', 'Init error.': 'Erreur d\'initialisation', 'HTTP Error.': 'Erreur HTTP', 'Security error.': 'Erreur de sécurité', 'Generic error.': 'Erreur commune', 'IO error.': 'Erreur E/S', 'Stop Upload': 'Arrêter le téléversement', 'Add Files': 'Ajouter des fichiers', 'Start upload': 'Démarrer le téléversement', '%d files queued': '%d fichiers en attente', 'File: %s':'Fichier: %s', 'Close':'Fermer', 'Using runtime:':'Moteur logiciel:', 'File: %f, size: %s, max file size: %m':'Fichier: %f, poids: %s, poids maximal: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.':'La file accepte %d fichier(s) à la fois. Les fichiers en trop sont ignorés', 'Upload URL might be wrong or doesn\'t exist':'L\'URL de téléversement est erroné ou inexistant', 'Error: File to large: ':'Fichier trop volumineux: ', 'Error: Invalid file extension: ':'Extension de fichier invalide: ', 'File size error.':'Erreur de taile de fichier', 'File count error.':'Erreur de décompte des fichiers' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/fr.js ================================================ // French plupload.addI18n({ 'Select files' : 'Sélectionnez les fichiers', 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file et appuyez sur le bouton démarrer.', 'Filename' : 'Nom de fichier', 'Status' : 'Status', 'Size' : 'Taille', 'Add files' : 'Ajouter Fichiers', 'Stop current upload' : 'Arrêter l\'envoi en cours', 'Start uploading queue' : 'Démarrer l\'envoi', 'Uploaded %d/%d files': '%d/%d fichiers envoyés', 'N/A' : 'Non applicable', 'Drag files here.' : 'Déposer les fichiers ici.', 'File extension error.': 'Erreur extension fichier', 'File size error.': 'Erreur taille fichier.', 'Init error.': 'Erreur d\'initialisation.', 'HTTP Error.': 'Erreur HTTP.', 'Security error.': 'Erreur de sécurité.', 'Generic error.': 'Erreur générique.', 'IO error.': 'Erreur E/S.', 'Stop Upload': 'Arrêter les envois.', 'Add Files': 'Ajouter des fichiers', 'Start Upload': 'Démarrer les envois.', '%d files queued': '%d fichiers en attente.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/hr.js ================================================ // Croatian plupload.addI18n({ 'Select files': 'Izaberite datoteke:', 'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.', 'Filename': 'Ime datoteke', 'Status': 'Status', 'Size': 'Veličina', 'Add files': 'Dodajte datoteke', 'Stop current upload': 'Zaustavi trenutan upload', 'Start uploading queue': 'Pokreni Upload', 'Uploaded %d/%d files': 'Uploadano %d/%d datoteka', 'N/A': 'N/A', 'Drag files here.': 'Dovucite datoteke ovdje', 'File extension error.': 'Greška ekstenzije datoteke.', 'File size error.': 'Greška veličine datoteke.', 'Init error.': 'Greška inicijalizacije.', 'HTTP Error.': 'HTTP greška.', 'Security error.': 'Sigurnosna greška.', 'Generic error.': 'Generička greška.', 'IO error.': 'I/O greška.', 'Stop Upload': 'Zaustavi upload.', 'Add Files': 'Dodaj datoteke', 'Start Upload': 'Pokreni upload.', '%d files queued': '%d datoteka na čekanju.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/hu.js ================================================ // Hungarian plupload.addI18n({ 'Select files' : 'Fájlok kiválasztása', 'Add files to the upload queue and click the start button.' : 'Válaszd ki a fájlokat, majd kattints az Indítás gombra.', 'Filename' : 'Fájlnév', 'Status' : 'Állapot', 'Size' : 'Méret', 'Add files' : 'Hozzáadás', 'Stop current upload' : 'Jelenlegi feltöltés megszakítása', 'Start uploading queue' : 'Várakozási sor feltöltésének indítása', 'Uploaded %d/%d files': 'Feltöltött fájlok: %d/%d', 'N/A': 'Nem elérhető', 'Drag files here.' : 'Húzd ide a fájlokat.', 'Stop upload': 'Feltöltés megszakítása', 'Start upload': 'Indítás', '%d files queued': '%d fájl sorbaállítva', 'File: %s': 'Fájl: %s', 'Close': 'Bezárás', 'Using runtime: ': 'Használt runtime: ', 'File: %f, size: %s, max file size: %m': 'Fájl: %f, méret: %s, maximális fájlméret: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.', 'Upload URL might be wrong or doesn\'t exist': 'A megadott URL hibás vagy nem létezik', 'Error: File too large: ': 'Hiba: A fájl túl nagy: ', 'Error: Invalid file extension: ': 'Hiba: Érvénytelen fájlkiterjesztés: ', 'File extension error.': 'Hibás fájlkiterjesztés.', 'File size error.': 'Hibás fájlméret.', 'File count error.': 'A fájlok számával kapcsolatos hiba.', 'Init error.': 'Init hiba.', 'HTTP Error.': 'HTTP hiba.', 'Security error.': 'Biztonsági hiba.', 'Generic error.': 'Általános hiba.', 'IO error.': 'I/O hiba.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/it.js ================================================ // Italian plupload.addI18n({ 'Select files' : 'Seleziona i files', 'Add files to the upload queue and click the start button.' : 'Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.', 'Filename' : 'Nome file', 'Status' : 'Stato', 'Size' : 'Dimensione', 'Add Files' : 'Aggiungi file', 'Stop current upload' : 'Interrompi il caricamento', 'Start uploading queue' : 'Avvia il caricamento', 'Uploaded %d/%d files': 'Caricati %d/%d file', 'N/A' : 'N/D', 'Drag files here.' : 'Trascina i file qui.', 'File extension error.': 'Errore estensione file.', 'File size error.': 'Errore dimensione file.', 'Init error.': 'Errore inizializzazione.', 'HTTP Error.': 'Errore HTTP.', 'Security error.': 'Errore sicurezza.', 'Generic error.': 'Errore generico.', 'IO error.': 'Errore IO.', 'Stop Upload': 'Ferma Upload', 'Start Upload': 'Inizia Upload', '%d files queued': '%d file in lista' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/ja.js ================================================ // Japanese plupload.addI18n({ 'Select files' : 'ファイル選択', 'Add files to the upload queue and click the start button.' : 'ファイルをアップロードキューに追加してスタートボタンをクリックしてください', 'Filename' : 'ファイル名', 'Status' : 'ステータス', 'Size' : 'サイズ', 'Add Files' : 'ファイルを追加', 'Stop Upload' : 'アップロード停止', 'Start Upload' : 'アップロード', 'Add files' : 'ファイルを追加', 'Add files.' : 'ファイルを追加', 'Stop current upload' : '現在のアップロードを停止', 'Start uploading queue' : 'アップロード', 'Stop upload' : 'アップロード停止', 'Start upload' : 'アップロード', 'Uploaded %d/%d files': 'アップロード中 %d/%d ファイル', 'N/A' : 'N/A', 'Drag files here.' : 'ここにファイルをドラッグ', 'File extension error.': 'ファイル拡張子エラー', 'File size error.': 'ファイルサイズエラー', 'File count error.': 'ファイル数エラー', 'Init error.': 'イニシャライズエラー', 'HTTP Error.': 'HTTP エラー', 'Security error.': 'セキュリティエラー', 'Generic error.': 'エラー', 'IO error.': 'IO エラー', 'File: %s': 'ファイル: %s', 'Close': '閉じる', '%d files queued': '%d ファイルが追加されました', 'Using runtime: ': 'モード: ', 'File: %f, size: %s, max file size: %m': 'ファイル: %f, サイズ: %s, 最大ファイルサイズ: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'アップロード可能なファイル数は %d です。余分なファイルは削除されました', 'Upload URL might be wrong or doesn\'t exist': 'アップロード先の URL が存在しません', 'Error: File too large: ': 'エラー: サイズが大きすぎます: ', 'Error: Invalid file extension: ': 'エラー: 拡張子が許可されていません: ' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/ko.js ================================================ // Republic of Korea plupload.addI18n({ 'Select files' : '파일 선택', 'Add files to the upload queue and click the start button.' : '파일을 업로드 큐에 추가하여 시작 버튼을 클릭하십시오.', 'Filename' : '파일 이름', 'Status' : '상태', 'Size' : '크기', 'Add Files' : '파일 추가', 'Stop Upload': '업로드 중지', 'Start Upload': '업로드', 'Add files': '파일 추가', 'Stop current upload': '현재 업로드를 정지', 'Start uploading queue': '업로드', 'Stop upload': '업로드 중지', 'Start upload': '업로드', 'Uploaded % d / % d files': '업로드 중 % d / % d 파일', 'N / A': 'N / A', 'Drag files here': '여기에 파일을 드래그', 'File extension error': '파일 확장자 오류', 'File size error': '파일 크기 오류', 'File count error': '이미지 : 오류', 'Init error': '초기화 오류', 'HTTP Error': 'HTTP 오류', 'Security error': '보안 오류', 'Generic error': '오류', 'IO error': 'IO 오류', 'File : % s': '파일 % s', 'Close': '닫기', '% d files queued': '% d 파일이 추가되었습니다', 'Using runtime :': '모드', 'File : % f, size : % s, max file size : % m': '파일 : % f, 크기 : % s, 최대 파일 크기 : % m', 'Upload element accepts only % d file (s) at a time. Extra files were stripped': '업로드 가능한 파일의 수는 % d입니다. 불필요한 파일은 삭제되었습니다 ', 'Upload URL might be wrong or doesn \'t exist ':'업로드할 URL이 존재하지 않습니다 ', 'Error : File too large :': '오류 : 크기가 너무 큽니다', 'Error : Invalid file extension :': '오류 : 확장자가 허용되지 않습니다 :' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/lv.js ================================================ // .lv file like language pack plupload.addI18n({ 'Select files' : 'Izvēlieties failus', 'Add files to the upload queue and click the start button.' : 'Pieveinojiet failus rindai un klikšķiniet uz "Sākt augšupielādi" pogas.', 'Filename' : 'Faila nosaukums', 'Status' : 'Statuss', 'Size' : 'Izmērs', 'Add files' : 'Pievienot failus', 'Stop current upload' : 'Apturēt pašreizējo augšupielādi', 'Start uploading queue' : 'Sākt augšupielādi', 'Drag files here.' : 'Ievelciet failus šeit', 'Start upload' : 'Sākt augšupielādi', 'Uploaded %d/%d files': 'Augšupielādēti %d/%d faili', 'Stop upload': 'Pārtraukt augšupielādi', 'Start upload': 'Sākt augšupielādi', '%d files queued': '%d faili pievienoti rindai', 'File: %s': 'Fails: %s', 'Close': 'Aizvērt', 'Using runtime: ': 'Lieto saskarni: ', 'File: %f, size: %s, max file size: %m': 'Fails: %f, izmērs: %s, maksimālais faila izmērs: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti', 'Upload URL might be wrong or doesn\'t exist': 'Augšupielādes URL varētu būt nepareizs vai neeksistē', 'Error: File too large: ': 'Kļūda: Fails pārāk liels: ', 'Error: Invalid file extension: ': 'Kļūda: Nekorekts faila paplašinājums:', 'File extension error.': 'Faila paplašinājuma kļūda.', 'File size error.': 'Faila izmēra kļūda.', 'File count error.': 'Failu skaita kļūda', 'Init error.': 'Inicializācijas kļūda.', 'HTTP Error.': 'HTTP kļūda.', 'Security error.': 'Drošības kļūda.', 'Generic error.': 'Vispārēja rakstura kļūda.', 'IO error.': 'Ievades/Izvades kļūda.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/nl.js ================================================ // Dutch plupload.addI18n({ 'Select files' : 'Selecteer bestand(en):', 'Add files to the upload queue and click the start button.' : 'Voeg bestanden toe aan de wachtrij en druk op \'Start\'.', 'Filename' : 'Bestandsnaam', 'Status' : 'Status', 'Size' : 'Grootte', 'Add files' : 'Voeg bestanden toe', 'Stop current upload' : 'Stop upload', 'Start uploading queue' : 'Start upload', 'Uploaded %d/%d files': '%d/%d bestanden ge-upload', 'N/A' : 'Niet beschikbaar', 'Drag files here.' : 'Sleep bestanden hierheen.', 'File extension error.': 'Ongeldig bestandstype.', 'File size error.': 'Bestandsgrootte Error.', 'Init error.': 'Initialisatie error.', 'HTTP Error.': 'HTTP Error.', 'Security error.': 'Beveiliging error.', 'Generic error.': 'Onbekende error.', 'IO error.': 'IO error.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/pl.js ================================================ plupload.addI18n({ 'Select files' : 'Wybierz pliki:', 'Add files to the upload queue and click the start button.' : 'Dodaj pliki i kliknij \'Rozpocznij transfer\'.', 'Filename' : 'Nazwa pliku', 'Status' : 'Status', 'Size' : 'Rozmiar', 'Add files' : 'Dodaj pliki', 'Stop current upload' : 'Przerwij aktualny transfer', 'Start uploading queue' : 'Rozpocznij wysyłanie', 'Uploaded %d/%d files': 'Wysłano %d/%d plików', 'N/A' : 'Nie dostępne', 'Drag files here.' : 'Przeciągnij tu pliki', 'File extension error.': 'Nieobsługiwany format pliku.', 'File size error.': 'Plik jest zbyt duży.', 'Init error.': 'Błąd inicjalizacji.', 'HTTP Error.': 'Błąd HTTP.', 'Security error.': 'Błąd bezpieczeństwa.', 'Generic error.': 'Błąd ogólny.', 'IO error.': 'Błąd IO.', 'Stop Upload': 'Przerwij transfer.', 'Add Files': 'Dodaj pliki', 'Start upload': 'Rozpocznij transfer.', '%d files queued': '%d plików w kolejce.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/pt-br.js ================================================ // Brazilian Portuguese plupload.addI18n({ 'Select files' : 'Escolha os arquivos', 'Add files to the upload queue and click the start button.' : 'Adicione os arquivos abaixo e clique no botão "Iniciar o envio".', 'Filename' : 'Nome do arquivo', 'Status' : 'Status', 'Size' : 'Tamanho', 'Add Files' : 'Adicionar arquivo(s)', 'Stop Upload' : 'Parar o envio', 'Start Upload' : 'Iniciar o envio', 'Add files' : 'Adicionar arquivo(s)', 'Add files.' : 'Adicionar arquivo(s)', 'Stop upload' : 'Parar o envio', 'Start upload' : 'Iniciar o envio', 'Uploaded %d/%d files': 'Enviado(s) %d/%d arquivo(s)', 'N/A' : 'N/D', 'Drag files here.' : 'Arraste os arquivos pra cá', 'File extension error.': 'Tipo de arquivo não permitido.', 'File size error.': 'Tamanho de arquivo não permitido.', 'File count error.': 'Erro na contagem dos arquivos', 'Init error.': 'Erro inicializando.', 'HTTP Error.': 'Erro HTTP.', 'Security error.': 'Erro de segurança.', 'Generic error.': 'Erro genérico.', 'IO error.': 'Erro de E/S.', 'File: %s': 'Arquivo: %s', 'Close': 'Fechar', '%d files queued': '%d arquivo(s)', 'Using runtime: ': 'Usando: ', 'File: %f, size: %s, max file size: %m': 'Arquivo: %f, tamanho: %s, máximo: %m', 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Só são aceitos %d arquivos por vez. O que passou disso foi descartado.', 'Upload URL might be wrong or doesn\'t exist': 'URL de envio está errada ou não existe', 'Error: File too large: ': 'Erro: Arquivo muito grande: ', 'Error: Invalid file extension: ': 'Erro: Tipo de arquivo não permitido: ' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/ro.js ================================================ // Romanian plupload.addI18n({ 'Select files' : 'Selectare fişiere', 'Add files to the upload queue and click the start button.' : 'Adaugă fişiere în lista apoi apasă butonul \'Începe încărcare\'.', 'Filename' : 'Nume fişier', 'Status' : 'Stare', 'Size' : 'Mărime', 'Add files' : 'Adăugare fişiere', 'Stop current upload' : 'Întrerupe încărcarea curentă', 'Start uploading queue' : 'Începe incărcarea', 'Uploaded %d/%d files': 'Fişiere încărcate %d/%d', 'N/A' : 'N/A', 'Drag files here.' : 'Trage aici fişierele', 'File extension error.': 'Extensie fişier eronată', 'File size error.': 'Eroare dimensiune fişier', 'Init error.': 'Eroare iniţializare', 'HTTP Error.': 'Eroare HTTP', 'Security error.': 'Eroare securitate', 'Generic error.': 'Eroare generică', 'IO error.': 'Eroare Intrare/Ieşire', 'Stop Upload': 'Oprire încărcare', 'Start upload': 'Începe încărcare', '%d files queued': '%d fişiere listate' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/ru.js ================================================ // Russian plupload.addI18n({ 'Select files' : 'Выберите файлы', 'Add files to the upload queue and click the start button.' : 'Добавьте файлы в очередь и нажмите кнопку "Загрузить файлы".', 'Filename' : 'Имя файла', 'Status' : 'Статус', 'Size' : 'Размер', 'Add files' : 'Добавить файлы', 'Stop current upload' : 'Остановить загрузку', 'Start uploading queue' : 'Загрузить файлы', 'Uploaded %d/%d files': 'Загружено %d из %d файлов', 'N/A' : 'N/D', 'Drag files here.' : 'Перетащите файлы сюда.', 'File extension error.': 'Неправильное расширение файла.', 'File size error.': 'Неправильный размер файла.', 'Init error.': 'Ошибка инициализации.', 'HTTP Error.': 'Ошибка HTTP.', 'Security error.': 'Ошибка безопасности.', 'Generic error.': 'Общая ошибка.', 'IO error.': 'Ошибка ввода-вывода.' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/sr.js ================================================ // Serbian plupload.addI18n({ 'Select files' : 'Izaberite fajlove', 'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.', 'Filename' : 'Naziv fajla', 'Status' : 'Status', 'Size' : 'Veličina', 'Add Files' : 'Dodaj fajlove', 'Stop current upload' : 'Zaustavi upload', 'Start uploading queue' : 'Počni upload', 'Drag files here.' : 'Prevucite fajlove ovde.', 'Start Upload': 'Počni upload', 'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/i18n/sv.js ================================================ // .po file like language pack plupload.addI18n({ 'Select files' : 'Välj filer', 'Add files to the upload queue and click the start button.' : 'Lägg till filer till kön och tryck på start.', 'Filename' : 'Filnamn', 'Status' : 'Status', 'Size' : 'Storlek', 'Add files' : 'Lägg till filer', 'Stop current upload' : 'Stoppa uppladdningen', 'Start uploading queue' : 'Starta uppladdningen', 'Drag files here.' : 'Dra filer hit' }); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css ================================================ /* Plupload ------------------------------------------------------------------- */ .plupload_button { display: -moz-inline-box; /* FF < 3*/ display: inline-block; font: normal 12px sans-serif; text-decoration: none; color: #42454a; border: 1px solid #bababa; padding: 2px 8px 3px 20px; margin-right: 4px; background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center; outline: 0; /* Optional rounded corners for browsers that support it */ -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .plupload_button:hover { color: #000; text-decoration: none; } .plupload_disabled, a.plupload_disabled:hover { color: #737373; border-color: #c5c5c5; background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center; cursor: default; } .plupload_add { background-position: -181px center; } .plupload_wrapper { font: normal 11px Verdana,sans-serif; width: 100%; } .plupload_container { padding: 8px; background: url('../img/transp50.png'); /*-moz-border-radius: 5px;*/ } .plupload_container input { border: 1px solid #DDD; font: normal 11px Verdana,sans-serif; width: 98%; } .plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x;} .plupload_header_content { background: url('../img/backgrounds.gif') no-repeat 0 -317px; min-height: 56px; padding-left: 60px; color: #FFF; } .plupload_header_title { font: normal 18px sans-serif; padding: 6px 0 3px; } .plupload_header_text { font: normal 12px sans-serif; } .plupload_filelist { margin: 0; padding: 0; list-style: none; } .plupload_scroll .plupload_filelist { height: 185px; background: #F5F5F5; overflow-y: scroll; } .plupload_filelist li { padding: 10px 8px; background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px; border-bottom: 1px solid #DDD; } .plupload_filelist_header, .plupload_filelist_footer { background: #DFDFDF; padding: 8px 8px; color: #42454A; } .plupload_filelist_header { border-top: 1px solid #EEE; border-bottom: 1px solid #CDCDCD; } .plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} .plupload_file_name {float: left; overflow: hidden} .plupload_file_status {color: #777;} .plupload_file_status span {color: #42454A;} .plupload_file_size, .plupload_file_status, .plupload_progress { float: right; width: 80px; } .plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} .plupload_filelist .plupload_file_name {width: 205px} .plupload_file_action { float: right; width: 16px; height: 16px; margin-left: 15px; } .plupload_file_action * { display: none; width: 16px; height: 16px; } li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;} li.plupload_done {color:#AAA} li.plupload_delete a { background: url('../img/delete.gif'); } li.plupload_failed a { background: url('../img/error.gif'); cursor: default; } li.plupload_done a { background: url('../img/done.gif'); cursor: default; } .plupload_progress, .plupload_upload_status { display: none; } .plupload_progress_container { margin-top: 3px; border: 1px solid #CCC; background: #FFF; padding: 1px; } .plupload_progress_bar { width: 0px; height: 7px; background: #CDEB8B; } .plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { margin-right: 17px; } /* Floats */ .plupload_clear,.plupload_clearer {clear: both;} .plupload_clearer, .plupload_progress_bar { display: block; font-size: 0; line-height: 0; } li.plupload_droptext { background: transparent; text-align: center; vertical-align: middle; border: 0; line-height: 165px; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js ================================================ (function(c){var d={};function a(e){return plupload.translate(e)||e}function b(f,e){e.contents().each(function(g,h){h=c(h);if(!h.is(".plupload")){h.remove()}});e.prepend('
                        '+a("Select files")+'
                        '+a("Add files to the upload queue and click the start button.")+'
                        '+a("Filename")+'
                         
                        '+a("Status")+'
                        '+a("Size")+'
                         
                          ')}c.fn.pluploadQueue=function(e){if(e){this.each(function(){var j,i,k;i=c(this);k=i.attr("id");if(!k){k=plupload.guid();i.attr("id",k)}j=new plupload.Uploader(c.extend({dragdrop:true,container:k},e));d[k]=j;function h(l){var n;if(l.status==plupload.DONE){n="plupload_done"}if(l.status==plupload.FAILED){n="plupload_failed"}if(l.status==plupload.QUEUED){n="plupload_delete"}if(l.status==plupload.UPLOADING){n="plupload_uploading"}var m=c("#"+l.id).attr("class",n).find("a").css("display","block");if(l.hint){m.attr("title",l.hint)}}function f(){c("span.plupload_total_status",i).html(j.total.percent+"%");c("div.plupload_progress_bar",i).css("width",j.total.percent+"%");c("span.plupload_upload_status",i).text(a("Uploaded %d/%d files").replace(/%d\/%d/,j.total.uploaded+"/"+j.files.length))}function g(){var m=c("ul.plupload_filelist",i).html(""),n=0,l;c.each(j.files,function(p,o){l="";if(o.status==plupload.DONE){if(o.target_name){l+=''}l+='';l+='';n++;c("#"+k+"_count").val(n)}m.append('
                        • '+o.name+'
                          '+o.percent+'%
                          '+plupload.formatSize(o.size)+'
                           
                          '+l+"
                        • ");h(o);c("#"+o.id+".plupload_delete a").click(function(q){c("#"+o.id).remove();j.removeFile(o);q.preventDefault()})});c("span.plupload_total_file_size",i).html(plupload.formatSize(j.total.size));if(j.total.queued===0){c("span.plupload_add_text",i).text(a("Add files."))}else{c("span.plupload_add_text",i).text(j.total.queued+" files queued.")}c("a.plupload_start",i).toggleClass("plupload_disabled",j.files.length==(j.total.uploaded+j.total.failed));m[0].scrollTop=m[0].scrollHeight;f();if(!j.files.length&&j.features.dragdrop&&j.settings.dragdrop){c("#"+k+"_filelist").append('
                        • '+a("Drag files here.")+"
                        • ")}}j.bind("UploadFile",function(l,m){c("#"+m.id).addClass("plupload_current_file")});j.bind("Init",function(l,m){b(k,i);if(!e.unique_names&&e.rename){c("#"+k+"_filelist div.plupload_file_name span",i).live("click",function(s){var q=c(s.target),o,r,n,p="";o=l.getFile(q.parents("li")[0].id);n=o.name;r=/^(.+)(\.[^.]+)$/.exec(n);if(r){n=r[1];p=r[2]}q.hide().after('');q.next().val(n).focus().blur(function(){q.show().next().remove()}).keydown(function(u){var t=c(this);if(u.keyCode==13){u.preventDefault();o.name=t.val()+p;q.text(o.name);t.blur()}})})}c("a.plupload_add",i).attr("id",k+"_browse");l.settings.browse_button=k+"_browse";if(l.features.dragdrop&&l.settings.dragdrop){l.settings.drop_element=k+"_filelist";c("#"+k+"_filelist").append('
                        • '+a("Drag files here.")+"
                        • ")}c("#"+k+"_container").attr("title","Using runtime: "+m.runtime);c("a.plupload_start",i).click(function(n){if(!c(this).hasClass("plupload_disabled")){j.start()}n.preventDefault()});c("a.plupload_stop",i).click(function(n){n.preventDefault();j.stop()});c("a.plupload_start",i).addClass("plupload_disabled")});j.init();j.bind("Error",function(l,o){var m=o.file,n;if(m){n=o.message;if(o.details){n+=" ("+o.details+")"}if(o.code==plupload.FILE_SIZE_ERROR){alert(a("Error: File too large: ")+m.name)}if(o.code==plupload.FILE_EXTENSION_ERROR){alert(a("Error: Invalid file extension: ")+m.name)}m.hint=n;c("#"+m.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",n)}});j.bind("StateChanged",function(){if(j.state===plupload.STARTED){c("li.plupload_delete a,div.plupload_buttons",i).hide();c("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",i).css("display","block");c("span.plupload_upload_status",i).text("Uploaded "+j.total.uploaded+"/"+j.files.length+" files");if(e.multiple_queues){c("span.plupload_total_status,span.plupload_total_file_size",i).show()}}else{g();c("a.plupload_stop,div.plupload_progress",i).hide();c("a.plupload_delete",i).css("display","block")}});j.bind("QueueChanged",g);j.bind("FileUploaded",function(l,m){h(m)});j.bind("UploadProgress",function(l,m){c("#"+m.id+" div.plupload_file_status",i).html(m.percent+"%");h(m);f();if(e.multiple_queues&&j.total.uploaded+j.total.failed==j.files.length){c(".plupload_buttons,.plupload_upload_status",i).css("display","inline");c(".plupload_start",i).addClass("plupload_disabled");c("span.plupload_total_status,span.plupload_total_file_size",i).hide()}});if(e.setup){e.setup(j)}});return this}else{return d[c(this[0]).attr("id")]}}})(jQuery); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css ================================================ /* Plupload ------------------------------------------------------------------- */ .plupload_button {cursor: pointer;} .plupload_wrapper { font: normal 11px Verdana,sans-serif; width: 100%; } .plupload .plupload_container input {width: 98%;} .plupload .plupload_filelist_footer {border-width: 1px 0 0 0} .plupload .plupload_filelist_header {border-width: 0 0 1px 0} div.plupload .plupload_file {border-width: 0 0 1px 0} div.plupload div.plupload_header {border-width: 0 0 1px 0; position: relative;} .plupload_file .ui-icon { cursor:pointer; } .plupload_header_content { background-image: url('../img/plupload.png'); background-repeat: no-repeat; background-position: 8px center; min-height: 56px; padding-left: 60px; position:relative; } .plupload_header_content_bw {background-image: url('../img/plupload-bw.png');} .plupload_header_title { font: normal 18px sans-serif; padding: 6px 0 3px; } .plupload_header_text {font: normal 12px sans-serif;} .plupload_filelist, .plupload_filelist_content { border-collapse: collapse; margin: 0; padding: 0; width: 100%; -moz-user-select:none; -webkit-user-select:none; user-select:none; } .plupload_cell {padding: 8px 6px;} .plupload_file { border-left: none; border-right: none; } .plupload .ui-sortable-helper, .plupload .ui-sortable .plupload_file { cursor:move; } .plupload_scroll { max-height: 180px; min-height: 168px; _height: 168px; overflow-y: auto; } .plupload_file_size, .plupload_file_status {text-align: right;} .plupload_file_size, .plupload_file_status {width: 52px;} .plupload_file_action {width: 16px;} .plupload_file_name { overflow: hidden; padding-left: 10px; } .plupload_file_rename { width:95%; } .plupload_progress {width: 60px;} .plupload_progress_container {padding: 1px;} /* Floats */ .plupload_right {float: right;} .plupload_left {float: left;} .plupload_clear,.plupload_clearer {clear: both;} .plupload_clearer, .plupload_progress_bar { display: block; font-size: 0; line-height: 0; } .plupload_clearer {height: 0;} /* Misc */ .plupload_hidden {display: none;} .plupload_droptext { background: transparent; text-align: center; vertical-align: middle; border: 0; line-height: 165px; } .plupload_buttons, .plupload_upload_status {float: left} .plupload_message { position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; } .plupload_message p { padding:0.7em; margin:0; } .plupload_message strong { font-weight: bold; } plupload_message i { font-style: italic; } .plupload_message p span.ui-icon { float: left; margin-right: 0.3em; } .plupload_header_content .ui-state-error, .plupload_header_content .ui-state-highlight { border:none; } .plupload_message_close { position:absolute; top:5px; right:5px; cursor:pointer; } .plupload .ui-sortable-placeholder { height:35px; } ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js ================================================ (function(f,a,c,g,e){var h={};function b(i){return c.translate(i)||i}function d(i){i.html('
                          '+b("Select files")+'
                          '+b("Add files to the upload queue and click the start button.")+'
                          '+b("Filename")+''+b("Status")+''+b("Size")+' 
                          ')}g.widget("ui.plupload",{contents_bak:"",runtime:null,options:{browse_button_hover:"ui-state-hover",browse_button_active:"ui-state-active",dragdrop:true,multiple_queues:true,buttons:{browse:true,start:true,stop:true},autostart:false,sortable:false,rename:false,max_file_count:0},FILE_COUNT_ERROR:-9001,_create:function(){var i=this,k,j;k=this.element.attr("id");if(!k){k=c.guid();this.element.attr("id",k)}this.id=k;this.contents_bak=this.element.html();d(this.element);this.container=g(".plupload_container",this.element).attr("id",k+"_container");this.filelist=g(".plupload_filelist_content",this.container).attr({id:k+"_filelist",unselectable:"on"});this.browse_button=g(".plupload_add",this.container).attr("id",k+"_browse");this.start_button=g(".plupload_start",this.container).attr("id",k+"_start");this.stop_button=g(".plupload_stop",this.container).attr("id",k+"_stop");if(g.ui.button){this.browse_button.button({icons:{primary:"ui-icon-circle-plus"}});this.start_button.button({icons:{primary:"ui-icon-circle-arrow-e"},disabled:true});this.stop_button.button({icons:{primary:"ui-icon-circle-close"}})}this.progressbar=g(".plupload_progress_container",this.container);if(g.ui.progressbar){this.progressbar.progressbar()}this.counter=g(".plupload_count",this.element).attr({id:k+"_count",name:k+"_count"});j=this.uploader=h[k]=new c.Uploader(g.extend({container:k,browse_button:k+"_browse"},this.options));j.bind("Error",function(l,m){if(m.code===c.INIT_ERROR){i.destroy()}});j.bind("Init",function(l,m){if(!i.options.buttons.browse){i.browse_button.button("disable").hide();l.disableBrowse(true)}if(!i.options.buttons.start){i.start_button.button("disable").hide()}if(!i.options.buttons.stop){i.stop_button.button("disable").hide()}if(!i.options.unique_names&&i.options.rename){i._enableRenaming()}if(j.features.dragdrop&&i.options.dragdrop){i._enableDragAndDrop()}i.container.attr("title",b("Using runtime: ")+(i.runtime=m.runtime));i.start_button.click(function(n){if(!g(this).button("option","disabled")){i.start()}n.preventDefault()});i.stop_button.click(function(n){i.stop();n.preventDefault()})});if(i.options.max_file_count){j.bind("FilesAdded",function(l,n){var o=[],m=n.length;var p=l.files.length+m-i.options.max_file_count;if(p>0){o=n.splice(m-p,p);l.trigger("Error",{code:i.FILE_COUNT_ERROR,message:b("File count error."),file:o})}})}j.init();j.bind("FilesAdded",function(l,m){i._trigger("selected",null,{up:l,files:m});if(i.options.autostart){setTimeout(function(){i.start()},10)}});j.bind("FilesRemoved",function(l,m){i._trigger("removed",null,{up:l,files:m})});j.bind("QueueChanged",function(){i._updateFileList()});j.bind("StateChanged",function(){i._handleState()});j.bind("UploadFile",function(l,m){i._handleFileStatus(m)});j.bind("FileUploaded",function(l,m){i._handleFileStatus(m);i._trigger("uploaded",null,{up:l,file:m})});j.bind("UploadProgress",function(l,m){g("#"+m.id).find(".plupload_file_status").html(m.percent+"%").end().find(".plupload_file_size").html(c.formatSize(m.size));i._handleFileStatus(m);i._updateTotalProgress();i._trigger("progress",null,{up:l,file:m})});j.bind("UploadComplete",function(l,m){i._trigger("complete",null,{up:l,files:m})});j.bind("Error",function(l,p){var n=p.file,o,m;if(n){o=""+p.message+"";m=p.details;if(m){o+="
                          "+p.details+""}else{switch(p.code){case c.FILE_EXTENSION_ERROR:m=b("File: %s").replace("%s",n.name);break;case c.FILE_SIZE_ERROR:m=b("File: %f, size: %s, max file size: %m").replace(/%([fsm])/g,function(r,q){switch(q){case"f":return n.name;case"s":return n.size;case"m":return c.parseSize(i.options.max_file_size)}});break;case i.FILE_COUNT_ERROR:m=b("Upload element accepts only %d file(s) at a time. Extra files were stripped.").replace("%d",i.options.max_file_count);break;case c.IMAGE_FORMAT_ERROR:m=c.translate("Image format either wrong or not supported.");break;case c.IMAGE_MEMORY_ERROR:m=c.translate("Runtime ran out of available memory.");break;case c.IMAGE_DIMENSIONS_ERROR:m=c.translate("Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.").replace(/%([swh])/g,function(r,q){switch(q){case"s":return l.runtime;case"w":return l.features.maxWidth;case"h":return l.features.maxHeight}});break;case c.HTTP_ERROR:m=b("Upload URL might be wrong or doesn't exist");break}o+="
                          "+m+""}i.notify("error",o);i._trigger("error",null,{up:l,file:n,error:o})}})},_setOption:function(j,k){var i=this;if(j=="buttons"&&typeof(k)=="object"){k=g.extend(i.options.buttons,k);if(!k.browse){i.browse_button.button("disable").hide();up.disableBrowse(true)}else{i.browse_button.button("enable").show();up.disableBrowse(false)}if(!k.start){i.start_button.button("disable").hide()}else{i.start_button.button("enable").show()}if(!k.stop){i.stop_button.button("disable").hide()}else{i.start_button.button("enable").show()}}i.uploader.settings[j]=k},start:function(){this.uploader.start();this._trigger("start",null)},stop:function(){this.uploader.stop();this._trigger("stop",null)},getFile:function(j){var i;if(typeof j==="number"){i=this.uploader.files[j]}else{i=this.uploader.getFile(j)}return i},removeFile:function(j){var i=this.getFile(j);if(i){this.uploader.removeFile(i)}},clearQueue:function(){this.uploader.splice()},getUploader:function(){return this.uploader},refresh:function(){this.uploader.refresh()},_handleState:function(){var j=this,i=this.uploader;if(i.state===c.STARTED){g(j.start_button).button("disable");g([]).add(j.stop_button).add(".plupload_started").removeClass("plupload_hidden");g(".plupload_upload_status",j.element).text(b("Uploaded %d/%d files").replace("%d/%d",i.total.uploaded+"/"+i.files.length));g(".plupload_header_content",j.element).addClass("plupload_header_content_bw")}else{g([]).add(j.stop_button).add(".plupload_started").addClass("plupload_hidden");if(j.options.multiple_queues){g(j.start_button).button("enable");g(".plupload_header_content",j.element).removeClass("plupload_header_content_bw")}j._updateFileList()}},_handleFileStatus:function(l){var n,j;if(!g("#"+l.id).length){return}switch(l.status){case c.DONE:n="plupload_done";j="ui-icon ui-icon-circle-check";break;case c.FAILED:n="ui-state-error plupload_failed";j="ui-icon ui-icon-alert";break;case c.QUEUED:n="plupload_delete";j="ui-icon ui-icon-circle-minus";break;case c.UPLOADING:n="ui-state-highlight plupload_uploading";j="ui-icon ui-icon-circle-arrow-w";var i=g(".plupload_scroll",this.container),m=i.scrollTop(),o=i.height(),k=g("#"+l.id).position().top+g("#"+l.id).height();if(o'}i+='';i+='';l++;k.counter.val(l)}m.append(''+p.name+''+p.percent+'%'+c.formatSize(p.size)+'
                          '+i+"");k._handleFileStatus(p);g("#"+p.id+".plupload_delete .ui-icon, #"+p.id+".plupload_done .ui-icon").click(function(r){g("#"+p.id).remove();j.removeFile(p);r.preventDefault()});k._trigger("updatelist",null,m)});if(j.total.queued===0){g(".ui-button-text",k.browse_button).text(b("Add Files"))}else{g(".ui-button-text",k.browse_button).text(b("%d files queued").replace("%d",j.total.queued))}if(j.files.length===(j.total.uploaded+j.total.failed)){k.start_button.button("disable")}else{k.start_button.button("enable")}m[0].scrollTop=m[0].scrollHeight;k._updateTotalProgress();if(!j.files.length&&j.features.dragdrop&&j.settings.dragdrop){g("#"+o+"_filelist").append(''+b("Drag files here.")+"")}else{if(k.options.sortable&&g.ui.sortable){k._enableSortingList()}}},_enableRenaming:function(){var i=this;g(".plupload_delete .plupload_file_name span",this.filelist).live("click",function(o){var m=g(o.target),k,n,j,l="";k=i.uploader.getFile(m.parents("tr")[0].id);j=k.name;n=/^(.+)(\.[^.]+)$/.exec(j);if(n){j=n[1];l=n[2]}m.hide().after('');m.next().val(j).focus().blur(function(){m.show().next().remove()}).keydown(function(q){var p=g(this);if(g.inArray(q.keyCode,[13,27])!==-1){q.preventDefault();if(q.keyCode===13){k.name=p.val()+l;m.text(k.name)}p.blur()}})})},_enableDragAndDrop:function(){this.filelist.append(''+b("Drag files here.")+"");this.filelist.parent().attr("id",this.id+"_dropbox");this.uploader.settings.drop_element=this.options.drop_element=this.id+"_dropbox"},_enableSortingList:function(){var j,i=this;if(g("tbody tr",this.filelist).length<2){return}g("tbody",this.filelist).sortable({containment:"parent",items:".plupload_delete",helper:function(l,k){return k.clone(true).find("td:not(.plupload_file_name)").remove().end().css("width","100%")},stop:function(p,o){var l,n,k,m=[];g.each(g(this).sortable("toArray"),function(q,r){m[m.length]=i.uploader.getFile(r)});m.unshift(m.length);m.unshift(0);Array.prototype.splice.apply(i.uploader.files,m)}})},notify:function(j,k){var i=g('

                          '+k+"

                          ");i.addClass("ui-state-"+(j==="error"?"error":"highlight")).find("p .ui-icon").addClass("ui-icon-"+(j==="error"?"alert":"info")).end().find(".plupload_message_close").click(function(){i.remove()}).end();g(".plupload_header_content",this.container).append(i)},destroy:function(){g(".plupload_button",this.element).unbind();if(g.ui.button){g(".plupload_add, .plupload_start, .plupload_stop",this.container).button("destroy")}if(g.ui.progressbar){this.progressbar.progressbar("destroy")}if(g.ui.sortable&&this.options.sortable){g("tbody",this.filelist).sortable("destroy")}this.uploader.destroy();this.element.empty().html(this.contents_bak);this.contents_bak="";g.Widget.prototype.destroy.apply(this)}})}(window,document,plupload,jQuery)); ================================================ FILE: src/main/webapp/style/eu/theme/scripts/plugins/forms/plupload/js/plupload.browserplus.js ================================================ (function(a){a.runtimes.BrowserPlus=a.addRuntime("browserplus",{getFeatures:function(){return{dragdrop:true,jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(g,i){var e=window.BrowserPlus,h={},d=g.settings,c=d.resize;function f(n){var m,l,j=[],k,o;for(l=0;l0){r(++t,v)}else{k.status=a.DONE;n.trigger("FileUploaded",k,{response:x.value.body,status:w});if(w>=400){n.trigger("Error",{code:a.HTTP_ERROR,message:a.translate("HTTP Error."),file:k,status:w})}}}else{n.trigger("Error",{code:a.GENERIC_ERROR,message:a.translate("Generic Error."),file:k,details:x.error})}})}function q(t){k.size=t.size;if(l){e.FileAccess.chunk({file:t,chunkSize:l},function(w){if(w.success){var x=w.value,u=x.length;o=Array(u);for(var v=0;v
                      ';if(d.ua.ie){q=b.createElement("div");l.appendChild(q);q.outerHTML=p;q=null}else{l.innerHTML=p}}());function n(){return b.getElementById(m.id+"_flash")}function j(){if(h++>5000){o({success:false});return}if(g[m.id]===false){setTimeout(j,1)}}j();k=l=null;m.bind("Destroy",function(p){var q;d.removeAllEvents(b.body,p.id);delete g[p.id];delete a[p.id];q=b.getElementById(p.id+"_flash_container");if(q){i.removeChild(q)}});m.bind("Flash:Init",function(){var r={},q;try{n().setFileFilters(m.settings.filters,m.settings.multi_selection)}catch(p){o({success:false});return}if(g[m.id]){return}g[m.id]=true;m.bind("UploadFile",function(s,u){var v=s.settings,t=m.settings.resize||{};n().uploadFile(r[u.id],v.url,{name:u.target_name||u.name,mime:d.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:v.chunk_size,width:t.width,height:t.height,quality:t.quality,multipart:v.multipart,multipart_params:v.multipart_params||{},file_data_name:v.file_data_name,format:/\.(jpg|jpeg)$/i.test(u.name)?"jpg":"png",headers:v.headers,urlstream_upload:v.urlstream_upload})});m.bind("CancelUpload",function(){n().cancelUpload()});m.bind("Flash:UploadProcess",function(t,s){var u=t.getFile(r[s.id]);if(u.status!=d.FAILED){u.loaded=s.loaded;u.size=s.size;t.trigger("UploadProgress",u)}});m.bind("Flash:UploadChunkComplete",function(s,u){var v,t=s.getFile(r[u.id]);v={chunk:u.chunk,chunks:u.chunks,response:u.text};s.trigger("ChunkUploaded",t,v);if(t.status!==d.FAILED&&s.state!==d.STOPPED){n().uploadNextChunk()}if(u.chunk==u.chunks-1){t.status=d.DONE;s.trigger("FileUploaded",t,{response:u.text})}});m.bind("Flash:SelectFiles",function(s,v){var u,t,w=[],x;for(t=0;t":"gt","&":"amp",'"':"quot","'":"#39"},m=/[<>&\"\']/g,b,c=window.setTimeout,d={},e;function h(){this.returnValue=false}function k(){this.cancelBubble=true}(function(o){var p=o.split(/,/),q,s,r;for(q=0;q0){g.each(p,function(s,r){o[r]=s})}});return o},cleanName:function(o){var p,q;q=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(p=0;p0?"&":"?")+q}return p},each:function(r,s){var q,p,o;if(r){q=r.length;if(q===b){for(p in r){if(r.hasOwnProperty(p)){if(s(r[p],p)===false){return}}}}else{for(o=0;o1073741824){return Math.round(o/1073741824,1)+" GB"}if(o>1048576){return Math.round(o/1048576,1)+" MB"}if(o>1024){return Math.round(o/1024,1)+" KB"}return o+" b"},getPos:function(p,t){var u=0,s=0,w,v=document,q,r;p=p;t=t||v.body;function o(C){var A,B,z=0,D=0;if(C){B=C.getBoundingClientRect();A=v.compatMode==="CSS1Compat"?v.documentElement:v.body;z=B.left+A.scrollLeft;D=B.top+A.scrollTop}return{x:z,y:D}}if(p&&p.getBoundingClientRect&&((navigator.userAgent.indexOf("MSIE")>0)&&(v.documentMode<8))){q=o(p);r=o(t);return{x:q.x-r.x,y:q.y-r.y}}w=p;while(w&&w!=t&&w.nodeType){u+=w.offsetLeft||0;s+=w.offsetTop||0;w=w.offsetParent}w=p.parentNode;while(w&&w!=t&&w.nodeType){u-=w.scrollLeft||0;s-=w.scrollTop||0;w=w.parentNode}return{x:u,y:s}},getSize:function(o){return{w:o.offsetWidth||o.clientWidth,h:o.offsetHeight||o.clientHeight}},parseSize:function(o){var p;if(typeof(o)=="string"){o=/^([0-9]+)([mgk]?)$/.exec(o.toLowerCase().replace(/[^0-9mkg]/g,""));p=o[2];o=+o[1];if(p=="g"){o*=1073741824}if(p=="m"){o*=1048576}if(p=="k"){o*=1024}}return o},xmlEncode:function(o){return o?(""+o).replace(m,function(p){return a[p]?"&"+a[p]+";":p}):o},toArray:function(q){var p,o=[];for(p=0;p=0;p--){if(r[p].key===q||r[p].orig===u){if(t.removeEventListener){t.removeEventListener(o,r[p].func,false)}else{if(t.detachEvent){t.detachEvent("on"+o,r[p].func)}}r[p].orig=null;r[p].func=null;r.splice(p,1);if(u!==b){break}}}if(!r.length){delete d[t[e]][o]}if(g.isEmptyObj(d[t[e]])){delete d[t[e]];try{delete t[e]}catch(s){t[e]=b}}},removeAllEvents:function(p){var o=arguments[1];if(p[e]===b||!p[e]){return}g.each(d[p[e]],function(r,q){g.removeEvent(p,q,o)})}};g.Uploader=function(s){var p={},v,u=[],r,q=false;v=new g.QueueProgress();s=g.extend({chunk_size:0,multipart:true,multi_selection:true,file_data_name:"file",filters:[]},s);function t(){var x,y=0,w;if(this.state==g.STARTED){for(w=0;w0?Math.ceil(v.uploaded/u.length*100):0}else{v.bytesPerSec=Math.ceil(v.loaded/((+new Date()-r||1)/1000));v.percent=v.size>0?Math.ceil(v.loaded/v.size*100):0}}g.extend(this,{state:g.STOPPED,runtime:"",features:{},files:u,settings:s,total:v,id:g.guid(),init:function(){var B=this,C,y,x,A=0,z;if(typeof(s.preinit)=="function"){s.preinit(B)}else{g.each(s.preinit,function(E,D){B.bind(D,E)})}s.page_url=s.page_url||document.location.pathname.replace(/\/[^\/]+$/g,"/");if(!/^(\w+:\/\/|\/)/.test(s.url)){s.url=s.page_url+s.url}s.chunk_size=g.parseSize(s.chunk_size);s.max_file_size=g.parseSize(s.max_file_size);B.bind("FilesAdded",function(D,G){var F,E,I=0,J,H=s.filters;if(H&&H.length){J=[];g.each(H,function(K){g.each(K.extensions.split(/,/),function(L){if(/^\s*\*\s*$/.test(L)){J.push("\\.*")}else{J.push("\\."+L.replace(new RegExp("["+("/^$.*+?|()[]{}\\".replace(/./g,"\\$&"))+"]","g"),"\\$&"))}})});J=new RegExp(J.join("|")+"$","i")}for(F=0;Fs.max_file_size){D.trigger("Error",{code:g.FILE_SIZE_ERROR,message:g.translate("File size error."),file:E});continue}u.push(E);I++}if(I){c(function(){B.trigger("QueueChanged");B.refresh()},1)}else{return false}});if(s.unique_names){B.bind("UploadFile",function(D,E){var G=E.name.match(/\.([^.]+)$/),F="tmp";if(G){F=G[1]}E.target_name=E.id+"."+F})}B.bind("UploadProgress",function(D,E){E.percent=E.size>0?Math.ceil(E.loaded/E.size*100):100;o()});B.bind("StateChanged",function(D){if(D.state==g.STARTED){r=(+new Date())}else{if(D.state==g.STOPPED){for(C=D.files.length-1;C>=0;C--){if(D.files[C].status==g.UPLOADING){D.files[C].status=g.QUEUED;o()}}}}});B.bind("QueueChanged",o);B.bind("Error",function(D,E){if(E.file){E.file.status=g.FAILED;o();if(D.state==g.STARTED){c(function(){t.call(B)},1)}}});B.bind("FileUploaded",function(D,E){E.status=g.DONE;E.loaded=E.size;D.trigger("UploadProgress",E);c(function(){t.call(B)},1)});if(s.runtimes){y=[];z=s.runtimes.split(/\s?,\s?/);for(C=0;C=0;w--){if(u[w].id===x){return u[w]}}},removeFile:function(x){var w;for(w=u.length-1;w>=0;w--){if(u[w].id===x.id){return this.splice(w,1)[0]}}},splice:function(y,w){var x;x=u.splice(y===b?0:y,w===b?u.length:w);this.trigger("FilesRemoved",x);this.trigger("QueueChanged");return x},trigger:function(x){var z=p[x.toLowerCase()],y,w;if(z){w=Array.prototype.slice.call(arguments);w[0]=this;for(y=0;y=0;x--){if(z[x].func===y){z.splice(x,1);break}}}else{z=[]}if(!z.length){delete p[w]}}},unbindAll:function(){var w=this;g.each(p,function(y,x){w.unbind(x)})},destroy:function(){this.stop();this.trigger("Destroy");this.unbindAll()}})};g.File=function(r,p,q){var o=this;o.id=r;o.name=p;o.size=q;o.loaded=0;o.percent=0;o.status=0};g.Runtime=function(){this.getFeatures=function(){};this.init=function(o,p){}};g.QueueProgress=function(){var o=this;o.size=0;o.loaded=0;o.uploaded=0;o.failed=0;o.queued=0;o.percent=0;o.bytesPerSec=0;o.reset=function(){o.size=o.loaded=o.uploaded=o.failed=o.queued=o.percent=o.bytesPerSec=0}};g.runtimes={};window.plupload=g})();(function(){if(window.google&&google.gears){return}var a=null;if(typeof GearsFactory!="undefined"){a=new GearsFactory()}else{try{a=new ActiveXObject("Gears.Factory");if(a.getBuildInfo().indexOf("ie_mobile")!=-1){a.privateSetGlobalObject(this)}}catch(b){if((typeof navigator.mimeTypes!="undefined")&&navigator.mimeTypes["application/x-googlegears"]){a=document.createElement("object");a.style.display="none";a.width=0;a.height=0;a.type="application/x-googlegears";document.documentElement.appendChild(a)}}}if(!a){return}if(!window.google){window.google={}}if(!google.gears){google.gears={factory:a}}})();(function(e,b,c,d){var f={};function a(h,k,m){var g,j,l,o;j=google.gears.factory.create("beta.canvas");try{j.decode(h);if(!k.width){k.width=j.width}if(!k.height){k.height=j.height}o=Math.min(width/j.width,height/j.height);if(o<1||(o===1&&m==="image/jpeg")){j.resize(Math.round(j.width*o),Math.round(j.height*o));if(k.quality){return j.encode(m,{quality:k.quality/100})}return j.encode(m)}}catch(n){}return h}c.runtimes.Gears=c.addRuntime("gears",{getFeatures:function(){return{dragdrop:true,jpgresize:true,pngresize:true,chunks:true,progress:true,multipart:true,multi_selection:true}},init:function(l,n){var m,h,g=false;if(!e.google||!google.gears){return n({success:false})}try{m=google.gears.factory.create("beta.desktop")}catch(k){return n({success:false})}function j(q){var p,o,r=[],s;for(o=0;o0;v=Math.ceil(r.size/s);if(!o){s=r.size;v=1}function p(){var C,y=u.settings.multipart,x=0,B={name:r.target_name||r.name},z=u.settings.url;function A(E){var D,J="----pluploadboundary"+c.guid(),G="--",I="\r\n",F,H;if(y){h.setRequestHeader("Content-Type","multipart/form-data; boundary="+J);D=google.gears.factory.create("beta.blobbuilder");c.each(c.extend(B,u.settings.multipart_params),function(L,K){D.append(G+J+I+'Content-Disposition: form-data; name="'+K+'"'+I+I);D.append(L+I)});H=c.mimeTypes[r.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";D.append(G+J+I+'Content-Disposition: form-data; name="'+u.settings.file_data_name+'"; filename="'+r.name+'"'+I+"Content-Type: "+H+I+I);D.append(E);D.append(I+G+J+G+I);F=D.getAsBlob();x=F.length-E.length;E=F}h.send(E)}if(r.status==c.DONE||r.status==c.FAILED||u.state==c.STOPPED){return}if(o){B.chunk=w;B.chunks=v}C=Math.min(s,r.size-(w*s));if(!y){z=c.buildUrl(u.settings.url,B)}h=google.gears.factory.create("beta.httprequest");h.open("POST",z);if(!y){h.setRequestHeader("Content-Disposition",'attachment; filename="'+r.name+'"');h.setRequestHeader("Content-Type","application/octet-stream")}c.each(u.settings.headers,function(E,D){h.setRequestHeader(D,E)});h.upload.onprogress=function(D){r.loaded=t+D.loaded-x;u.trigger("UploadProgress",r)};h.onreadystatechange=function(){var D;if(h.readyState==4&&u.state!==c.STOPPED){if(h.status==200){D={chunk:w,chunks:v,response:h.responseText,status:h.status};u.trigger("ChunkUploaded",r,D);if(D.cancelled){r.status=c.FAILED;return}t+=C;if(++w>=v){r.status=c.DONE;u.trigger("FileUploaded",r,{response:h.responseText,status:h.status})}else{p()}}else{u.trigger("Error",{code:c.HTTP_ERROR,message:c.translate("HTTP Error."),file:r,chunk:w,chunks:v,status:h.status})}}};if(w3){l.pop()}while(l.length<4){l.push(0)}m=s.split(".");while(m.length>4){m.pop()}do{u=parseInt(m[q],10);n=parseInt(l[q],10);q++}while(q8?"":0.01});o.className="plupload silverlight";if(p.settings.container){k=b.getElementById(p.settings.container);if(d.getStyle(k,"position")==="static"){k.style.position="relative"}}k.appendChild(o);for(l=0;l';function j(){return b.getElementById(p.id+"_silverlight").content.Upload}p.bind("Silverlight:Init",function(){var r,s={};if(h[p.id]){return}h[p.id]=true;p.bind("Silverlight:StartSelectFiles",function(t){r=[]});p.bind("Silverlight:SelectFile",function(t,w,u,v){var x;x=d.guid();s[x]=w;s[w]=x;r.push(new d.File(x,u,v))});p.bind("Silverlight:SelectSuccessful",function(){if(r.length){p.trigger("FilesAdded",r)}});p.bind("Silverlight:UploadChunkError",function(t,w,u,x,v){p.trigger("Error",{code:d.IO_ERROR,message:"IO Error.",details:v,file:t.getFile(s[w])})});p.bind("Silverlight:UploadFileProgress",function(t,x,u,w){var v=t.getFile(s[x]);if(v.status!=d.FAILED){v.size=w;v.loaded=u;t.trigger("UploadProgress",v)}});p.bind("Refresh",function(t){var u,v,w;u=b.getElementById(t.settings.browse_button);if(u){v=d.getPos(u,b.getElementById(t.settings.container));w=d.getSize(u);d.extend(b.getElementById(t.id+"_silverlight_container").style,{top:v.y+"px",left:v.x+"px",width:w.w+"px",height:w.h+"px"})}});p.bind("Silverlight:UploadChunkSuccessful",function(t,w,u,z,y){var x,v=t.getFile(s[w]);x={chunk:u,chunks:z,response:y};t.trigger("ChunkUploaded",v,x);if(v.status!=d.FAILED&&t.state!==d.STOPPED){j().UploadNextChunk()}if(u==z-1){v.status=d.DONE;t.trigger("FileUploaded",v,{response:y})}});p.bind("Silverlight:UploadSuccessful",function(t,w,u){var v=t.getFile(s[w]);v.status=d.DONE;t.trigger("FileUploaded",v,{response:u})});p.bind("FilesRemoved",function(t,v){var u;for(u=0;u';if(d.ua.ie){r=b.createElement("div");m.appendChild(r);r.outerHTML=q;r=null}else{m.innerHTML=q}}());function o(){return b.getElementById(n.id+"_flash")}function k(){if(h++>5000){p({success:false});return}if(g[n.id]===false){setTimeout(k,1)}}k();l=m=null;n.bind("Destroy",function(q){var r;d.removeAllEvents(b.body,q.id);delete g[q.id];delete a[q.id];r=b.getElementById(q.id+"_flash_container");if(r){j.removeChild(r)}});n.bind("Flash:Init",function(){var s={},r;try{o().setFileFilters(n.settings.filters,n.settings.multi_selection)}catch(q){p({success:false});return}if(g[n.id]){return}g[n.id]=true;n.bind("UploadFile",function(t,v){var w=t.settings,u=n.settings.resize||{};o().uploadFile(s[v.id],w.url,{name:v.target_name||v.name,mime:d.mimeTypes[v.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:w.chunk_size,width:u.width,height:u.height,quality:u.quality,multipart:w.multipart,multipart_params:w.multipart_params||{},file_data_name:w.file_data_name,format:/\.(jpg|jpeg)$/i.test(v.name)?"jpg":"png",headers:w.headers,urlstream_upload:w.urlstream_upload})});n.bind("CancelUpload",function(){o().cancelUpload()});n.bind("Flash:UploadProcess",function(u,t){var v=u.getFile(s[t.id]);if(v.status!=d.FAILED){v.loaded=t.loaded;v.size=t.size;u.trigger("UploadProgress",v)}});n.bind("Flash:UploadChunkComplete",function(t,v){var w,u=t.getFile(s[v.id]);w={chunk:v.chunk,chunks:v.chunks,response:v.text};t.trigger("ChunkUploaded",u,w);if(u.status!==d.FAILED&&t.state!==d.STOPPED){o().uploadNextChunk()}if(v.chunk==v.chunks-1){u.status=d.DONE;t.trigger("FileUploaded",u,{response:v.text})}});n.bind("Flash:SelectFiles",function(t,w){var v,u,x=[],y;for(u=0;u0){s(++u,w)}else{l.status=a.DONE;o.trigger("FileUploaded",l,{response:y.value.body,status:x});if(x>=400){o.trigger("Error",{code:a.HTTP_ERROR,message:a.translate("HTTP Error."),file:l,status:x})}}}else{o.trigger("Error",{code:a.GENERIC_ERROR,message:a.translate("Generic Error."),file:l,details:y.error})}})}function r(u){l.size=u.size;if(m){e.FileAccess.chunk({file:u,chunkSize:m},function(x){if(x.success){var y=x.value,v=y.length;p=Array(v);for(var w=0;w";G.scrollTop=100;E=k.getElementById(p.id+"_html5");if(w.features.triggerDialog){j.extend(E.style,{position:"absolute",width:"100%",height:"100%"})}else{j.extend(E.style,{cssFloat:"right",styleFloat:"right"})}E.onchange=function(){o(this.files);this.value=""};F=k.getElementById(w.settings.browse_button);if(F){var z=w.settings.browse_button_hover,A=w.settings.browse_button_active,x=w.features.triggerDialog?F:G;if(z){j.addEvent(x,"mouseover",function(){j.addClass(F,z)},w.id);j.addEvent(x,"mouseout",function(){j.removeClass(F,z)},w.id)}if(A){j.addEvent(x,"mousedown",function(){j.addClass(F,A)},w.id);j.addEvent(k.body,"mouseup",function(){j.removeClass(F,A)},w.id)}if(w.features.triggerDialog){j.addEvent(F,"click",function(H){var y=k.getElementById(w.id+"_html5");if(y&&!y.disabled){y.click()}H.preventDefault()},w.id)}}});p.bind("PostInit",function(){var s=k.getElementById(p.settings.drop_element);if(s){if(g){j.addEvent(s,"dragenter",function(w){var v,t,u;v=k.getElementById(p.id+"_drop");if(!v){v=k.createElement("input");v.setAttribute("type","file");v.setAttribute("id",p.id+"_drop");v.setAttribute("multiple","multiple");j.addEvent(v,"change",function(){o(this.files);j.removeEvent(v,"change",p.id);v.parentNode.removeChild(v)},p.id);s.appendChild(v)}t=j.getPos(s,k.getElementById(p.settings.container));u=j.getSize(s);if(j.getStyle(s,"position")==="static"){j.extend(s.style,{position:"relative"})}j.extend(v.style,{position:"absolute",display:"block",top:0,left:0,width:u.w+"px",height:u.h+"px",opacity:0})},p.id);return}j.addEvent(s,"dragover",function(t){t.preventDefault()},p.id);j.addEvent(s,"drop",function(u){var t=u.dataTransfer;if(t&&t.files){o(t.files)}u.preventDefault()},p.id)}});p.bind("Refresh",function(s){var t,u,v,x,w;t=k.getElementById(p.settings.browse_button);if(t){u=j.getPos(t,k.getElementById(s.settings.container));v=j.getSize(t);x=k.getElementById(p.id+"_html5_container");j.extend(x.style,{top:u.y+"px",left:u.x+"px",width:v.w+"px",height:v.h+"px"});if(p.features.triggerDialog){if(j.getStyle(t,"position")==="static"){j.extend(t.style,{position:"relative"})}w=parseInt(j.getStyle(t,"z-index"),10);if(isNaN(w)){w=0}j.extend(t.style,{zIndex:w});j.extend(x.style,{zIndex:w-1})}}});p.bind("DisableBrowse",function(s,u){var t=k.getElementById(s.id+"_html5");if(t){t.disabled=u}});p.bind("CancelUpload",function(){if(q&&q.abort){q.abort()}});p.bind("UploadFile",function(s,u){var v=s.settings,y,t;function x(A,D,z){var B;if(File.prototype.slice){try{A.slice();return A.slice(D,z)}catch(C){return A.slice(D,z-D)}}else{if(B=File.prototype.webkitSlice||File.prototype.mozSlice){return B.call(A,D,z)}else{return null}}}function w(A){var D=0,C=0,z=("FileReader" in h)?new FileReader:null;function B(){var I,M,K,L,H,J,F,E=s.settings.url;function G(V){var T=0,N="----pluploadboundary"+j.guid(),O,P="--",U="\r\n",R="";q=new XMLHttpRequest;if(q.upload){q.upload.onprogress=function(W){u.loaded=Math.min(u.size,C+W.loaded-T);s.trigger("UploadProgress",u)}}q.onreadystatechange=function(){var W,Y;if(q.readyState==4&&s.state!==j.STOPPED){try{W=q.status}catch(X){W=0}if(W>=400){s.trigger("Error",{code:j.HTTP_ERROR,message:j.translate("HTTP Error."),file:u,status:W})}else{if(K){Y={chunk:D,chunks:K,response:q.responseText,status:W};s.trigger("ChunkUploaded",u,Y);C+=J;if(Y.cancelled){u.status=j.FAILED;return}u.loaded=Math.min(u.size,(D+1)*H)}else{u.loaded=u.size}s.trigger("UploadProgress",u);V=I=O=R=null;if(!K||++D>=K){u.status=j.DONE;s.trigger("FileUploaded",u,{response:q.responseText,status:W})}else{B()}}}};if(s.settings.multipart&&n.multipart){L.name=u.target_name||u.name;q.open("post",E,true);j.each(s.settings.headers,function(X,W){q.setRequestHeader(W,X)});if(typeof(V)!=="string"&&!!h.FormData){O=new FormData();j.each(j.extend(L,s.settings.multipart_params),function(X,W){O.append(W,X)});O.append(s.settings.file_data_name,V);q.send(O);return}if(typeof(V)==="string"){q.setRequestHeader("Content-Type","multipart/form-data; boundary="+N);j.each(j.extend(L,s.settings.multipart_params),function(X,W){R+=P+N+U+'Content-Disposition: form-data; name="'+W+'"'+U+U;R+=unescape(encodeURIComponent(X))+U});F=j.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";R+=P+N+U+'Content-Disposition: form-data; name="'+s.settings.file_data_name+'"; filename="'+unescape(encodeURIComponent(u.name))+'"'+U+"Content-Type: "+F+U+U+V+U+P+N+P+U;T=R.length-V.length;V=R;if(q.sendAsBinary){q.sendAsBinary(V)}else{if(n.canSendBinary){var S=new Uint8Array(V.length);for(var Q=0;Qv.chunk_size&&(n.chunks||typeof(A)=="string")){H=v.chunk_size;K=Math.ceil(u.size/H);J=Math.min(H,u.size-(D*H));if(typeof(A)=="string"){I=A.substring(D*H,D*H+J)}else{I=x(A,D*H,D*H+J)}L.chunk=D;L.chunks=K}else{J=u.size;I=A}if(s.settings.multipart&&n.multipart&&typeof(I)!=="string"&&z&&n.cantSendBlobInFormData&&n.chunks&&s.settings.chunk_size){z.onload=function(){G(z.result)};z.readAsBinaryString(I)}else{G(I)}}B()}y=c[u.id];if(n.jpgresize&&s.settings.resize&&/\.(png|jpg|jpeg)$/i.test(u.name)){d.call(s,u,s.settings.resize,/\.png$/i.test(u.name)?"image/png":"image/jpeg",function(z){if(z.success){u.size=z.data.length;w(z.data)}else{if(n.chunks){w(y)}else{l(y,w)}}})}else{if(!n.chunks&&n.jpgresize){l(y,w)}else{w(y)}}});p.bind("Destroy",function(s){var u,v,t=k.body,w={inputContainer:s.id+"_html5_container",inputFile:s.id+"_html5",browseButton:s.settings.browse_button,dropElm:s.settings.drop_element};for(u in w){v=k.getElementById(w[u]);if(v){j.removeAllEvents(v,s.id)}}j.removeAllEvents(k.body,s.id);if(s.settings.container){t=k.getElementById(s.settings.container)}t.removeChild(k.getElementById(w.inputContainer))});r({success:true})}});function b(){var q=false,o;function r(t,v){var s=q?0:-8*(v-1),w=0,u;for(u=0;u>Math.abs(s+v*8))&255)}n(x,t,w)}return{II:function(s){if(s===e){return q}else{q=s}},init:function(s){q=false;o=s},SEGMENT:function(s,u,t){switch(arguments.length){case 1:return o.substr(s,o.length-s-1);case 2:return o.substr(s,u);case 3:n(t,s,u);break;default:return o}},BYTE:function(s){return r(s,1)},SHORT:function(s){return r(s,2)},LONG:function(s,t){if(t===e){return r(s,4)}else{p(s,t,4)}},SLONG:function(s){var t=r(s,4);return(t>2147483647?t-4294967296:t)},STRING:function(s,t){var u="";for(t+=s;s=65488&&p<=65495){n+=2;continue}if(p===65498||p===65497){break}q=r.SHORT(n+2)+2;if(u[p]&&r.STRING(n+4,u[p].signature.length)===u[p].signature){t.push({hex:p,app:u[p].app.toUpperCase(),name:u[p].name.toUpperCase(),start:n,length:q,segment:r.SEGMENT(n,q)})}n+=q}r.init(null);return{headers:t,restore:function(y){r.init(y);var w=new f(y);if(!w.headers){return false}for(var x=w.headers.length;x>0;x--){var z=w.headers[x-1];r.SEGMENT(z.start,z.length,"")}w.purge();n=r.SHORT(2)==65504?4+r.SHORT(4):2;for(var x=0,v=t.length;x=z.length){break}}},purge:function(){t=[];r.init(null)}}}function a(){var q,n,o={},t;q=new b();n={tiff:{274:"Orientation",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}};t={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}};function p(u,C){var w=q.SHORT(u),z,F,G,B,A,v,x,D,E=[],y={};for(z=0;z4){x=q.LONG(x)+o.tiffHeader}for(F=0;F4){x=q.LONG(x)+o.tiffHeader}y[G]=q.STRING(x,A-1);continue;case 3:if(A>2){x=q.LONG(x)+o.tiffHeader}for(F=0;F1){x=q.LONG(x)+o.tiffHeader}for(F=0;F