diff --git a/NF.jsonld b/NF.jsonld index 64341739..f3471c24 100644 --- a/NF.jsonld +++ b/NF.jsonld @@ -2061,7 +2061,7 @@ "@id" : "bts:centimeter" } ], "rdfs:label" : "workingDistanceUnit", - "rdfs:comment" : "TBD", + "rdfs:comment" : "Unit for working distance.", "@type" : "rdfs:Class", "sms:displayName" : "workingDistanceUnit" }, { @@ -2187,6 +2187,17 @@ "rdfs:comment" : "Technology used to perturb gene", "@type" : "rdfs:Class", "sms:displayName" : "genePerturbationTechnology" + }, { + "@id" : "bts:relatedResource", + "@type" : "rdfs:Class", + "rdfs:comment" : "A related resource.", + "rdfs:label" : "relatedResource", + "rdfs:subClassOf" : [ ], + "schema:isPartOf" : { + "@id" : "http://schema.biothings.io/" + }, + "sms:displayName" : "relatedResource", + "sms:required" : "sms:false" }, { "@id" : "bts:specimenID", "@type" : "rdfs:Class", @@ -5029,7 +5040,7 @@ }, { "@id" : "bts:relatedStudies", "@type" : "rdfs:Class", - "rdfs:comment" : "Studies similar to the current study.", + "rdfs:comment" : "Studies similar to the current study. Subproperty of `relatedResource`.", "rdfs:label" : "relatedStudies", "rdfs:subClassOf" : [ ], "schema:isPartOf" : { diff --git a/docs/docTemplate.R b/docs/docTemplate.R index f1533dcd..b481b51d 100644 --- a/docs/docTemplate.R +++ b/docs/docTemplate.R @@ -1,3 +1,55 @@ +read_properties <- function(file = "../modules/props.yaml") { + props <- yaml::read_yaml(file)$slots + # props <- rbindlist(props, fill = TRUE, idcol = "Property") + props +} + +# The range of prop `assay` is anything of class `Assay` -- +# However, the json-ld does not make this so conceptually concise for props, instead listing all possible values +# In the docs, we don't want to enumerate all values and instead want to create a _link_ to a class that defines the range +# To do this, we can infer class by look up the class of the first listed enum for that prop +# The range could also be inferred to be a boolean or string/integer rather than a class +summarize_range <- function(prop_id, schema, return_labels = FALSE) { + + enums <- nfportalutils::get_by_prop_from_json_schema(id = prop_id, + prop = "schema:rangeIncludes", + schema = schema, + return_labels = FALSE) + + # handle how enums are presented + if(is.null(enums)) return("") + if(length(enums) < 5) return(paste(gsub("bts:", "", enums), collapse = ",")) + if("bts:Yes" %in% enums) return("Y/N") + + enum1 <- enums[1] + + # additional lookup class + class <- nfportalutils::get_by_prop_from_json_schema(enum1, + prop = "rdfs:subClassOf", + schema = schema, + return_labels = FALSE)[[1]] + if(length(class) > 1) warning(enum1, " has multiple parent classes") + class <- sub("bts:", "", class[1]) # use first but warn + class <- paste0("#", class) + class +} + +#' @param prop_id Namespaced id, e.g. "bts:tumorType" +summarize_range_linkml <- function(prop_id, props) { + prop_id <- sub("^bts:", "", prop_id) + + # union ranges + if(!is.null(props[[prop_id]]$any_of)) { + paste0("#", unlist(props[[prop_id]]$any_of, use.names = F), collapse = "|") + + } else { + class <- props[[prop_id]]$range + if(is.null(range)) class <- "" + paste0("#", class) + } +} + + #' Generate template documentation #' #' Basically tries to present a template in a conventional format similar to: @@ -38,40 +90,15 @@ docTemplate <- function(templates, schema = schema, return_labels = FALSE) - # The range of prop `assay` is anything of class `Assay` -- - # However, the json-ld does not make this so conceptually concise for props, instead listing all possible values - # In the docs, we don't want to enumerate all values and instead want to create a _link_ to a class that defines the range - # To do this, we can infer class by look up the class of the first listed enum for that prop - # The range could also be inferred to be a boolean or string/integer rather than a class - summarize_range <- function(prop_id, schema, return_labels = FALSE) { - - enums <- nfportalutils::get_by_prop_from_json_schema(id = prop_id, - prop = "schema:rangeIncludes", - schema = schema, - return_labels = FALSE) - if(is.null(enums)) return("") - if(length(enums) < 5) return(paste(gsub("bts:", "", enums), collapse = ",")) - if("bts:Yes" %in% enums) return("Y/N") - enum1 <- enums[1] - # additional lookup class - class <- nfportalutils::get_by_prop_from_json_schema(enum1, - prop = "rdfs:subClassOf", - schema = schema, - return_labels = FALSE)[[1]] - if(length(class) > 1) warning(enum1, " has multiple parent classes") - class <- sub("bts:", "", class[1]) # use first but warn - class <- paste0("#", class) - class - } + + prop_ref <- read_properties() - # because of the way schematic imports biothings without us having much control over it some ids can be duplicated (!) - schema <- schema[!duplicated(sapply(schema, function(x) x$`@id`))] sms <- Filter(function(x) x$`@id` %in% prop_ids, schema) sms <- lapply(sms, function(x) { list(Field = x$`sms:displayName`, Description = if(!is.null(x$`rdfs:comment`)) x$`rdfs:comment` else " ", Required = if(!is.null(x$`sms:required`)) sub("sms:", "", x$`sms:required`) else "?", - ValidRange = summarize_range(x$`@id`, schema)) + ValidRange = summarize_range_linkml(prop_id = x$`@id`, props = prop_ref)) }) tt <- rbindlist(sms) diff --git a/docs/index.Rmd b/docs/index.Rmd index 78c24c3d..fde7d4c5 100644 --- a/docs/index.Rmd +++ b/docs/index.Rmd @@ -72,8 +72,12 @@ templateTable <- function(dt) { # Reference range by linking to relevant class sections within document # or returning range values in plain text refRange <- function(value, index) { - if(grepl("#", value)) { - htmltools::tags$a(href = value, sub("#", "", value)) + values <- strsplit(value, split = "|", fixed = TRUE)[[1]] + if(any(grepl("#", values))) { + htmltools::div( + lapply(values, function(value) htmltools::p( + htmltools::tags$a(href = value, sub("#", "", value)), " ")) + ) } else { value } @@ -81,11 +85,17 @@ templateTable <- function(dt) { reactable(dt, columns = list( - Field = colDef(minWidth = 180), + Field = colDef(minWidth = 180, + cell = function(value, index) { div(style = list(fontWeight = 600), value)}), Description = colDef(minWidth = 300), Required = colDef(maxWidth = 100), ValidRange = colDef(name = "Valid Range", cell = refRange) ), + rowStyle = function(index) { + if (dt[index, "Required"]) { + list(background = "lemonchiffon") + } + }, pagination = FALSE, wrap = TRUE, class = "term-table") @@ -96,13 +106,19 @@ module_section <- function(module, submodule, submodule_id = submodule) { - for(i in seq_along(submodule)) { - file <- glue::glue("../modules/{module}/{submodule[i]}.csv") - data <- fread(file) + file <- glue::glue("../modules/{module}/{submodule}.yaml") + data <- yaml::read_yaml(file) + + for(key in submodule_id) { + data <- data$enums[[key]]$permissible_values + + cat(paste0("\n", "#### ", key, " {#", key, " .tabset .tabset-fade .tabset-pills}", "\n")) - cat(paste0("\n", "#### ", submodule[i], " {#", submodule_id[i], " .tabset .tabset-fade .tabset-pills}", "\n")) + table <- rbindlist(data, fill = TRUE, idcol = "Attribute") + setnames(table, "description", "Description", skip_absent = TRUE) + if(!"Description" %in% names(table)) table[, Description := ""] - table <- data[, .(Attribute, Description, DependsOn)] + table <- table[, .(Attribute, Description)] print( tagList( @@ -110,6 +126,7 @@ module_section <- function(module, } } + ``` ```{r process_schema_table, echo=FALSE} @@ -117,8 +134,6 @@ module_section <- function(module, schema <- jsonlite::read_json(params$schema_json) schema <- schema$`@graph` -# docTemplate needs the unmodified schema table -# this can be factored out as an external config if(!params$use_cache) { templates <- c(# genomics/transcriptomics GenomicsAssayTemplate = "Genomics_Assay_Template", @@ -144,7 +159,8 @@ if(!params$use_cache) { PharmacokineticsAssayTemplate = "Pharmacokinetics_Assay_Template", # drug assays type PlateBasedReporterAssayTemplate = "Plate_Based_Reporter_Assay_Template", ClinicalAssayTemplate = "Clinical_Assay_Template", - PatientTimepointsTemplate = "Patient_Timepoints_Template", + # PatientTimepointsTemplate = "Patient_Timepoints_Template", + ProtocolTemplate = "Protocol_Template", SourceCodeTemplate = "Source_Code_Template", LightScatteringAssayTemplate = "Light_Scattering_Assay_Template") @@ -161,100 +177,6 @@ if(!params$use_cache) { ``` -## Annotation Classes - -:::info - -These are standard terms available to NF resource contributors for annotation of their resource. -Terms are grouped into modules. -When using these terms, contributors are helping to label and classify resources for improved interoperability and findability. - -::: - -### Assay - -```{r tables, echo=FALSE,results='asis'} - -module_section("Assay", c("Assay", "Platform")) - -``` - - -##### Relations Graph - -:::info - -This partial graph view logically relates **assays** to metadata **templates** available at the [NF Data Curator App](https://shiny.synapse.org/users/rallaway/NF_data_curator/). -For example, assays under the classification of `Imaging_Assay` currently uses a generic `Imaging_Assay_Template` for annotation. -More specialized templates may be made available as needed for specific assays. - -::: - -```{r schema_ext_assay_template, out.width="100%", echo=FALSE, eval=params$graph_view} - -schema_ext <- readExtSchema(params$schema_csv, params$ext_classes_csv) -assay <- getNodesEdges(schema_ext, "Assay", "A", - nodes = list(color = list(A = "plum", C = "indigo"), - font.color = list(A = "black", C = "white"))) -template <- getNodesEdges(schema_ext, "Template", "T", use_id = T, - nodes = list(color = list(A = "pink", C = "firebrick"), - font.color = list(A = "black", C = "white"))) -g_assay_template <- c2Cluster(assay, template, "suggests", params$ext_relations_csv) -defaultGraph(g_assay_template) - -``` - - -### Information Entity - -```{r data_module, echo=FALSE, results='asis'} - -module_section("Data", - c("Resource", "Data_Class", "File_Format"), - c("ResourceType", "DataType", "FileFormat")) - -``` - - -### Sample - -:::info - -Sample typically refers to a **biosample**, but on some rare occasions can refer to an inorganic sample from which data are generated. -For biosamples, there is a distinction between individual-level and specimen-level data. -Data can be linked to individual-level sample information such as sex, species, diagnosis, and genotype. -Data can be linked to specimen-level information such as sample site (the organ or body part), specimen tissue or cell type, tumor class (if specimen is a tumor), and specimen state. - -::: - - -```{r sample_module, echo=FALSE, results='asis'} - -module_section("Sample", - c("Body_Part", "Sex", "Species", "Disease", "Genotype", "Tissue", "Tumor", "Cell", "Cell_Line_Model", "Mouse_Model", "Specimen_Processing"), - c("Organ", "Sex", "Species", "Diagnosis", "Genotype", "Tissue", "Tumor", "CellType", "ModelSystemName", "ModelSystemName", "SpecimenProcessingMethod")) - -``` - - - -### Experiment - -:::info - -Terminology to help characterize experiment. - -::: - -```{r biosample_module, echo=FALSE, results='asis'} - -module_section("Experiment", - c("Unit"), - c("TimePointUnit")) - -``` - - ## Annotation Templates :::info @@ -263,23 +185,19 @@ Annotation templates are spreadsheet templates that allow contributors to annota See interactive use of these templates at our [NF Data Curator App](https://shiny.synapse.org/users/rallaway/NF_data_curator/). Templates implement "minimum metadata" standards specific to the type of data/resource (hence variants exist for assay types and "raw" vs "processed" data). Templates also contain common components, e.g. many will collect core sample info associated with the data. + Unless the template field is free-text, it is meant to be filled by the contributor using the ontology terms/controlled vocabulary defined here. For example, the "assay" property allows the contributor to use [terms under Assay](#assay). ::: -#### Genomics Assay Templates {#Genomics_Assay_Templates .tabset .tabset-fade .tabset-pills} +#### Genomics Assay Data Templates {#Genomics_Assay_Templates .tabset .tabset-fade .tabset-pills} -```{r standard_properties_table, echo=FALSE, eval=FALSE} +:::info -# CURRENTLY NOT RUN (eval=FALSE) -# Custom code to get unique set of properties used across all templates -# standard_properties_table <- schema %>% -# filter(Parent %in% c("template")) %>% -# select(Attribute, Description, DependsOn) -# -# basicTable(standard_properties_table) -``` +Raw or processed data files from a genomics assay should be annotated using one of these templates. + +::: ##### Genomics Assay (Generic) @@ -418,10 +336,10 @@ templateTable(read.csv("templates/Light_Scattering_Assay_Template.csv")) #### Non-Assay Templates {#Non_Assay_Template .tabset .tabset-fade .tabset-pills} -##### Patient Timepoints +##### Protocol ```{r echo=FALSE } -templateTable(read.csv("templates/Patient_Timepoints_Template.csv")) +templateTable(read.csv("templates/Protocol_Template.csv")) ``` @@ -433,6 +351,165 @@ templateTable(read.csv("templates/Source_Code_Template.csv")) ``` +## Annotation Vocabulary + +:::info + +These are standard terms available to NF resource contributors for annotation of their resource. +Terms are grouped into modules. +When using these terms, contributors are helping to label and classify resources using standard semantics for improved interoperability and findability. + +::: + +### Assay + +```{r assay, echo=FALSE,results='asis'} + +module_section("Assay", "Assay", "AssayEnum") + +``` + +```{r platform, echo=FALSE,results='asis'} + +module_section("Assay", "Platform", "PlatformEnum") + +``` + +##### Relations Graph + +:::info + +This partial graph view logically relates **assays** to metadata **templates** available at the [NF Data Curator App](https://shiny.synapse.org/users/rallaway/NF_data_curator/). +For example, assays under the classification of `Imaging_Assay` currently uses a generic `Imaging_Assay_Template` for annotation. +More specialized templates may be made available as needed for specific assays. + +::: + +```{r schema_ext_assay_template, out.width="100%", echo=FALSE, eval=params$graph_view} + +schema_ext <- readExtSchema(params$schema_csv, params$ext_classes_csv) +assay <- getNodesEdges(schema_ext, "Assay", "A", + nodes = list(color = list(A = "plum", C = "indigo"), + font.color = list(A = "black", C = "white"))) +template <- getNodesEdges(schema_ext, "Template", "T", use_id = T, + nodes = list(color = list(A = "pink", C = "firebrick"), + font.color = list(A = "black", C = "white"))) +g_assay_template <- c2Cluster(assay, template, "suggests", params$ext_relations_csv) +defaultGraph(g_assay_template) + +``` + + +### Information Entity + +```{r resource, echo=FALSE, results='asis'} + +module_section("Data", "Resource", "Resource") +``` + +```{r data, echo=FALSE, results='asis'} + +module_section("Data", "Data", "Data") +``` + +```{r datasubtype, echo=FALSE, results='asis'} + +module_section("Data", "Data", "DataSubtype") +``` + + +```{r fileformat, echo=FALSE, results='asis'} + +module_section("Data", "FileFormat", "FileFormatEnum") +``` + + +### Sample + +:::info + +Sample typically refers to a **biosample**, but on some rare occasions can refer to an inorganic sample from which data are generated. +For biosamples, there is a distinction between individual-level and specimen-level data. +Data can be linked to individual-level sample information such as sex, species, diagnosis, and genotype. +Data can be linked to specimen-level information such as sample site (the organ or body part), specimen tissue or cell type, tumor class (if specimen is a tumor), and specimen state. + +::: + + +```{r sample_tissue, echo=FALSE, results='asis'} + +module_section("Sample", "Tissue", "TissueEnum") + +``` + + +```{r sample_tumor, echo=FALSE, results='asis'} + +module_section("Sample", "Tumor", "Tumor") + +``` + +```{r sample_sex, echo=FALSE, results='asis'} + +module_section("Sample", "Sex", "SexEnum") + +``` + +```{r sample_diagonosis, echo=FALSE, results='asis'} + +module_section("Sample", "Diagnosis", "DiagnosisEnum") + +``` + + +```{r sample_genotype, echo=FALSE, results='asis'} + +module_section("Sample", "Genotype", "Genotype") + +``` + + +```{r sample_species, echo=FALSE, results='asis'} + +module_section("Sample", "Species", "SpeciesEnum") + +``` + +```{r sample_cell, echo=FALSE, results='asis'} + +module_section("Sample", "Cell", "Cell") + +``` + +```{r sample_cellmodel, echo=FALSE, results='asis'} + +module_section("Sample", "CellLineModel", "CellLineModel") + +``` + + +```{r sample_mousemodel, echo=FALSE, results='asis'} + +module_section("Sample", "MouseModel", "MouseModel") + +``` + + +### Experiment + +:::info + +Terminology to help characterize experiment. + +::: + +```{r biosample_module, echo=FALSE, results='asis'} + +module_section("Experiment", "Unit", "TimeUnit") + +``` + + ## Other #### Reserved Properties {#reserved .tabset .tabset-fade .tabset-pills} diff --git a/docs/index.html b/docs/index.html index 64e9f813..4e9f1301 100644 --- a/docs/index.html +++ b/docs/index.html @@ -90,18 +90,12 @@ h6 {font-size: 12px;} code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.2";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.2",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("