diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..21d6671f0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,165 @@ +# editorconfig.org + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = space +indent_size = 4 + +[project.json] +indent_size = 2 + +# C# files +[*.cs] +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current + +# avoid this. unless absolutely necessary +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +# only use var when it's obvious what the variable type is +csharp_style_var_for_built_in_types = false:none +csharp_style_var_when_type_is_apparent = false:none +csharp_style_var_elsewhere = false:suggestion + +# use language keywords instead of BCL types +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# name all constant fields using PascalCase +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.required_modifiers = const + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# static fields should have s_ prefix +dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion +dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields +dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_prefix_style.required_prefix = s_ +dotnet_naming_style.static_prefix_style.capitalization = camel_case + +# internal and private fields should be m_camelCase +dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion +dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields +dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style + +dotnet_naming_symbols.private_internal_fields.applicable_kinds = field +dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal + +dotnet_naming_style.camel_case_underscore_style.required_prefix = m_ +dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case + +# Code style defaults +dotnet_sort_system_directives_first = true +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Pattern matching +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +# Null checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Xml project files + +# CA1063: Implement IDisposable Correctly +dotnet_diagnostic.CA1063.severity = silent + +# CA2100: Review SQL queries for security vulnerabilities +dotnet_diagnostic.CA2100.severity = silent + +[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml build files +[*.builds] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf +[*.{cmd, bat}] +end_of_line = crlf + +# Analyzers +dotnet_code_quality.ca1802.api_surface = private, internal \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..e33db37fd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# Auto detect text files and perform LF normalization +# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ +* text=auto + +*.cs diff=csharp + +*.resx eol=crlf + diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..29c6b5d05 --- /dev/null +++ b/.gitignore @@ -0,0 +1,220 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.VC.db +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions +*.DotSettings +*.DotSettings diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..364ada605 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Grid Protection Alliance + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/RenameProject.bat b/RenameProject.bat new file mode 100644 index 000000000..b3a79a6eb --- /dev/null +++ b/RenameProject.bat @@ -0,0 +1,37 @@ +@ECHO OFF +SET destU=%1 +IF /I "%destU%"=="" SET /P destU=Enter PascalCase target library title, e.g., "Threading" (without quotes): +SET srcU=%2 +IF /I "%srcU%"=="" SET srcU=GemTem +SET srcL=%srcU% +SET destL=%destU% +SET ucase=ABCDEFGHIJKLMNOPQRSTUVWXYZ +SET lcase=abcdefghijklmnopqrstuvwxyz +SETLOCAL EnableDelayedExpansion + +FOR /L %%a IN (0,1,25) DO ( + CALL SET "from=%%ucase:~%%a,1%% + CALL SET "to=%%lcase:~%%a,1%% + CALL SET "srcL=%%srcL:!from!=!to!%% + CALL SET "destL=%%destL:!from!=!to!%% +) + +ECHO. +ECHO *** GemStone Template Rename Script *** +ECHO. +ECHO About to rename "%srcU%/%srcL%" to "%destU%/%destL%", press Ctrl+C to cancel, or +PAUSE +.\build\tools\ReplaceInFiles /r /v /c ".\src\*.*" %srcU% %destU% +.\build\tools\ReplaceInFiles /r /v /c ".\docs\*.*" %srcU% %destU% +.\build\tools\BRC64 /REPLACECS:%srcU%:%destU% /RECURSIVE /EXECUTE +.\build\tools\ReplaceInFiles /r /v /c ".\src\*.*" %srcL% %destL% +.\build\tools\ReplaceInFiles /r /v /c ".\docs\*.*" %srcL% %destL% +.\build\tools\BRC64 /REPLACECS:%srcL%:%destL% /RECURSIVE /EXECUTE +REN ".\src\gemstone.%srcL%" "gemstone.%destL%" + +ENDLOCAL +ECHO. +ECHO Project Rename to "%destU%" is now Complete. +ECHO It is recommended to now delete the "RenameProject.bat" script and the ".\build\tools\" folder. +ECHO. +PAUSE diff --git a/build/tools/BRC64.exe b/build/tools/BRC64.exe new file mode 100755 index 000000000..680561758 Binary files /dev/null and b/build/tools/BRC64.exe differ diff --git a/build/tools/GSF.Core.dll b/build/tools/GSF.Core.dll new file mode 100644 index 000000000..66a7eb20d Binary files /dev/null and b/build/tools/GSF.Core.dll differ diff --git a/build/tools/ReplaceInFiles.exe b/build/tools/ReplaceInFiles.exe new file mode 100755 index 000000000..b33b7bc7c Binary files /dev/null and b/build/tools/ReplaceInFiles.exe differ diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..3793cfb11 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,19 @@ +gemstone logo + +# GemTem +### GPA Gemstone Library + +The Gemstone GemTem Library organizes all Gemstone functionality related to gemtem. + +[![GitHub license](https://img.shields.io/github/license/gemstone/gemtem?color=4CC61E)](https://github.com/gemstone/gemtem/blob/master/LICENSE) +[![Build status](https://ci.appveyor.com/api/projects/status/ury75mtaq7tj1sp0?svg=true)](https://ci.appveyor.com/project/ritchiecarroll/gemtem) + +This library includes helpful gemtem classes like the following: + +* [Class](https://gemstone.github.io/gemtem/help/html/T_gemstone_gemtem_Class.htm): + * Represents a gemtem class for handling gemtem operations. + +Among others. + +### Documentation +[Full Library Documentation](https://gemstone.github.io/gemtem/help) \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 000000000..edb55b1f0 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,9 @@ +theme: jekyll-theme-cayman +title: gemstone.gemtem +description: GPA Gemstone GemTem Library +github: + repository_name: gemstone.gemtem + owner_url: https://www.gridprotectionalliance.org + owner_name: Grid Protection Alliance +plugins: + - jemoji \ No newline at end of file diff --git a/docs/_includes/anchor_headings.html b/docs/_includes/anchor_headings.html new file mode 100644 index 000000000..21e2d0473 --- /dev/null +++ b/docs/_includes/anchor_headings.html @@ -0,0 +1,105 @@ +{% capture headingsWorkspace %} + {% comment %} + Version 1.0.4 + https://github.com/allejo/jekyll-anchor-headings + + "Be the pull request you wish to see in the world." ~Ben Balter + + Usage: + {% include anchor_headings.html html=content %} + + Parameters: + * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll + + Optional Parameters: + * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content + * anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `` tag; you may NOT use `href`, `class` or `title` + * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available + * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space + * anchorTitle (string) : '' - The `title` attribute that will be used for anchors + * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored + * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored + * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content + * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content + + Output: + The original HTML with the addition of anchors inside of all of the h1-h6 headings. + {% endcomment %} + + {% assign minHeader = include.h_min | default: 1 %} + {% assign maxHeader = include.h_max | default: 6 %} + {% assign beforeHeading = include.beforeHeading %} + {% assign nodes = include.html | split: ' + {% if headerLevel == 0 %} + {% if nextChar != '<' and nextChar != '' %} + {% capture node %}' | first }}>{% endcapture %} + {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} + + + {% capture anchor %}{% endcapture %} + + {% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %} + {% capture anchor %}href="#{{ html_id }}"{% endcapture %} + + {% if include.anchorClass %} + {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %} + {% endif %} + + {% if include.anchorTitle %} + {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %} + {% endif %} + + {% if include.anchorAttrs %} + {% capture anchor %}{{ anchor }} {{ include.anchorAttrs }}{% endcapture %} + {% endif %} + + {% capture anchor %}{{ include.anchorBody | replace: '%heading%', header | default: '' }}{% endcapture %} + + + {% if beforeHeading %} + {% capture anchor %}{{ anchor }} {% endcapture %} + {% else %} + {% capture anchor %} {{ anchor }}{% endcapture %} + {% endif %} + {% endif %} + + {% capture new_heading %} + + + +{% endcomment %} + + + + + {% if site.google_analytics %} + + + {% endif %} + + +{% seo %} + + + + + + + + + +
+ {% include anchor_headings.html html=content %} + + +
+ + \ No newline at end of file diff --git a/docs/coding-style.md b/docs/coding-style.md new file mode 100644 index 000000000..6794a7b78 --- /dev/null +++ b/docs/coding-style.md @@ -0,0 +1,26 @@ +# C# Coding Style + +We follow a similar coding style as [dotnet/runtime](https://github.com/dotnet/runtime). + +For non code files (xml, etc), our current best guidance is consistency. When editing files, keep new code and changes consistent with the style in the files. For new files, it should conform to the style for that component. If there is a completely new component, anything that is reasonably broadly accepted is fine. + +The general rule we follow is "_use Visual Studio defaults_". + +1. We use [Allman style](http://en.wikipedia.org/wiki/Indent_style#Allman_style) braces, where each brace begins on a new line. A single line statement block can go without braces but the block must be properly indented on its own line and must not be nested in other statement blocks that use braces. One exception is that a `using` statement is permitted to be nested within another `using` statement by starting on the following line at the same indentation level, even if the nested `using` contains a controlled block. +2. We use four spaces of indentation (no tabs). +3. We use `m_camelCase` for internal and private fields and use `readonly` where possible. Prefix internal and private member (instance) fields with `m_`, static fields with `s_` and thread static fields with `t_`. When used on static fields, `readonly` should come after `static` (e.g. `static readonly` not `readonly static`). Public fields should be used sparingly and should use PascalCasing with no prefix when used. +4. We avoid `this.` unless absolutely necessary. +5. We always specify the visibility, even if it's the default (e.g. `private string m_foo` not `string m_foo`). Visibility should be the first modifier (e.g. `public abstract` not `abstract public`). +6. Namespace imports should be specified at the top of the file, *outside* of `namespace` declarations, and should be sorted alphabetically, with the exception of `System.*` namespaces, which are to be placed on top of all others. +7. Avoid more than one empty line at any time. For example, do not have two blank lines between members of a type. +8. Avoid spurious free spaces. For example avoid `if (someVar == 0)...`, where the dots mark the spurious free spaces. Consider enabling "View White Space (Ctrl+E, S)" if using Visual Studio to aid detection. +9. If a file happens to differ in style from these guidelines (e.g. private members are named `_member` rather than `m_member`), the existing style in that file takes precedence. +10. Alway use actual type names, we only use `var` when it's required because the actual type is unknown or is run-time deferred. +11. We use language keywords instead of BCL types (e.g. `int, string, float` instead of `Int32, String, Single`, etc) for both type references as well as method calls (e.g. `int.Parse` instead of `Int32.Parse`). +12. We use PascalCasing to name all our constant local variables and fields. The only exception is for interop code where the constant value should exactly match the name and value of the code you are calling via interop. +13. We use ```nameof(...)``` instead of ```"..."``` whenever possible and relevant. +14. Fields should be specified at the top within type declarations. +15. When including non-ASCII characters in the source code use Unicode escape sequences (\uXXXX) instead of literal characters. Literal non-ASCII characters occasionally get garbled by a tool or editor. +16. When using #region sections or labels (for goto), indent the item one less than the current indentation. + +An [EditorConfig](https://editorconfig.org "EditorConfig homepage") file (`.editorconfig`) has been provided at the root of the repository, enabling C# auto-formatting. diff --git a/docs/help/SearchHelp.aspx b/docs/help/SearchHelp.aspx new file mode 100644 index 000000000..6e2a17b6a --- /dev/null +++ b/docs/help/SearchHelp.aspx @@ -0,0 +1,233 @@ +<%@ Page Language="C#" EnableViewState="False" %> + + diff --git a/docs/help/SearchHelp.inc.php b/docs/help/SearchHelp.inc.php new file mode 100644 index 000000000..b905e130c --- /dev/null +++ b/docs/help/SearchHelp.inc.php @@ -0,0 +1,173 @@ +filename = $file; + $this->pageTitle = $title; + $this->rank = $rank; + } +} + + +/// +/// Split the search text up into keywords +/// +/// The keywords to parse +/// A list containing the words for which to search +function ParseKeywords($keywords) +{ + $keywordList = array(); + $words = preg_split("/[^\w]+/", $keywords); + + foreach($words as $word) + { + $checkWord = strtolower($word); + $first = substr($checkWord, 0, 1); + if(strlen($checkWord) > 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList)) + { + array_push($keywordList, $checkWord); + } + } + + return $keywordList; +} + + +/// +/// Search for the specified keywords and return the results as a block of +/// HTML. +/// +/// The keywords for which to search +/// The file list +/// The dictionary used to find the words +/// True to sort by title, false to sort by +/// ranking +/// A block of HTML representing the search results. +function Search($keywords, $fileInfo, $wordDictionary, $sortByTitle) +{ + $sb = "
    "; + $matches = array(); + $matchingFileIndices = array(); + $rankings = array(); + + $isFirst = true; + + foreach($keywords as $word) + { + if (!array_key_exists($word, $wordDictionary)) + { + return "Nothing found"; + } + $occurrences = $wordDictionary[$word]; + + $matches[$word] = $occurrences; + $occurrenceIndices = array(); + + // Get a list of the file indices for this match + foreach($occurrences as $entry) + array_push($occurrenceIndices, ($entry >> 16)); + + if($isFirst) + { + $isFirst = false; + foreach($occurrenceIndices as $i) + { + array_push($matchingFileIndices, $i); + } + } + else + { + // After the first match, remove files that do not appear for + // all found keywords. + for($idx = 0; $idx < count($matchingFileIndices); $idx++) + { + if (!in_array($matchingFileIndices[$idx], $occurrenceIndices)) + { + array_splice($matchingFileIndices, $idx, 1); + $idx--; + } + } + } + } + + if(count($matchingFileIndices) == 0) + { + return "Nothing found"; + } + + // Rank the files based on the number of times the words occurs + foreach($matchingFileIndices as $index) + { + // Split out the title, filename, and word count + $fileIndex = explode("\x00", $fileInfo[$index]); + + $title = $fileIndex[0]; + $filename = $fileIndex[1]; + $wordCount = intval($fileIndex[2]); + $matchCount = 0; + + foreach($keywords as $words) + { + $occurrences = $matches[$word]; + + foreach($occurrences as $entry) + { + if(($entry >> 16) == $index) + $matchCount += $entry & 0xFFFF; + } + } + + $r = new Ranking($filename, $title, $matchCount * 1000 / $wordCount); + array_push($rankings, $r); + + if(count($rankings) > 99) + break; + } + + // Sort by rank in descending order or by page title in ascending order + if($sortByTitle) + { + usort($rankings, "cmprankbytitle"); + } + else + { + usort($rankings, "cmprank"); + } + + // Format the file list and return the results + foreach($rankings as $r) + { + $f = $r->filename; + $t = $r->pageTitle; + $sb .= "
  1. $t
  2. "; + } + + $sb .= "rank - $x->rank; +} + +function cmprankbytitle($x, $y) +{ + return strcmp($x->pageTitle, $y->pageTitle); +} + +?> diff --git a/docs/help/SearchHelp.php b/docs/help/SearchHelp.php new file mode 100644 index 000000000..eaa1e117f --- /dev/null +++ b/docs/help/SearchHelp.php @@ -0,0 +1,58 @@ + + Nothing found + $val) + { + $wordDictionary[$ftiWord] = $val; + } + } + } + } + + // Perform the search and return the results as a block of HTML + $results = Search($keywords, $fileList, $wordDictionary, $sortByTitle); + echo $results; +?> \ No newline at end of file diff --git a/docs/help/Web.Config b/docs/help/Web.Config new file mode 100644 index 000000000..f0f3e6cb6 --- /dev/null +++ b/docs/help/Web.Config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/help/WebKI.xml b/docs/help/WebKI.xml new file mode 100644 index 000000000..e5e54dd0b --- /dev/null +++ b/docs/help/WebKI.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/help/WebTOC.xml b/docs/help/WebTOC.xml new file mode 100644 index 000000000..631f03ea5 --- /dev/null +++ b/docs/help/WebTOC.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/help/fti/FTI_100.json b/docs/help/fti/FTI_100.json new file mode 100644 index 000000000..cd738f018 --- /dev/null +++ b/docs/help/fti/FTI_100.json @@ -0,0 +1 @@ +{"description":[196609,393218,458753],"documentation":[196609,327681,393217,458753,524290],"dll":[327681,393217],"determines":[196609,393217],"default":[1,196609,393217],"development":[524289]} \ No newline at end of file diff --git a/docs/help/fti/FTI_101.json b/docs/help/fti/FTI_101.json new file mode 100644 index 000000000..1da24a312 --- /dev/null +++ b/docs/help/fti/FTI_101.json @@ -0,0 +1 @@ +{"electric":[524290],"equals":[196609,393217],"error":[131074],"expand":[524289],"extend":[524289],"expression":[524289],"expressions":[524290],"exposes":[196609,393217],"envisioning":[524289],"example":[327681,393217],"equal":[196609,393217],"entered":[262145]} \ No newline at end of file diff --git a/docs/help/fti/FTI_102.json b/docs/help/fti/FTI_102.json new file mode 100644 index 000000000..70665c63b --- /dev/null +++ b/docs/help/fti/FTI_102.json @@ -0,0 +1 @@ +{"follow":[1],"function":[196609,327681,393218],"following":[196609,393217],"framework":[524289],"finalize":[196609,393217],"free":[196609,393217],"functionality":[458753,524291],"file":[196609,327681,393217,458753,524289],"focused":[524289]} \ No newline at end of file diff --git a/docs/help/fti/FTI_103.json b/docs/help/fti/FTI_103.json new file mode 100644 index 000000000..dcab68430 --- /dev/null +++ b/docs/help/fti/FTI_103.json @@ -0,0 +1 @@ +{"gems":[524289],"gemtem":[65537,131073,196610,262145,327686,393225,458759,524292],"gettype":[196609,393217],"gemstone":[65537,131073,196610,262145,327686,393224,458756,524299],"grid":[196609,327681,393217,458753,524291],"gethashcode":[196609,393217],"generated":[196609,327681,393217,458753,524289],"gpa":[196609,327681,393217,458753,524290],"gets":[196609,393217],"gsf":[524289],"garbage":[196609,393217],"general":[131073]} \ No newline at end of file diff --git a/docs/help/fti/FTI_104.json b/docs/help/fti/FTI_104.json new file mode 100644 index 000000000..62ff348e0 --- /dev/null +++ b/docs/help/fti/FTI_104.json @@ -0,0 +1 @@ +{"hash":[196609,393217],"help":[196609,327681,393217,458753,524289],"hundreds":[524289],"hierarchy":[393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_105.json b/docs/help/fti/FTI_105.json new file mode 100644 index 000000000..7cf70a0d2 --- /dev/null +++ b/docs/help/fti/FTI_105.json @@ -0,0 +1 @@ +{"instance":[196609,327681,393218],"initializes":[327681,393217],"inheritance":[393217],"inherited":[196614,393222],"including":[524289],"industry":[524289],"includes":[458753]} \ No newline at end of file diff --git a/docs/help/fti/FTI_106.json b/docs/help/fti/FTI_106.json new file mode 100644 index 000000000..bccf0e88a --- /dev/null +++ b/docs/help/fti/FTI_106.json @@ -0,0 +1 @@ +{"javascript":[327681,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_108.json b/docs/help/fti/FTI_108.json new file mode 100644 index 000000000..c6c2f1bb3 --- /dev/null +++ b/docs/help/fti/FTI_108.json @@ -0,0 +1 @@ +{"library":[65537,131073,196609,262145,327681,393218,458755,524291],"locate":[262145],"long":[524289],"large":[524289],"looking":[262145],"libraries":[524294],"link":[1],"load":[131073],"longer":[262145]} \ No newline at end of file diff --git a/docs/help/fti/FTI_109.json b/docs/help/fti/FTI_109.json new file mode 100644 index 000000000..484011235 --- /dev/null +++ b/docs/help/fti/FTI_109.json @@ -0,0 +1 @@ +{"memberwiseclone":[196609,393217],"maintained":[524289],"methods":[196610,393217,524289],"misspelled":[262145],"members":[196609,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_110.json b/docs/help/fti/FTI_110.json new file mode 100644 index 000000000..8e8e9a463 --- /dev/null +++ b/docs/help/fti/FTI_110.json @@ -0,0 +1 @@ +{"net":[524291],"namespace":[196609,327682,393218,458755],"new":[327682,393218,458753]} \ No newline at end of file diff --git a/docs/help/fti/FTI_111.json b/docs/help/fti/FTI_111.json new file mode 100644 index 000000000..8452b3241 --- /dev/null +++ b/docs/help/fti/FTI_111.json @@ -0,0 +1 @@ +{"object":[196619,393228],"occurred":[131073],"operations":[196609,393217],"organizes":[458753,524290],"open":[524291]} \ No newline at end of file diff --git a/docs/help/fti/FTI_112.json b/docs/help/fti/FTI_112.json new file mode 100644 index 000000000..88a80873e --- /dev/null +++ b/docs/help/fti/FTI_112.json @@ -0,0 +1 @@ +{"parsers":[524289],"perform":[196609,393217],"provided":[524289],"protection":[196609,327681,393217,458753,524290],"power":[524290],"projects":[524289],"persists":[131073],"project":[524289],"parsing":[524289],"packages":[524289],"page":[131073,262148],"protocol":[524289],"public":[327683,393219]} \ No newline at end of file diff --git a/docs/help/fti/FTI_114.json b/docs/help/fti/FTI_114.json new file mode 100644 index 000000000..ec7d5bf99 --- /dev/null +++ b/docs/help/fti/FTI_114.json @@ -0,0 +1 @@ +{"represent":[524289],"related":[458753,524290],"returns":[196609,393217],"requested":[262145],"request":[327681,393217],"represents":[196609,393217],"reference":[196609,327681,393217],"redirected":[1],"reclaimed":[196609,393217],"resources":[196609,393217],"root":[458753],"ref":[393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_115.json b/docs/help/fti/FTI_115.json new file mode 100644 index 000000000..3dd67f19f --- /dev/null +++ b/docs/help/fti/FTI_115.json @@ -0,0 +1 @@ +{"sub":[327681],"syntax":[327681,393217],"sorry":[131073,262145],"system":[393217],"sandcastle":[196609,327681,393217,458753,524289],"source":[327681,393217,524291],"serves":[196609,393217],"send":[196609,327681,393217,458753,524289],"solutions":[524289],"sample":[393217,458753],"search":[65537,262145],"string":[196609,393217],"shallow":[196609,393217],"support":[196609,327681,393217,458753,524289],"site":[131073],"sort":[65537],"specified":[196609,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_116.json b/docs/help/fti/FTI_116.json new file mode 100644 index 000000000..a312b052d --- /dev/null +++ b/docs/help/fti/FTI_116.json @@ -0,0 +1 @@ +{"typo":[262145],"tools":[524289],"title":[65537],"type":[196610,393219],"top":[196609,262145,393218],"topic":[1,196609,327681,393217,458753,524289],"tostring":[196609,393217],"threading":[524290],"try":[131073,196609,262145,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_117.json b/docs/help/fti/FTI_117.json new file mode 100644 index 000000000..71c59357b --- /dev/null +++ b/docs/help/fti/FTI_117.json @@ -0,0 +1 @@ +{"utilities":[524289],"useful":[524292],"used":[524289],"url":[262145]} \ No newline at end of file diff --git a/docs/help/fti/FTI_118.json b/docs/help/fti/FTI_118.json new file mode 100644 index 000000000..93ceaf8a5 --- /dev/null +++ b/docs/help/fti/FTI_118.json @@ -0,0 +1 @@ +{"various":[524289],"version":[327681,393217],"variety":[524289],"view":[327681,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_119.json b/docs/help/fti/FTI_119.json new file mode 100644 index 000000000..b7cffdd91 --- /dev/null +++ b/docs/help/fti/FTI_119.json @@ -0,0 +1 @@ +{"worldwide":[524289],"web":[262145]} \ No newline at end of file diff --git a/docs/help/fti/FTI_97.json b/docs/help/fti/FTI_97.json new file mode 100644 index 000000000..5ee8ec563 --- /dev/null +++ b/docs/help/fti/FTI_97.json @@ -0,0 +1 @@ +{"alliance":[196609,327681,393217,458753,524290],"assembly":[327681,393217],"automatically":[1],"administrator":[131073],"address":[262145],"available":[262145],"allows":[196609,393217]} \ No newline at end of file diff --git a/docs/help/fti/FTI_98.json b/docs/help/fti/FTI_98.json new file mode 100644 index 000000000..609c9d9ff --- /dev/null +++ b/docs/help/fti/FTI_98.json @@ -0,0 +1 @@ +{"box":[262145],"builder":[196609,327681,393217,458753,524289],"best":[524289],"based":[524289]} \ No newline at end of file diff --git a/docs/help/fti/FTI_99.json b/docs/help/fti/FTI_99.json new file mode 100644 index 000000000..eca7796c8 --- /dev/null +++ b/docs/help/fti/FTI_99.json @@ -0,0 +1 @@ +{"copy":[196609,327681,393218],"commonly":[524289],"createclass":[393217],"creates":[196609,393217],"current":[196612,393220],"contain":[262145,524289],"contact":[131073],"comments":[196609,327681,393217,458753,524289],"class":[196612,327688,393232,458756,524289],"cleanup":[196609,393217],"code":[524290],"continuous":[524289],"check":[262145],"copyright":[196609,327681,393217,458753,524289],"common":[458753],"constructor":[327681],"constructors":[393217],"classes":[458754,524289],"collection":[196609,393217,524290]} \ No newline at end of file diff --git a/docs/help/fti/FTI_Files.json b/docs/help/fti/FTI_Files.json new file mode 100644 index 000000000..6aa07dfa2 --- /dev/null +++ b/docs/help/fti/FTI_Files.json @@ -0,0 +1 @@ +["Gemstone GemTem Library - Redirect\u0000index.html\u000018","Gemstone GemTem Library - Search\u0000search.html\u000012","General Error\u0000html/GeneralError.htm\u000033","Class Methods\u0000html/Methods_T_gemstone_gemtem_Class.htm\u0000166","Page Not Found\u0000html/PageNotFound.htm\u000067","Class Constructor\u0000html/M_gemstone_gemtem_Class__ctor.htm\u0000104","Class Class\u0000html/T_gemstone_gemtem_Class.htm\u0000254","gemstone.gemtem Namespace\u0000html/N_gemstone_gemtem.htm\u000073","Gemstone GemTem Library Documentation\u0000html/gemstone.htm\u0000216"] \ No newline at end of file diff --git a/docs/help/gemstone.gemtem.xml b/docs/help/gemstone.gemtem.xml new file mode 100644 index 000000000..8633bcb3e --- /dev/null +++ b/docs/help/gemstone.gemtem.xml @@ -0,0 +1,22 @@ + + + + gemstone.gemtem + + + + + Sample class for new GemTem library. + + + + + + + gemstone.gemtem.Class + + + + + + \ No newline at end of file diff --git a/docs/help/html/GeneralError.htm b/docs/help/html/GeneralError.htm new file mode 100644 index 000000000..fa78bb5c7 --- /dev/null +++ b/docs/help/html/GeneralError.htm @@ -0,0 +1,29 @@ + + + + + + + + + General Error + + + + + + + + + + +
    +

    We're sorry, a general error has occurred.

    +

    Please try to load the page again. If the error persists, please contact the site administrator.

    +
    + + + diff --git a/docs/help/html/M_gemstone_gemtem_Class__ctor.htm b/docs/help/html/M_gemstone_gemtem_Class__ctor.htm new file mode 100644 index 000000000..f364a61d0 --- /dev/null +++ b/docs/help/html/M_gemstone_gemtem_Class__ctor.htm @@ -0,0 +1,27 @@ +Class Constructor
    GPA Gemstone Library

    Class Constructor

    Initializes a new instance of the Class class

    + Namespace: +  gemstone.gemtem
    + Assembly: +  gemstone.gemtem (in gemstone.gemtem.dll) Version: 1.0.0
    Syntax
    public Class()
    Request Example + View Source
    See Also
    \ No newline at end of file diff --git a/docs/help/html/Methods_T_gemstone_gemtem_Class.htm b/docs/help/html/Methods_T_gemstone_gemtem_Class.htm new file mode 100644 index 000000000..e807358a8 --- /dev/null +++ b/docs/help/html/Methods_T_gemstone_gemtem_Class.htm @@ -0,0 +1,10 @@ +Class Methods
    GPA Gemstone Library

    Class Methods

    The Class type exposes the following members.

    Methods
    +   + NameDescription
    Public methodEquals
    Determines whether the specified object is equal to the current object.
    (Inherited from Object.)
    Protected methodFinalize
    Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
    (Inherited from Object.)
    Public methodGetHashCode
    Serves as the default hash function.
    (Inherited from Object.)
    Public methodGetType
    Gets the Type of the current instance.
    (Inherited from Object.)
    Protected methodMemberwiseClone
    Creates a shallow copy of the current Object.
    (Inherited from Object.)
    Public methodToString
    Returns a string that represents the current object.
    (Inherited from Object.)
    Top
    See Also
    \ No newline at end of file diff --git a/docs/help/html/N_gemstone_gemtem.htm b/docs/help/html/N_gemstone_gemtem.htm new file mode 100644 index 000000000..987666d76 --- /dev/null +++ b/docs/help/html/N_gemstone_gemtem.htm @@ -0,0 +1,16 @@ +gemstone.gemtem Namespace
    GPA Gemstone Library

    gemstone.gemtem Namespace

    + The gemstone.gemtem namespace organizes all Gemstone library functionality + related to gemtem. The root gemtem namespace also includes common gemtem classes, + e.g., Class. +
    Classes
    +   + ClassDescription
    Public classClass
    + Sample class for new GemTem library. +
    \ No newline at end of file diff --git a/docs/help/html/PageNotFound.htm b/docs/help/html/PageNotFound.htm new file mode 100644 index 000000000..51960c62c --- /dev/null +++ b/docs/help/html/PageNotFound.htm @@ -0,0 +1,31 @@ + + + + + + + + + Page Not Found + + + + + + + + + + +
    +

    We're sorry, the page you requested cannot be found.

    +

    The URL might be misspelled or the page you are looking for is no longer available. If you entered +the web address, check that it doesn't contain a typo. You can use the search box at the top of the page to +try and locate the page.

    +
    + + + diff --git a/docs/help/html/T_gemstone_gemtem_Class.htm b/docs/help/html/T_gemstone_gemtem_Class.htm new file mode 100644 index 000000000..2d4861dd5 --- /dev/null +++ b/docs/help/html/T_gemstone_gemtem_Class.htm @@ -0,0 +1,35 @@ +Class Class
    GPA Gemstone Library

    Class Class

    + Sample class for new GemTem library. +
    Inheritance Hierarchy
    SystemObject
      gemstone.gemtemClass

    + Namespace: +  gemstone.gemtem
    + Assembly: +  gemstone.gemtem (in gemstone.gemtem.dll) Version: 1.0.0
    Syntax
    public class Class
    Request Example + View Source

    The Class type exposes the following members.

    Constructors
    +   + NameDescription
    Public methodClass
    Initializes a new instance of the Class class
    Top
    Methods
    +   + NameDescription
    Public methodEquals
    Determines whether the specified object is equal to the current object.
    (Inherited from Object.)
    Protected methodFinalize
    Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
    (Inherited from Object.)
    Public methodGetHashCode
    Serves as the default hash function.
    (Inherited from Object.)
    Public methodGetType
    Gets the Type of the current instance.
    (Inherited from Object.)
    Protected methodMemberwiseClone
    Creates a shallow copy of the current Object.
    (Inherited from Object.)
    Public methodToString
    Returns a string that represents the current object.
    (Inherited from Object.)
    Top
    See Also
    \ No newline at end of file diff --git a/docs/help/html/gemstone.htm b/docs/help/html/gemstone.htm new file mode 100644 index 000000000..f3ade09a8 --- /dev/null +++ b/docs/help/html/gemstone.htm @@ -0,0 +1,52 @@ +Gemstone GemTem Library Documentation
    GPA Gemstone Library

    Gemstone GemTem Library Documentation

    + The Gemstone GemTem Library is a useful collection of open source classes and methods for gemtem. +

    + + +
    About the Gemstone Libraries
    +

    + The + Gemstone Libraries, maintained by the + Grid Protection Alliance (GPA), are a collection of useful open source .NET code based on + continuous development since 2004. +

    +

    + These packages represent a focused re-envisioning of the best libraries, i.e., the "gems", from the + Grid Solutions Framework + (GSF), which has long been in use by various open source projects and electric power utilities worldwide. +

    +

    + The Gemstone Libraries contain a large variety of code useful for any .NET project with of hundreds of class libraries that extend or expand the functionality provided with .NET, + including many tools and protocol parsers that are useful for the electric power industry. Below are a few of the more commonly used Gemstone libraries: +

    +
    • +

      + + gemstone.threading + + organizes all Gemstone functionality related to threading. +

      +
    • +

      + + gemstone.expressions + + organizes all Gemstone functionality related to expressions and expression parsing. +

      +
    +
    + \ No newline at end of file diff --git a/docs/help/icons/AlertCaution.png b/docs/help/icons/AlertCaution.png new file mode 100644 index 000000000..78f246f04 Binary files /dev/null and b/docs/help/icons/AlertCaution.png differ diff --git a/docs/help/icons/AlertNote.png b/docs/help/icons/AlertNote.png new file mode 100644 index 000000000..dc7633374 Binary files /dev/null and b/docs/help/icons/AlertNote.png differ diff --git a/docs/help/icons/AlertSecurity.png b/docs/help/icons/AlertSecurity.png new file mode 100644 index 000000000..d40fcefc4 Binary files /dev/null and b/docs/help/icons/AlertSecurity.png differ diff --git a/docs/help/icons/CFW.gif b/docs/help/icons/CFW.gif new file mode 100644 index 000000000..cbcabf1b2 Binary files /dev/null and b/docs/help/icons/CFW.gif differ diff --git a/docs/help/icons/CodeExample.png b/docs/help/icons/CodeExample.png new file mode 100644 index 000000000..a3b9fba4c Binary files /dev/null and b/docs/help/icons/CodeExample.png differ diff --git a/docs/help/icons/Search.png b/docs/help/icons/Search.png new file mode 100644 index 000000000..42165b6d6 Binary files /dev/null and b/docs/help/icons/Search.png differ diff --git a/docs/help/icons/SectionCollapsed.png b/docs/help/icons/SectionCollapsed.png new file mode 100644 index 000000000..8ded1ebc6 Binary files /dev/null and b/docs/help/icons/SectionCollapsed.png differ diff --git a/docs/help/icons/SectionExpanded.png b/docs/help/icons/SectionExpanded.png new file mode 100644 index 000000000..b693921cc Binary files /dev/null and b/docs/help/icons/SectionExpanded.png differ diff --git a/docs/help/icons/TocClose.gif b/docs/help/icons/TocClose.gif new file mode 100644 index 000000000..e6d7b5edc Binary files /dev/null and b/docs/help/icons/TocClose.gif differ diff --git a/docs/help/icons/TocCollapsed.gif b/docs/help/icons/TocCollapsed.gif new file mode 100644 index 000000000..108d49238 Binary files /dev/null and b/docs/help/icons/TocCollapsed.gif differ diff --git a/docs/help/icons/TocExpanded.gif b/docs/help/icons/TocExpanded.gif new file mode 100644 index 000000000..f774d9bb6 Binary files /dev/null and b/docs/help/icons/TocExpanded.gif differ diff --git a/docs/help/icons/TocOpen.gif b/docs/help/icons/TocOpen.gif new file mode 100644 index 000000000..4992a98a2 Binary files /dev/null and b/docs/help/icons/TocOpen.gif differ diff --git a/docs/help/icons/favicon.ico b/docs/help/icons/favicon.ico new file mode 100644 index 000000000..62034a97a Binary files /dev/null and b/docs/help/icons/favicon.ico differ diff --git a/docs/help/icons/gemstone-square-48.png b/docs/help/icons/gemstone-square-48.png new file mode 100644 index 000000000..4ad4a974b Binary files /dev/null and b/docs/help/icons/gemstone-square-48.png differ diff --git a/docs/help/icons/help.png b/docs/help/icons/help.png new file mode 100644 index 000000000..945e89fb9 Binary files /dev/null and b/docs/help/icons/help.png differ diff --git a/docs/help/icons/privclass.gif b/docs/help/icons/privclass.gif new file mode 100644 index 000000000..0939694ce Binary files /dev/null and b/docs/help/icons/privclass.gif differ diff --git a/docs/help/icons/privdelegate.gif b/docs/help/icons/privdelegate.gif new file mode 100644 index 000000000..d3aa8a65e Binary files /dev/null and b/docs/help/icons/privdelegate.gif differ diff --git a/docs/help/icons/privenumeration.gif b/docs/help/icons/privenumeration.gif new file mode 100644 index 000000000..47f387ec2 Binary files /dev/null and b/docs/help/icons/privenumeration.gif differ diff --git a/docs/help/icons/privevent.gif b/docs/help/icons/privevent.gif new file mode 100644 index 000000000..30db46df7 Binary files /dev/null and b/docs/help/icons/privevent.gif differ diff --git a/docs/help/icons/privextension.gif b/docs/help/icons/privextension.gif new file mode 100644 index 000000000..51dd267f0 Binary files /dev/null and b/docs/help/icons/privextension.gif differ diff --git a/docs/help/icons/privfield.gif b/docs/help/icons/privfield.gif new file mode 100644 index 000000000..cbf70f7a3 Binary files /dev/null and b/docs/help/icons/privfield.gif differ diff --git a/docs/help/icons/privinterface.gif b/docs/help/icons/privinterface.gif new file mode 100644 index 000000000..f3b7950ad Binary files /dev/null and b/docs/help/icons/privinterface.gif differ diff --git a/docs/help/icons/privmethod.gif b/docs/help/icons/privmethod.gif new file mode 100644 index 000000000..71f882264 Binary files /dev/null and b/docs/help/icons/privmethod.gif differ diff --git a/docs/help/icons/privproperty.gif b/docs/help/icons/privproperty.gif new file mode 100644 index 000000000..b1e807465 Binary files /dev/null and b/docs/help/icons/privproperty.gif differ diff --git a/docs/help/icons/privstructure.gif b/docs/help/icons/privstructure.gif new file mode 100644 index 000000000..ed6d1ef68 Binary files /dev/null and b/docs/help/icons/privstructure.gif differ diff --git a/docs/help/icons/protclass.gif b/docs/help/icons/protclass.gif new file mode 100644 index 000000000..0f9294292 Binary files /dev/null and b/docs/help/icons/protclass.gif differ diff --git a/docs/help/icons/protdelegate.gif b/docs/help/icons/protdelegate.gif new file mode 100644 index 000000000..b209f2d81 Binary files /dev/null and b/docs/help/icons/protdelegate.gif differ diff --git a/docs/help/icons/protenumeration.gif b/docs/help/icons/protenumeration.gif new file mode 100644 index 000000000..cc96bb635 Binary files /dev/null and b/docs/help/icons/protenumeration.gif differ diff --git a/docs/help/icons/protevent.gif b/docs/help/icons/protevent.gif new file mode 100644 index 000000000..0e510b272 Binary files /dev/null and b/docs/help/icons/protevent.gif differ diff --git a/docs/help/icons/protextension.gif b/docs/help/icons/protextension.gif new file mode 100644 index 000000000..dcd07f5e1 Binary files /dev/null and b/docs/help/icons/protextension.gif differ diff --git a/docs/help/icons/protfield.gif b/docs/help/icons/protfield.gif new file mode 100644 index 000000000..9ae6833e0 Binary files /dev/null and b/docs/help/icons/protfield.gif differ diff --git a/docs/help/icons/protinterface.gif b/docs/help/icons/protinterface.gif new file mode 100644 index 000000000..a1b96d2c6 Binary files /dev/null and b/docs/help/icons/protinterface.gif differ diff --git a/docs/help/icons/protmethod.gif b/docs/help/icons/protmethod.gif new file mode 100644 index 000000000..2bc946873 Binary files /dev/null and b/docs/help/icons/protmethod.gif differ diff --git a/docs/help/icons/protoperator.gif b/docs/help/icons/protoperator.gif new file mode 100644 index 000000000..2cb75ab8b Binary files /dev/null and b/docs/help/icons/protoperator.gif differ diff --git a/docs/help/icons/protproperty.gif b/docs/help/icons/protproperty.gif new file mode 100644 index 000000000..55473d16e Binary files /dev/null and b/docs/help/icons/protproperty.gif differ diff --git a/docs/help/icons/protstructure.gif b/docs/help/icons/protstructure.gif new file mode 100644 index 000000000..af356a1db Binary files /dev/null and b/docs/help/icons/protstructure.gif differ diff --git a/docs/help/icons/pubclass.gif b/docs/help/icons/pubclass.gif new file mode 100644 index 000000000..1a968ab63 Binary files /dev/null and b/docs/help/icons/pubclass.gif differ diff --git a/docs/help/icons/pubdelegate.gif b/docs/help/icons/pubdelegate.gif new file mode 100644 index 000000000..0a43eb261 Binary files /dev/null and b/docs/help/icons/pubdelegate.gif differ diff --git a/docs/help/icons/pubenumeration.gif b/docs/help/icons/pubenumeration.gif new file mode 100644 index 000000000..46888adef Binary files /dev/null and b/docs/help/icons/pubenumeration.gif differ diff --git a/docs/help/icons/pubevent.gif b/docs/help/icons/pubevent.gif new file mode 100644 index 000000000..b9226da8b Binary files /dev/null and b/docs/help/icons/pubevent.gif differ diff --git a/docs/help/icons/pubextension.gif b/docs/help/icons/pubextension.gif new file mode 100644 index 000000000..6262d1cca Binary files /dev/null and b/docs/help/icons/pubextension.gif differ diff --git a/docs/help/icons/pubfield.gif b/docs/help/icons/pubfield.gif new file mode 100644 index 000000000..5aed17576 Binary files /dev/null and b/docs/help/icons/pubfield.gif differ diff --git a/docs/help/icons/pubinterface.gif b/docs/help/icons/pubinterface.gif new file mode 100644 index 000000000..c38a4c46a Binary files /dev/null and b/docs/help/icons/pubinterface.gif differ diff --git a/docs/help/icons/pubmethod.gif b/docs/help/icons/pubmethod.gif new file mode 100644 index 000000000..2c72988f5 Binary files /dev/null and b/docs/help/icons/pubmethod.gif differ diff --git a/docs/help/icons/puboperator.gif b/docs/help/icons/puboperator.gif new file mode 100644 index 000000000..0ebe10a7e Binary files /dev/null and b/docs/help/icons/puboperator.gif differ diff --git a/docs/help/icons/pubproperty.gif b/docs/help/icons/pubproperty.gif new file mode 100644 index 000000000..dfad7b430 Binary files /dev/null and b/docs/help/icons/pubproperty.gif differ diff --git a/docs/help/icons/pubstructure.gif b/docs/help/icons/pubstructure.gif new file mode 100644 index 000000000..1344416ab Binary files /dev/null and b/docs/help/icons/pubstructure.gif differ diff --git a/docs/help/icons/slMobile.gif b/docs/help/icons/slMobile.gif new file mode 100644 index 000000000..5edc31f94 Binary files /dev/null and b/docs/help/icons/slMobile.gif differ diff --git a/docs/help/icons/static.gif b/docs/help/icons/static.gif new file mode 100644 index 000000000..33723a92b Binary files /dev/null and b/docs/help/icons/static.gif differ diff --git a/docs/help/icons/xna.gif b/docs/help/icons/xna.gif new file mode 100644 index 000000000..9e6a9d4bd Binary files /dev/null and b/docs/help/icons/xna.gif differ diff --git a/docs/help/index.html b/docs/help/index.html new file mode 100644 index 000000000..23563c655 --- /dev/null +++ b/docs/help/index.html @@ -0,0 +1,14 @@ + + + + + + + Gemstone GemTem Library - Redirect + + +

    If you are not redirected automatically, follow this link to the default topic.

    + + diff --git a/docs/help/scripts/branding-Website.js b/docs/help/scripts/branding-Website.js new file mode 100644 index 000000000..dc31b27a8 --- /dev/null +++ b/docs/help/scripts/branding-Website.js @@ -0,0 +1,624 @@ +//=============================================================================================================== +// System : Sandcastle Help File Builder +// File : branding-Website.js +// Author : Eric Woodruff (Eric@EWoodruff.us) +// Updated : 03/04/2015 +// Note : Copyright 2014-2015, Eric Woodruff, All rights reserved +// Portions Copyright 2014 Sam Harwell, All rights reserved +// +// This file contains the methods necessary to implement the lightweight TOC and search functionality. +// +// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be +// distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This +// notice, the author's name, and all copyright notices must remain intact in all applications, documentation, +// and source files. +// +// Date Who Comments +// ============================================================================================================== +// 05/04/2014 EFW Created the code based on a combination of the lightweight TOC code from Sam Harwell and +// the existing search code from SHFB. +//=============================================================================================================== + +// Width of the TOC +var tocWidth; + +// Search method (0 = To be determined, 1 = ASPX, 2 = PHP, anything else = client-side script +var searchMethod = 0; + +// Table of contents script + +// Initialize the TOC by restoring its width from the cookie if present +function InitializeToc() +{ + tocWidth = parseInt(GetCookie("TocWidth", "280")); + ResizeToc(); + $(window).resize(SetNavHeight) +} + +function SetNavHeight() +{ + $leftNav = $("#leftNav") + $topicContent = $("#TopicContent") + leftNavPadding = $leftNav.outerHeight() - $leftNav.height() + contentPadding = $topicContent.outerHeight() - $topicContent.height() + // want outer height of left navigation div to match outer height of content + leftNavHeight = $topicContent.outerHeight() - leftNavPadding + $leftNav.css("min-height", leftNavHeight + "px") +} + +// Increase the TOC width +function OnIncreaseToc() +{ + if(tocWidth < 1) + tocWidth = 280; + else + tocWidth += 100; + + if(tocWidth > 680) + tocWidth = 0; + + ResizeToc(); + SetCookie("TocWidth", tocWidth); +} + +// Reset the TOC to its default width +function OnResetToc() +{ + tocWidth = 0; + + ResizeToc(); + SetCookie("TocWidth", tocWidth); +} + +// Resize the TOC width +function ResizeToc() +{ + var toc = document.getElementById("leftNav"); + + if(toc) + { + // Set TOC width + toc.style.width = tocWidth + "px"; + + var leftNavPadding = 10; + + document.getElementById("TopicContent").style.marginLeft = (tocWidth + leftNavPadding) + "px"; + + // Position images + document.getElementById("TocResize").style.left = (tocWidth + leftNavPadding) + "px"; + + // Hide/show increase TOC width image + document.getElementById("ResizeImageIncrease").style.display = (tocWidth >= 680) ? "none" : ""; + + // Hide/show reset TOC width image + document.getElementById("ResizeImageReset").style.display = (tocWidth < 680) ? "none" : ""; + } + + SetNavHeight() +} + +// Toggle a TOC entry between its collapsed and expanded state +function Toggle(item) +{ + var isExpanded = $(item).hasClass("tocExpanded"); + + $(item).toggleClass("tocExpanded tocCollapsed"); + + if(isExpanded) + { + Collapse($(item).parent()); + } + else + { + var childrenLoaded = $(item).parent().attr("data-childrenloaded"); + + if(childrenLoaded) + { + Expand($(item).parent()); + } + else + { + var tocid = $(item).next().attr("tocid"); + + $.ajax({ + url: "../toc/" + tocid + ".xml", + async: true, + dataType: "xml", + success: function(data) + { + BuildChildren($(item).parent(), data); + } + }); + } + } +} + +// HTML encode a value for use on the page +function HtmlEncode(value) +{ + // Create an in-memory div, set it's inner text (which jQuery automatically encodes) then grab the encoded + // contents back out. The div never exists on the page. + return $('
    ').text(value).html(); +} + +// Build the child entries of a TOC entry +function BuildChildren(tocDiv, data) +{ + var childLevel = +tocDiv.attr("data-toclevel") + 1; + var childTocLevel = childLevel >= 10 ? 10 : childLevel; + var elements = data.getElementsByTagName("HelpTOCNode"); + + var isRoot = true; + + if(data.getElementsByTagName("HelpTOC").length == 0) + { + // The first node is the root node of this group, don't show it again + isRoot = false; + } + + for(var i = elements.length - 1; i > 0 || (isRoot && i == 0); i--) + { + var childHRef, childId = elements[i].getAttribute("Url"); + + if(childId != null && childId.length > 5) + { + // The Url attribute has the form "html/{childId}.htm" + childHRef = "../" + childId; + childId = childId.substring(childId.lastIndexOf("/") + 1, childId.lastIndexOf(".")); + } + else + { + // The Id attribute is in raw form. There is no URL (empty container node). In this case, we'll + // just ignore it and go nowhere. It's a rare case that isn't worth trying to get the first child. + // Instead, we'll just expand the node (see below). + childHRef = "#"; + childId = elements[i].getAttribute("Id"); + } + + var existingItem = null; + + tocDiv.nextAll().each(function() + { + if(!existingItem && $(this).children().last("a").attr("tocid") == childId) + { + existingItem = $(this); + } + }); + + if(existingItem != null) + { + // First move the children of the existing item + var existingChildLevel = +existingItem.attr("data-toclevel"); + var doneMoving = false; + var inserter = tocDiv; + + existingItem.nextAll().each(function() + { + if(!doneMoving && +$(this).attr("data-toclevel") > existingChildLevel) + { + inserter.after($(this)); + inserter = $(this); + $(this).attr("data-toclevel", +$(this).attr("data-toclevel") + childLevel - existingChildLevel); + + if($(this).hasClass("current")) + $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel") + " current")); + else + $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel"))); + } + else + { + doneMoving = true; + } + }); + + // Now move the existing item itself + tocDiv.after(existingItem); + existingItem.attr("data-toclevel", childLevel); + existingItem.attr("class", "toclevel" + childLevel); + } + else + { + var hasChildren = elements[i].getAttribute("HasChildren"); + var childTitle = HtmlEncode(elements[i].getAttribute("Title")); + var expander = ""; + + if(hasChildren) + expander = ""; + + var text = "
    " + + expander + "" + + childTitle + "
    "; + + tocDiv.after(text); + } + } + + tocDiv.attr("data-childrenloaded", true); +} + +// Collapse a TOC entry +function Collapse(tocDiv) +{ + // Hide all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the + // current item's value. + var tocLevel = +tocDiv.attr("data-toclevel"); + var done = false; + + tocDiv.nextAll().each(function() + { + if(!done && +$(this).attr("data-toclevel") > tocLevel) + { + $(this).hide(); + } + else + { + done = true; + } + }); +} + +// Expand a TOC entry +function Expand(tocDiv) +{ + // Show all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the + // current item's value + var tocLevel = +tocDiv.attr("data-toclevel"); + var done = false; + + tocDiv.nextAll().each(function() + { + if(done) + { + return; + } + + var childTocLevel = +$(this).attr("data-toclevel"); + + if(childTocLevel == tocLevel + 1) + { + $(this).show(); + + if($(this).children("a").first().hasClass("tocExpanded")) + { + Expand($(this)); + } + } + else if(childTocLevel > tocLevel + 1) + { + // Ignore this node, handled by recursive calls + } + else + { + done = true; + } + }); +} + +// This is called to prepare for dragging the sizer div +function OnMouseDown(event) +{ + document.addEventListener("mousemove", OnMouseMove, true); + document.addEventListener("mouseup", OnMouseUp, true); + event.preventDefault(); +} + +// Resize the TOC as the sizer is dragged +function OnMouseMove(event) +{ + tocWidth = (event.clientX > 700) ? 700 : (event.clientX < 100) ? 100 : event.clientX; + + ResizeToc(); +} + +// Finish the drag operation when the mouse button is released +function OnMouseUp(event) +{ + document.removeEventListener("mousemove", OnMouseMove, true); + document.removeEventListener("mouseup", OnMouseUp, true); + + SetCookie("TocWidth", tocWidth); +} + +// Search functions + +// Transfer to the search page from a topic +function TransferToSearchPage() +{ + var searchText = document.getElementById("SearchTextBox").value.trim(); + + if(searchText.length != 0) + document.location.replace(encodeURI("../search.html?SearchText=" + searchText)); +} + +// Initiate a search when the search page loads +function OnSearchPageLoad() +{ + var queryString = decodeURI(document.location.search); + + if(queryString != "") + { + var idx, options = queryString.split(/[\?\=\&]/); + + for(idx = 0; idx < options.length; idx++) + if(options[idx] == "SearchText" && idx + 1 < options.length) + { + document.getElementById("txtSearchText").value = options[idx + 1]; + PerformSearch(); + break; + } + } +} + +// Perform a search using the best available method +function PerformSearch() +{ + var searchText = document.getElementById("txtSearchText").value; + var sortByTitle = document.getElementById("chkSortByTitle").checked; + var searchResults = document.getElementById("searchResults"); + + if(searchText.length == 0) + { + searchResults.innerHTML = "Nothing found"; + return; + } + + searchResults.innerHTML = "Searching..."; + + // Determine the search method if not done already. The ASPX and PHP searches are more efficient as they + // run asynchronously server-side. If they can't be used, it defaults to the client-side script below which + // will work but has to download the index files. For large help sites, this can be inefficient. + if(searchMethod == 0) + searchMethod = DetermineSearchMethod(); + + if(searchMethod == 1) + { + $.ajax({ + type: "GET", + url: encodeURI("SearchHelp.aspx?Keywords=" + searchText + "&SortByTitle=" + sortByTitle), + success: function(html) + { + searchResults.innerHTML = html; + } + }); + + return; + } + + if(searchMethod == 2) + { + $.ajax({ + type: "GET", + url: encodeURI("SearchHelp.php?Keywords=" + searchText + "&SortByTitle=" + sortByTitle), + success: function(html) + { + searchResults.innerHTML = html; + } + }); + + return; + } + + // Parse the keywords + var keywords = ParseKeywords(searchText); + + // Get the list of files. We'll be getting multiple files so we need to do this synchronously. + var fileList = []; + + $.ajax({ + type: "GET", + url: "fti/FTI_Files.json", + dataType: "json", + async: false, + success: function(data) + { + $.each(data, function(key, val) + { + fileList[key] = val; + }); + } + }); + + var letters = []; + var wordDictionary = {}; + var wordNotFound = false; + + // Load the keyword files for each keyword starting letter + for(var idx = 0; idx < keywords.length && !wordNotFound; idx++) + { + var letter = keywords[idx].substring(0, 1); + + if($.inArray(letter, letters) == -1) + { + letters.push(letter); + + $.ajax({ + type: "GET", + url: "fti/FTI_" + letter.charCodeAt(0) + ".json", + dataType: "json", + async: false, + success: function(data) + { + var wordCount = 0; + + $.each(data, function(key, val) + { + wordDictionary[key] = val; + wordCount++; + }); + + if(wordCount == 0) + wordNotFound = true; + } + }); + } + } + + if(wordNotFound) + searchResults.innerHTML = "Nothing found"; + else + searchResults.innerHTML = SearchForKeywords(keywords, fileList, wordDictionary, sortByTitle); +} + +// Determine the search method by seeing if the ASPX or PHP search pages are present and working +function DetermineSearchMethod() +{ + var method = 3; + + try + { + $.ajax({ + type: "GET", + url: "SearchHelp.aspx", + async: false, + success: function(html) + { + if(html.substring(0, 8) == "") + method = 1; + } + }); + + if(method == 3) + $.ajax({ + type: "GET", + url: "SearchHelp.php", + async: false, + success: function(html) + { + if(html.substring(0, 8) == "") + method = 2; + } + }); + } + catch(e) + { + } + + return method; +} + +// Split the search text up into keywords +function ParseKeywords(keywords) +{ + var keywordList = []; + var checkWord; + var words = keywords.split(/[\s!@#$%^&*()\-=+\[\]{}\\|<>;:'",.<>/?`~]+/); + + for(var idx = 0; idx < words.length; idx++) + { + checkWord = words[idx].toLowerCase(); + + if(checkWord.length > 2) + { + var charCode = checkWord.charCodeAt(0); + + if((charCode < 48 || charCode > 57) && $.inArray(checkWord, keywordList) == -1) + keywordList.push(checkWord); + } + } + + return keywordList; +} + +// Search for keywords and generate a block of HTML containing the results +function SearchForKeywords(keywords, fileInfo, wordDictionary, sortByTitle) +{ + var matches = [], matchingFileIndices = [], rankings = []; + var isFirst = true; + + for(var idx = 0; idx < keywords.length; idx++) + { + var word = keywords[idx]; + var occurrences = wordDictionary[word]; + + // All keywords must be found + if(occurrences == null) + return "Nothing found"; + + matches[word] = occurrences; + var occurrenceIndices = []; + + // Get a list of the file indices for this match. These are 64-bit numbers but JavaScript only does + // bit shifts on 32-bit values so we divide by 2^16 to get the same effect as ">> 16" and use floor() + // to truncate the result. + for(var ind in occurrences) + occurrenceIndices.push(Math.floor(occurrences[ind] / Math.pow(2, 16))); + + if(isFirst) + { + isFirst = false; + + for(var matchInd in occurrenceIndices) + matchingFileIndices.push(occurrenceIndices[matchInd]); + } + else + { + // After the first match, remove files that do not appear for all found keywords + for(var checkIdx = 0; checkIdx < matchingFileIndices.length; checkIdx++) + if($.inArray(matchingFileIndices[checkIdx], occurrenceIndices) == -1) + { + matchingFileIndices.splice(checkIdx, 1); + checkIdx--; + } + } + } + + if(matchingFileIndices.length == 0) + return "Nothing found"; + + // Rank the files based on the number of times the words occurs + for(var fileIdx = 0; fileIdx < matchingFileIndices.length; fileIdx++) + { + // Split out the title, filename, and word count + var matchingIdx = matchingFileIndices[fileIdx]; + var fileIndex = fileInfo[matchingIdx].split(/\0/); + + var title = fileIndex[0]; + var filename = fileIndex[1]; + var wordCount = parseInt(fileIndex[2]); + var matchCount = 0; + + for(var idx = 0; idx < keywords.length; idx++) + { + occurrences = matches[keywords[idx]]; + + for(var ind in occurrences) + { + var entry = occurrences[ind]; + + // These are 64-bit numbers but JavaScript only does bit shifts on 32-bit values so we divide + // by 2^16 to get the same effect as ">> 16" and use floor() to truncate the result. + if(Math.floor(entry / Math.pow(2, 16)) == matchingIdx) + matchCount += (entry & 0xFFFF); + } + } + + rankings.push({ Filename: filename, PageTitle: title, Rank: matchCount * 1000 / wordCount }); + + if(rankings.length > 99) + break; + } + + rankings.sort(function(x, y) + { + if(!sortByTitle) + return y.Rank - x.Rank; + + return x.PageTitle.localeCompare(y.PageTitle); + }); + + // Format and return the results + var content = "
      "; + + for(var r in rankings) + content += "
    1. " + + rankings[r].PageTitle + "
    2. "; + + content += "
    "; + + if(rankings.length < matchingFileIndices.length) + content += "

    Omitted " + (matchingFileIndices.length - rankings.length) + " more results

    "; + + return content; +} diff --git a/docs/help/scripts/branding.js b/docs/help/scripts/branding.js new file mode 100644 index 000000000..2acdea51a --- /dev/null +++ b/docs/help/scripts/branding.js @@ -0,0 +1,562 @@ +//=============================================================================================================== +// System : Sandcastle Help File Builder +// File : branding.js +// Author : Eric Woodruff (Eric@EWoodruff.us) +// Updated : 10/08/2015 +// Note : Copyright 2014-2015, Eric Woodruff, All rights reserved +// Portions Copyright 2010-2014 Microsoft, All rights reserved +// +// This file contains the methods necessary to implement the language filtering, collapsible section, and +// copy to clipboard options. +// +// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be +// distributed with the code and can be found at the project website: https://GitHub.com/EWSoftware/SHFB. This +// notice, the author's name, and all copyright notices must remain intact in all applications, documentation, +// and source files. +// +// Date Who Comments +// ============================================================================================================== +// 05/04/2014 EFW Created the code based on the MS Help Viewer script +//=============================================================================================================== + +// The IDs of all code snippet sets on the same page are stored so that we can keep them in synch when a tab is +// selected. +var allTabSetIds = new Array(); + +// The IDs of language-specific text (LST) spans are used as dictionary keys so that we can get access to the +// spans and update them when the user changes to a different language tab. The values of the dictionary +// objects are pipe separated language-specific attributes (lang1=value|lang2=value|lang3=value). The language +// ID can be specific (cs, vb, cpp, etc.) or may be a neutral entry (nu) which specifies text common to multiple +// languages. If a language is not present and there is no neutral entry, the span is hidden for all languages +// to which it does not apply. +var allLSTSetIds = new Object(); + +// Help 1 persistence support. This code must appear inline. +var isHelp1; + +var curLoc = document.location + "."; + +if(curLoc.indexOf("mk:@MSITStore") == 0) +{ + isHelp1 = true; + curLoc = "ms-its:" + curLoc.substring(14, curLoc.length - 1); + document.location.replace(curLoc); +} +else + if(curLoc.indexOf("ms-its:") == 0) + isHelp1 = true; + else + isHelp1 = false; + +// The OnLoad method +function OnLoad(defaultLanguage) +{ + var defLang; + + if(typeof (defaultLanguage) == "undefined" || defaultLanguage == null || defaultLanguage == "") + defLang = "vb"; + else + defLang = defaultLanguage; + + // In MS Help Viewer, the transform the topic is ran through can move the footer. Move it back where it + // belongs if necessary. + try + { + var footer = document.getElementById("pageFooter") + + if(footer) + { + var footerParent = document.body; + + if(footer.parentElement != footerParent) + { + footer.parentElement.removeChild(footer); + footerParent.appendChild(footer); + } + } + } + catch(e) + { + } + + var language = GetCookie("CodeSnippetContainerLanguage", defLang); + + // If LST exists on the page, set the LST to show the user selected programming language + UpdateLST(language); + + // If code snippet groups exist, set the current language for them + if(allTabSetIds.length > 0) + { + var i = 0; + + while(i < allTabSetIds.length) + { + var tabCount = 1; + + // The tab count may vary so find the last one in this set + while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null) + tabCount++; + + tabCount--; + + // If not grouped, skip it + if(tabCount > 1) + SetCurrentLanguage(allTabSetIds[i], language, tabCount); + + i++; + } + } + + InitializeToc(); +} + +// This is just a place holder. The website script implements this function to initialize it's in-page TOC pane +function InitializeToc() +{ +} + +// This function executes in the OnLoad event and ChangeTab action on code snippets. The function parameter +// is the user chosen programming language. This function iterates through the "allLSTSetIds" dictionary object +// to update the node value of the LST span tag per the user's chosen programming language. +function UpdateLST(language) +{ + for(var lstMember in allLSTSetIds) + { + var devLangSpan = document.getElementById(lstMember); + + if(devLangSpan != null) + { + // There may be a carriage return before the LST span in the content so the replace function below + // is used to trim the whitespace at the end of the previous node of the current LST node. + if(devLangSpan.previousSibling != null && devLangSpan.previousSibling.nodeValue != null) + devLangSpan.previousSibling.nodeValue = devLangSpan.previousSibling.nodeValue.replace(/\s+$/, ""); + + var langs = allLSTSetIds[lstMember].split("|"); + var k = 0; + var keyValue; + + while(k < langs.length) + { + keyValue = langs[k].split("="); + + if(keyValue[0] == language) + { + devLangSpan.innerHTML = keyValue[1]; + + // Help 1 and MS Help Viewer workaround. Add a space if the following text element starts + // with a space to prevent things running together. + if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null) + { + if(devLangSpan.parentNode.nextSibling.nodeValue != null && + !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/) && + (isHelp1 || devLangSpan.innerHTML == '>' || devLangSpan.innerHTML == ')')) + { + devLangSpan.innerHTML = keyValue[1] + " "; + } + } + break; + } + + k++; + } + + // If not found, default to the neutral language. If there is no neutral language entry, clear the + // content to hide it. + if(k >= langs.length) + { + if(language != "nu") + { + k = 0; + + while(k < langs.length) + { + keyValue = langs[k].split("="); + + if(keyValue[0] == "nu") + { + devLangSpan.innerHTML = keyValue[1]; + + // Help 1 and MS Help Viewer workaround. Add a space if the following text element + // starts with a space to prevent things running together. + if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null) + { + if(devLangSpan.parentNode.nextSibling.nodeValue != null && + !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/) && + (isHelp1 || devLangSpan.innerHTML == '>' || devLangSpan.innerHTML == ')')) + { + devLangSpan.innerHTML = keyValue[1] + " "; + } + } + break; + } + + k++; + } + } + + if(k >= langs.length) + devLangSpan.innerHTML = ""; + } + } + } +} + +// Get the specified cookie. If not found, return the specified default value. +function GetCookie(cookieName, defaultValue) +{ + if(isHelp1) + { + try + { + var globals = Help1Globals; + + var value = globals.Load(cookieName); + + if(value == null) + value = defaultValue; + + return value; + } + catch(e) + { + return defaultValue; + } + } + + var cookie = document.cookie.split("; "); + + for(var i = 0; i < cookie.length; i++) + { + var crumb = cookie[i].split("="); + + if(cookieName == crumb[0]) + return unescape(crumb[1]) + } + + return defaultValue; +} + +// Set the specified cookie to the specified value +function SetCookie(name, value) +{ + if(isHelp1) + { + try + { + var globals = Help1Globals; + + globals.Save(name, value); + } + catch(e) + { + } + + return; + } + + var today = new Date(); + + today.setTime(today.getTime()); + + // Set the expiration time to be 60 days from now (in milliseconds) + var expires_date = new Date(today.getTime() + (60 * 1000 * 60 * 60 * 24)); + + document.cookie = name + "=" + escape(value) + ";expires=" + expires_date.toGMTString() + ";path=/"; +} + +// Add a language-specific text ID +function AddLanguageSpecificTextSet(lstId) +{ + var keyValue = lstId.split("?") + + allLSTSetIds[keyValue[0]] = keyValue[1]; +} + +var clipboardHandler; + +// Add a language tab set ID +function AddLanguageTabSet(tabSetId) +{ + allTabSetIds.push(tabSetId); + + // Create the clipboard handler on first use + if(clipboardHandler == null && typeof (Clipboard) == "function") + { + clipboardHandler = new Clipboard('.copyCodeSnippet', + { + text: function (trigger) + { + // Get the code to copy to the clipboard from the active tab of the given tab set + var i = 1, tabSetId = trigger.id; + var pos = tabSetId.indexOf('_'); + + if(pos == -1) + return ""; + + tabSetId = tabSetId.substring(0, pos); + + do + { + contentId = tabSetId + "_code_Div" + i; + tabTemp = document.getElementById(contentId); + + if(tabTemp != null && tabTemp.style.display != "none") + break; + + i++; + + } while(tabTemp != null); + + if(tabTemp == null) + return ""; + + return document.getElementById(contentId).innerText; + } + }); + } +} + +// Switch the active tab for all of other code snippets +function ChangeTab(tabSetId, language, snippetIdx, snippetCount) +{ + SetCookie("CodeSnippetContainerLanguage", language); + + SetActiveTab(tabSetId, snippetIdx, snippetCount); + + // If LST exists on the page, set the LST to show the user selected programming language + UpdateLST(language); + + var i = 0; + + while(i < allTabSetIds.length) + { + // We just care about other snippets + if(allTabSetIds[i] != tabSetId) + { + // Other tab sets may not have the same number of tabs + var tabCount = 1; + + while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null) + tabCount++; + + tabCount--; + + // If not grouped, skip it + if(tabCount > 1) + SetCurrentLanguage(allTabSetIds[i], language, tabCount); + } + + i++; + } +} + +// Sets the current language in the specified tab set +function SetCurrentLanguage(tabSetId, language, tabCount) +{ + var tabIndex = 1; + + while(tabIndex <= tabCount) + { + var tabTemp = document.getElementById(tabSetId + "_tab" + tabIndex); + + if(tabTemp != null && tabTemp.innerHTML.indexOf("'" + language + "'") != -1) + break; + + tabIndex++; + } + + if(tabIndex > tabCount) + { + // Select the first non-disabled tab + tabIndex = 1; + + if(document.getElementById(tabSetId + "_tab1").className == "codeSnippetContainerTabPhantom") + { + tabIndex++; + + while(tabIndex <= tabCount) + { + var tab = document.getElementById(tabSetId + "_tab" + tabIndex); + + if(tab.className != "codeSnippetContainerTabPhantom") + { + tab.className = "codeSnippetContainerTabActive"; + document.getElementById(tabSetId + "_code_Div" + j).style.display = "block"; + break; + } + + tabIndex++; + } + } + } + + SetActiveTab(tabSetId, tabIndex, tabCount); +} + +// Set the active tab within a tab set +function SetActiveTab(tabSetId, tabIndex, tabCount) +{ + var i = 1; + + while(i <= tabCount) + { + var tabTemp = document.getElementById(tabSetId + "_tab" + i); + + if (tabTemp != null) + { + if(tabTemp.className == "codeSnippetContainerTabActive") + tabTemp.className = "codeSnippetContainerTab"; + else + if(tabTemp.className == "codeSnippetContainerTabPhantom") + tabTemp.style.display = "none"; + + var codeTemp = document.getElementById(tabSetId + "_code_Div" + i); + + if(codeTemp.style.display != "none") + codeTemp.style.display = "none"; + } + + i++; + } + + // Phantom tabs are shown or hidden as needed + if(document.getElementById(tabSetId + "_tab" + tabIndex).className != "codeSnippetContainerTabPhantom") + document.getElementById(tabSetId + "_tab" + tabIndex).className = "codeSnippetContainerTabActive"; + else + document.getElementById(tabSetId + "_tab" + tabIndex).style.display = "block"; + + document.getElementById(tabSetId + "_code_Div" + tabIndex).style.display = "block"; +} + +// Copy the code from the active tab of the given tab set to the clipboard +function CopyToClipboard(tabSetId) +{ + var tabTemp, contentId; + var i = 1; + + if(typeof (Clipboard) == "function") + return; + + do + { + contentId = tabSetId + "_code_Div" + i; + tabTemp = document.getElementById(contentId); + + if(tabTemp != null && tabTemp.style.display != "none") + break; + + i++; + + } while(tabTemp != null); + + if(tabTemp == null) + return; + + if(window.clipboardData) + { + try + { + window.clipboardData.setData("Text", document.getElementById(contentId).innerText); + } + catch(e) + { + alert("Permission denied. Enable copying to the clipboard."); + } + } + else if(window.netscape) + { + try + { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + + var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance( + Components.interfaces.nsIClipboard); + + if(!clip) + return; + + var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance( + Components.interfaces.nsITransferable); + + if(!trans) + return; + + trans.addDataFlavor("text/unicode"); + + var str = new Object(); + var len = new Object(); + var str = Components.classes["@mozilla.org/supports-string;1"].createInstance( + Components.interfaces.nsISupportsString); + + var copytext = document.getElementById(contentId).textContent; + + str.data = copytext; + trans.setTransferData("text/unicode", str, copytext.length * 2); + + var clipid = Components.interfaces.nsIClipboard; + + clip.setData(trans, null, clipid.kGlobalClipboard); + } + catch(e) + { + alert("Permission denied. Enter \"about:config\" in the address bar and double-click the \"signed.applets.codebase_principal_support\" setting to enable copying to the clipboard."); + } + } +} + +// Expand or collapse a section +function SectionExpandCollapse(togglePrefix) +{ + var image = document.getElementById(togglePrefix + "Toggle"); + var section = document.getElementById(togglePrefix + "Section"); + + if(image != null && section != null) + if(section.style.display == "") + { + image.src = image.src.replace("SectionExpanded.png", "SectionCollapsed.png"); + section.style.display = "none"; + } + else + { + image.src = image.src.replace("SectionCollapsed.png", "SectionExpanded.png"); + section.style.display = ""; + } +} + +// Expand or collapse a section when it has the focus and Enter is hit +function SectionExpandCollapse_CheckKey(togglePrefix, eventArgs) +{ + if(eventArgs.keyCode == 13) + SectionExpandCollapse(togglePrefix); +} + +// Help 1 persistence object. This requires a hidden input element on the page with a class of "userDataStyle" +// defined in the style sheet that implements the user data binary behavior: +// +var Help1Globals = +{ + UserDataCache: function() + { + var userData = document.getElementById("userDataCache"); + + return userData; + }, + + Load: function(key) + { + var userData = this.UserDataCache(); + + userData.load("userDataSettings"); + + var value = userData.getAttribute(key); + + return value; + }, + + Save: function(key, value) + { + var userData = this.UserDataCache(); + userData.setAttribute(key, value); + userData.save("userDataSettings"); + } +}; diff --git a/docs/help/scripts/clipboard.min.js b/docs/help/scripts/clipboard.min.js new file mode 100644 index 000000000..580433f1d --- /dev/null +++ b/docs/help/scripts/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v1.5.12 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,o){function i(a,c){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!c&&s)return s(a,!0);if(r)return r(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=n[a]={exports:{}};e[a][0].call(u.exports,function(t){var n=e[a][1][t];return i(n?n:t)},u,u.exports,t,e,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;ao;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],i=[];if(o&&e)for(var r=0,a=o.length;a>r;r++)o[r].fn!==e&&o[r].fn._!==e&&i.push(o[r]);return i.length?n[t]=i:delete n[t],this}},e.exports=o},{}],8:[function(e,n,o){!function(i,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if("undefined"!=typeof o)r(n,e("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(t,e){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=n(e),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},a=function(){function t(t,e){for(var n=0;n=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + + + +
    +
    +
    +
    + + +
    +
    +    + Sort by title +
    +
    +
    +
    +

    + Back

    +
    +
    + + diff --git a/docs/help/styles/branding-Help1.css b/docs/help/styles/branding-Help1.css new file mode 100644 index 000000000..8f7ba25a3 --- /dev/null +++ b/docs/help/styles/branding-Help1.css @@ -0,0 +1,40 @@ +/* Define the userData cache persistence mechanism for Help 1 files */ +.userDataStyle { + behavior: url(#default#userdata); +} + +/* Style adjustments for Help 1 */ +.pageBody { + padding-top: 0px 20px 0px 0px; +} + +table { + width: 95%; + padding-right: 20px; +} + +table.members { + width: 95%; + padding-right: 20px; +} + +th p { + padding-bottom: 0px; +} + +td p { + padding-bottom: 5px; +} + +.codeSnippetContainerTabs { + top: 1px; +} + +.codeSnippetToolBarText { + top: -13px; +} + +.codeSnippetContainerTabSingle { + padding: 2px 15px 0px 15px; + height: 22px; +} diff --git a/docs/help/styles/branding-HelpViewer.css b/docs/help/styles/branding-HelpViewer.css new file mode 100644 index 000000000..951621be6 --- /dev/null +++ b/docs/help/styles/branding-HelpViewer.css @@ -0,0 +1,48 @@ +/* Style adjustments for Help Viewer */ +.pageBody { + padding-top: 0px 20px 0px 0px; +} + +table { + width: 95%; + padding-right: 20px; +} + +table.members { + width: 95%; + padding-right: 20px; +} + +th p { + padding-bottom: 0px; +} + +td p { + padding-bottom: 5px; +} + +.codeSnippetContainerTabs { + top: 1px; +} + +.codeSnippetToolBarText { + top: -13px; +} + +.codeSnippetContainerTabSingle { + padding: 2px 15px 0px 15px; + height: 22px; +} + +.codeSnippetContainerTab a:visited { + color: #000000; +} + +.codeSnippetContainerTabActive a:visited { + color: #000000; +} + +span.keyword { + color: #0000ff; + font-weight: normal; +} diff --git a/docs/help/styles/branding-Website.css b/docs/help/styles/branding-Website.css new file mode 100644 index 000000000..d39e08c77 --- /dev/null +++ b/docs/help/styles/branding-Website.css @@ -0,0 +1,156 @@ +/* Style adjustments for websites */ +.pageBody { + padding: 0px 20px 0px 0px; +} +.topicContent { + margin-left: 280px; +} + +/* Lightweight TOC */ +.tocCollapsed { + background: url('../icons/TocCollapsed.gif') no-repeat scroll center; + width: 17px; + height: 20px; + overflow: hidden; +} +.tocExpanded { + background: url('../icons/TocExpanded.gif') no-repeat scroll center; + width: 17px; + height: 20px; + overflow: hidden; +} +.tocResize { + position: absolute; + top: 90px; + left: 300px; + width: 5px; + height: 20px; + padding-right: 5px; +} +.tocResize img { + border: none; + cursor: pointer; +} +div#leftNav { + float: left; + margin: 0px -1px 0 0; + width: 280px; + min-height: 10px; + position: relative; + border-right: 1px solid #b6b6b6; + padding-left: 10px; + padding-top: 15px; +} +div#tocNav { + font-family: 'Segoe UI' ,Verdana,Arial; + overflow-x: hidden; + line-height: normal; + margin: -20px 0 0 -4px; +} +div#tocNav > div { + overflow-x: hidden; + white-space: normal; + width: auto; + margin-bottom: 5px; +} +div#leftNav a, div#leftNav a:link, div#leftNav a:visited { + color: #1364c4; + text-decoration: none; +} +div#leftNav a:hover { + color: #3390b1; +} +div#tocNav > div > a, div#tocNav > div > a:link, div#tocNav > div > a:visited { + display: block; + margin-left: 18px; + overflow: hidden; +} +div#tocNav > div.current > a, div#tocNav > div.current > a:link, div#tocNav > div.current > a:visited { + color: #000; + font-weight: bold; + text-decoration: none; +} +div#tocNav > div > a.tocExpanded, div#tocNav > div > a.tocCollapsed { + float: left; + display: inline-block; + margin-left: 0; + vertical-align: top; +} +div#tocResizableEW { + cursor: e-resize; + width: 15px; + top: 0; + height: 100%; + position: absolute; + display: block; + font-size: 0.5px; + right: -7px; +} +.toclevel0:first-child { + margin-top: 16px; +} +div#tocNav > div.toclevel1 { + padding-left: 17px; +} +div#tocNav > div.toclevel2 { + padding-left: 34px; +} +div#tocNav > div.toclevel3 { + padding-left: 51px; +} +div#tocNav > div.toclevel4 { + padding-left: 68px; +} +div#tocNav > div.toclevel5 { + padding-left: 85px; +} +div#tocNav > div.toclevel6 { + padding-left: 102px; +} +div#tocNav > div.toclevel7 { + padding-left: 119px; +} +div#tocNav > div.toclevel8 { + padding-left: 136px; +} +div#tocNav > div.toclevel9 { + padding-left: 153px; +} +div#tocNav > div.toclevel10 { + padding-left: 170px; +} + +/* Search form */ +form#SearchForm { + float: right; + background-color: #eee; + width: 280px; +} +form#SearchForm input { + background-color: #eee; + border: 0; + height: 22px; + width: 230px; + color: #3b3b3b; + display: inline-block; + margin: 1px 0 0 0; + padding: 1px 4px 1px 10px; +} +form#SearchForm button { + background: url('../icons/Search.png') no-repeat scroll center; + background-color: #eee; + float: right; + border: 0; + margin: 3px 2px 0 0; + cursor: pointer; + color: #3b3b3b; + width: 19px; + height: 18px; + overflow: hidden; +} +.searchContainer { + width: 700px; + margin-top: 50px; + margin-left: auto; + margin-right: auto; +} diff --git a/docs/help/styles/branding-cs-CZ.css b/docs/help/styles/branding-cs-CZ.css new file mode 100644 index 000000000..f38de7497 --- /dev/null +++ b/docs/help/styles/branding-cs-CZ.css @@ -0,0 +1,3 @@ +/* Start CS-CZ locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-de-DE.css b/docs/help/styles/branding-de-DE.css new file mode 100644 index 000000000..4cf80badd --- /dev/null +++ b/docs/help/styles/branding-de-DE.css @@ -0,0 +1,3 @@ +/* Start DE-DE locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-en-US.css b/docs/help/styles/branding-en-US.css new file mode 100644 index 000000000..248cbe5a2 --- /dev/null +++ b/docs/help/styles/branding-en-US.css @@ -0,0 +1,3 @@ +/* Start EN-US locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-es-ES.css b/docs/help/styles/branding-es-ES.css new file mode 100644 index 000000000..4a7ebbd68 --- /dev/null +++ b/docs/help/styles/branding-es-ES.css @@ -0,0 +1,3 @@ +/* Start ES-ES locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-fr-FR.css b/docs/help/styles/branding-fr-FR.css new file mode 100644 index 000000000..d924dec96 --- /dev/null +++ b/docs/help/styles/branding-fr-FR.css @@ -0,0 +1,3 @@ +/* Start FR-FR locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-it-IT.css b/docs/help/styles/branding-it-IT.css new file mode 100644 index 000000000..36c6b224f --- /dev/null +++ b/docs/help/styles/branding-it-IT.css @@ -0,0 +1,3 @@ +/* Start IT-IT locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-ja-JP.css b/docs/help/styles/branding-ja-JP.css new file mode 100644 index 000000000..403aa6ddf --- /dev/null +++ b/docs/help/styles/branding-ja-JP.css @@ -0,0 +1,18 @@ +/* Start JA-JP locale-specific CSS */ +body +{ + font-family: Segoe UI, Verdana, Arial, MS Pゴシック; +} +pre +{ + font-family: Consolas, Courier, monospace, MS ゴシック; +} +span.tt +{ + font-family: Consolas, Courier, monospace, MS ゴシック; +} +span.code +{ + font-family: Consolas, Courier, monospace, MS ゴシック; +} +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-ko-KR.css b/docs/help/styles/branding-ko-KR.css new file mode 100644 index 000000000..2b46e923e --- /dev/null +++ b/docs/help/styles/branding-ko-KR.css @@ -0,0 +1,19 @@ +/* Start KO-KR locale-specific CSS */ +body +{ + font-family: Malgun Gothic, Segoe UI, Verdana, Arial; + font-size: 0.75em; /*9pt*/ +} +pre +{ + font-family: Consolas, Courier, monospace, 돋움체; +} +span.tt +{ + font-family: Consolas, Courier, monospace, 돋움체; +} +span.code +{ + font-family: Consolas, Courier, monospace, 돋움체; +} +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-pl-PL.css b/docs/help/styles/branding-pl-PL.css new file mode 100644 index 000000000..19e981032 --- /dev/null +++ b/docs/help/styles/branding-pl-PL.css @@ -0,0 +1,3 @@ +/* Start PL-PL locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-pt-BR.css b/docs/help/styles/branding-pt-BR.css new file mode 100644 index 000000000..a0683b0ef --- /dev/null +++ b/docs/help/styles/branding-pt-BR.css @@ -0,0 +1,3 @@ +/* Start PT-BR locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-ru-RU.css b/docs/help/styles/branding-ru-RU.css new file mode 100644 index 000000000..c31f83a44 --- /dev/null +++ b/docs/help/styles/branding-ru-RU.css @@ -0,0 +1,3 @@ +/* Start RU-RU locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-tr-TR.css b/docs/help/styles/branding-tr-TR.css new file mode 100644 index 000000000..81ca462ef --- /dev/null +++ b/docs/help/styles/branding-tr-TR.css @@ -0,0 +1,3 @@ +/* Start TR-TR locale-specific CSS */ + +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-zh-CN.css b/docs/help/styles/branding-zh-CN.css new file mode 100644 index 000000000..87e7090d7 --- /dev/null +++ b/docs/help/styles/branding-zh-CN.css @@ -0,0 +1,18 @@ +/* Start ZH-CN locale-specific CSS */ +body +{ + font-family: "Microsoft YaHei UI","Microsoft YaHei","SimSun","Segoe UI","Lucida Grande",Verdana,Arial,Helvetica,sans-serif +} +pre +{ + font-family: Consolas, Courier, monospace!important; +} +span.tt +{ + font-family: Consolas, Courier, monospace; +} +span.code +{ + font-family: Consolas, Courier, monospace; +} +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding-zh-TW.css b/docs/help/styles/branding-zh-TW.css new file mode 100644 index 000000000..eab654f8c --- /dev/null +++ b/docs/help/styles/branding-zh-TW.css @@ -0,0 +1,18 @@ +/* Start ZH-TW locale-specific CSS */ +body +{ + font-family: MS JhengHei, MingLiU, Segoe UI, Verdana, Arial; +} +pre +{ + font-family: Consolas, Courier, monospace, 細明體; +} +span.tt +{ + font-family: Consolas, Courier, monospace, 細明體; +} +span.code +{ + font-family: Consolas, Courier, monospace, 細明體; +} +/* End locale-specific CSS */ diff --git a/docs/help/styles/branding.css b/docs/help/styles/branding.css new file mode 100644 index 000000000..cb7b805e7 --- /dev/null +++ b/docs/help/styles/branding.css @@ -0,0 +1,696 @@ +/* General styles */ +body { + font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 15px; + padding: 0; + margin: 0; + margin-left: auto; + margin-right: auto; + color: #000; +} + +h1 { + font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 2.5em; + font-weight: normal; + margin-top: 0; + color: #000; +} + +h2, h3 { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-weight: normal; + margin: 0; + padding-bottom: 5px; + padding-top: 5px; + color: #000; +} + +h2 { + font-size: 1.769em; +} + +h3 { + font-size: 1.231em; +} + +h4, .subHeading { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 1.077em; + font-weight: normal; + margin: 0; + color: #000; +} + +.subHeading { + margin-top: 5px; +} + +h5, h6 { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 1em; + font-weight: normal; + line-height: 130%; + margin: 0; + color: #000; +} + +a, a:link { + text-decoration: none; + color: #1364c4; +} + + a:visited, a:active { + text-decoration: none; + color: #03697a; + } + + a:hover { + text-decoration: none; + color: #3390b1; + } + + a.button, a.button:active, a.button:hover { + float: right; + background-color: #0080c0; + color: white; + padding: 6px 12px; + font-size: 14px; + border: 1px solid transparent; + border-radius: 4px; + margin-left: 6px; + } + + a.button:link, a.button:visited { + color: white; + } + +img { + border: 0; +} + +p { + margin-top: 0; + margin-bottom: 0; + padding-bottom: 15px; + line-height: 18px; +} + +q { + font-style: italic; +} + +blockquote { + margin-top: 0px; +} + +table { + border-collapse: collapse; + padding: 0; + margin-bottom: 15px; + font-size: 15px; + width: 100%; +} + +td, th { + border-bottom: 1px solid #dbdbdb; + margin: 10px; + padding-top: 10px; + padding-bottom: 10px; + padding-right: 8px; + padding-left: 8px; +} + +th { + background-color: #ededed; + color: #636363; + text-align: left; + padding-top: 5px; + padding-bottom: 5px; +} + +td { + color: #2a2a2a; + vertical-align: top; +} + +table p:last-child { + padding-bottom: 0; +} + +table.members { + width: 100%; +} + + table.members td { + min-width: 72px; + } + + table.members img { + padding-right: 5px; + } + +div.alert img { + padding-right: 5px; +} + +ol { + margin-top: 0px; + margin-bottom: 10px; +} + + ol ol { + list-style-type: lower-alpha; + } + + ol ol ol { + list-style-type: lower-roman; + } + +ul { + margin-top: 0px; + margin-bottom: 10px; +} + +.noBullet { + list-style-type: none; + padding-left: 20px; +} + +ul ul { + list-style-type: circle; +} + + ul ul ul { + list-style-type: square; + } + +dt { + font-weight: 600; +} + +pre { + font-family: Consolas, Courier, monospace; + overflow: hidden; +} + +.pageHeader { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 600; + font-size: 22px; + background-color: #159957; + background-image: linear-gradient(120deg, #155799, #159957); + color: #fff; + padding: 5px 10px; + vertical-align: middle; + height: 25px; + line-height: 1.2; +} + +.pageBody { + padding: 0px; +} + +.topicContent { + padding: 10px 10px 15px 10px; + overflow: visible; + border-left: 1px solid #bbb; +} + +.pageFooter { + clear: both; + border-top: solid 1px #bbb; + padding: 10px; +} + +.feedbackLink { +} + +.iconColumn { + width: 100px; +} + +.seeAlsoStyle { +} + +table.titleTable td { + padding-top: 0px; + border-width: 0px; +} + +td.titleColumn { + margin-top: 0px; + padding-left: 0px; + vertical-align: middle; +} + +td.logoColumn { + padding-left: 0px; + padding-right: 10px; + vertical-align: middle; + width: 1px; +} + +td.logoColumnAbove { + padding: 0px 10px 0px 0px; + vertical-align: middle; +} + +span.selflink { + color: #000066; +} + +div.preliminary { + margin-top: 1em; + margin-bottom: 1em; + font-weight: bold; + color: #333333; +} + +div.caption { + font-weight: bold; + font-size: 1em; /*12pt*/ + color: #003399; + padding-top: 5px; + padding-bottom: 5px; +} + +.procedureSubHeading { + font-size: 1.1em; /*13.5pt*/ + font-weight: bold; +} + +.summary { +} + +/* Collapsible region styles */ +.collapsibleAreaRegion { + margin-top: 15px; + margin-bottom: 15px; +} + +.collapseToggle { + padding-right: 5px; +} + +.collapsibleRegionTitle { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif !important; + font-style: normal !important; + font-size: 1.769em; + margin-top: 9px; + margin-bottom: 19px; + padding-top: 20px; + padding-bottom: 5px; + cursor: pointer; +} + +.collapsibleSection { + padding: 0 0 0 20px; +} + +/* Syntax and code snippet styles */ +.codeSnippetContainer { + min-width: 260px; + margin-top: 10px; +} + +.codeSnippetContainerTabs { + height: 23px; + vertical-align: middle; + position: relative; + z-index: 1; +} + +.codeSnippetContainerTab { + padding: 0px 15px; + width: auto; + height: 22px; + color: #2a2a2a; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + float: left; +} + +.codeSnippetContainerTabActive { + background: #f8f8f8; + padding: 0px 15px; + width: auto; + height: 22px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; +} + +.codeSnippetContainerTabPhantom { + background: #f8f8f8; + padding: 0px 15px; + width: auto; + height: 22px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; + display: none; +} + +.codeSnippetContainerTabSingle { + background: #f8f8f8; + padding: 2px 15px 0px 15px; + width: auto; + height: 20px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-weight: bold; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; +} + +.codeSnippetContainerTab a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; +} + + .codeSnippetContainerTab a:link { + color: #000000; + } + + .codeSnippetContainerTab a:hover { + color: #136460; + } + +.codeSnippetContainerTabActive a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; + cursor: default; +} + + .codeSnippetContainerTabActive a:link { + color: #000000; + } + + .codeSnippetContainerTabActive a:hover { + color: #000000; + } + +.codeSnippetContainerTabPhantom a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; + cursor: default; +} + + .codeSnippetContainerTabPhantom a:link { + color: #000000; + } + +.codeSnippetContainerCodeContainer { + border: 1px solid #939393; + top: -1px; + margin-bottom: 12px; + position: relative; +} + +.codeSnippetToolBar { + width: auto; + height: auto; +} + +.codeSnippetToolBarText { + top: -8px; + width: auto; + height: 0px; + padding-right: 0px; + padding-left: 0px; + vertical-align: top; + float: right; + position: relative; +} + + .codeSnippetToolBarText a { + color: #1364c4; + text-decoration: none; + padding-left: 8px; + padding-right: 8px; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 10px; + font-style: normal !important; + text-decoration: none; + margin-right: 10px; + margin-left: 0px; + background-color: #ffffff; + } + + .codeSnippetToolBarText a:link { + color: #1364c4; + } + +.codeSnippetContainerCode { + margin: 0px; + padding: 10px; + width: auto; +} + + .codeSnippetContainerCode div { + margin: 0px; + padding: 0px; + } + + .codeSnippetContainerCode pre { + margin: 0px; + padding: 5px; + overflow: auto; + font-family: Consolas, Courier, monospace !important; + font-style: normal; + font-weight: normal; + -ms-word-wrap: normal; + } + + .codeSnippetContainerCode .keyword { + color: #0000ff; + font-weight: normal; + } + +.copyCodeSnippet { +} + +/* Keyword and phrase styles */ +span.code, span.command { + font-family: Consolas, Courier, monospace; + color: #000066; + background-color: #f4f4f4; +} + +span.ui { + font-weight: bold; +} + +span.math { + font-style: italic; +} + +span.input { + font-weight: bold; +} + +span.term { + font-style: italic; +} + +span.label { + font-weight: bold; +} + +span.foreignPhrase, span.phrase { + font-style: italic; +} + +span.placeholder { + font-style: italic; +} + +span.typeparameter { + font-style: italic; +} + +span.identifier { +} + +span.keyword { + font-weight: bold; +} + +span.parameter { + font-style: italic; +} + +dt span.parameter { + font-weight: normal; +} + +span.literal, span.literalValue { + color: #cc0000; +} + +span.comment { + color: #006633; +} + +span.introStyle { + color: #a9a9a9; +} + +span.nolink { + font-weight: bold; +} + +/* Auto-outline styles */ +ul.autoOutline { +} + +li.outlineSectionEntry { +} + +div.outlineSectionEntrySummary { +} + +/* Media styles */ +div.mediaNear { + text-align: left; + margin-top: 1em; + margin-bottom: 1em; +} + +div.mediaFar { + text-align: right; + margin-top: 1em; + margin-bottom: 1em; +} + +div.mediaCenter { + text-align: center; + margin-top: 1em; + margin-bottom: 1em; +} + +span.captionLead { + font-weight: bold; + margin-right: .5em; +} + +span.media img { + vertical-align: top; +} + +/* Glossary styles */ +div.glossaryDiv { +} + +div.glossaryLetterBar { +} + +hr.glossaryRule { +} + +h3.glossaryGroupHeading { + color: #808080; +} + +div.glossaryGroup { +} + +dl.glossaryGroupList { + margin: 0; + color: Black; +} + +dt.glossaryEntry { + margin-left: 2em; +} + +dd.glossaryEntry { + margin-left: 2em; + margin-bottom: 2em; +} + +div.relatedEntry { + margin-bottom: 4px; +} + +/* Bibliography styles */ +div.bibliographStyle { + padding-top: 5px; +} + +span.bibliographyNumber { +} + +span.bibliographyAuthor { + font-weight: bold; +} + +span.bibliographyTitle { + font-style: italic; +} + +span.bibliographyPublisher { +} + +sup.citation a:link a:visited a:active { + text-decoration: none; +} + +/* Placeholder for the Help 1 user data style class */ +.userDataStyle { +} + + + +.missing { + color: #dc143c; + font-size: 8.5pt; + font-weight: bold; +} diff --git a/docs/help/toc/N_gemstone_gemtem.xml b/docs/help/toc/N_gemstone_gemtem.xml new file mode 100644 index 000000000..ac3456200 --- /dev/null +++ b/docs/help/toc/N_gemstone_gemtem.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/help/toc/T_gemstone_gemtem_Class.xml b/docs/help/toc/T_gemstone_gemtem_Class.xml new file mode 100644 index 000000000..20498e1ea --- /dev/null +++ b/docs/help/toc/T_gemstone_gemtem_Class.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/help/toc/gemstone.xml b/docs/help/toc/gemstone.xml new file mode 100644 index 000000000..1b76b0259 --- /dev/null +++ b/docs/help/toc/gemstone.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/help/toc/roottoc.xml b/docs/help/toc/roottoc.xml new file mode 100644 index 000000000..95ea3aa55 --- /dev/null +++ b/docs/help/toc/roottoc.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico new file mode 100644 index 000000000..62034a97a Binary files /dev/null and b/docs/img/favicon.ico differ diff --git a/docs/img/gemstone-social-preview.png b/docs/img/gemstone-social-preview.png new file mode 100644 index 000000000..75044edd6 Binary files /dev/null and b/docs/img/gemstone-social-preview.png differ diff --git a/docs/img/gemstone-square-1000.png b/docs/img/gemstone-square-1000.png new file mode 100644 index 000000000..2398fea72 Binary files /dev/null and b/docs/img/gemstone-square-1000.png differ diff --git a/docs/img/gemstone-wide-600.png b/docs/img/gemstone-wide-600.png new file mode 100644 index 000000000..28e8e45e3 Binary files /dev/null and b/docs/img/gemstone-wide-600.png differ diff --git a/src/DocGen/common.tokens b/src/DocGen/common.tokens new file mode 100644 index 000000000..56e6401e7 --- /dev/null +++ b/src/DocGen/common.tokens @@ -0,0 +1,78 @@ + + + + + + + About the Gemstone Libraries + + + The + + Gemstone Libraries + Gemstone Libraries + https://github.com/gemstone/ + _blank + , maintained by the + + Grid Protection Alliance + Grid Protection Alliance + https://gridprotectionalliance.org/ + _blank + (GPA), are a collection of useful open source .NET code based on + + continuous development since 2004 + Grid Solutions Framework Contributions + https://github.com/GridProtectionAlliance/gsf/graphs/contributors + _blank + . + + + These packages represent a focused re-envisioning of the best libraries, i.e., the "gems", from the + + Grid Solutions Framework + Grid Solutions Framework + https://github.com/GridProtectionAlliance/gsf/ + _blank + + (GSF), which has long been in use by various open source projects and electric power utilities worldwide. + + + The Gemstone Libraries contain a large variety of code useful for any .NET project with of hundreds of class libraries that extend or expand the functionality provided with .NET, + including many tools and protocol parsers that are useful for the electric power industry. Below are a few of the more commonly used Gemstone libraries: + + + + + + + gemstone.threading + gemstone.threading + https://gemstone.github.io/threading/ + _blank + + + organizes all Gemstone functionality related to threading. + + + + + + + gemstone.expressions + gemstone.expressions + https://gemstone.github.io/expressions/ + _blank + + + organizes all Gemstone functionality related to expressions and expression parsing. + + + + + + + Sandcastle Help File Builder + https://GitHub.com/EWSoftware/SHFB + + \ No newline at end of file diff --git a/src/DocGen/content/gemstone.aml b/src/DocGen/content/gemstone.aml new file mode 100644 index 000000000..0d556d1d1 --- /dev/null +++ b/src/DocGen/content/gemstone.aml @@ -0,0 +1,11 @@ + + + + + + The Gemstone GemTem Library is a useful collection of open source classes and methods for gemtem. + + + AboutGemstoneSection + + diff --git a/src/DocGen/docgen.shfbproj b/src/DocGen/docgen.shfbproj new file mode 100644 index 000000000..1233aed13 --- /dev/null +++ b/src/DocGen/docgen.shfbproj @@ -0,0 +1,169 @@ + + + + + Debug + AnyCPU + 2.0 + e0ccff2a-c2df-436c-b34c-a20215da227a + 2017.9.26.0 + + docgen + docgen + docgen + + Cross-platform (.NET Core/.NET Standard) + ..\..\docs\help\ + Library Documentation + en-US + + + + + + + + + + + + + + Website + C#, Visual Basic, Managed C++, JavaScript + VS2013 + True + True + False + False + OnlyWarningsAndErrors + 100 + Attributes, InheritedMembers, InheritedFrameworkMembers, Protected, ProtectedInternalAsProtected, EditorBrowsableNever, NonBrowsable + + + + + {@HelpFormatOutputPaths} + + + + + + + {@TokenFiles} + + + + + + + + + + + + {@SyntaxFilters} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Gemstone GemTem Library + 1.0.0.0 + False + False + 6 + False + Blank + https://github.com/gemstone/gemtem/blob/master/LICENSE + Copyright &#169%3b 2019 Grid Protection Alliance + support%40gridprotectionalliance.org + GPA Support + + + &lt%3bspan class=&quot%3bsite-footer-credits&quot%3b&gt%3bThis documentation was generated by &lt%3ba href=&quot%3bhttps://github.com/EWSoftware/SHFB&quot%3b target=&quot%3b_blank&quot%3b&gt%3bSandcastle Help File Builder&lt%3b/a&gt%3b&lt%3b/span&gt%3b + + + + + + + + + MemberName + ..\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gemstone-square-48 + gemstone + + + + + + + + + + + + + + + + OnBuildSuccess + + \ No newline at end of file diff --git a/src/DocGen/icons/favicon.ico b/src/DocGen/icons/favicon.ico new file mode 100644 index 000000000..62034a97a Binary files /dev/null and b/src/DocGen/icons/favicon.ico differ diff --git a/src/DocGen/icons/gemstone-square-48.png b/src/DocGen/icons/gemstone-square-48.png new file mode 100644 index 000000000..4ad4a974b Binary files /dev/null and b/src/DocGen/icons/gemstone-square-48.png differ diff --git a/src/DocGen/icons/help.png b/src/DocGen/icons/help.png new file mode 100644 index 000000000..945e89fb9 Binary files /dev/null and b/src/DocGen/icons/help.png differ diff --git a/src/DocGen/layout.content b/src/DocGen/layout.content new file mode 100644 index 000000000..f6e56bb3c --- /dev/null +++ b/src/DocGen/layout.content @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/DocGen/styles/branding.css b/src/DocGen/styles/branding.css new file mode 100644 index 000000000..cb7b805e7 --- /dev/null +++ b/src/DocGen/styles/branding.css @@ -0,0 +1,696 @@ +/* General styles */ +body { + font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 15px; + padding: 0; + margin: 0; + margin-left: auto; + margin-right: auto; + color: #000; +} + +h1 { + font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 2.5em; + font-weight: normal; + margin-top: 0; + color: #000; +} + +h2, h3 { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-weight: normal; + margin: 0; + padding-bottom: 5px; + padding-top: 5px; + color: #000; +} + +h2 { + font-size: 1.769em; +} + +h3 { + font-size: 1.231em; +} + +h4, .subHeading { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 1.077em; + font-weight: normal; + margin: 0; + color: #000; +} + +.subHeading { + margin-top: 5px; +} + +h5, h6 { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; + font-size: 1em; + font-weight: normal; + line-height: 130%; + margin: 0; + color: #000; +} + +a, a:link { + text-decoration: none; + color: #1364c4; +} + + a:visited, a:active { + text-decoration: none; + color: #03697a; + } + + a:hover { + text-decoration: none; + color: #3390b1; + } + + a.button, a.button:active, a.button:hover { + float: right; + background-color: #0080c0; + color: white; + padding: 6px 12px; + font-size: 14px; + border: 1px solid transparent; + border-radius: 4px; + margin-left: 6px; + } + + a.button:link, a.button:visited { + color: white; + } + +img { + border: 0; +} + +p { + margin-top: 0; + margin-bottom: 0; + padding-bottom: 15px; + line-height: 18px; +} + +q { + font-style: italic; +} + +blockquote { + margin-top: 0px; +} + +table { + border-collapse: collapse; + padding: 0; + margin-bottom: 15px; + font-size: 15px; + width: 100%; +} + +td, th { + border-bottom: 1px solid #dbdbdb; + margin: 10px; + padding-top: 10px; + padding-bottom: 10px; + padding-right: 8px; + padding-left: 8px; +} + +th { + background-color: #ededed; + color: #636363; + text-align: left; + padding-top: 5px; + padding-bottom: 5px; +} + +td { + color: #2a2a2a; + vertical-align: top; +} + +table p:last-child { + padding-bottom: 0; +} + +table.members { + width: 100%; +} + + table.members td { + min-width: 72px; + } + + table.members img { + padding-right: 5px; + } + +div.alert img { + padding-right: 5px; +} + +ol { + margin-top: 0px; + margin-bottom: 10px; +} + + ol ol { + list-style-type: lower-alpha; + } + + ol ol ol { + list-style-type: lower-roman; + } + +ul { + margin-top: 0px; + margin-bottom: 10px; +} + +.noBullet { + list-style-type: none; + padding-left: 20px; +} + +ul ul { + list-style-type: circle; +} + + ul ul ul { + list-style-type: square; + } + +dt { + font-weight: 600; +} + +pre { + font-family: Consolas, Courier, monospace; + overflow: hidden; +} + +.pageHeader { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 600; + font-size: 22px; + background-color: #159957; + background-image: linear-gradient(120deg, #155799, #159957); + color: #fff; + padding: 5px 10px; + vertical-align: middle; + height: 25px; + line-height: 1.2; +} + +.pageBody { + padding: 0px; +} + +.topicContent { + padding: 10px 10px 15px 10px; + overflow: visible; + border-left: 1px solid #bbb; +} + +.pageFooter { + clear: both; + border-top: solid 1px #bbb; + padding: 10px; +} + +.feedbackLink { +} + +.iconColumn { + width: 100px; +} + +.seeAlsoStyle { +} + +table.titleTable td { + padding-top: 0px; + border-width: 0px; +} + +td.titleColumn { + margin-top: 0px; + padding-left: 0px; + vertical-align: middle; +} + +td.logoColumn { + padding-left: 0px; + padding-right: 10px; + vertical-align: middle; + width: 1px; +} + +td.logoColumnAbove { + padding: 0px 10px 0px 0px; + vertical-align: middle; +} + +span.selflink { + color: #000066; +} + +div.preliminary { + margin-top: 1em; + margin-bottom: 1em; + font-weight: bold; + color: #333333; +} + +div.caption { + font-weight: bold; + font-size: 1em; /*12pt*/ + color: #003399; + padding-top: 5px; + padding-bottom: 5px; +} + +.procedureSubHeading { + font-size: 1.1em; /*13.5pt*/ + font-weight: bold; +} + +.summary { +} + +/* Collapsible region styles */ +.collapsibleAreaRegion { + margin-top: 15px; + margin-bottom: 15px; +} + +.collapseToggle { + padding-right: 5px; +} + +.collapsibleRegionTitle { + font-family: 'Segoe UI Semibold', 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif !important; + font-style: normal !important; + font-size: 1.769em; + margin-top: 9px; + margin-bottom: 19px; + padding-top: 20px; + padding-bottom: 5px; + cursor: pointer; +} + +.collapsibleSection { + padding: 0 0 0 20px; +} + +/* Syntax and code snippet styles */ +.codeSnippetContainer { + min-width: 260px; + margin-top: 10px; +} + +.codeSnippetContainerTabs { + height: 23px; + vertical-align: middle; + position: relative; + z-index: 1; +} + +.codeSnippetContainerTab { + padding: 0px 15px; + width: auto; + height: 22px; + color: #2a2a2a; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + float: left; +} + +.codeSnippetContainerTabActive { + background: #f8f8f8; + padding: 0px 15px; + width: auto; + height: 22px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; +} + +.codeSnippetContainerTabPhantom { + background: #f8f8f8; + padding: 0px 15px; + width: auto; + height: 22px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; + display: none; +} + +.codeSnippetContainerTabSingle { + background: #f8f8f8; + padding: 2px 15px 0px 15px; + width: auto; + height: 20px; + color: #000000; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 12px; + font-weight: bold; + font-style: normal !important; + vertical-align: baseline; + border-top-color: #939393; + border-right-color: #939393; + border-left-color: #939393; + border-top-width: 1px; + border-right-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-left-style: solid; + float: left; +} + +.codeSnippetContainerTab a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; +} + + .codeSnippetContainerTab a:link { + color: #000000; + } + + .codeSnippetContainerTab a:hover { + color: #136460; + } + +.codeSnippetContainerTabActive a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; + cursor: default; +} + + .codeSnippetContainerTabActive a:link { + color: #000000; + } + + .codeSnippetContainerTabActive a:hover { + color: #000000; + } + +.codeSnippetContainerTabPhantom a { + top: 2px; + color: #000000; + font-weight: bold; + text-decoration: none; + position: relative; + cursor: default; +} + + .codeSnippetContainerTabPhantom a:link { + color: #000000; + } + +.codeSnippetContainerCodeContainer { + border: 1px solid #939393; + top: -1px; + margin-bottom: 12px; + position: relative; +} + +.codeSnippetToolBar { + width: auto; + height: auto; +} + +.codeSnippetToolBarText { + top: -8px; + width: auto; + height: 0px; + padding-right: 0px; + padding-left: 0px; + vertical-align: top; + float: right; + position: relative; +} + + .codeSnippetToolBarText a { + color: #1364c4; + text-decoration: none; + padding-left: 8px; + padding-right: 8px; + font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + font-size: 10px; + font-style: normal !important; + text-decoration: none; + margin-right: 10px; + margin-left: 0px; + background-color: #ffffff; + } + + .codeSnippetToolBarText a:link { + color: #1364c4; + } + +.codeSnippetContainerCode { + margin: 0px; + padding: 10px; + width: auto; +} + + .codeSnippetContainerCode div { + margin: 0px; + padding: 0px; + } + + .codeSnippetContainerCode pre { + margin: 0px; + padding: 5px; + overflow: auto; + font-family: Consolas, Courier, monospace !important; + font-style: normal; + font-weight: normal; + -ms-word-wrap: normal; + } + + .codeSnippetContainerCode .keyword { + color: #0000ff; + font-weight: normal; + } + +.copyCodeSnippet { +} + +/* Keyword and phrase styles */ +span.code, span.command { + font-family: Consolas, Courier, monospace; + color: #000066; + background-color: #f4f4f4; +} + +span.ui { + font-weight: bold; +} + +span.math { + font-style: italic; +} + +span.input { + font-weight: bold; +} + +span.term { + font-style: italic; +} + +span.label { + font-weight: bold; +} + +span.foreignPhrase, span.phrase { + font-style: italic; +} + +span.placeholder { + font-style: italic; +} + +span.typeparameter { + font-style: italic; +} + +span.identifier { +} + +span.keyword { + font-weight: bold; +} + +span.parameter { + font-style: italic; +} + +dt span.parameter { + font-weight: normal; +} + +span.literal, span.literalValue { + color: #cc0000; +} + +span.comment { + color: #006633; +} + +span.introStyle { + color: #a9a9a9; +} + +span.nolink { + font-weight: bold; +} + +/* Auto-outline styles */ +ul.autoOutline { +} + +li.outlineSectionEntry { +} + +div.outlineSectionEntrySummary { +} + +/* Media styles */ +div.mediaNear { + text-align: left; + margin-top: 1em; + margin-bottom: 1em; +} + +div.mediaFar { + text-align: right; + margin-top: 1em; + margin-bottom: 1em; +} + +div.mediaCenter { + text-align: center; + margin-top: 1em; + margin-bottom: 1em; +} + +span.captionLead { + font-weight: bold; + margin-right: .5em; +} + +span.media img { + vertical-align: top; +} + +/* Glossary styles */ +div.glossaryDiv { +} + +div.glossaryLetterBar { +} + +hr.glossaryRule { +} + +h3.glossaryGroupHeading { + color: #808080; +} + +div.glossaryGroup { +} + +dl.glossaryGroupList { + margin: 0; + color: Black; +} + +dt.glossaryEntry { + margin-left: 2em; +} + +dd.glossaryEntry { + margin-left: 2em; + margin-bottom: 2em; +} + +div.relatedEntry { + margin-bottom: 4px; +} + +/* Bibliography styles */ +div.bibliographStyle { + padding-top: 5px; +} + +span.bibliographyNumber { +} + +span.bibliographyAuthor { + font-weight: bold; +} + +span.bibliographyTitle { + font-style: italic; +} + +span.bibliographyPublisher { +} + +sup.citation a:link a:visited a:active { + text-decoration: none; +} + +/* Placeholder for the Help 1 user data style class */ +.userDataStyle { +} + + + +.missing { + color: #dc143c; + font-size: 8.5pt; + font-weight: bold; +} diff --git a/src/UnitTests/Tests.cs b/src/UnitTests/Tests.cs new file mode 100644 index 000000000..b6a79d4ff --- /dev/null +++ b/src/UnitTests/Tests.cs @@ -0,0 +1,40 @@ +//****************************************************************************************************** +// Tests.cs - Gbtc +// +// Copyright © 2019, Grid Protection Alliance. All Rights Reserved. +// +// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See +// the NOTICE file distributed with this work for additional information regarding copyright ownership. +// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this +// file except in compliance with the License. You may obtain a copy of the License at: +// +// http://opensource.org/licenses/MIT +// +// Unless agreed to in writing, the subject software distributed under the License is distributed on an +// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the +// License for the specific language governing permissions and limitations. +// +// Code Modification History: +// ---------------------------------------------------------------------------------------------------- +// 11/04/2019 - J. Ritchie Carroll +// Generated original version of source code. +// +//****************************************************************************************************** + +using System; +using System.Reflection; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using gemstone.gemtem; + +namespace UnitTests +{ + [TestClass] + public class Tests + { + [TestMethod] + public void FunctionalityTests() + { + Assert.IsTrue(true); + } + } +} diff --git a/src/UnitTests/UnitTests.csproj b/src/UnitTests/UnitTests.csproj new file mode 100644 index 000000000..affe5fe30 --- /dev/null +++ b/src/UnitTests/UnitTests.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.0 + false + + + + + + + + + + + + + + diff --git a/src/gemstone.gemtem.sln b/src/gemstone.gemtem.sln new file mode 100644 index 000000000..7b7687f2e --- /dev/null +++ b/src/gemstone.gemtem.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "gemstone.gemtem", "gemstone.gemtem\gemstone.gemtem.csproj", "{DC451A1B-3525-44D4-96C0-601CD98DD2C6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{F797F0F0-1E2F-4E5A-BFC5-B3EB8192E566}" +EndProject +Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "docgen", "DocGen\docgen.shfbproj", "{E0CCFF2A-C2DF-436C-B34C-A20215DA227A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{1B73EDFB-2410-4828-9835-FE353FC1C2BF}" + ProjectSection(SolutionItems) = preProject + ..\docs\_config.yml = ..\docs\_config.yml + ..\docs\README.md = ..\docs\README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "help", "help", "{A4BCD348-D68F-4516-8555-CD60C904B420}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "img", "img", "{DFC219B4-2CF1-49CC-B203-A0E1FF73E20A}" + ProjectSection(SolutionItems) = preProject + ..\docs\img\favicon.ico = ..\docs\img\favicon.ico + ..\docs\img\gemstone-square-1000.png = ..\docs\img\gemstone-square-1000.png + ..\docs\img\gemstone-wide-600.png = ..\docs\img\gemstone-wide-600.png + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DC451A1B-3525-44D4-96C0-601CD98DD2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC451A1B-3525-44D4-96C0-601CD98DD2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC451A1B-3525-44D4-96C0-601CD98DD2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC451A1B-3525-44D4-96C0-601CD98DD2C6}.Release|Any CPU.Build.0 = Release|Any CPU + {F797F0F0-1E2F-4E5A-BFC5-B3EB8192E566}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F797F0F0-1E2F-4E5A-BFC5-B3EB8192E566}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F797F0F0-1E2F-4E5A-BFC5-B3EB8192E566}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F797F0F0-1E2F-4E5A-BFC5-B3EB8192E566}.Release|Any CPU.Build.0 = Release|Any CPU + {E0CCFF2A-C2DF-436C-B34C-A20215DA227A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0CCFF2A-C2DF-436C-B34C-A20215DA227A}.Release|Any CPU.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E0CCFF2A-C2DF-436C-B34C-A20215DA227A} = {A4BCD348-D68F-4516-8555-CD60C904B420} + {A4BCD348-D68F-4516-8555-CD60C904B420} = {1B73EDFB-2410-4828-9835-FE353FC1C2BF} + {DFC219B4-2CF1-49CC-B203-A0E1FF73E20A} = {1B73EDFB-2410-4828-9835-FE353FC1C2BF} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A191CAE4-14B5-40B1-856F-1F9AF0C30E96} + EndGlobalSection +EndGlobal diff --git a/src/gemstone.gemtem/Class.cs b/src/gemstone.gemtem/Class.cs new file mode 100644 index 000000000..8d4527a67 --- /dev/null +++ b/src/gemstone.gemtem/Class.cs @@ -0,0 +1,32 @@ +//****************************************************************************************************** +// Class.cs - Gbtc +// +// Copyright © 2019, Grid Protection Alliance. All Rights Reserved. +// +// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See +// the NOTICE file distributed with this work for additional information regarding copyright ownership. +// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this +// file except in compliance with the License. You may obtain a copy of the License at: +// +// http://opensource.org/licenses/MIT +// +// Unless agreed to in writing, the subject software distributed under the License is distributed on an +// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the +// License for the specific language governing permissions and limitations. +// +// Code Modification History: +// ---------------------------------------------------------------------------------------------------- +// 11/04/2019 - J. Ritchie Carroll +// Generated original version of source code. +// +//****************************************************************************************************** + +namespace gemstone.gemtem +{ + /// + /// Sample class for new GemTem library. + /// + public class Class + { + } +} diff --git a/src/gemstone.gemtem/NamespaceDoc.cs b/src/gemstone.gemtem/NamespaceDoc.cs new file mode 100644 index 000000000..b0529ea84 --- /dev/null +++ b/src/gemstone.gemtem/NamespaceDoc.cs @@ -0,0 +1,37 @@ +//****************************************************************************************************** +// NamespaceDoc.cs - Gbtc +// +// Copyright © 2019, Grid Protection Alliance. All Rights Reserved. +// +// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See +// the NOTICE file distributed with this work for additional information regarding copyright ownership. +// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this +// file except in compliance with the License. You may obtain a copy of the License at: +// +// http://opensource.org/licenses/MIT +// +// Unless agreed to in writing, the subject software distributed under the License is distributed on an +// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the +// License for the specific language governing permissions and limitations. +// +// Code Modification History: +// ---------------------------------------------------------------------------------------------------- +// 10/16/2019 - J. Ritchie Carroll +// Generated original version of source code. +// +//****************************************************************************************************** + +using System.Runtime.CompilerServices; + +namespace gemstone.gemtem +{ + /// + /// The namespace organizes all Gemstone library functionality + /// related to gemtem. The root gemtem namespace also includes common gemtem classes, + /// e.g., . + /// + [CompilerGenerated] + class NamespaceDoc + { + } +} diff --git a/src/gemstone.gemtem/gemstone.gemtem.csproj b/src/gemstone.gemtem/gemstone.gemtem.csproj new file mode 100644 index 000000000..8b5053408 --- /dev/null +++ b/src/gemstone.gemtem/gemstone.gemtem.csproj @@ -0,0 +1,31 @@ + + + + netstandard2.0;netstandard2.1 + gemstone.gemtem + gemstone.gemtem + Grid Protection Alliance + Grid Protection Alliance + gemstone + GPA Gemstone GemTem Library + GPA Gemstone GemTem Library + Copyright © 2019 + https://github.com/gemstone + https://github.com/gemstone/gemstone.gemtem + git + true + MIT + GPA;gemstone;library;gemtem + 7.3 + true + + + + $(SolutionDir)..\build\$(Configuration) + + + + $(SolutionDir)..\build\$(Configuration)\$(AssemblyName).xml + + +