From 8bc07bfbd8284561eacc26f8827375bbf0eedb41 Mon Sep 17 00:00:00 2001 From: RyanJField Date: Wed, 9 Feb 2022 06:22:57 +0000 Subject: [PATCH 01/19] deploy: 42cc45a6587140d9f065c03f4cc109a843b12bc0 --- .nojekyll | 0 bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes closed.png | Bin 0 -> 132 bytes doc.png | Bin 0 -> 746 bytes doxygen.css | 1827 ++++++++++++++++++++++++++++++++++++ doxygen.svg | 26 + dynsections.js | 121 +++ folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes index.html | 75 ++ jquery.js | 35 + md__c_h_a_n_g_e_l_o_g.html | 86 ++ md__r_e_a_d_m_e.html | 108 +++ md_software_checklist.html | 252 +++++ menu.js | 127 +++ menudata.js | 27 + nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 82 ++ search/all_0.html | 37 + search/all_0.js | 4 + search/all_1.html | 37 + search/all_1.js | 4 + search/all_2.html | 37 + search/all_2.js | 4 + search/close.svg | 31 + search/mag_sel.svg | 74 ++ search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/pages_1.html | 37 + search/pages_1.js | 4 + search/pages_2.html | 37 + search/pages_2.js | 4 + search/search.css | 263 ++++++ search/search.js | 794 ++++++++++++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 18 + splitbar.png | Bin 0 -> 314 bytes sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + 51 files changed, 4206 insertions(+) create mode 100644 .nojekyll create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 closed.png create mode 100644 doc.png create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 index.html create mode 100644 jquery.js create mode 100644 md__c_h_a_n_g_e_l_o_g.html create mode 100644 md__r_e_a_d_m_e.html create mode 100644 md_software_checklist.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/close.svg create mode 100644 search/mag_sel.svg create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/pages_1.html create mode 100644 search/pages_1.js create mode 100644 search/pages_2.html create mode 100644 search/pages_2.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 splitbar.png create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/doc.png b/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..8e9cca3 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1827 @@ +/* The standard CSS for doxygen 1.9.2 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 200% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 90% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..3174bd7 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (la9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..e65cbf1 --- /dev/null +++ b/index.html @@ -0,0 +1,75 @@ + + + + + + + +cppDataPipeline: Main Page + + + + + + + + + +
+
+ + + + + + +
+
cppDataPipeline 0.3.0 +
+
C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
cppDataPipeline Documentation
+
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..c9ed3d9 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),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("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(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 de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){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[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.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},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.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},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(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?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===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]||se.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]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(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(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/md__c_h_a_n_g_e_l_o_g.html b/md__c_h_a_n_g_e_l_o_g.html new file mode 100644 index 0000000..40c63a8 --- /dev/null +++ b/md__c_h_a_n_g_e_l_o_g.html @@ -0,0 +1,86 @@ + + + + + + + +cppDataPipeline: Unreleased + + + + + + + + + +
+
+ + + + + + +
+
cppDataPipeline 0.3.0 +
+
C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
Unreleased
+
+
+
    +
  • Added functions for reading requested objects in the configuration file.
  • +
  • Reading of configuration YAML file using yaml-cpp.
  • +
  • Reading and writing of TOML files to represent parameters and distributions using toml11.
  • +
  • Reading and writing of arrays to/from a HDF5 file.
  • +
  • Hashing of file names and file content via SHA1.
  • +
  • Semantic versioning via a dedicated version class.
  • +
  • Added ability to talk to the RestAPI via the CURL library.
  • +
  • Use of spdlog as a logging library for plenty of output during debugging.
  • +
+
+
+ + + + diff --git a/md__r_e_a_d_m_e.html b/md__r_e_a_d_m_e.html new file mode 100644 index 0000000..ed2d41c --- /dev/null +++ b/md__r_e_a_d_m_e.html @@ -0,0 +1,108 @@ + + + + + + + +cppDataPipeline: FAIR Data Pipeline C++ API + + + + + + + + + +
+
+ + + + + + +
+
cppDataPipeline 0.3.0 +
+
C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
FAIR Data Pipeline C++ API
+
+
+

FDP C++ API License: LGPL v3 software-checklist DOI

+

+Contents

+ +

+Installation

+

You can build and test the library using CMake, this implementation requires C++11.

+

It is recomended that you install CURL prior to installation of this API

+

compile the library and tests by running:

+
$ cmake -Bbuild -DFDPAPI_BUILD_TESTS=ON
+
$ cmake --build build
+

Important For multi-config compilers such as Visual Studio xcode or ninja the config type needs to be set to Release otherwise the API will not build for example:

$ cmake -Bbuild -DFDPAPI_BUILD_TESTS=ON
+
$ cmake --build build --config=Release
+

+Outline

+

The main class the user will interact with is DataPipeline which has only the required methods such as link_read etc. This class has a member which is a pointer to an underlying DataPipelineImpl_ class which performs the various procedures required to handle the data. A logger has been used to give as much feedback to the user as possible, the verbosity being handled by a log level argument.

+

+Unit Tests

+

The unit tests use the local registry, this needs to be running prior to running the tests see: the CLI documentation

+

Tests can be lauched using the following command:

+

+Unix

+
$ ./build/bin/fdpapi-tests
+

+Windows

+
$ build\bin\Release\fdpapi-tests.exe
+
+
+ + + + diff --git a/md_software_checklist.html b/md_software_checklist.html new file mode 100644 index 0000000..da6f893 --- /dev/null +++ b/md_software_checklist.html @@ -0,0 +1,252 @@ + + + + + + + +cppDataPipeline: SCRC Software checklist + + + + + + + + + +
+
+ + + + + + +
+
cppDataPipeline 0.3.0 +
+
C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
SCRC Software checklist
+
+
+

This checklist has been developed by the Scottish Covid-19 Response Consortium and has been used to assess the software engineering aspects of "model readiness" for our six epidemiological models. This is intended to be part of a broader scheme to evaluate and describe suitability of model results to be used in decision making so this checklist covers only the software implementation and assumes that other documents cover questions about model validation, quality of science, data provenance and quality and policy readiness.

+

In order to use this checklist for the SCRC FAIR data pipeline components, three questions that apply only to software producing scientific results have been marked "models only" and for other software an N/A response can be given.

+

+Software details

+

+Model / software name

+
+

cppDataPipeline

+
+

+Date

+
+

18/01/22

+
+

+Version identifier

+
+

v0.2.0

+
+

+This assessment

+

+Filled in by

+

Name

+
+

Ryan Field

+
+

Role on project:

+
+

RSE

+
+

Person identifier:

+
+

https://github.com/RyanJField

+
+

+Overall statement

+

Do we have sufficient confidence in the correctness of the software to trust the results?

+

This is your overall judgement on the level of confidence based on all the aspects of the checklist. There is no formulaic way to arrive at this overall assessment based on the individual checklist answers but please explain how the measures in place combine to reach this level of confidence and make clear any caveats (eg applies for certain ways of using the software and not others).

+
+

- [ ] Yes

    +
  • [x] Yes, with caveats
  • +
  • [ ] No
  • +
+

The code is well written and tested through unit tests and continous integration, the documentation is still a work in progress.

+
+

+Checklist

+

Please use a statement from this list: "Sufficiently addressed", "Some work remaining or caveats", or "Needs to be addressed" to begin each response.

+

Additionally, for each question please explain the situation and include any relevant links (eg tool dashboards, documentation). The sub bullet points are to make the scope of the question clear and should be covered if relevant but do not have to be answered individually.

+

+Can a run be repeated and reproduce exactly the same results? (models only)

+
    +
  • How is stochasticity handled?
  • +
  • Is sufficient meta-data logged to enable a run to be reproduced: Is the exact code version recorded (and whether the repository was "clean"), including versions of dependent libraries (e.g. an environment.yml file or similar) along with all command line arguments and the content of any configuration files?
  • +
  • Is there up-to-date documentation which explains precisely how to run the code to reproduce existing results?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [ ] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
  • [x] N/A
  • +
+
+

+Are there appropriate tests? (And are they automated?)

+
    +
  • Are there unit tests? What is covered?
  • +
  • System and integration tests? Automated model validation tests?
  • +
  • Regression tests? (Which show whether changes to the code lead to changes in the output. Changes to the model will be expected to change the output, but many other changes, such as refactoring and adding new features, should not. Having these tests gives confidence that the code hasn't developed bugs due to unintentional changes.)
  • +
  • Is there CI?
  • +
  • Is everything you need to run the tests (including documentation) in the repository (or the data pipeline where appropriate)?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [x] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

Tests are run via GitHub Actions CI ([![software-checklist][https://img.shields.io/badge/software-checklist-3891A6]][https://github.com/FAIRDataPipeline/cppDataPipeline/blob/main/software-checklist.md]) with good code coverage.

+
+

+Are the scientific results of runs robust to different ways of running the code? (models only)

+
    +
  • Running on a different machine?
  • +
  • With different number of processes?
  • +
  • With different compilers and optimisation levels?
  • +
  • Running in debug mode?
  • +
+

(We don't require bitwise identical results here, but the broad conclusions after looking at the results of the test case should be the same.)

+
+

- [ ] Sufficiently addressed

    +
  • [ ] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
  • [x] N/A
  • +
+
+

+Has any sort of automated code checking been applied?

+
    +
  • For C++, this might just be the compiler output when run with "all warnings". It could also be more extensive static analysis. For other languages, it could be e.g. pylint, StaticLint.jl, etc.
  • +
  • If there are possible issues reported by such a tool, have they all been either fixed or understood to not be important?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [x] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

Minimal warnings are present with some notes.

+
+

+Is the code clean, generally understandable and readable and written according to good software engineering principles?

+
    +
  • Is it modular? Are the internal implementation details of one module hidden from other modules?
  • +
  • Commented where necessary?
  • +
  • Avoiding red flags such as very long functions, global variables, copy and pasted code, etc.?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [x] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

The code is organised and follows best practice but requires some refactoring to remove redundant code.

+
+

+Is there sufficient documentation?

+
    +
  • Is there a readme?
  • +
  • Does the code have user documentation?
  • +
  • Does the code have developer documentation?
  • +
  • Does the code have algorithm documentation? e.g. something that describes how the model is actually simulated, or inference is performed?
  • +
  • Is all the documentation up to date?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [x] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

There is a readme, however the code is in need of proper documentation.

+
+

+Is there suitable collaboration infrastructure?

+
    +
  • Is the code in a version-controlled repository?
  • +
  • Is there a license?
  • +
  • Is an issue tracker used?
  • +
  • Are there contribution guidelines?
  • +
+
+

- [x] Sufficiently addressed

    +
  • [ ] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

The code is stored in a GitHub, includes a license and uses github issues, for issue tracking.

+
+

+Are software dependencies listed and of appropriate quality?

+
+

- [x] Sufficiently addressed

    +
  • [ ] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
+

Dependencies are listed in the readme, with most being automatically included.

+
+

+Is input and output data handled carefully? (Models only)

+
    +
  • Does the code use the data pipeline for all inputs and outputs?
  • +
  • Is the code appropriately parameterized (i.e. have hard coded parameters been removed)?
  • +
+
+

- [ ] Sufficiently addressed

    +
  • [ ] Some work remaining or caveats
  • +
  • [ ] Needs to be addressed
  • +
  • [x] N/A
  • +
+
+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..54e81cf --- /dev/null +++ b/menu.js @@ -0,0 +1,127 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + var searchBox; + if (searchEnabled) { + if (serverSide) { + searchBox='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBox='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' + '' + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBox) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBox); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBox); + $('#searchBoxPos2').show(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..752f4f4 --- /dev/null +++ b/menudata.js @@ -0,0 +1,27 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}]} diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +cppDataPipeline: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 0000000..65f85b5 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..59482d3 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fair_20data_20pipeline_20c_2b_2b_20api_0',['FAIR Data Pipeline C++ API',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 0000000..af53dab --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..5e2db56 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scrc_20software_20checklist_0',['SCRC Software checklist',['../md_software_checklist.html',1,'']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 0000000..f8fe8ec --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..cd0d928 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unreleased_0',['Unreleased',['../md__c_h_a_n_g_e_l_o_g.html',1,'']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..2b9360b --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 0000000..34ca499 --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..59482d3 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fair_20data_20pipeline_20c_2b_2b_20api_0',['FAIR Data Pipeline C++ API',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 0000000..37ed0d6 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..5e2db56 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scrc_20software_20checklist_0',['SCRC Software checklist',['../md_software_checklist.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 0000000..878d7ec --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 0000000..cd0d928 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unreleased_0',['Unreleased',['../md__c_h_a_n_g_e_l_o_g.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..648a792 --- /dev/null +++ b/search/search.css @@ -0,0 +1,263 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 19px; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..ac8055d --- /dev/null +++ b/search/search.js @@ -0,0 +1,794 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var width = 400; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 0000000..2c6df75 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,18 @@ +var indexSectionsWithContent = +{ + 0: "fsu", + 1: "fsu" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Pages" +}; + diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..00d1c60 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file From 5e3a98df4569d6ca2d1496ef3ec50ddb9a971a59 Mon Sep 17 00:00:00 2001 From: RyanJField Date: Wed, 9 Feb 2022 06:40:38 +0000 Subject: [PATCH 02/19] deploy: 09060f79a91fb6fc0a5988c7d666d0eb9b01c68d --- annotated.html | 94 +++ api_8hxx.html | 220 +++++ api_8hxx_source.html | 179 ++++ api__object_8hxx_source.html | 126 +++ class_f_d_p_1_1_a_p_i-members.html | 94 +++ class_f_d_p_1_1_a_p_i.html | 482 +++++++++++ class_f_d_p_1_1_api_object-members.html | 93 +++ class_f_d_p_1_1_api_object.html | 383 +++++++++ class_f_d_p_1_1_config-members.html | 107 +++ class_f_d_p_1_1_config.html | 766 ++++++++++++++++++ class_f_d_p_1_1_data_pipeline-members.html | 91 +++ class_f_d_p_1_1_data_pipeline.html | 241 ++++++ ..._d_p_1_1_data_pipeline_impl__-members.html | 89 ++ class_f_d_p_1_1_data_pipeline_impl__.html | 257 ++++++ class_f_d_p_1_1_i_o_object-members.html | 98 +++ class_f_d_p_1_1_i_o_object.html | 685 ++++++++++++++++ ...d_p_1_1_versioning_1_1version-members.html | 101 +++ class_f_d_p_1_1_versioning_1_1version.html | 268 ++++++ ...d_p_1_1config__parsing__error-members.html | 83 ++ class_f_d_p_1_1config__parsing__error.html | 98 +++ class_f_d_p_1_1config__parsing__error.png | Bin 0 -> 645 bytes ...s_f_d_p_1_1json__parse__error-members.html | 83 ++ class_f_d_p_1_1json__parse__error.html | 98 +++ class_f_d_p_1_1json__parse__error.png | Bin 0 -> 612 bytes ..._d_p_1_1rest__apiquery__error-members.html | 83 ++ class_f_d_p_1_1rest__apiquery__error.html | 98 +++ class_f_d_p_1_1rest__apiquery__error.png | Bin 0 -> 651 bytes class_f_d_p_1_1sync__error-members.html | 83 ++ class_f_d_p_1_1sync__error.html | 98 +++ class_f_d_p_1_1sync__error.png | Bin 0 -> 521 bytes class_f_d_p_1_1validation__error-members.html | 83 ++ class_f_d_p_1_1validation__error.html | 98 +++ class_f_d_p_1_1validation__error.png | Bin 0 -> 571 bytes class_f_d_p_1_1write__error-members.html | 83 ++ class_f_d_p_1_1write__error.html | 98 +++ class_f_d_p_1_1write__error.png | Bin 0 -> 509 bytes classes.html | 105 +++ config_8hxx.html | 105 +++ config_8hxx_source.html | 221 +++++ data__io_8hxx_source.html | 150 ++++ datapipeline_8hxx.html | 110 +++ datapipeline_8hxx_source.html | 144 ++++ ... dir_39f1df2935b9bcc0c6b792c5d1359e85.html | 29 +- ... dir_68267d1309a1af8e8297ef4c3efbcdba.html | 21 +- dir_7b5d38f1875f1b693f62ca6a108a1129.html | 79 ++ dir_a7fa5847c07dc92c5227f8a150238560.html | 79 ++ dir_ac6c6686346e4bb6ee59787dd26cbe81.html | 92 +++ dir_cb3c39cc4ab347a95dfc53ab4ca55b3c.html | 79 ++ dir_d44c64559bbebec7f509842c48db8b23.html | 83 ++ dir_d98af0b859cb0744225e11c767d17cdb.html | 89 ++ dir_f537a5f098b413116eae11cd84c41a43.html | 88 ++ exceptions_8hxx_source.html | 127 +++ fdp_8hxx_source.html | 125 +++ files.html | 96 +++ functions.html | 199 +++++ functions_func.html | 199 +++++ hierarchy.html | 93 +++ index.html | 41 +- io__object_8hxx_source.html | 185 +++++ json_8hxx.html | 133 +++ json_8hxx_source.html | 91 +++ logging_8hxx.html | 149 ++++ logging_8hxx_source.html | 95 +++ md__r_e_a_d_m_e.html | 108 --- md_software_checklist.html | 252 ------ menudata.js | 47 +- metadata_8hxx.html | 341 ++++++++ metadata_8hxx_source.html | 130 +++ namespace_f_d_p_1_1_versioning.html | 144 ++++ namespacemembers.html | 75 ++ namespacemembers_enum.html | 75 ++ namespaces.html | 94 +++ search/all_0.js | 7 +- search/all_1.js | 2 +- search/{pages_1.html => all_10.html} | 2 +- search/all_10.js | 5 + search/{pages_2.html => all_11.html} | 2 +- search/all_11.js | 6 + search/all_2.js | 10 +- search/all_3.html | 37 + search/all_3.js | 6 + search/all_4.html | 37 + search/all_4.js | 4 + search/all_5.html | 37 + search/all_5.js | 7 + search/all_6.html | 37 + search/all_6.js | 37 + search/all_7.html | 37 + search/all_7.js | 7 + search/all_8.html | 37 + search/all_8.js | 6 + search/all_9.html | 37 + search/all_9.js | 7 + search/all_a.html | 37 + search/all_a.js | 7 + search/all_b.html | 37 + search/all_b.js | 6 + search/all_c.html | 37 + search/all_c.js | 5 + search/all_d.html | 37 + search/all_d.js | 12 + search/all_e.html | 37 + search/all_e.js | 7 + search/all_f.html | 37 + search/all_f.js | 5 + search/classes_0.html | 37 + search/classes_0.js | 5 + search/classes_1.html | 37 + search/classes_1.js | 5 + search/classes_2.html | 37 + search/classes_2.js | 5 + search/classes_3.html | 37 + search/classes_3.js | 4 + search/classes_4.html | 37 + search/classes_4.js | 4 + search/classes_5.html | 37 + search/classes_5.js | 4 + search/classes_6.html | 37 + search/classes_6.js | 4 + search/classes_7.html | 37 + search/classes_7.js | 5 + search/classes_8.html | 37 + search/classes_8.js | 4 + search/enums_0.html | 37 + search/enums_0.js | 4 + search/enums_1.html | 37 + search/enums_1.js | 4 + search/enumvalues_0.html | 37 + search/enumvalues_0.js | 4 + search/enumvalues_1.html | 37 + search/enumvalues_1.js | 4 + search/enumvalues_2.html | 37 + search/enumvalues_2.js | 4 + search/enumvalues_3.html | 37 + search/enumvalues_3.js | 6 + search/files_0.html | 37 + search/files_0.js | 4 + search/files_1.html | 37 + search/files_1.js | 4 + search/files_2.html | 37 + search/files_2.js | 4 + search/files_3.html | 37 + search/files_3.js | 4 + search/files_4.html | 37 + search/files_4.js | 4 + search/files_5.html | 37 + search/files_5.js | 4 + search/files_6.html | 37 + search/files_6.js | 4 + search/functions_0.html | 37 + search/functions_0.js | 6 + search/functions_1.html | 37 + search/functions_1.js | 10 + search/functions_10.html | 37 + search/functions_10.js | 6 + search/functions_2.html | 37 + search/functions_2.js | 5 + search/functions_3.html | 37 + search/functions_3.js | 4 + search/functions_4.html | 37 + search/functions_4.js | 5 + search/functions_5.html | 37 + search/functions_5.js | 37 + search/functions_6.html | 37 + search/functions_6.js | 7 + search/functions_7.html | 37 + search/functions_7.js | 6 + search/functions_8.html | 37 + search/functions_8.js | 5 + search/functions_9.html | 37 + search/functions_9.js | 5 + search/functions_a.html | 37 + search/functions_a.js | 4 + search/functions_b.html | 37 + search/functions_b.js | 5 + search/functions_c.html | 37 + search/functions_c.js | 7 + search/functions_d.html | 37 + search/functions_d.js | 5 + search/functions_e.html | 37 + search/functions_e.js | 4 + search/functions_f.html | 37 + search/functions_f.js | 4 + search/namespaces_0.html | 37 + search/namespaces_0.js | 4 + search/pages_0.js | 2 +- search/pages_1.js | 4 - search/pages_2.js | 4 - search/searchdata.js | 29 +- search/variables_0.html | 37 + search/variables_0.js | 4 + semver_8hxx.html | 120 +++ semver_8hxx_source.html | 234 ++++++ 193 files changed, 12092 insertions(+), 409 deletions(-) create mode 100644 annotated.html create mode 100644 api_8hxx.html create mode 100644 api_8hxx_source.html create mode 100644 api__object_8hxx_source.html create mode 100644 class_f_d_p_1_1_a_p_i-members.html create mode 100644 class_f_d_p_1_1_a_p_i.html create mode 100644 class_f_d_p_1_1_api_object-members.html create mode 100644 class_f_d_p_1_1_api_object.html create mode 100644 class_f_d_p_1_1_config-members.html create mode 100644 class_f_d_p_1_1_config.html create mode 100644 class_f_d_p_1_1_data_pipeline-members.html create mode 100644 class_f_d_p_1_1_data_pipeline.html create mode 100644 class_f_d_p_1_1_data_pipeline_impl__-members.html create mode 100644 class_f_d_p_1_1_data_pipeline_impl__.html create mode 100644 class_f_d_p_1_1_i_o_object-members.html create mode 100644 class_f_d_p_1_1_i_o_object.html create mode 100644 class_f_d_p_1_1_versioning_1_1version-members.html create mode 100644 class_f_d_p_1_1_versioning_1_1version.html create mode 100644 class_f_d_p_1_1config__parsing__error-members.html create mode 100644 class_f_d_p_1_1config__parsing__error.html create mode 100644 class_f_d_p_1_1config__parsing__error.png create mode 100644 class_f_d_p_1_1json__parse__error-members.html create mode 100644 class_f_d_p_1_1json__parse__error.html create mode 100644 class_f_d_p_1_1json__parse__error.png create mode 100644 class_f_d_p_1_1rest__apiquery__error-members.html create mode 100644 class_f_d_p_1_1rest__apiquery__error.html create mode 100644 class_f_d_p_1_1rest__apiquery__error.png create mode 100644 class_f_d_p_1_1sync__error-members.html create mode 100644 class_f_d_p_1_1sync__error.html create mode 100644 class_f_d_p_1_1sync__error.png create mode 100644 class_f_d_p_1_1validation__error-members.html create mode 100644 class_f_d_p_1_1validation__error.html create mode 100644 class_f_d_p_1_1validation__error.png create mode 100644 class_f_d_p_1_1write__error-members.html create mode 100644 class_f_d_p_1_1write__error.html create mode 100644 class_f_d_p_1_1write__error.png create mode 100644 classes.html create mode 100644 config_8hxx.html create mode 100644 config_8hxx_source.html create mode 100644 data__io_8hxx_source.html create mode 100644 datapipeline_8hxx.html create mode 100644 datapipeline_8hxx_source.html rename md__c_h_a_n_g_e_l_o_g.html => dir_39f1df2935b9bcc0c6b792c5d1359e85.html (73%) rename pages.html => dir_68267d1309a1af8e8297ef4c3efbcdba.html (72%) create mode 100644 dir_7b5d38f1875f1b693f62ca6a108a1129.html create mode 100644 dir_a7fa5847c07dc92c5227f8a150238560.html create mode 100644 dir_ac6c6686346e4bb6ee59787dd26cbe81.html create mode 100644 dir_cb3c39cc4ab347a95dfc53ab4ca55b3c.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_d98af0b859cb0744225e11c767d17cdb.html create mode 100644 dir_f537a5f098b413116eae11cd84c41a43.html create mode 100644 exceptions_8hxx_source.html create mode 100644 fdp_8hxx_source.html create mode 100644 files.html create mode 100644 functions.html create mode 100644 functions_func.html create mode 100644 hierarchy.html create mode 100644 io__object_8hxx_source.html create mode 100644 json_8hxx.html create mode 100644 json_8hxx_source.html create mode 100644 logging_8hxx.html create mode 100644 logging_8hxx_source.html delete mode 100644 md__r_e_a_d_m_e.html delete mode 100644 md_software_checklist.html create mode 100644 metadata_8hxx.html create mode 100644 metadata_8hxx_source.html create mode 100644 namespace_f_d_p_1_1_versioning.html create mode 100644 namespacemembers.html create mode 100644 namespacemembers_enum.html create mode 100644 namespaces.html rename search/{pages_1.html => all_10.html} (95%) create mode 100644 search/all_10.js rename search/{pages_2.html => all_11.html} (95%) create mode 100644 search/all_11.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/classes_4.html create mode 100644 search/classes_4.js create mode 100644 search/classes_5.html create mode 100644 search/classes_5.js create mode 100644 search/classes_6.html create mode 100644 search/classes_6.js create mode 100644 search/classes_7.html create mode 100644 search/classes_7.js create mode 100644 search/classes_8.html create mode 100644 search/classes_8.js create mode 100644 search/enums_0.html create mode 100644 search/enums_0.js create mode 100644 search/enums_1.html create mode 100644 search/enums_1.js create mode 100644 search/enumvalues_0.html create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.html create mode 100644 search/enumvalues_1.js create mode 100644 search/enumvalues_2.html create mode 100644 search/enumvalues_2.js create mode 100644 search/enumvalues_3.html create mode 100644 search/enumvalues_3.js create mode 100644 search/files_0.html create mode 100644 search/files_0.js create mode 100644 search/files_1.html create mode 100644 search/files_1.js create mode 100644 search/files_2.html create mode 100644 search/files_2.js create mode 100644 search/files_3.html create mode 100644 search/files_3.js create mode 100644 search/files_4.html create mode 100644 search/files_4.js create mode 100644 search/files_5.html create mode 100644 search/files_5.js create mode 100644 search/files_6.html create mode 100644 search/files_6.js create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/functions_1.html create mode 100644 search/functions_1.js create mode 100644 search/functions_10.html create mode 100644 search/functions_10.js create mode 100644 search/functions_2.html create mode 100644 search/functions_2.js create mode 100644 search/functions_3.html create mode 100644 search/functions_3.js create mode 100644 search/functions_4.html create mode 100644 search/functions_4.js create mode 100644 search/functions_5.html create mode 100644 search/functions_5.js create mode 100644 search/functions_6.html create mode 100644 search/functions_6.js create mode 100644 search/functions_7.html create mode 100644 search/functions_7.js create mode 100644 search/functions_8.html create mode 100644 search/functions_8.js create mode 100644 search/functions_9.html create mode 100644 search/functions_9.js create mode 100644 search/functions_a.html create mode 100644 search/functions_a.js create mode 100644 search/functions_b.html create mode 100644 search/functions_b.js create mode 100644 search/functions_c.html create mode 100644 search/functions_c.js create mode 100644 search/functions_d.html create mode 100644 search/functions_d.js create mode 100644 search/functions_e.html create mode 100644 search/functions_e.js create mode 100644 search/functions_f.html create mode 100644 search/functions_f.js create mode 100644 search/namespaces_0.html create mode 100644 search/namespaces_0.js delete mode 100644 search/pages_1.js delete mode 100644 search/pages_2.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 semver_8hxx.html create mode 100644 semver_8hxx_source.html diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..5aadcb4 --- /dev/null +++ b/annotated.html @@ -0,0 +1,94 @@ + + + + + + + +cppDataPipeline: Class List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Class List
    +
    +
    +
    Here are the classes, structs, unions and interfaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + +
     NFDP
     NVersioningNamespace containing all semantic versioning types and classes
     CversionClass describing the semantic version of an object
     CAPIClass which handles the fetching and posting of information to the FDP data pipeline RestAPI
     CApiObjectClass for API objects
     CConfigClass for interacting with confifurations
     Cconfig_parsing_error
     CDataPipelineDataPipeline Class: A PIMPL Class for interacting the the FAIR Data Pipeline
     CDataPipelineImpl_Private pointer-to-implementation class containing all backend methods
     CIOObjectClass for API objects
     Cjson_parse_error
     Crest_apiquery_error
     Csync_error
     Cvalidation_error
     Cwrite_error
    +
    +
    + + + + diff --git a/api_8hxx.html b/api_8hxx.html new file mode 100644 index 0000000..71c9d38 --- /dev/null +++ b/api_8hxx.html @@ -0,0 +1,220 @@ + + + + + + + +cppDataPipeline: include/fdp/registry/api.hxx File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    api.hxx File Reference
    +
    +
    + +

    File containing classes and methods for connecting to the RestAPI. +More...

    +
    #include <algorithm>
    +#include <curl/curl.h>
    +#include <ghc/filesystem.hpp>
    +#include <iostream>
    +#include <iterator>
    +#include <json/reader.h>
    +#include <map>
    +#include <regex>
    +#include <string>
    +#include <vector>
    +#include "fdp/exceptions.hxx"
    +#include "fdp/objects/api_object.hxx"
    +#include "fdp/utilities/json.hxx"
    +#include "fdp/utilities/logging.hxx"
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  FDP::API
     a class which handles the fetching and posting of information to the FDP data pipeline RestAPI More...
     
    + + + + +

    +Enumerations

    enum class  FDP::RESTAPI { REMOTE +, LOCAL + }
     selection of either local or remote pipeline running More...
     
    + + + + + + +

    +Functions

    size_t FDP::write_func_ (void *ptr, size_t size, size_t nmemb, std::string *data)
     function for writing to file from a CURL call More...
     
    +std::string FDP::url_encode (std::string url)
     
    +

    Detailed Description

    +

    File containing classes and methods for connecting to the RestAPI.

    +
    +
    Author
    K. Zarebski (UKAEA)
    +
    Date
    2021-05-05
    +

    The classes and methods within this file are used to access the FDP Data Pipeline RestAPI, they handle sending of requests and retrieval of data as JSON strings

    +

    Enumeration Type Documentation

    + +

    ◆ RESTAPI

    + +
    +
    + + + + + +
    + + + + +
    enum class FDP::RESTAPI
    +
    +strong
    +
    + +

    selection of either local or remote pipeline running

    +
    +
    Author
    K. Zarebski (UKAEA) & R. Field
    + + + +
    Enumerator
    REMOTE 

    Run from remote registry

    +
    LOCAL 

    Run from local registry

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ write_func_()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    size_t FDP::write_func_ (void * ptr,
    size_t size,
    size_t nmemb,
    std::string * data 
    )
    +
    + +

    function for writing to file from a CURL call

    +
    +
    Author
    K. Zarebski (UKAEA)
    +
    Parameters
    + + + + + +
    ptr
    size
    nmemb
    data
    +
    +
    +
    Returns
    size_t
    + +
    +
    +
    + + + + diff --git a/api_8hxx_source.html b/api_8hxx_source.html new file mode 100644 index 0000000..27b2956 --- /dev/null +++ b/api_8hxx_source.html @@ -0,0 +1,179 @@ + + + + + + + +cppDataPipeline: include/fdp/registry/api.hxx Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    api.hxx
    +
    +
    +Go to the documentation of this file.
    1
    +
    11#ifndef __FDP_API_HXX__
    +
    12#define __FDP_API_HXX__
    +
    13
    +
    14#include <algorithm>
    +
    15#include <curl/curl.h>
    +
    16#include <ghc/filesystem.hpp>
    +
    17#include <iostream>
    +
    18#include <iterator>
    +
    19#include <json/reader.h>
    +
    20#include <map>
    +
    21#include <regex>
    +
    22#include <string>
    +
    23#include <vector>
    +
    24
    +
    25#include "fdp/exceptions.hxx"
    +
    26#include "fdp/objects/api_object.hxx"
    + + +
    29
    +
    30namespace FDP {
    +
    37enum class RESTAPI {
    +
    38 REMOTE,
    +
    39 LOCAL
    +
    40};
    +
    41
    +
    52size_t write_func_(void *ptr, size_t size, size_t nmemb, std::string *data);
    +
    53
    +
    63class API {
    +
    64public:
    +
    71 API(std::string url_root)
    +
    72 : url_root_(API::append_with_forward_slash(url_root)) {}
    +
    73
    +
    83 Json::Value get_request(const std::string &addr_path,
    +
    84 long expected_response = 200, std::string token = "");
    +
    85
    +
    86 Json::Value patch(const std::string addr_path, Json::Value &post_data,
    +
    87 const std::string &token, long expected_response = 200);
    +
    98 Json::Value post(const std::string addr_path, Json::Value &post_data,
    +
    99 const std::string &token, long expected_response = 201);
    +
    100
    +
    101 Json::Value post_storage_root(Json::Value &post_data, const std::string &token);
    +
    102
    +
    103 Json::Value get_by_json_query(const std::string &addr_path,
    +
    104 Json::Value &query_data,
    +
    105 long expected_response = 200,
    +
    106 std::string token = "");
    +
    107
    +
    116 Json::Value get_by_id(const std::string &table, int const &id,
    +
    117 long expected_response = 200, std::string token = "");
    +
    118
    +
    125 std::string get_url_root() const { return url_root_; }
    +
    126
    +
    135 std::string json_to_query_string(Json::Value &json_value);
    +
    136
    +
    145 std::string escape_space(std::string &str);
    +
    146
    +
    154 static std::string append_with_forward_slash(std::string string);
    +
    155
    +
    162 static std::string remove_leading_forward_slash(std::string str);
    +
    163
    +
    164private:
    +
    165 std::string url_root_;
    +
    166 CURL *setup_json_session_(std::string &addr_path, std::string *response,
    +
    167 long &http_code, std::string token = "");
    +
    168 CURL *setup_download_session_(const ghc::filesystem::path &addr_path,
    +
    169 FILE *file);
    +
    170
    +
    171 Json::Value post_patch_request(const std::string addr_path, Json::Value &post_data,
    +
    172 const std::string &token, long expected_response, bool PATCH = false);
    +
    173
    +
    174 // Legacy Method
    +
    175 Json::Value get_request(const ghc::filesystem::path &addr_path,
    +
    176 long expected_response = 200, std::string token = "");
    +
    177
    +
    178 void download_file(const ghc::filesystem::path &url,
    +
    179 ghc::filesystem::path out_path);
    +
    180};
    +
    181
    +
    182std::string url_encode(std::string url);
    +
    183
    +
    184}; // namespace FDP
    +
    185
    +
    186#endif
    +
    size_t write_func_(void *ptr, size_t size, size_t nmemb, std::string *data)
    function for writing to file from a CURL call
    +
    RESTAPI
    selection of either local or remote pipeline running
    Definition: api.hxx:37
    + + +
    a class which handles the fetching and posting of information to the FDP data pipeline RestAPI
    Definition: api.hxx:63
    +
    Json::Value post(const std::string addr_path, Json::Value &post_data, const std::string &token, long expected_response=201)
    post information from a JSON value object to the RestAPI
    Definition: api.cxx:183
    +
    Json::Value get_request(const std::string &addr_path, long expected_response=200, std::string token="")
    sends the given 'packet' of information to the RestAPI
    Definition: api.cxx:83
    +
    static std::string append_with_forward_slash(std::string string)
    Static function to append a given string with a "/" unless the string is empty or already ends with a...
    Definition: api.cxx:287
    +
    static std::string remove_leading_forward_slash(std::string str)
    Remove the leading forward slash from a given string.
    Definition: api.cxx:300
    +
    std::string escape_space(std::string &str)
    escapes space " " characters within a string with it's html character code (%20)
    Definition: api.cxx:178
    +
    std::string get_url_root() const
    returns the root URL for the RestAPI used by the API instance
    Definition: api.hxx:125
    +
    API(std::string url_root)
    construct an API object using the given URL as the root
    Definition: api.hxx:71
    +
    std::string json_to_query_string(Json::Value &json_value)
    Formats a json object into a string representation which can be used as a url endpoint query.
    Definition: api.cxx:142
    +
    Json::Value get_by_id(const std::string &table, int const &id, long expected_response=200, std::string token="")
    get an object from the api by it's id
    Definition: api.cxx:135
    +
    File contains methods relating to handling of JSON based data.
    +
    File contains pointers for creating global logger during session.
    +
    + + + + diff --git a/api__object_8hxx_source.html b/api__object_8hxx_source.html new file mode 100644 index 0000000..75b0068 --- /dev/null +++ b/api__object_8hxx_source.html @@ -0,0 +1,126 @@ + + + + + + + +cppDataPipeline: include/fdp/objects/api_object.hxx Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    api_object.hxx
    +
    +
    +
    1#ifndef __FDP_APIOBJECT_HXX__
    +
    2#define __FDP_APIOBJECT_HXX__
    +
    3
    +
    4#include <string>
    +
    5#include <cstddef>
    +
    6#include <json/value.h>
    +
    7
    + +
    9
    +
    10namespace FDP {
    +
    15 class ApiObject {
    +
    16 private:
    +
    17 Json::Value obj_;
    +
    18 public:
    +
    19 ApiObject() : obj_(Json::Value()){};
    +
    25 ApiObject(Json::Value obj) : obj_(obj){}
    +
    32 int get_id();
    +
    39 static int get_id_from_string(std::string url);
    +
    40
    +
    41 std::string get_type();
    +
    47 std::string get_uri() const;
    +
    48
    +
    55 std::string get_value_as_string(std::string key) const;
    +
    56
    +
    63 int get_value_as_int(std::string key) const;
    +
    64
    +
    70 std::string get_first_component() const;
    +
    71
    +
    77 Json::Value get_object(){return obj_;}
    +
    78
    +
    85 bool is_empty();
    +
    86 };
    +
    87};
    +
    88
    +
    89#endif
    +
    Class for API objects.
    Definition: api_object.hxx:15
    +
    int get_value_as_int(std::string key) const
    Get the value of a given key as int object.
    Definition: api_object.cxx:40
    +
    bool is_empty()
    Check to see if the object is empty.
    Definition: api_object.cxx:44
    +
    int get_id()
    Get the object id from the uri.
    Definition: api_object.cxx:9
    +
    static int get_id_from_string(std::string url)
    Get the object type from the uri.
    Definition: api_object.cxx:13
    +
    std::string get_uri() const
    Get the object uri.
    Definition: api_object.cxx:33
    +
    std::string get_value_as_string(std::string key) const
    Get the value of a given key as string object.
    Definition: api_object.cxx:37
    +
    std::string get_first_component() const
    Get the first component of the object.
    Definition: api_object.cxx:51
    +
    ApiObject(Json::Value obj)
    Construct a new Api Object object.
    Definition: api_object.hxx:25
    +
    std::string get_type()
    Returns the object type from the object uri_ (table)
    Definition: api_object.cxx:25
    +
    Json::Value get_object()
    Get the object as a Json::Value.
    Definition: api_object.hxx:77
    +
    File contains pointers for creating global logger during session.
    +
    + + + + diff --git a/class_f_d_p_1_1_a_p_i-members.html b/class_f_d_p_1_1_a_p_i-members.html new file mode 100644 index 0000000..9c02dff --- /dev/null +++ b/class_f_d_p_1_1_a_p_i-members.html @@ -0,0 +1,94 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::API Member List
    +
    +
    + +

    This is the complete list of members for FDP::API, including all inherited members.

    + + + + + + + + + + + + + +
    API(std::string url_root)FDP::APIinline
    append_with_forward_slash(std::string string)FDP::APIstatic
    escape_space(std::string &str)FDP::API
    get_by_id(const std::string &table, int const &id, long expected_response=200, std::string token="")FDP::API
    get_by_json_query(const std::string &addr_path, Json::Value &query_data, long expected_response=200, std::string token="") (defined in FDP::API)FDP::API
    get_request(const std::string &addr_path, long expected_response=200, std::string token="")FDP::API
    get_url_root() constFDP::APIinline
    json_to_query_string(Json::Value &json_value)FDP::API
    patch(const std::string addr_path, Json::Value &post_data, const std::string &token, long expected_response=200) (defined in FDP::API)FDP::API
    post(const std::string addr_path, Json::Value &post_data, const std::string &token, long expected_response=201)FDP::API
    post_storage_root(Json::Value &post_data, const std::string &token) (defined in FDP::API)FDP::API
    remove_leading_forward_slash(std::string str)FDP::APIstatic
    + + + + diff --git a/class_f_d_p_1_1_a_p_i.html b/class_f_d_p_1_1_a_p_i.html new file mode 100644 index 0000000..bcffe11 --- /dev/null +++ b/class_f_d_p_1_1_a_p_i.html @@ -0,0 +1,482 @@ + + + + + + + +cppDataPipeline: FDP::API Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + +

    a class which handles the fetching and posting of information to the FDP data pipeline RestAPI + More...

    + +

    #include <fdp/registry/api.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     API (std::string url_root)
     construct an API object using the given URL as the root More...
     
    Json::Value get_request (const std::string &addr_path, long expected_response=200, std::string token="")
     sends the given 'packet' of information to the RestAPI More...
     
    +Json::Value patch (const std::string addr_path, Json::Value &post_data, const std::string &token, long expected_response=200)
     
    Json::Value post (const std::string addr_path, Json::Value &post_data, const std::string &token, long expected_response=201)
     post information from a JSON value object to the RestAPI More...
     
    +Json::Value post_storage_root (Json::Value &post_data, const std::string &token)
     
    +Json::Value get_by_json_query (const std::string &addr_path, Json::Value &query_data, long expected_response=200, std::string token="")
     
    Json::Value get_by_id (const std::string &table, int const &id, long expected_response=200, std::string token="")
     get an object from the api by it's id More...
     
    std::string get_url_root () const
     returns the root URL for the RestAPI used by the API instance More...
     
    std::string json_to_query_string (Json::Value &json_value)
     Formats a json object into a string representation which can be used as a url endpoint query. More...
     
    std::string escape_space (std::string &str)
     escapes space " " characters within a string with it's html character code (%20) More...
     
    + + + + + + + +

    +Static Public Member Functions

    static std::string append_with_forward_slash (std::string string)
     Static function to append a given string with a "/" unless the string is empty or already ends with a "/". More...
     
    static std::string remove_leading_forward_slash (std::string str)
     Remove the leading forward slash from a given string. More...
     
    +

    Detailed Description

    +

    a class which handles the fetching and posting of information to the FDP data pipeline RestAPI

    +
    +
    Author
    K. Zarebski (UKAEA) & R. Field
    +

    The API class has know specific knowledge about the RestAPI but rather provides the interface for sending/receiving data as JSON strings

    +

    Constructor & Destructor Documentation

    + +

    ◆ API()

    + +
    +
    + + + + + +
    + + + + + + + + +
    FDP::API::API (std::string url_root)
    +
    +inline
    +
    + +

    construct an API object using the given URL as the root

    +
    +
    Author
    K. Zarebski (UKAEA)
    +
    Parameters
    + + +
    url_rootthe root of the query address, e.g. localhost:8000/api
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ append_with_forward_slash()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string FDP::API::append_with_forward_slash (std::string string)
    +
    +static
    +
    + +

    Static function to append a given string with a "/" unless the string is empty or already ends with a "/".

    +
    Parameters
    + + +
    stringString to be appended with "/"
    +
    +
    +
    Returns
    std::string Appended string
    + +
    +
    + +

    ◆ escape_space()

    + +
    +
    + + + + + + + + +
    std::string FDP::API::escape_space (std::string & str)
    +
    + +

    escapes space " " characters within a string with it's html character code (%20)

    +
    Parameters
    + + +
    strstring containing space characters
    +
    +
    +
    Returns
    std::string string with space characters represented by html character code "%20"
    + +
    +
    + +

    ◆ get_by_id()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Json::Value FDP::API::get_by_id (const std::string & table,
    int const & id,
    long expected_response = 200,
    std::string token = "" 
    )
    +
    + +

    get an object from the api by it's id

    +
    Parameters
    + + + + +
    tableApi endpoint (table)
    idid of the object
    expected_responseexpected responce of the request (default 200)
    +
    +
    +
    Returns
    Json::Value
    + +
    +
    + +

    ◆ get_request()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Json::Value FDP::API::get_request (const std::string & addr_path,
    long expected_response = 200,
    std::string token = "" 
    )
    +
    + +

    sends the given 'packet' of information to the RestAPI

    +
    Parameters
    + + + + +
    addr_paththe api endpoint a.k.a the table name e.g. "coderun"
    expected_responsethe expected return HTTP code
    token
    +
    +
    +
    Returns
    Json::Value JSON object containing the information returned by the request
    + +
    +
    + +

    ◆ get_url_root()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::API::get_url_root () const
    +
    +inline
    +
    + +

    returns the root URL for the RestAPI used by the API instance

    +
    +
    Author
    K. Zarebski (UKAEA)
    +
    Returns
    URL of the RestAPI query endpoint
    + +
    +
    + +

    ◆ json_to_query_string()

    + +
    +
    + + + + + + + + +
    std::string FDP::API::json_to_query_string (Json::Value & json_value)
    +
    + +

    Formats a json object into a string representation which can be used as a url endpoint query.

    +
    Parameters
    + + +
    json_valuethe json object to be converted typically returned by the post method
    +
    +
    +
    Returns
    std::string
    + +
    +
    + +

    ◆ post()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Json::Value FDP::API::post (const std::string addr_path,
    Json::Value & post_data,
    const std::string & token,
    long expected_response = 201 
    )
    +
    + +

    post information from a JSON value object to the RestAPI

    +
    +
    Author
    K. Zarebski (UKAEA) & R. Field
    +
    Parameters
    + + + + + +
    addr_paththe api endpoint a.k.a the table name e.g. "coderun"
    post_datathe data to transmit as a Json::Value object
    keyapi token
    expected_responsethe expected HTTP return code, default is 201
    +
    +
    +
    Returns
    the result of the API post as a JSON object
    + +
    +
    + +

    ◆ remove_leading_forward_slash()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string FDP::API::remove_leading_forward_slash (std::string str)
    +
    +static
    +
    + +

    Remove the leading forward slash from a given string.

    +
    Parameters
    + + +
    str
    +
    +
    +
    Returns
    std::string
    + +
    +
    +
    The documentation for this class was generated from the following files:
      +
    • include/fdp/registry/api.hxx
    • +
    • src/registry/api.cxx
    • +
    +
    + + + + diff --git a/class_f_d_p_1_1_api_object-members.html b/class_f_d_p_1_1_api_object-members.html new file mode 100644 index 0000000..8ea1563 --- /dev/null +++ b/class_f_d_p_1_1_api_object-members.html @@ -0,0 +1,93 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::ApiObject Member List
    +
    +
    + +

    This is the complete list of members for FDP::ApiObject, including all inherited members.

    + + + + + + + + + + + + +
    ApiObject() (defined in FDP::ApiObject)FDP::ApiObjectinline
    ApiObject(Json::Value obj)FDP::ApiObjectinline
    get_first_component() constFDP::ApiObject
    get_id()FDP::ApiObject
    get_id_from_string(std::string url)FDP::ApiObjectstatic
    get_object()FDP::ApiObjectinline
    get_type()FDP::ApiObject
    get_uri() constFDP::ApiObject
    get_value_as_int(std::string key) constFDP::ApiObject
    get_value_as_string(std::string key) constFDP::ApiObject
    is_empty()FDP::ApiObject
    + + + + diff --git a/class_f_d_p_1_1_api_object.html b/class_f_d_p_1_1_api_object.html new file mode 100644 index 0000000..cfb14cf --- /dev/null +++ b/class_f_d_p_1_1_api_object.html @@ -0,0 +1,383 @@ + + + + + + + +cppDataPipeline: FDP::ApiObject Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + +

    Class for API objects. + More...

    + +

    #include <fdp/objects/api_object.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     ApiObject (Json::Value obj)
     Construct a new Api Object object. More...
     
    int get_id ()
     Get the object id from the uri. More...
     
    std::string get_type ()
     Returns the object type from the object uri_ (table) More...
     
    std::string get_uri () const
     Get the object uri. More...
     
    std::string get_value_as_string (std::string key) const
     Get the value of a given key as string object. More...
     
    int get_value_as_int (std::string key) const
     Get the value of a given key as int object. More...
     
    std::string get_first_component () const
     Get the first component of the object. More...
     
    Json::Value get_object ()
     Get the object as a Json::Value. More...
     
    bool is_empty ()
     Check to see if the object is empty. More...
     
    + + + + +

    +Static Public Member Functions

    static int get_id_from_string (std::string url)
     Get the object type from the uri. More...
     
    +

    Detailed Description

    +

    Class for API objects.

    +

    Constructor & Destructor Documentation

    + +

    ◆ ApiObject()

    + +
    +
    + + + + + +
    + + + + + + + + +
    FDP::ApiObject::ApiObject (Json::Value obj)
    +
    +inline
    +
    + +

    Construct a new Api Object object.

    +
    Parameters
    + + +
    uriuri of the api object e.g. http://127.0.0.1/object/1
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ get_first_component()

    + +
    +
    + + + + + + + +
    std::string FDP::ApiObject::get_first_component () const
    +
    + +

    Get the first component of the object.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_id()

    + +
    +
    + + + + + + + +
    int FDP::ApiObject::get_id ()
    +
    + +

    Get the object id from the uri.

    +

    Returns the object id from the object uri_.

    +
    Returns
    int object id e.g. if the uri is http://127.0.0.1/object/1 the object id will be 1
    +
    +int of the object id
    + +
    +
    + +

    ◆ get_id_from_string()

    + +
    +
    + + + + + +
    + + + + + + + + +
    int FDP::ApiObject::get_id_from_string (std::string url)
    +
    +static
    +
    + +

    Get the object type from the uri.

    +
    Returns
    std::string the object type (table) e.g. if the uri is http://127.0.0.1/object/1 the object type will be object
    + +
    +
    + +

    ◆ get_object()

    + +
    +
    + + + + + +
    + + + + + + + +
    Json::Value FDP::ApiObject::get_object ()
    +
    +inline
    +
    + +

    Get the object as a Json::Value.

    +
    Returns
    Json::Value
    + +
    +
    + +

    ◆ get_type()

    + +
    +
    + + + + + + + +
    std::string FDP::ApiObject::get_type ()
    +
    + +

    Returns the object type from the object uri_ (table)

    +
    Returns
    std::string The object type
    + +
    +
    + +

    ◆ get_uri()

    + +
    +
    + + + + + + + +
    std::string FDP::ApiObject::get_uri () const
    +
    + +

    Get the object uri.

    +
    Returns
    std::string the uri of the object e.g. http://127.0.0.1/object/1
    + +
    +
    + +

    ◆ get_value_as_int()

    + +
    +
    + + + + + + + + +
    int FDP::ApiObject::get_value_as_int (std::string key) const
    +
    + +

    Get the value of a given key as int object.

    +
    Parameters
    + + +
    key
    +
    +
    +
    Returns
    int
    + +
    +
    + +

    ◆ get_value_as_string()

    + +
    +
    + + + + + + + + +
    std::string FDP::ApiObject::get_value_as_string (std::string key) const
    +
    + +

    Get the value of a given key as string object.

    +
    Parameters
    + + +
    key
    +
    +
    +
    Returns
    std::string
    + +
    +
    + +

    ◆ is_empty()

    + +
    +
    + + + + + + + +
    bool FDP::ApiObject::is_empty ()
    +
    + +

    Check to see if the object is empty.

    +
    Returns
    true the object does not contain any data
    +
    +false the object contains data
    + +
    +
    +
    The documentation for this class was generated from the following files: +
    + + + + diff --git a/class_f_d_p_1_1_config-members.html b/class_f_d_p_1_1_config-members.html new file mode 100644 index 0000000..144807a --- /dev/null +++ b/class_f_d_p_1_1_config-members.html @@ -0,0 +1,107 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::Config Member List
    +
    +
    + +

    This is the complete list of members for FDP::Config, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Config(const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &script_file_path, const std::string &token, RESTAPI api_location)FDP::Config
    config_reads_() constFDP::Config
    config_writes_() constFDP::Config
    finalise()FDP::Config
    get_api()FDP::Configinline
    get_api_url() constFDP::Configinline
    get_code_run_uuid() constFDP::Config
    get_config_data() constFDP::Configinline
    get_config_directory() constFDP::Config
    get_config_file_path() constFDP::Configinline
    get_data_store() constFDP::Config
    get_default_input_namespace() constFDP::Config
    get_default_output_namespace() constFDP::Config
    get_rest_api_location()FDP::Configinline
    get_script_file_path() constFDP::Configinline
    get_token() constFDP::Configinline
    has_inputs() constFDP::Config
    has_outputs() constFDP::Config
    has_reads() constFDP::Config
    has_writes() constFDP::Config
    link_read(std::string &data_product)FDP::Config
    link_write(std::string &data_product)FDP::Config
    meta_data_() constFDP::Config
    parse_yaml(ghc::filesystem::path yaml_path)FDP::Configstatic
    ~Config()FDP::Config
    + + + + diff --git a/class_f_d_p_1_1_config.html b/class_f_d_p_1_1_config.html new file mode 100644 index 0000000..76a4937 --- /dev/null +++ b/class_f_d_p_1_1_config.html @@ -0,0 +1,766 @@ + + + + + + + +cppDataPipeline: FDP::Config Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + +

    class for interacting with confifurations + More...

    + +

    #include <fdp/objects/config.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Config (const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &script_file_path, const std::string &token, RESTAPI api_location)
     Construct a new Config object. More...
     
    ~Config ()
     Destroy the Config object.
     
    YAML::Node meta_data_ () const
     Returns the meta_data Yaml Node from the config. More...
     
    YAML::Node config_writes_ () const
     Returns the writes Yaml Node from the config. More...
     
    YAML::Node config_reads_ () const
     Returns the reads Yaml Node from the config. More...
     
    bool has_reads () const
     Check whether the config has reads. More...
     
    bool has_writes () const
     Check whether the config has writes. More...
     
    bool has_outputs () const
     Check whether any outputs have been added. More...
     
    bool has_inputs () const
     Check whether any inputs have been added. More...
     
    ghc::filesystem::path get_config_file_path () const
     Get the config file path object. More...
     
    ghc::filesystem::path get_script_file_path () const
     Get the script file path object. More...
     
    std::string get_token () const
     Get the token as a string. More...
     
    std::string get_api_url () const
     Get the api url. More...
     
    ghc::filesystem::path get_data_store () const
     Get the data store path. More...
     
    std::string get_default_input_namespace () const
     Get the default input namespace. More...
     
    std::string get_default_output_namespace () const
     Get the default output namespace. More...
     
    std::string get_config_directory () const
     Get the config directory path as a string. More...
     
    std::string get_code_run_uuid () const
     Get the code run uuid. More...
     
    ghc::filesystem::path link_write (std::string &data_product)
     Provide a tempory file path for a given data product to be written whilst recording metadata. More...
     
    ghc::filesystem::path link_read (std::string &data_product)
     Return the filepath to a given data product. More...
     
    +void finalise ()
     Finalise the pipeline Write any pending metadata to the registry Rename any pending writes to their new filename(s): <file hash>.<extension>
     
    YAML::Node get_config_data () const
     Get the config data as a Yaml Node. More...
     
    std::shared_ptr< APIget_api ()
     Get the api object (used to interact with the pipeline directly) More...
     
    RESTAPI get_rest_api_location ()
     Get the rest api location (local / remote) More...
     
    + + + + +

    +Static Public Member Functions

    static YAML::Node parse_yaml (ghc::filesystem::path yaml_path)
     Read a given yaml file into a Yaml Node. More...
     
    +

    Detailed Description

    +

    class for interacting with confifurations

    +

    Constructor & Destructor Documentation

    + +

    ◆ Config()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::Config::Config (const ghc::filesystem::path & config_file_path,
    const ghc::filesystem::path & script_file_path,
    const std::string & token,
    RESTAPI api_location 
    )
    +
    + +

    Construct a new Config object.

    +
    Parameters
    + + + + + +
    config_file_paththe path to the config file
    script_file_paththe path to the script file
    tokenthe API token as a String
    api_locationwhether or not the api is local
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ config_reads_()

    + +
    +
    + + + + + + + +
    YAML::Node FDP::Config::config_reads_ () const
    +
    + +

    Returns the reads Yaml Node from the config.

    +
    Returns
    YAML::Node
    + +
    +
    + +

    ◆ config_writes_()

    + +
    +
    + + + + + + + +
    YAML::Node FDP::Config::config_writes_ () const
    +
    + +

    Returns the writes Yaml Node from the config.

    +
    Returns
    YAML::Node
    + +
    +
    + +

    ◆ get_api()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::shared_ptr< API > FDP::Config::get_api ()
    +
    +inline
    +
    + +

    Get the api object (used to interact with the pipeline directly)

    +
    Returns
    std::shared_ptr<API>
    + +
    +
    + +

    ◆ get_api_url()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::Config::get_api_url () const
    +
    +inline
    +
    + +

    Get the api url.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_code_run_uuid()

    + +
    +
    + + + + + + + +
    std::string FDP::Config::get_code_run_uuid () const
    +
    + +

    Get the code run uuid.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_config_data()

    + +
    +
    + + + + + +
    + + + + + + + +
    YAML::Node FDP::Config::get_config_data () const
    +
    +inline
    +
    + +

    Get the config data as a Yaml Node.

    +
    Returns
    YAML::Node
    + +
    +
    + +

    ◆ get_config_directory()

    + +
    +
    + + + + + + + +
    std::string FDP::Config::get_config_directory () const
    +
    + +

    Get the config directory path as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_config_file_path()

    + +
    +
    + + + + + +
    + + + + + + + +
    ghc::filesystem::path FDP::Config::get_config_file_path () const
    +
    +inline
    +
    + +

    Get the config file path object.

    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ get_data_store()

    + +
    +
    + + + + + + + +
    ghc::filesystem::path FDP::Config::get_data_store () const
    +
    + +

    Get the data store path.

    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ get_default_input_namespace()

    + +
    +
    + + + + + + + +
    std::string FDP::Config::get_default_input_namespace () const
    +
    + +

    Get the default input namespace.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_default_output_namespace()

    + +
    +
    + + + + + + + +
    std::string FDP::Config::get_default_output_namespace () const
    +
    + +

    Get the default output namespace.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_rest_api_location()

    + +
    +
    + + + + + +
    + + + + + + + +
    RESTAPI FDP::Config::get_rest_api_location ()
    +
    +inline
    +
    + +

    Get the rest api location (local / remote)

    +
    Returns
    RESTAPI
    + +
    +
    + +

    ◆ get_script_file_path()

    + +
    +
    + + + + + +
    + + + + + + + +
    ghc::filesystem::path FDP::Config::get_script_file_path () const
    +
    +inline
    +
    + +

    Get the script file path object.

    +
    Returns
    ghc::filesystem::path
    +

    Get the script file path object

    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ get_token()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::Config::get_token () const
    +
    +inline
    +
    + +

    Get the token as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ has_inputs()

    + +
    +
    + + + + + + + +
    bool FDP::Config::has_inputs () const
    +
    + +

    Check whether any inputs have been added.

    +
    Returns
    true inputs have been added
    +
    +false inputs have not been added
    + +
    +
    + +

    ◆ has_outputs()

    + +
    +
    + + + + + + + +
    bool FDP::Config::has_outputs () const
    +
    + +

    Check whether any outputs have been added.

    +
    Returns
    true outputs have been added
    +
    +false outputs have not been added
    + +
    +
    + +

    ◆ has_reads()

    + +
    +
    + + + + + + + +
    bool FDP::Config::has_reads () const
    +
    + +

    Check whether the config has reads.

    +
    Returns
    true config has reads
    +
    +false config does not have reads
    + +
    +
    + +

    ◆ has_writes()

    + +
    +
    + + + + + + + +
    bool FDP::Config::has_writes () const
    +
    + +

    Check whether the config has writes.

    +
    Returns
    true the config has writes
    +
    +false the config does not have writes
    + +
    +
    + +

    ◆ link_read()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::Config::link_read (std::string & data_product)
    +
    + +

    Return the filepath to a given data product.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ link_write()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::Config::link_write (std::string & data_product)
    +
    + +

    Provide a tempory file path for a given data product to be written whilst recording metadata.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ meta_data_()

    + +
    +
    + + + + + + + +
    YAML::Node FDP::Config::meta_data_ () const
    +
    + +

    Returns the meta_data Yaml Node from the config.

    +
    Returns
    YAML::Node
    + +
    +
    + +

    ◆ parse_yaml()

    + +
    +
    + + + + + +
    + + + + + + + + +
    YAML::Node FDP::Config::parse_yaml (ghc::filesystem::path yaml_path)
    +
    +static
    +
    + +

    Read a given yaml file into a Yaml Node.

    +
    Parameters
    + + +
    yaml_path
    +
    +
    +
    Returns
    YAML::Node
    + +
    +
    +
    The documentation for this class was generated from the following files:
      +
    • include/fdp/objects/config.hxx
    • +
    • src/objects/config.cxx
    • +
    +
    + + + + diff --git a/class_f_d_p_1_1_data_pipeline-members.html b/class_f_d_p_1_1_data_pipeline-members.html new file mode 100644 index 0000000..abed8ce --- /dev/null +++ b/class_f_d_p_1_1_data_pipeline-members.html @@ -0,0 +1,91 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::DataPipeline Member List
    +
    +
    + +

    This is the complete list of members for FDP::DataPipeline, including all inherited members.

    + + + + + + + + + + +
    DataPipeline(const std::string &config_file_path, const std::string &script_file_path, std::string token="", spdlog::level::level_enum log_level=spdlog::level::info)FDP::DataPipelineinlineexplicit
    DataPipeline(DataPipeline &&rhs) noexcept (defined in FDP::DataPipeline)FDP::DataPipeline
    DataPipeline(const DataPipeline &rhs) (defined in FDP::DataPipeline)FDP::DataPipeline
    finalise()FDP::DataPipeline
    link_read(std::string &data_product)FDP::DataPipeline
    link_write(std::string &data_product)FDP::DataPipeline
    operator=(DataPipeline &&rhs) noexcept (defined in FDP::DataPipeline)FDP::DataPipeline
    operator=(const DataPipeline &rhs) (defined in FDP::DataPipeline)FDP::DataPipeline
    ~DataPipeline()FDP::DataPipeline
    + + + + diff --git a/class_f_d_p_1_1_data_pipeline.html b/class_f_d_p_1_1_data_pipeline.html new file mode 100644 index 0000000..c9bbade --- /dev/null +++ b/class_f_d_p_1_1_data_pipeline.html @@ -0,0 +1,241 @@ + + + + + + + +cppDataPipeline: FDP::DataPipeline Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::DataPipeline Class Reference
    +
    +
    + +

    DataPipeline Class: A PIMPL Class for interacting the the FAIR Data Pipeline. + More...

    + +

    #include <fdp/fdp.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     DataPipeline (const std::string &config_file_path, const std::string &script_file_path, std::string token="", spdlog::level::level_enum log_level=spdlog::level::info)
     Construct a new Data Pipeline (PIMPL) More...
     
    ~DataPipeline ()
     Destroy the Data Pipeline object.
     
    DataPipeline (DataPipeline &&rhs) noexcept
     
    +DataPipelineoperator= (DataPipeline &&rhs) noexcept
     
    DataPipeline (const DataPipeline &rhs)
     
    +DataPipelineoperator= (const DataPipeline &rhs)
     
    ghc::filesystem::path link_read (std::string &data_product)
     Return a path to a given data product Whilst recording it's meta data for the code run. More...
     
    ghc::filesystem::path link_write (std::string &data_product)
     Return a path to be used for a given data product whilst recording it's meta data. More...
     
    +void finalise ()
     Finalise the pipeline Record all data products and meta data to the registry update the code run with all appropriate meta data.
     
    +

    Detailed Description

    +

    DataPipeline Class: A PIMPL Class for interacting the the FAIR Data Pipeline.

    +

    Constructor & Destructor Documentation

    + +

    ◆ DataPipeline()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::DataPipeline::DataPipeline (const std::string & config_file_path,
    const std::string & script_file_path,
    std::string token = "",
    spdlog::level::level_enum log_level = spdlog::level::info 
    )
    +
    +inlineexplicit
    +
    + +

    Construct a new Data Pipeline (PIMPL)

    +
    Parameters
    + + + + + +
    config_file_path
    script_file_path
    token
    log_level
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ link_read()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::DataPipeline::link_read (std::string & data_product)
    +
    + +

    Return a path to a given data product Whilst recording it's meta data for the code run.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ link_write()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::DataPipeline::link_write (std::string & data_product)
    +
    + +

    Return a path to be used for a given data product whilst recording it's meta data.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    +
    The documentation for this class was generated from the following files:
      +
    • include/fdp/fdp.hxx
    • +
    • src/fdp.cxx
    • +
    +
    + + + + diff --git a/class_f_d_p_1_1_data_pipeline_impl__-members.html b/class_f_d_p_1_1_data_pipeline_impl__-members.html new file mode 100644 index 0000000..264bf16 --- /dev/null +++ b/class_f_d_p_1_1_data_pipeline_impl__-members.html @@ -0,0 +1,89 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::DataPipelineImpl_ Member List
    +
    +
    + +

    This is the complete list of members for FDP::DataPipelineImpl_, including all inherited members.

    + + + + + + + + +
    DataPipelineImpl_(const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &file_system_path, const std::string token, spdlog::level::level_enum log_level=spdlog::level::info, RESTAPI api_location=RESTAPI::LOCAL)FDP::DataPipelineImpl_
    DataPipelineImpl_(const DataPipelineImpl_ &dp) (defined in FDP::DataPipelineImpl_)FDP::DataPipelineImpl_inline
    finalise()FDP::DataPipelineImpl_
    get_code_run_uuid()FDP::DataPipelineImpl_
    link_read(std::string &data_product)FDP::DataPipelineImpl_
    link_write(std::string &data_product)FDP::DataPipelineImpl_
    ~DataPipelineImpl_()=defaultFDP::DataPipelineImpl_
    + + + + diff --git a/class_f_d_p_1_1_data_pipeline_impl__.html b/class_f_d_p_1_1_data_pipeline_impl__.html new file mode 100644 index 0000000..dc8971b --- /dev/null +++ b/class_f_d_p_1_1_data_pipeline_impl__.html @@ -0,0 +1,257 @@ + + + + + + + +cppDataPipeline: FDP::DataPipelineImpl_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::DataPipelineImpl_ Class Reference
    +
    +
    + +

    private pointer-to-implementation class containing all backend methods + More...

    + +

    #include <fdp/registry/datapipeline.hxx>

    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     DataPipelineImpl_ (const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &file_system_path, const std::string token, spdlog::level::level_enum log_level=spdlog::level::info, RESTAPI api_location=RESTAPI::LOCAL)
     construct a DataPipelineImpl_ instance from configurations and setup More...
     
    DataPipelineImpl_ (const DataPipelineImpl_ &dp)
     
    ~DataPipelineImpl_ ()=default
     Default Destructor.
     
    ghc::filesystem::path link_read (std::string &data_product)
     Return a path to a given data product Whilst recording it's meta data for the code run. More...
     
    ghc::filesystem::path link_write (std::string &data_product)
     Return a path to be used for a given data product whilst recording it's meta data. More...
     
    +void finalise ()
     Finalise the pipeline Record all data products and meta data to the registry update the code run with all appropriate meta data.
     
    std::string get_code_run_uuid ()
     Get the code run uuid. More...
     
    +

    Detailed Description

    +

    private pointer-to-implementation class containing all backend methods

    +
    +

    This class performs all behind the scenes operations acting as the backend to the user called FDP::DataPipeline class. This structure has been chosen to allow for unit tests to be created to test all methods including private ones.

    +
    Warning
    The class should not be used directly during implementation, but rather via an FDP::DataPipeline instance.
    +

    Constructor & Destructor Documentation

    + +

    ◆ DataPipelineImpl_()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::DataPipelineImpl_::DataPipelineImpl_ (const ghc::filesystem::path & config_file_path,
    const ghc::filesystem::path & file_system_path,
    const std::string token,
    spdlog::level::level_enum log_level = spdlog::level::info,
    RESTAPI api_location = RESTAPI::LOCAL 
    )
    +
    + +

    construct a DataPipelineImpl_ instance from configurations and setup

    +
    +
    Parameters
    + + + + + +
    config_file_pathlocation of the local configuration file
    access_token_fileAPI authorisation token where required
    log_levellevel for the output logging statements
    api_locationwhether to use local/remote RestAPI endpoint
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ get_code_run_uuid()

    + +
    +
    + + + + + + + +
    std::string FDP::DataPipelineImpl_::get_code_run_uuid ()
    +
    + +

    Get the code run uuid.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ link_read()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::DataPipelineImpl_::link_read (std::string & data_product)
    +
    + +

    Return a path to a given data product Whilst recording it's meta data for the code run.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ link_write()

    + +
    +
    + + + + + + + + +
    ghc::filesystem::path FDP::DataPipelineImpl_::link_write (std::string & data_product)
    +
    + +

    Return a path to be used for a given data product whilst recording it's meta data.

    +
    Parameters
    + + +
    data_product
    +
    +
    +
    Returns
    ghc::filesystem::path
    + +
    +
    +
    The documentation for this class was generated from the following files: +
    + + + + diff --git a/class_f_d_p_1_1_i_o_object-members.html b/class_f_d_p_1_1_i_o_object-members.html new file mode 100644 index 0000000..be7e5c7 --- /dev/null +++ b/class_f_d_p_1_1_i_o_object-members.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::IOObject Member List
    +
    +
    + +

    This is the complete list of members for FDP::IOObject, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    get_component_description()FDP::IOObjectinline
    get_component_object()FDP::IOObjectinline
    get_data_product()FDP::IOObjectinline
    get_data_product_description()FDP::IOObjectinline
    get_data_product_object()FDP::IOObjectinline
    get_path()FDP::IOObjectinline
    get_use_component()FDP::IOObjectinline
    get_use_data_product()FDP::IOObjectinline
    get_use_namespace()FDP::IOObjectinline
    get_use_version()FDP::IOObjectinline
    IOObject()FDP::IOObjectinline
    IOObject(std::string data_product, std::string use_data_product, std::string use_version, std::string use_namespace, ghc::filesystem::path path, std::string data_product_description, bool isPublic)FDP::IOObjectinline
    IOObject(std::string data_product, std::string use_data_product, std::string use_version, std::string use_namespace, ghc::filesystem::path path, ApiObject &component_obj, ApiObject &data_product_obj)FDP::IOObjectinline
    is_public()FDP::IOObjectinline
    set_component_object(ApiObject &component_obj)FDP::IOObjectinline
    set_data_product_object(ApiObject &data_product_obj)FDP::IOObjectinline
    + + + + diff --git a/class_f_d_p_1_1_i_o_object.html b/class_f_d_p_1_1_i_o_object.html new file mode 100644 index 0000000..c17166e --- /dev/null +++ b/class_f_d_p_1_1_i_o_object.html @@ -0,0 +1,685 @@ + + + + + + + +cppDataPipeline: FDP::IOObject Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::IOObject Class Reference
    +
    +
    + +

    Class for API objects. + More...

    + +

    #include <fdp/objects/io_object.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    IOObject ()
     Construct a new IOObject object (empty constructor)
     
     IOObject (std::string data_product, std::string use_data_product, std::string use_version, std::string use_namespace, ghc::filesystem::path path, std::string data_product_description, bool isPublic)
     Construct a new IOObject object Used to store inputs and outputs for in the config. More...
     
     IOObject (std::string data_product, std::string use_data_product, std::string use_version, std::string use_namespace, ghc::filesystem::path path, ApiObject &component_obj, ApiObject &data_product_obj)
     Construct a new IOObject object Used to store inputs and outputs for in the config. More...
     
    std::string get_data_product ()
     Get the data product as a string. More...
     
    std::string get_use_data_product ()
     Get the use data product as a string. More...
     
    std::string get_use_component ()
     Get the use component as a string. More...
     
    std::string get_use_version ()
     Get the use version as a string. More...
     
    std::string get_use_namespace ()
     Get the use namespace as a string. More...
     
    ghc::filesystem::path get_path ()
     Get the path of the data product. More...
     
    std::string get_data_product_description ()
     Get the data product description as a string. More...
     
    std::string get_component_description ()
     Get the component description as a string. More...
     
    bool is_public ()
     Check whether the data product is public. More...
     
    std::shared_ptr< ApiObjectget_component_object ()
     Get the component object object. More...
     
    std::shared_ptr< ApiObjectget_data_product_object ()
     Get the data product object object. More...
     
    void set_component_object (ApiObject &component_obj)
     Set the component object object. More...
     
    void set_data_product_object (ApiObject &data_product_obj)
     Set the data product object object. More...
     
    +

    Detailed Description

    +

    Class for API objects.

    +

    Constructor & Destructor Documentation

    + +

    ◆ IOObject() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::IOObject::IOObject (std::string data_product,
    std::string use_data_product,
    std::string use_version,
    std::string use_namespace,
    ghc::filesystem::path path,
    std::string data_product_description,
    bool isPublic 
    )
    +
    +inline
    +
    + +

    Construct a new IOObject object Used to store inputs and outputs for in the config.

    +
    Parameters
    + + + + + + + + +
    data_productdata_product name as string
    use_data_productdata_product name to be used as string
    use_versiondata_product version to be used as string
    use_namespacenamespace to be used as string
    pathfile path to data_product
    data_product_descriptiondata product description
    isPublicwhether or not the data product should be public
    +
    +
    + +
    +
    + +

    ◆ IOObject() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::IOObject::IOObject (std::string data_product,
    std::string use_data_product,
    std::string use_version,
    std::string use_namespace,
    ghc::filesystem::path path,
    ApiObjectcomponent_obj,
    ApiObjectdata_product_obj 
    )
    +
    +inline
    +
    + +

    Construct a new IOObject object Used to store inputs and outputs for in the config.

    +
    Parameters
    + + + + + + + + +
    data_productdata_product name as string
    use_data_productdata_product name to be used as string
    use_versiondata_product version to be used as string
    use_namespacenamespace to be used as string
    pathfile path to data_product
    component_objthe data_product component object as a shared pointer
    data_product_objthe data_product object as a shared pointer
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ get_component_description()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_component_description ()
    +
    +inline
    +
    + +

    Get the component description as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_component_object()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::shared_ptr< ApiObject > FDP::IOObject::get_component_object ()
    +
    +inline
    +
    + +

    Get the component object object.

    +
    Returns
    std::shared_ptr<ApiObject>
    + +
    +
    + +

    ◆ get_data_product()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_data_product ()
    +
    +inline
    +
    + +

    Get the data product as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_data_product_description()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_data_product_description ()
    +
    +inline
    +
    + +

    Get the data product description as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_data_product_object()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::shared_ptr< ApiObject > FDP::IOObject::get_data_product_object ()
    +
    +inline
    +
    + +

    Get the data product object object.

    +
    Returns
    std::shared_ptr<ApiObject>
    + +
    +
    + +

    ◆ get_path()

    + +
    +
    + + + + + +
    + + + + + + + +
    ghc::filesystem::path FDP::IOObject::get_path ()
    +
    +inline
    +
    + +

    Get the path of the data product.

    +
    Returns
    ghc::filesystem::path
    + +
    +
    + +

    ◆ get_use_component()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_use_component ()
    +
    +inline
    +
    + +

    Get the use component as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_use_data_product()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_use_data_product ()
    +
    +inline
    +
    + +

    Get the use data product as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_use_namespace()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_use_namespace ()
    +
    +inline
    +
    + +

    Get the use namespace as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ get_use_version()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::string FDP::IOObject::get_use_version ()
    +
    +inline
    +
    + +

    Get the use version as a string.

    +
    Returns
    std::string
    + +
    +
    + +

    ◆ is_public()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool FDP::IOObject::is_public ()
    +
    +inline
    +
    + +

    Check whether the data product is public.

    +
    Returns
    true the data product is public
    +
    +false the data product is not public
    + +
    +
    + +

    ◆ set_component_object()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void FDP::IOObject::set_component_object (ApiObjectcomponent_obj)
    +
    +inline
    +
    + +

    Set the component object object.

    +
    Parameters
    + + +
    component_obj
    +
    +
    + +
    +
    + +

    ◆ set_data_product_object()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void FDP::IOObject::set_data_product_object (ApiObjectdata_product_obj)
    +
    +inline
    +
    + +

    Set the data product object object.

    +
    Parameters
    + + +
    data_product_obj
    +
    +
    + +
    +
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1_versioning_1_1version-members.html b/class_f_d_p_1_1_versioning_1_1version-members.html new file mode 100644 index 0000000..818e1da --- /dev/null +++ b/class_f_d_p_1_1_versioning_1_1version-members.html @@ -0,0 +1,101 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::Versioning::version Member List
    +
    +
    + +

    This is the complete list of members for FDP::Versioning::version, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    alpha() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    beta() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    bump_major() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    bump_minor() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    bump_patch() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    operator!= (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator< (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator<< (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator<= (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator== (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator> (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    operator>= (defined in FDP::Versioning::version)FDP::Versioning::versionfriend
    prerelease() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    release() (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    to_string() const (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    version()=defaultFDP::Versioning::version
    version(unsigned int major, unsigned int minor, unsigned int patch, meta_tag tag=meta_tag::RELEASE, unsigned int tag_v=1E9, std::string meta_data="")FDP::Versioning::versioninline
    version(const std::string version_str) (defined in FDP::Versioning::version)FDP::Versioning::version
    version(const version &v) (defined in FDP::Versioning::version)FDP::Versioning::versioninline
    + + + + diff --git a/class_f_d_p_1_1_versioning_1_1version.html b/class_f_d_p_1_1_versioning_1_1version.html new file mode 100644 index 0000000..bd46aed --- /dev/null +++ b/class_f_d_p_1_1_versioning_1_1version.html @@ -0,0 +1,268 @@ + + + + + + + +cppDataPipeline: FDP::Versioning::version Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::Versioning::version Class Reference
    +
    +
    + +

    class describing the semantic version of an object + More...

    + +

    #include <fdp/utilities/semver.hxx>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     version ()=default
     Construct a new version with the default start value of 0.1.0 More...
     
     version (unsigned int major, unsigned int minor, unsigned int patch, meta_tag tag=meta_tag::RELEASE, unsigned int tag_v=1E9, std::string meta_data="")
     Construct a new version from integer representation. More...
     
    version (const std::string version_str)
     
    version (const version &v)
     
    +void bump_major ()
     
    +void bump_minor ()
     
    +void bump_patch ()
     
    +void alpha ()
     
    +void beta ()
     
    +void prerelease ()
     
    +void release ()
     
    +std::string to_string () const
     
    + + + + + + + + + + + + + + + +

    +Friends

    +std::ostream & operator<< (std::ostream &os, const version &v)
     
    +bool operator< (const version &v1, const version &v2)
     
    +bool operator> (const version &v1, const version &v2)
     
    +bool operator== (const version &v1, const version &v2)
     
    +bool operator!= (const version &v1, const version &v2)
     
    +bool operator<= (const version &v1, const version &v2)
     
    +bool operator>= (const version &v1, const version &v2)
     
    +

    Detailed Description

    +

    class describing the semantic version of an object

    +
    +
    Author
    K. Zarebski (UKAEA)
    +

    This class allows the comparison and validation of semantic version numbers and ensures that all data objects handled follow the same protocol

    +

    Constructor & Destructor Documentation

    + +

    ◆ version() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    FDP::Versioning::version::version ()
    +
    +default
    +
    + +

    Construct a new version with the default start value of 0.1.0

    +
    +
    Author
    K. Zarebski (UKAEA)
    + +
    +
    + +

    ◆ version() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FDP::Versioning::version::version (unsigned int major,
    unsigned int minor,
    unsigned int patch,
    meta_tag tag = meta_tag::RELEASE,
    unsigned int tag_v = 1E9,
    std::string meta_data = "" 
    )
    +
    +inline
    +
    + +

    Construct a new version from integer representation.

    +
    +

    Constructs a version object with the forms:

    +

    MAJOR.MINOR.PATCH-<tag>.<tag-version>+<meta-data>

    +

    where parts in <> are optional. The default for tag_v of 1E9 is used to, as a default, represent a version that is a full release

    +
    Parameters
    + + + + + + + +
    majorthe MAJOR release number
    minorthe MINOR release number
    patchthe PATCH release number
    tagif applicable, whether release is alpha, beta etc.
    tag_vif applicable, the version of the tag, e.g. -alpha.2
    meta_dataif applicable, additional metadata, e.g. +<build_num>
    +
    +
    + +
    +
    +
    The documentation for this class was generated from the following files:
      +
    • include/fdp/utilities/semver.hxx
    • +
    • src/utilities/semver.cxx
    • +
    +
    + + + + diff --git a/class_f_d_p_1_1config__parsing__error-members.html b/class_f_d_p_1_1config__parsing__error-members.html new file mode 100644 index 0000000..2f05944 --- /dev/null +++ b/class_f_d_p_1_1config__parsing__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::config_parsing_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::config_parsing_error, including all inherited members.

    + + +
    config_parsing_error(const std::string message) (defined in FDP::config_parsing_error)FDP::config_parsing_errorinline
    + + + + diff --git a/class_f_d_p_1_1config__parsing__error.html b/class_f_d_p_1_1config__parsing__error.html new file mode 100644 index 0000000..e7e8bd5 --- /dev/null +++ b/class_f_d_p_1_1config__parsing__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::config_parsing_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::config_parsing_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::config_parsing_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    config_parsing_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1config__parsing__error.png b/class_f_d_p_1_1config__parsing__error.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdd69ce549046b406fc469c3b392294ec111f6c GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^i-9D2pH{!6NUX>K); zkCsx&oNjo0+fB2$SN>{0lXve*O8K4V2 z-95V|_e~Oc{w^b}ESKTjQ?`P_x&t4}cJF(_Z*fmlU;ig}U*vU$^a*_og_i^s{H&Oc zc)B-OyyOs2mt}mkMA>0Z2}{Rhgyc_u*|TT#_}B_Ep{iH*6|+t)&SkK8uy)e#Vxw7$ z_sWzF{5B*=e zZP)&l{%%|MXU28UFD*8;d3*fa#@qdQYUhvD9-3eE{qsHE7iBZwe^Tmabhm%L?OHTr z?D>4Fb#Ys^CWlS^zAV}Pg!azIe|PL%z5Uzc9m#*~wkbYa`nh!Py6(5T)-5d;xo~Pn zZtv8CmhwBFFJ-oP(0hH}!yPq-r-gWWuCp`96nV+*Ht+2*UsASC`2aiA + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::json_parse_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::json_parse_error, including all inherited members.

    + + +
    json_parse_error(const std::string message) (defined in FDP::json_parse_error)FDP::json_parse_errorinline
    + + + + diff --git a/class_f_d_p_1_1json__parse__error.html b/class_f_d_p_1_1json__parse__error.html new file mode 100644 index 0000000..3c099b1 --- /dev/null +++ b/class_f_d_p_1_1json__parse__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::json_parse_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::json_parse_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::json_parse_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    json_parse_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1json__parse__error.png b/class_f_d_p_1_1json__parse__error.png new file mode 100644 index 0000000000000000000000000000000000000000..952c6b194eef05fe2e6e0ea271907d006d689bf4 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^y+9nm!3-pY71+{%lth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C`XHOT$kP61PbMH=DtRTR)I{(w&|I+6* zn0PPGdUNc}!!u=lsZ;JVN$oj$CP&i1Gpc3F#3eI8ID5A8d(Vl#j}^D~s@y%ivNyL` z&;0u1Z+rH>H4f^YGTk|6{o^Rj&b>X}6P8RgmY)3U>bzHvXH;pJE9>81{d1S9<0Ln| zoT>npv%l>p{}C0R?xQ@(q;O|Yee&kNf1IwCsa)<*@r`l$IQihb^JmWs)L%cgr0(yA zj}Mh^R@CM#y*2NXEbqrxo4uzN_yIZ{9N1p zBCk00Z%X)tzdgP7@r37bw^hC?UQN6z_RHe=4#}KnJ2EYw-~A!?yvOqV{x2(c%$dDW zG5lxFg<6;6EIiIqpYCsw4Aa^)Q_4Q`Nq_FKea{%Ua+dA*D0(k?W!b$ma+l{x?S5IA z%N+A|<-R$=@#|$ZuP=RPHSOMJP4*v`&9V#|yyLc1UXwk*`@~#EK`oadY1(E(;M1& literal 0 HcmV?d00001 diff --git a/class_f_d_p_1_1rest__apiquery__error-members.html b/class_f_d_p_1_1rest__apiquery__error-members.html new file mode 100644 index 0000000..fb05518 --- /dev/null +++ b/class_f_d_p_1_1rest__apiquery__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::rest_apiquery_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::rest_apiquery_error, including all inherited members.

    + + +
    rest_apiquery_error(const std::string message) (defined in FDP::rest_apiquery_error)FDP::rest_apiquery_errorinline
    + + + + diff --git a/class_f_d_p_1_1rest__apiquery__error.html b/class_f_d_p_1_1rest__apiquery__error.html new file mode 100644 index 0000000..2a58bbf --- /dev/null +++ b/class_f_d_p_1_1rest__apiquery__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::rest_apiquery_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::rest_apiquery_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::rest_apiquery_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    rest_apiquery_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1rest__apiquery__error.png b/class_f_d_p_1_1rest__apiquery__error.png new file mode 100644 index 0000000000000000000000000000000000000000..7077bcba3a0b2ceae269e903b0a9ac940da5f74c GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^bAUL2gBeKP_Ia}bNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~NqM?BhEy=VoqMzFumTUOyZ+Aq|Bv^Y zPuO#$@6qK;!cqOs1`iw;eCV1PxjJFe6}4EuNk%1>o~H^t^YT8ediwe1-_3gh{U*J8 z>T|Abf{(en!Ibv=FK%{N}OSOs#C`a7EAGb56_*SsxVDwXtlTqu`g~m3M3I zuXLL9&2su`>8$6u{|>9vzcrukBj{=M;MAtHCvEooSDm()q^ab|K1cnCr$(Rh_OsJw zKlNF4-R)ey?a4=9vrk8Dy1L&yr}lrvt4*`lZq3*AzGQd5x~8|Y;8U@pr~8-Yc!)DE zJXO&=9DMG~nm~rUCyW=gbWhvL@!sC5^Svbd`nt@W^VTw0?vin6(_^2o@HAt}iy{U| z+}s~(md2aI4l>+Y0#({|XO7(E^py-24_@5toxHZF?#;t6E(YsAPDj2!ZTsz&mlM$x z)#ZI`-ZLfxOFLN#-7cg6U}dzW)HSBVO%@0s-3|Ip*qdxhs& zckX!Z<$hg7uP9)BqEW)xG!FwMai#5(qSZFU&J!=nyH`aceIRdr|#YH{E*wNsny0sPs{T*&vx22E!H}`|G#3ichHZIho=0UZ1C@|`Vlo} zhHHDiZu5V#%z5dT{Yv5I=S^RJe!k1Qv*myLo8=dng8YB&>6tT9PuaV!#LU=y@b4aA P%3<(y^>bP0l+XkKF{L}K literal 0 HcmV?d00001 diff --git a/class_f_d_p_1_1sync__error-members.html b/class_f_d_p_1_1sync__error-members.html new file mode 100644 index 0000000..e4cce84 --- /dev/null +++ b/class_f_d_p_1_1sync__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::sync_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::sync_error, including all inherited members.

    + + +
    sync_error(const std::string message) (defined in FDP::sync_error)FDP::sync_errorinline
    + + + + diff --git a/class_f_d_p_1_1sync__error.html b/class_f_d_p_1_1sync__error.html new file mode 100644 index 0000000..04154aa --- /dev/null +++ b/class_f_d_p_1_1sync__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::sync_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::sync_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::sync_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    sync_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1sync__error.png b/class_f_d_p_1_1sync__error.png new file mode 100644 index 0000000000000000000000000000000000000000..116ee2e84fd5540855b43ac2972d3618ccd4fa69 GIT binary patch literal 521 zcmV+k0`~ohP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004)Nkl7**p)`_Re#a!EKZ(CI!k~%wj^Qq%g&y8^g&oil((#p-&x=*Sw{q(Av z_f3WauO3b(fPa|eOMkdzYIVP#XL#$+Z)c7pnOYt5<;8>_ukSvYUh_<<<&Ni%QL?sN z+0T-nK2(z#{_o_{&Clvv+rRgFwqI_N^j!0Pkfb?{*st z9L!sALxH1te?C7a45IHQf6}uU00QNC{<&7A0T84|ytO{?wzckB-0~K*uX2f*Drb0~XW&Z;Q?43A z|NI(WbAH9_u|O?u{b00ucYS`h8ditrCw!fkeIN6B3HK)NFwC#)!0VjfhrIIs9Z2;A zT_$w%vs7)MQ{R_sFXYF(&hUJ*0ldl>o`DCNntd%00000 LNkvXXu0mjf-)8x7 literal 0 HcmV?d00001 diff --git a/class_f_d_p_1_1validation__error-members.html b/class_f_d_p_1_1validation__error-members.html new file mode 100644 index 0000000..674d4f5 --- /dev/null +++ b/class_f_d_p_1_1validation__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::validation_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::validation_error, including all inherited members.

    + + +
    validation_error(const std::string message) (defined in FDP::validation_error)FDP::validation_errorinline
    + + + + diff --git a/class_f_d_p_1_1validation__error.html b/class_f_d_p_1_1validation__error.html new file mode 100644 index 0000000..466ea2a --- /dev/null +++ b/class_f_d_p_1_1validation__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::validation_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::validation_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::validation_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    validation_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1validation__error.png b/class_f_d_p_1_1validation__error.png new file mode 100644 index 0000000000000000000000000000000000000000..ddce92693b4852486811e78e7695f19c1a1ae888 GIT binary patch literal 571 zcmV-B0>u4^P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0005XNklsV>Nr?ITFoxb@W_GzSNxE1`kra|N>YSqb ze}eq3d(RqPrI4i8wWP3Zk>%lL+REG49)Y7t`KUm9A2&*I_BPHT$=Qm+q;9Qr6r;DI zHWClryZOGwA<5YZMc?$ru>NI|w{>&L6eY>q>5lw|V*B|GImVGpQIfo!WapE`oyTHM z-TzXU)NP{h=^s}wtUOu)U{IKQDgpdW zYl^n8HuS+&;!~^ZIX_|;8iY6=;Vm6&Yd8CIie~XuZQ=9&aS8Pi98+EdijWt*3ZvVZ z&sBMf@uM&O$5>2TS5r7lweSrTeuZzKSVsR>v6wRdIYk^~u6UjoukJ{@FNS-d25CPE z^BLI>ML0x$8GguPW8)kje}k9%_!kr8zgbcMj7o|?VP + + + + + + +cppDataPipeline: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    FDP::write_error Member List
    +
    +
    + +

    This is the complete list of members for FDP::write_error, including all inherited members.

    + + +
    write_error(const std::string message) (defined in FDP::write_error)FDP::write_errorinline
    + + + + diff --git a/class_f_d_p_1_1write__error.html b/class_f_d_p_1_1write__error.html new file mode 100644 index 0000000..131149c --- /dev/null +++ b/class_f_d_p_1_1write__error.html @@ -0,0 +1,98 @@ + + + + + + + +cppDataPipeline: FDP::write_error Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    FDP::write_error Class Reference
    +
    +
    +
    +Inheritance diagram for FDP::write_error:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    write_error (const std::string message)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/class_f_d_p_1_1write__error.png b/class_f_d_p_1_1write__error.png new file mode 100644 index 0000000000000000000000000000000000000000..463a5ddb86bfbafe75bf68d4cd993bafa144529d GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^`9K`N!3-o7%x`M}DTx4|5ZC|z{{xvX-h3_XKQsZz z0^9#0p?kP61Pb1zP6R^V~jnL9Z&AF^~j6*b=6ct|C4#w2ym!e0jYFXtRJ`1{SRV|&G`90>U)shmiFPE41>f4$hle9U%BrGdC_uDnq6{o&DG&O%8%_ALWJ*S!T&taAL zzIN|ralilWIXv6G&iZ<#O7QyJeK9P5s%n3y?0Poy%BjBR{eheI?b$rv)c$WsY}$|c z-KP`l%H z%Kvuuli3AUJYhVdS;iD%p2_{o~T- z*M=U*K)2N?H!y1OoazC(G%?8MzudheY7_3!KZTYcZH?6a@>e_8rJ u{q + + + + + + +cppDataPipeline: Class Index + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Class Index
    +
    +
    +
    A | C | D | I | J | R | S | V | W
    +
    +
    +
    A
    +
    API (FDP)
    ApiObject (FDP)
    +
    +
    C
    +
    Config (FDP)
    config_parsing_error (FDP)
    +
    +
    D
    +
    DataPipeline (FDP)
    DataPipelineImpl_ (FDP)
    +
    +
    I
    +
    IOObject (FDP)
    +
    +
    J
    +
    json_parse_error (FDP)
    +
    +
    R
    +
    rest_apiquery_error (FDP)
    +
    +
    S
    +
    sync_error (FDP)
    +
    +
    V
    +
    validation_error (FDP)
    version (FDP::Versioning)
    +
    +
    W
    +
    write_error (FDP)
    +
    +
    + + + + diff --git a/config_8hxx.html b/config_8hxx.html new file mode 100644 index 0000000..a545175 --- /dev/null +++ b/config_8hxx.html @@ -0,0 +1,105 @@ + + + + + + + +cppDataPipeline: include/fdp/objects/config.hxx File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    config.hxx File Reference
    +
    +
    +
    #include <string>
    +#include <ghc/filesystem.hpp>
    +#include <yaml-cpp/yaml.h>
    +#include <regex>
    +#include <map>
    +#include <stdio.h>
    +#include "fdp/objects/metadata.hxx"
    +#include "fdp/registry/api.hxx"
    +#include "fdp/objects/api_object.hxx"
    +#include "fdp/objects/io_object.hxx"
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  FDP::Config
     class for interacting with confifurations More...
     
    +

    Detailed Description

    +
    Author
    your name (you@d.nosp@m.omai.nosp@m.n.com)
    +
    Version
    0.1
    +
    Date
    2021-11-20
    + +
    + + + + diff --git a/config_8hxx_source.html b/config_8hxx_source.html new file mode 100644 index 0000000..8e20f2a --- /dev/null +++ b/config_8hxx_source.html @@ -0,0 +1,221 @@ + + + + + + + +cppDataPipeline: include/fdp/objects/config.hxx Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    config.hxx
    +
    +
    +Go to the documentation of this file.
    1
    +
    12#ifndef __FDP_CONFIG_HXX__
    +
    13#define __FDP_CONFIG_HXX__
    +
    14
    +
    15#include <string>
    +
    16#include <ghc/filesystem.hpp>
    +
    17#include <yaml-cpp/yaml.h>
    +
    18#include <regex>
    +
    19#include <map>
    +
    20#include <ghc/filesystem.hpp>
    +
    21#include <stdio.h>
    +
    22
    + +
    24#include "fdp/registry/api.hxx"
    +
    25#include "fdp/objects/api_object.hxx"
    +
    26#include "fdp/objects/io_object.hxx"
    +
    27
    +
    28namespace FDP {
    +
    34 class Config {
    +
    35 private:
    +
    36 const ghc::filesystem::path config_file_path_;
    +
    37 const ghc::filesystem::path config_dir_;
    +
    38 const ghc::filesystem::path script_file_path_;
    +
    39 YAML::Node config_data_;
    +
    40 std::string api_url_;
    +
    41 std::string token_;
    +
    42 std::shared_ptr<API> api_;
    +
    43
    +
    44 std::unique_ptr<ApiObject> user_;
    +
    45 std::unique_ptr<ApiObject> author_;
    +
    46
    +
    47 std::unique_ptr<ApiObject> config_storage_root_;
    +
    48 std::unique_ptr<ApiObject> config_storage_location_;
    +
    49 std::unique_ptr<ApiObject> config_file_type_;
    +
    50 std::unique_ptr<ApiObject> config_obj_;
    +
    51
    +
    52 std::unique_ptr<ApiObject> script_storage_root_;
    +
    53 std::unique_ptr<ApiObject> script_storage_location_;
    +
    54 std::unique_ptr<ApiObject> script_file_type_;
    +
    55 std::unique_ptr<ApiObject> script_obj_;
    +
    56
    +
    57 std::unique_ptr<ApiObject> code_repo_storage_root_;
    +
    58 std::unique_ptr<ApiObject> code_repo_storage_location_;
    +
    59 std::unique_ptr<ApiObject> code_repo_obj_;
    +
    60
    +
    61 std::unique_ptr<ApiObject> code_run_;
    +
    62
    +
    63 std::map<std::string, IOObject> writes_;
    +
    64 std::map<std::string, IOObject> reads_;
    +
    65
    +
    66 std::map<std::string, IOObject> outputs_;
    +
    67 std::map<std::string, IOObject> inputs_;
    +
    68
    +
    69 RESTAPI rest_api_location_ = RESTAPI::LOCAL;
    +
    70
    +
    71 bool config_has_writes() const;
    +
    72 bool config_has_reads() const;
    +
    73
    +
    74 void initialise(RESTAPI api_location);
    +
    75 void validate_config(ghc::filesystem::path yaml_path, RESTAPI api_location);
    +
    76
    +
    77 public:
    +
    78
    +
    87 Config(const ghc::filesystem::path &config_file_path,
    +
    88 const ghc::filesystem::path &script_file_path,
    +
    89 const std::string &token,
    +
    90 RESTAPI api_location);
    +
    91
    +
    96 ~Config();
    +
    97
    +
    103 YAML::Node meta_data_() const;
    +
    109 YAML::Node config_writes_() const;
    +
    110
    +
    116 YAML::Node config_reads_() const;
    +
    117
    +
    124 bool has_reads() const;
    +
    131 bool has_writes() const;
    +
    138 bool has_outputs() const;
    +
    145 bool has_inputs() const;
    +
    146
    +
    153 ghc::filesystem::path get_config_file_path() const {return config_file_path_;}
    +
    165 ghc::filesystem::path get_script_file_path() const {return script_file_path_;}
    +
    166
    +
    172 std::string get_token() const {return token_;}
    +
    173
    +
    179 std::string get_api_url() const {return api_url_;}
    +
    185 ghc::filesystem::path get_data_store() const;
    +
    186
    +
    192 std::string get_default_input_namespace() const;
    +
    193
    +
    199 std::string get_default_output_namespace() const;
    +
    200
    +
    206 std::string get_config_directory() const;
    +
    207
    +
    213 std::string get_code_run_uuid() const;
    +
    214
    +
    222 ghc::filesystem::path link_write(std::string &data_product);
    +
    223
    +
    230 ghc::filesystem::path link_read(std::string &data_product);
    +
    231
    +
    238 void finalise();
    +
    239
    +
    246 static YAML::Node parse_yaml(ghc::filesystem::path yaml_path);
    +
    247
    +
    253 YAML::Node get_config_data() const {return config_data_;}
    +
    254
    +
    260 std::shared_ptr<API> get_api(){return api_;}
    +
    261
    +
    267 RESTAPI get_rest_api_location(){return rest_api_location_;}
    +
    268
    +
    269 };
    +
    270};
    +
    271#endif
    +
    File containing classes and methods for connecting to the RestAPI.
    +
    RESTAPI
    selection of either local or remote pipeline running
    Definition: api.hxx:37
    +
    class for interacting with confifurations
    Definition: config.hxx:34
    +
    YAML::Node config_writes_() const
    Returns the writes Yaml Node from the config.
    Definition: config.cxx:27
    +
    static YAML::Node parse_yaml(ghc::filesystem::path yaml_path)
    Read a given yaml file into a Yaml Node.
    Definition: config.cxx:17
    +
    std::string get_token() const
    Get the token as a string.
    Definition: config.hxx:172
    +
    RESTAPI get_rest_api_location()
    Get the rest api location (local / remote)
    Definition: config.hxx:267
    +
    Config(const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &script_file_path, const std::string &token, RESTAPI api_location)
    Construct a new Config object.
    Definition: config.cxx:4
    +
    bool has_inputs() const
    Check whether any inputs have been added.
    Definition: config.cxx:57
    +
    std::string get_default_input_namespace() const
    Get the default input namespace.
    Definition: config.cxx:70
    +
    ghc::filesystem::path get_data_store() const
    Get the data store path.
    Definition: config.cxx:65
    +
    bool has_reads() const
    Check whether the config has reads.
    Definition: config.cxx:53
    +
    ~Config()
    Destroy the Config object.
    Definition: config.cxx:13
    +
    ghc::filesystem::path get_script_file_path() const
    Get the script file path object.
    Definition: config.hxx:165
    +
    YAML::Node meta_data_() const
    Returns the meta_data Yaml Node from the config.
    Definition: config.cxx:23
    +
    std::shared_ptr< API > get_api()
    Get the api object (used to interact with the pipeline directly)
    Definition: config.hxx:260
    +
    ghc::filesystem::path link_read(std::string &data_product)
    Return the filepath to a given data product.
    Definition: config.cxx:420
    +
    void finalise()
    Finalise the pipeline Write any pending metadata to the registry Rename any pending writes to their n...
    Definition: config.cxx:528
    +
    ghc::filesystem::path get_config_file_path() const
    Get the config file path object.
    Definition: config.hxx:153
    +
    std::string get_code_run_uuid() const
    Get the code run uuid.
    Definition: config.cxx:336
    +
    bool has_writes() const
    Check whether the config has writes.
    Definition: config.cxx:49
    +
    bool has_outputs() const
    Check whether any outputs have been added.
    Definition: config.cxx:61
    +
    YAML::Node get_config_data() const
    Get the config data as a Yaml Node.
    Definition: config.hxx:253
    +
    ghc::filesystem::path link_write(std::string &data_product)
    Provide a tempory file path for a given data product to be written whilst recording metadata.
    Definition: config.cxx:341
    +
    std::string get_default_output_namespace() const
    Get the default output namespace.
    Definition: config.cxx:74
    +
    std::string get_api_url() const
    Get the api url.
    Definition: config.hxx:179
    +
    std::string get_config_directory() const
    Get the config directory path as a string.
    Definition: config.cxx:332
    +
    YAML::Node config_reads_() const
    Returns the reads Yaml Node from the config.
    Definition: config.cxx:31
    +
    File containing methods for handling of metadata.
    +
    + + + + diff --git a/data__io_8hxx_source.html b/data__io_8hxx_source.html new file mode 100644 index 0000000..666ecfc --- /dev/null +++ b/data__io_8hxx_source.html @@ -0,0 +1,150 @@ + + + + + + + +cppDataPipeline: include/fdp/registry/data_io.hxx Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    data_io.hxx
    +
    +
    +
    1
    +
    11#ifndef __FDP_DATA_IO_HXX__
    +
    12#define __FDP_DATA_IO_HXX__
    +
    13
    +
    14#include "toml.hpp"
    +
    15#include <cstdlib>
    +
    16#include <ghc/filesystem.hpp>
    +
    17#include <stdexcept>
    +
    18#include <string>
    +
    19#include <vector>
    +
    20#include <yaml-cpp/yaml.h>
    +
    21#include <ghc/filesystem.hpp>
    +
    22
    +
    23#include <iostream>
    +
    24
    + + + + +
    29
    +
    30namespace FDP {
    +
    31
    +
    47double read_point_estimate_from_toml(const ghc::filesystem::path var_address);
    +
    48
    +
    59template <typename T>
    +
    60ghc::filesystem::path create_estimate(T &value,
    +
    61 const ghc::filesystem::path &data_product,
    +
    62 const Versioning::version &version_num,
    +
    63 const Config *config
    +
    64 ) {
    +
    65 const std::string param_name_ = data_product.stem().string();
    +
    66 const std::string namespace_ = config->get_default_output_namespace();
    +
    67 const ghc::filesystem::path data_store_ = config->get_data_store();
    +
    68 const toml::value data_{
    +
    69 {param_name_, {{"type", "point-estimate"}, {"value", value}}}};
    +
    70
    +
    71 const ghc::filesystem::path output_filename_ =
    +
    72 data_store_ / namespace_ / data_product.parent_path() /
    +
    73 std::string(version_num.to_string() + ".toml");
    +
    74 std::ofstream toml_out_;
    +
    75
    +
    76 if (!ghc::filesystem::exists(output_filename_.parent_path())) {
    +
    77 ghc::filesystem::create_directories(output_filename_.parent_path());
    +
    78 }
    +
    79
    +
    80 toml_out_.open(output_filename_);
    +
    81
    +
    82 if (!toml_out_) {
    +
    83 throw std::runtime_error("Failed to open TOML file for writing");
    +
    84 }
    +
    85
    +
    86 toml_out_ << toml::format(data_);
    +
    87
    +
    88 toml_out_.close();
    +
    89
    +
    90 APILogger->debug("FileSystem:CreateEstimate: Wrote point estimate to '{0}'",
    +
    91 output_filename_.string());
    +
    92
    +
    93 return output_filename_;
    +
    94}
    +
    95
    +
    102std::string get_first_key_(const toml::value data_table);
    +
    103
    +
    104}; // namespace FDP
    +
    105
    +
    106#endif
    + +
    File contains pointers for creating global logger during session.
    +
    const std::shared_ptr< spdlog::logger > APILogger
    Global logger used across all FDP scripts.
    Definition: logging.hxx:31
    +
    File containing methods for handling of metadata.
    +
    File contains classes and types for validating semantic versioning.
    +
    + + + + diff --git a/datapipeline_8hxx.html b/datapipeline_8hxx.html new file mode 100644 index 0000000..c8909c8 --- /dev/null +++ b/datapipeline_8hxx.html @@ -0,0 +1,110 @@ + + + + + + + +cppDataPipeline: include/fdp/registry/datapipeline.hxx File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    datapipeline.hxx File Reference
    +
    +
    + +

    File containing classes for interaction with the FDP data pipeline. +More...

    +
    #include <algorithm>
    +#include <fstream>
    +#include <iostream>
    +#include <string>
    +#include "spdlog/spdlog.h"
    +#include "json/json.h"
    +#include "fdp/objects/config.hxx"
    +#include "fdp/objects/metadata.hxx"
    +#include "fdp/registry/api.hxx"
    +#include "fdp/registry/data_io.hxx"
    +#include "fdp/utilities/logging.hxx"
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  FDP::DataPipelineImpl_
     private pointer-to-implementation class containing all backend methods More...
     
    +

    Detailed Description

    +

    File containing classes for interaction with the FDP data pipeline.

    +
    +
    Author
    K. Zarebski (UKAEA)
    +
    Date
    2021-05-06
    +

    The classes within this file form the core objects for handling interaction with the FDP FAIR Data pipeline. They contain methods which parse configurations and control calls to the RestAPI itself.

    +
    + + + + diff --git a/datapipeline_8hxx_source.html b/datapipeline_8hxx_source.html new file mode 100644 index 0000000..75e5f40 --- /dev/null +++ b/datapipeline_8hxx_source.html @@ -0,0 +1,144 @@ + + + + + + + +cppDataPipeline: include/fdp/registry/datapipeline.hxx Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    cppDataPipeline 0.3.0 +
    +
    C++ Implementation of the FAIR Data Pipeline API
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    datapipeline.hxx
    +
    +
    +Go to the documentation of this file.
    1
    +
    11#ifndef __FDP_DATAPIPELINE_HXX__
    +
    12#define __FDP_DATAPIPELINE_HXX__
    +
    13
    +
    14#include <algorithm>
    +
    15#include <fstream>
    +
    16#include <iostream>
    +
    17#include <string>
    +
    18
    +
    19#include "spdlog/spdlog.h"
    +
    20#include "json/json.h"
    +
    21
    + + +
    24#include "fdp/registry/api.hxx"
    +
    25#include "fdp/registry/data_io.hxx"
    + +
    27
    +
    28namespace FDP {
    +
    29
    + +
    44 private:
    +
    45 std::unique_ptr<Config> config_;
    +
    46
    +
    47 ghc::filesystem::path config_file_path_() const {return config_->get_config_file_path();}
    +
    48 ghc::filesystem::path script_file_path_() const {return config_->get_script_file_path();}
    +
    49 std::string token_() const {return config_->get_token();}
    +
    50 RESTAPI api_location_() {return config_->get_rest_api_location();}
    +
    51public:
    +
    52
    +
    61 DataPipelineImpl_(const ghc::filesystem::path &config_file_path,
    +
    62 const ghc::filesystem::path &file_system_path,
    +
    63 const std::string token,
    +
    64 spdlog::level::level_enum log_level = spdlog::level::info,
    +
    65 RESTAPI api_location = RESTAPI::LOCAL);
    +
    66
    + +
    68 DataPipelineImpl_(dp.config_file_path_(), dp.script_file_path_(), token_(), spdlog::level::info, api_location_());}
    +
    69
    +
    74 ~DataPipelineImpl_() = default;
    +
    75
    +
    83 ghc::filesystem::path link_read(std::string &data_product);
    +
    84
    +
    92 ghc::filesystem::path link_write(std::string &data_product);
    +
    93
    +
    100 void finalise();
    +
    101
    +
    107 std::string get_code_run_uuid();
    +
    108
    +
    109};
    +
    110}; // namespace FDP
    +
    111
    +
    112#endif
    +
    File containing classes and methods for connecting to the RestAPI.
    +
    RESTAPI
    selection of either local or remote pipeline running
    Definition: api.hxx:37
    +
    private pointer-to-implementation class containing all backend methods
    Definition: datapipeline.hxx:43
    +
    ghc::filesystem::path link_read(std::string &data_product)
    Return a path to a given data product Whilst recording it's meta data for the code run.
    Definition: datapipeline.cxx:25
    +
    DataPipelineImpl_(const ghc::filesystem::path &config_file_path, const ghc::filesystem::path &file_system_path, const std::string token, spdlog::level::level_enum log_level=spdlog::level::info, RESTAPI api_location=RESTAPI::LOCAL)
    construct a DataPipelineImpl_ instance from configurations and setup
    Definition: datapipeline.cxx:5
    +
    std::string get_code_run_uuid()
    Get the code run uuid.
    Definition: datapipeline.cxx:35
    +
    ghc::filesystem::path link_write(std::string &data_product)
    Return a path to be used for a given data product whilst recording it's meta data.
    Definition: datapipeline.cxx:28
    +
    void finalise()
    Finalise the pipeline Record all data products and meta data to the registry update the code run with...
    Definition: datapipeline.cxx:31
    +
    ~DataPipelineImpl_()=default
    Default Destructor.
    + +
    File contains pointers for creating global logger during session.
    +
    File containing methods for handling of metadata.
    +
    + + + + diff --git a/md__c_h_a_n_g_e_l_o_g.html b/dir_39f1df2935b9bcc0c6b792c5d1359e85.html similarity index 73% rename from md__c_h_a_n_g_e_l_o_g.html rename to dir_39f1df2935b9bcc0c6b792c5d1359e85.html index 40c63a8..c81592b 100644 --- a/md__c_h_a_n_g_e_l_o_g.html +++ b/dir_39f1df2935b9bcc0c6b792c5d1359e85.html @@ -5,7 +5,7 @@ -cppDataPipeline: Unreleased +cppDataPipeline: include/fdp Directory Reference @@ -23,7 +23,7 @@
    cppDataPipeline 0.3.0
    -
    C++ Implementation of the Scottish COVID Response Consortium FAIR Data Pipeline
    +
    C++ Implementation of the FAIR Data Pipeline API
    @@ -61,23 +61,20 @@
  • +
    -
    -
    Unreleased
    +
    +
    fdp Directory Reference
    -
      -
    • Added functions for reading requested objects in the configuration file.
    • -
    • Reading of configuration YAML file using yaml-cpp.
    • -
    • Reading and writing of TOML files to represent parameters and distributions using toml11.
    • -
    • Reading and writing of arrays to/from a HDF5 file.
    • -
    • Hashing of file names and file content via SHA1.
    • -
    • Semantic versioning via a dedicated version class.
    • -
    • Added ability to talk to the RestAPI via the CURL library.
    • -
    • Use of spdlog as a logging library for plenty of output during debugging.
    • -
    -
    -
    + + +

    +Directories

    +
    + +
    -
    Related Pages
    +
    src Directory Reference
    -
    Here is a list of all related documentation pages: