From 5b5caf7e95cc5ce723fe1e1de80ff12babe349fc Mon Sep 17 00:00:00 2001 From: "penify-dev[bot]" <146478655+penify-dev[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 11:54:22 +0000 Subject: [PATCH] Add architecture documentation --- docs-test-3rd-techno/html/README_8md.html | 144 + docs-test-3rd-techno/html/annotated.html | 174 ++ docs-test-3rd-techno/html/annotated_dup.js | 44 + .../html/api__client_8py.html | 160 + docs-test-3rd-techno/html/api__client_8py.js | 4 + .../html/auth__commands_8py.html | 164 + .../html/auth__commands_8py.js | 5 + .../html/base__analyzer_8py.html | 160 + .../html/base__analyzer_8py.js | 4 + docs-test-3rd-techno/html/bc_s.png | Bin 0 -> 676 bytes docs-test-3rd-techno/html/bc_sd.png | Bin 0 -> 635 bytes docs-test-3rd-techno/html/classException.html | 157 + .../html/classException__coll__graph.map | 3 + .../html/classException__coll__graph.md5 | 1 + .../html/classException__coll__graph.svg | 52 + .../html/classException__coll__graph_org.svg | 26 + .../html/classException__inherit__graph.map | 5 + .../html/classException__inherit__graph.md5 | 1 + .../html/classException__inherit__graph.svg | 76 + .../classException__inherit__graph_org.svg | 50 + docs-test-3rd-techno/html/classes.html | 173 ++ ...k_1_1api__client_1_1APIClient-members.html | 155 + ...ify__hook_1_1api__client_1_1APIClient.html | 436 +++ ...enify__hook_1_1api__client_1_1APIClient.js | 12 + ...1api__client_1_1APIClient__coll__graph.map | 3 + ...1api__client_1_1APIClient__coll__graph.md5 | 1 + ...1api__client_1_1APIClient__coll__graph.svg | 72 + ...__client_1_1APIClient__coll__graph_org.svg | 46 + ...7bc97b2af31662029a24169f285c286_cgraph.map | 5 + ...7bc97b2af31662029a24169f285c286_cgraph.md5 | 1 + ...7bc97b2af31662029a24169f285c286_cgraph.svg | 67 + ...7b2af31662029a24169f285c286_cgraph_org.svg | 41 + ...c2fac38629fed60e8440203a1197dd_icgraph.map | 5 + ...c2fac38629fed60e8440203a1197dd_icgraph.md5 | 1 + ...c2fac38629fed60e8440203a1197dd_icgraph.svg | 67 + ...c38629fed60e8440203a1197dd_icgraph_org.svg | 41 + ...ase__analyzer_1_1BaseAnalyzer-members.html | 154 + ...ook_1_1base__analyzer_1_1BaseAnalyzer.html | 310 ++ ..._hook_1_1base__analyzer_1_1BaseAnalyzer.js | 11 + ..._analyzer_1_1BaseAnalyzer__coll__graph.map | 3 + ..._analyzer_1_1BaseAnalyzer__coll__graph.md5 | 1 + ..._analyzer_1_1BaseAnalyzer__coll__graph.svg | 68 + ...lyzer_1_1BaseAnalyzer__coll__graph_org.svg | 42 + ...alyzer_1_1BaseAnalyzer__inherit__graph.map | 11 + ...alyzer_1_1BaseAnalyzer__inherit__graph.md5 | 1 + ...alyzer_1_1BaseAnalyzer__inherit__graph.svg | 260 ++ ...er_1_1BaseAnalyzer__inherit__graph_org.svg | 177 ++ ..._analyzer_1_1CommitDocGenHook-members.html | 160 + ...1commit__analyzer_1_1CommitDocGenHook.html | 458 +++ ...1_1commit__analyzer_1_1CommitDocGenHook.js | 10 + ...lyzer_1_1CommitDocGenHook__coll__graph.map | 7 + ...lyzer_1_1CommitDocGenHook__coll__graph.md5 | 1 + ...lyzer_1_1CommitDocGenHook__coll__graph.svg | 218 ++ ...r_1_1CommitDocGenHook__coll__graph_org.svg | 135 + ...er_1_1CommitDocGenHook__inherit__graph.map | 5 + ...er_1_1CommitDocGenHook__inherit__graph.md5 | 1 + ...er_1_1CommitDocGenHook__inherit__graph.svg | 105 + ..._1CommitDocGenHook__inherit__graph_org.svg | 79 + ...1812b68bf904e3beb051e585eff111_icgraph.map | 5 + ...1812b68bf904e3beb051e585eff111_icgraph.md5 | 1 + ...1812b68bf904e3beb051e585eff111_icgraph.svg | 68 + ...b68bf904e3beb051e585eff111_icgraph_org.svg | 42 + ...fa29d890af3f3770743197e15776778_cgraph.map | 4 + ...fa29d890af3f3770743197e15776778_cgraph.md5 | 1 + ...fa29d890af3f3770743197e15776778_cgraph.svg | 58 + ...d890af3f3770743197e15776778_cgraph_org.svg | 32 + ...a29d890af3f3770743197e15776778_icgraph.map | 4 + ...a29d890af3f3770743197e15776778_icgraph.md5 | 1 + ...a29d890af3f3770743197e15776778_icgraph.svg | 58 + ...890af3f3770743197e15776778_icgraph_org.svg | 32 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map | 9 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 | 1 + ...d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg | 108 + ...9eba04614915fa33a1d7b0b8f03_cgraph_org.svg | 82 + ...96194276441fa2eb2fa014eaab9a37_icgraph.map | 5 + ...96194276441fa2eb2fa014eaab9a37_icgraph.md5 | 1 + ...96194276441fa2eb2fa014eaab9a37_icgraph.svg | 68 + ...4276441fa2eb2fa014eaab9a37_icgraph_org.svg | 42 + ...a13cc121d96342476ccf72b63a007f_icgraph.map | 5 + ...a13cc121d96342476ccf72b63a007f_icgraph.md5 | 1 + ...a13cc121d96342476ccf72b63a007f_icgraph.svg | 68 + ...c121d96342476ccf72b63a007f_icgraph_org.svg | 42 + ...alyzer_1_1FileAnalyzerGenHook-members.html | 158 + ...file__analyzer_1_1FileAnalyzerGenHook.html | 334 ++ ..._1file__analyzer_1_1FileAnalyzerGenHook.js | 8 + ...er_1_1FileAnalyzerGenHook__coll__graph.map | 5 + ...er_1_1FileAnalyzerGenHook__coll__graph.md5 | 1 + ...er_1_1FileAnalyzerGenHook__coll__graph.svg | 101 + ..._1FileAnalyzerGenHook__coll__graph_org.svg | 75 + ...1_1FileAnalyzerGenHook__inherit__graph.map | 5 + ...1_1FileAnalyzerGenHook__inherit__graph.md5 | 1 + ...1_1FileAnalyzerGenHook__inherit__graph.svg | 101 + ...ileAnalyzerGenHook__inherit__graph_org.svg | 75 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.map | 5 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.md5 | 1 + ...03c97b07cb2db1df0d881094dd6bb49_cgraph.svg | 67 + ...7b07cb2db1df0d881094dd6bb49_cgraph_org.svg | 41 + ...3be324ba517855d6e5cdb684a6efda_icgraph.map | 7 + ...3be324ba517855d6e5cdb684a6efda_icgraph.md5 | 1 + ...3be324ba517855d6e5cdb684a6efda_icgraph.svg | 86 + ...24ba517855d6e5cdb684a6efda_icgraph_org.svg | 60 + ...yzer_1_1FolderAnalyzerGenHook-members.html | 157 + ...er__analyzer_1_1FolderAnalyzerGenHook.html | 294 ++ ...lder__analyzer_1_1FolderAnalyzerGenHook.js | 7 + ..._1_1FolderAnalyzerGenHook__coll__graph.map | 5 + ..._1_1FolderAnalyzerGenHook__coll__graph.md5 | 1 + ..._1_1FolderAnalyzerGenHook__coll__graph.svg | 99 + ...FolderAnalyzerGenHook__coll__graph_org.svg | 73 + ...1FolderAnalyzerGenHook__inherit__graph.map | 5 + ...1FolderAnalyzerGenHook__inherit__graph.md5 | 1 + ...1FolderAnalyzerGenHook__inherit__graph.svg | 99 + ...derAnalyzerGenHook__inherit__graph_org.svg | 73 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.map | 5 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 | 1 + ...0554646cbc07aef1fbaa748ee4c0fc_icgraph.svg | 69 + ...646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg | 43 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map | 5 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 | 1 + ...3c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg | 69 + ...ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg | 43 + ...it__analyzer_1_1GitDocGenHook-members.html | 158 + ...ook_1_1git__analyzer_1_1GitDocGenHook.html | 355 +++ ..._hook_1_1git__analyzer_1_1GitDocGenHook.js | 8 + ...analyzer_1_1GitDocGenHook__coll__graph.map | 5 + ...analyzer_1_1GitDocGenHook__coll__graph.md5 | 1 + ...analyzer_1_1GitDocGenHook__coll__graph.svg | 102 + ...yzer_1_1GitDocGenHook__coll__graph_org.svg | 76 + ...lyzer_1_1GitDocGenHook__inherit__graph.map | 5 + ...lyzer_1_1GitDocGenHook__inherit__graph.md5 | 1 + ...lyzer_1_1GitDocGenHook__inherit__graph.svg | 102 + ...r_1_1GitDocGenHook__inherit__graph_org.svg | 76 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.map | 5 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.md5 | 1 + ...cec06966a3a5ef1df21529a6a3db81_icgraph.svg | 67 + ...6966a3a5ef1df21529a6a3db81_icgraph_org.svg | 41 + ...8fe1e50fc9448d995851d933283b633_cgraph.map | 9 + ...8fe1e50fc9448d995851d933283b633_cgraph.md5 | 1 + ...8fe1e50fc9448d995851d933283b633_cgraph.svg | 106 + ...e50fc9448d995851d933283b633_cgraph_org.svg | 80 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.map | 4 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 | 1 + ...f94663c0330ae7e6cbb7a8748177c24_cgraph.svg | 57 + ...63c0330ae7e6cbb7a8748177c24_cgraph_org.svg | 31 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.map | 4 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.md5 | 1 + ...94663c0330ae7e6cbb7a8748177c24_icgraph.svg | 57 + ...3c0330ae7e6cbb7a8748177c24_icgraph_org.svg | 31 + ...70449b5dc058808eb13013db3d8eab_icgraph.map | 5 + ...70449b5dc058808eb13013db3d8eab_icgraph.md5 | 1 + ...70449b5dc058808eb13013db3d8eab_icgraph.svg | 68 + ...9b5dc058808eb13013db3d8eab_icgraph_org.svg | 42 + ...1_1jira__client_1_1JiraClient-members.html | 161 + ...y__hook_1_1jira__client_1_1JiraClient.html | 688 +++++ ...ify__hook_1_1jira__client_1_1JiraClient.js | 18 + ...ira__client_1_1JiraClient__coll__graph.map | 3 + ...ira__client_1_1JiraClient__coll__graph.md5 | 1 + ...ira__client_1_1JiraClient__coll__graph.svg | 86 + ..._client_1_1JiraClient__coll__graph_org.svg | 60 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.map | 23 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.md5 | 1 + ...d0f9ae006313a21576362d26ac5ec8_icgraph.svg | 297 ++ ...ae006313a21576362d26ac5ec8_icgraph_org.svg | 214 ++ ...9ea1149758f7f5212149d357b13cc23_cgraph.map | 10 + ...9ea1149758f7f5212149d357b13cc23_cgraph.md5 | 1 + ...9ea1149758f7f5212149d357b13cc23_cgraph.svg | 172 ++ ...149758f7f5212149d357b13cc23_cgraph_org.svg | 89 + ...ea1149758f7f5212149d357b13cc23_icgraph.map | 5 + ...ea1149758f7f5212149d357b13cc23_icgraph.md5 | 1 + ...ea1149758f7f5212149d357b13cc23_icgraph.svg | 69 + ...49758f7f5212149d357b13cc23_icgraph_org.svg | 43 + ...5f6924819084b7c8d268956a784804a_cgraph.map | 5 + ...5f6924819084b7c8d268956a784804a_cgraph.md5 | 1 + ...5f6924819084b7c8d268956a784804a_cgraph.svg | 67 + ...24819084b7c8d268956a784804a_cgraph_org.svg | 41 + ...f6924819084b7c8d268956a784804a_icgraph.map | 10 + ...f6924819084b7c8d268956a784804a_icgraph.md5 | 1 + ...f6924819084b7c8d268956a784804a_icgraph.svg | 174 ++ ...4819084b7c8d268956a784804a_icgraph_org.svg | 91 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.map | 20 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 | 1 + ...0d2c5a6432aa6f238da0ff65d49a760_cgraph.svg | 268 ++ ...5a6432aa6f238da0ff65d49a760_cgraph_org.svg | 185 ++ ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map | 6 + ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 | 1 + ...1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg | 76 + ...4116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg | 50 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.map | 4 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 | 1 + ...f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg | 57 + ...116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg | 31 + ...967169a4b7970c67c0947b9ac56f746_cgraph.map | 5 + ...967169a4b7970c67c0947b9ac56f746_cgraph.md5 | 1 + ...967169a4b7970c67c0947b9ac56f746_cgraph.svg | 68 + ...69a4b7970c67c0947b9ac56f746_cgraph_org.svg | 42 + ...67169a4b7970c67c0947b9ac56f746_icgraph.map | 7 + ...67169a4b7970c67c0947b9ac56f746_icgraph.md5 | 1 + ...67169a4b7970c67c0947b9ac56f746_icgraph.svg | 89 + ...9a4b7970c67c0947b9ac56f746_icgraph_org.svg | 63 + ...a8837552d37bfd611de23441a240826_cgraph.map | 5 + ...a8837552d37bfd611de23441a240826_cgraph.md5 | 1 + ...a8837552d37bfd611de23441a240826_cgraph.svg | 68 + ...7552d37bfd611de23441a240826_cgraph_org.svg | 42 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.map | 7 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.md5 | 1 + ...823ad1d3baaedd38039913c3a97fd7_icgraph.svg | 145 + ...d1d3baaedd38039913c3a97fd7_icgraph_org.svg | 62 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.map | 11 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 | 1 + ...b41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg | 125 + ...e6f13c30b1265d439ddf04bf2cd_cgraph_org.svg | 99 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.map | 5 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 | 1 + ...41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg | 69 + ...6f13c30b1265d439ddf04bf2cd_icgraph_org.svg | 43 + ...k_1_1llm__client_1_1LLMClient-members.html | 151 + ...ify__hook_1_1llm__client_1_1LLMClient.html | 358 +++ ...enify__hook_1_1llm__client_1_1LLMClient.js | 8 + ...1llm__client_1_1LLMClient__coll__graph.map | 3 + ...1llm__client_1_1LLMClient__coll__graph.md5 | 1 + ...1llm__client_1_1LLMClient__coll__graph.svg | 61 + ...__client_1_1LLMClient__coll__graph_org.svg | 35 + ...5bdb0eab18f46b9f78e38f07b5e899e_cgraph.map | 5 + ...5bdb0eab18f46b9f78e38f07b5e899e_cgraph.md5 | 1 + ...5bdb0eab18f46b9f78e38f07b5e899e_cgraph.svg | 66 + ...0eab18f46b9f78e38f07b5e899e_cgraph_org.svg | 40 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.map | 5 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.md5 | 1 + ...46fddc43ecd633d2c358d58dd4df24_icgraph.svg | 66 + ...dc43ecd633d2c358d58dd4df24_icgraph_org.svg | 40 + ...hook_1_1utils_1_1GitRepoNotFoundError.html | 157 + ...s_1_1GitRepoNotFoundError__coll__graph.map | 5 + ...s_1_1GitRepoNotFoundError__coll__graph.md5 | 1 + ...s_1_1GitRepoNotFoundError__coll__graph.svg | 76 + ...1GitRepoNotFoundError__coll__graph_org.svg | 50 + ..._1GitRepoNotFoundError__inherit__graph.map | 5 + ..._1GitRepoNotFoundError__inherit__graph.md5 | 1 + ..._1GitRepoNotFoundError__inherit__graph.svg | 76 + ...tRepoNotFoundError__inherit__graph_org.svg | 50 + ...ommands_1_1TestCommitCommands-members.html | 158 + ...ommit__commands_1_1TestCommitCommands.html | 699 +++++ ..._commit__commands_1_1TestCommitCommands.js | 15 + ...nds_1_1TestCommitCommands__coll__graph.map | 3 + ...nds_1_1TestCommitCommands__coll__graph.md5 | 1 + ...nds_1_1TestCommitCommands__coll__graph.svg | 80 + ...1_1TestCommitCommands__coll__graph_org.svg | 54 + ...ommands_1_1TestConfigCommands-members.html | 158 + ...onfig__commands_1_1TestConfigCommands.html | 718 +++++ ..._config__commands_1_1TestConfigCommands.js | 15 + ...nds_1_1TestConfigCommands__coll__graph.map | 3 + ...nds_1_1TestConfigCommands__coll__graph.md5 | 1 + ...nds_1_1TestConfigCommands__coll__graph.svg | 88 + ...1_1TestConfigCommands__coll__graph_org.svg | 62 + ..._web__config_1_1TestWebConfig-members.html | 148 + ...1_1test__web__config_1_1TestWebConfig.html | 251 ++ ...s_1_1test__web__config_1_1TestWebConfig.js | 5 + ...__config_1_1TestWebConfig__coll__graph.map | 3 + ...__config_1_1TestWebConfig__coll__graph.md5 | 1 + ...__config_1_1TestWebConfig__coll__graph.svg | 58 + ...nfig_1_1TestWebConfig__coll__graph_org.svg | 32 + docs-test-3rd-techno/html/clipboard.js | 61 + docs-test-3rd-techno/html/closed.png | Bin 0 -> 132 bytes .../html/commit-commands_8md.html | 144 + .../html/commit__analyzer_8py.html | 160 + .../html/commit__analyzer_8py.js | 4 + .../html/commit__commands_8py.html | 166 + .../html/commit__commands_8py.js | 6 + .../html/config-commands_8md.html | 144 + .../html/config__command_8py.html | 162 + .../html/config__command_8py.js | 5 + .../html/config__commands_8py.html | 188 ++ .../html/config__commands_8py.js | 15 + docs-test-3rd-techno/html/conftest_8py.html | 154 + docs-test-3rd-techno/html/constants_8py.html | 162 + docs-test-3rd-techno/html/constants_8py.js | 5 + docs-test-3rd-techno/html/cookie.js | 58 + .../html/detailed-usage_8md.html | 144 + .../dir_063e2d5fe58a131099a7fe4200cca78c.html | 165 + .../dir_063e2d5fe58a131099a7fe4200cca78c.js | 9 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.map | 4 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.md5 | 1 + ...r_063e2d5fe58a131099a7fe4200cca78c_dep.svg | 55 + ...3e2d5fe58a131099a7fe4200cca78c_dep_org.svg | 29 + .../dir_1648a057408aae8db85b8e3797335623.html | 149 + ...r_1648a057408aae8db85b8e3797335623_dep.map | 4 + ...r_1648a057408aae8db85b8e3797335623_dep.md5 | 1 + ...r_1648a057408aae8db85b8e3797335623_dep.svg | 55 + ...48a057408aae8db85b8e3797335623_dep_org.svg | 29 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.html | 165 + .../dir_624fa2a8bce97f0444ac5cca335d4e23.js | 9 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.map | 4 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 | 1 + ...r_624fa2a8bce97f0444ac5cca335d4e23_dep.svg | 55 + ...4fa2a8bce97f0444ac5cca335d4e23_dep_org.svg | 29 + .../dir_b3b22d2ab7966b65f6b237e3231b41be.html | 274 ++ .../dir_b3b22d2ab7966b65f6b237e3231b41be.js | 7 + .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.html | 188 ++ .../dir_f88c3381c1861b3f7ca1f3d63cf244b5.js | 19 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map | 5 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 | 1 + ...r_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg | 67 + ...8c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg | 41 + docs-test-3rd-techno/html/doc.svg | 12 + .../html/doc__commands_8md.html | 144 + .../html/doc__commands_8py.html | 172 ++ .../html/doc__commands_8py.js | 7 + docs-test-3rd-techno/html/docd.svg | 12 + .../html/doxygen-awesome-darkmode-toggle.js | 157 + .../doxygen-awesome-fragment-copy-button.js | 85 + .../html/doxygen-awesome-interactive-toc.js | 81 + .../html/doxygen-awesome-paragraph-link.js | 51 + ...n-awesome-sidebar-only-darkmode-toggle.css | 40 + .../html/doxygen-awesome-sidebar-only.css | 116 + .../html/doxygen-awesome-tabs.js | 90 + docs-test-3rd-techno/html/doxygen-awesome.css | 2675 +++++++++++++++++ docs-test-3rd-techno/html/doxygen.css | 1849 ++++++++++++ docs-test-3rd-techno/html/doxygen.svg | 28 + docs-test-3rd-techno/html/doxygen_crawl.html | 447 +++ docs-test-3rd-techno/html/dynsections.js | 198 ++ .../html/example-workflows_8md.html | 144 + .../html/file__analyzer_8py.html | 166 + .../html/file__analyzer_8py.js | 5 + docs-test-3rd-techno/html/files.html | 180 ++ docs-test-3rd-techno/html/files_dup.js | 4 + .../html/folder__analyzer_8py.html | 160 + .../html/folder__analyzer_8py.js | 4 + docs-test-3rd-techno/html/folderclosed.svg | 11 + docs-test-3rd-techno/html/folderclosedd.svg | 11 + docs-test-3rd-techno/html/folderopen.svg | 17 + docs-test-3rd-techno/html/folderopend.svg | 12 + docs-test-3rd-techno/html/functions.html | 275 ++ docs-test-3rd-techno/html/functions_func.html | 244 ++ docs-test-3rd-techno/html/functions_vars.html | 161 + .../html/git__analyzer_8py.html | 166 + .../html/git__analyzer_8py.js | 5 + docs-test-3rd-techno/html/graph_legend.html | 203 ++ docs-test-3rd-techno/html/graph_legend.md5 | 1 + docs-test-3rd-techno/html/graph_legend.svg | 167 + docs-test-3rd-techno/html/hierarchy.html | 162 + docs-test-3rd-techno/html/hierarchy.js | 18 + .../html/hook__commands_8py.html | 172 ++ .../html/hook__commands_8py.js | 7 + docs-test-3rd-techno/html/index.html | 144 + docs-test-3rd-techno/html/inherit_graph_0.map | 5 + docs-test-3rd-techno/html/inherit_graph_0.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_0.svg | 40 + docs-test-3rd-techno/html/inherit_graph_1.map | 3 + docs-test-3rd-techno/html/inherit_graph_1.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_1.svg | 21 + docs-test-3rd-techno/html/inherit_graph_2.map | 11 + docs-test-3rd-techno/html/inherit_graph_2.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_2.svg | 98 + docs-test-3rd-techno/html/inherit_graph_3.map | 3 + docs-test-3rd-techno/html/inherit_graph_3.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_3.svg | 22 + docs-test-3rd-techno/html/inherit_graph_4.map | 3 + docs-test-3rd-techno/html/inherit_graph_4.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_4.svg | 21 + docs-test-3rd-techno/html/inherit_graph_5.map | 3 + docs-test-3rd-techno/html/inherit_graph_5.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_5.svg | 22 + docs-test-3rd-techno/html/inherit_graph_6.map | 3 + docs-test-3rd-techno/html/inherit_graph_6.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_6.svg | 22 + docs-test-3rd-techno/html/inherit_graph_7.map | 3 + docs-test-3rd-techno/html/inherit_graph_7.md5 | 1 + docs-test-3rd-techno/html/inherit_graph_7.svg | 22 + docs-test-3rd-techno/html/inherits.html | 155 + .../html/jira__client_8py.html | 166 + docs-test-3rd-techno/html/jira__client_8py.js | 5 + docs-test-3rd-techno/html/jquery.js | 204 ++ .../html/llm__client_8py.html | 160 + docs-test-3rd-techno/html/llm__client_8py.js | 4 + .../html/login__command_8py.html | 162 + .../html/login__command_8py.js | 5 + docs-test-3rd-techno/html/main_8py.html | 160 + docs-test-3rd-techno/html/main_8py.js | 4 + ...ev_2penify-cli_2docs_2commit-commands.html | 270 ++ ...ev_2penify-cli_2docs_2config-commands.html | 301 ++ ...dev_2penify-cli_2docs_2detailed-usage.html | 295 ++ ...-dev_2penify-cli_2docs_2doc__commands.html | 378 +++ ..._2penify-cli_2docs_2example-workflows.html | 254 ++ ...y-cli_2docs_2penify-cli-documentation.html | 291 ++ docs-test-3rd-techno/html/menu.js | 134 + docs-test-3rd-techno/html/menudata.js | 117 + docs-test-3rd-techno/html/minus.svg | 8 + docs-test-3rd-techno/html/minusd.svg | 8 + .../html/namespacemembers.html | 303 ++ .../html/namespacemembers_func.html | 242 ++ .../html/namespacemembers_vars.html | 229 ++ .../html/namespacepenify__hook.html | 180 ++ .../html/namespacepenify__hook.js | 56 + .../namespacepenify__hook_1_1api__client.html | 152 + .../namespacepenify__hook_1_1api__client.js | 4 + ...mespacepenify__hook_1_1base__analyzer.html | 152 + ...namespacepenify__hook_1_1base__analyzer.js | 4 + .../namespacepenify__hook_1_1commands.html | 160 + .../html/namespacepenify__hook_1_1commands.js | 38 + ...y__hook_1_1commands_1_1auth__commands.html | 221 ++ ...eb69ebcc475060011476a65cbffd7f6_cgraph.map | 5 + ...eb69ebcc475060011476a65cbffd7f6_cgraph.md5 | 1 + ...eb69ebcc475060011476a65cbffd7f6_cgraph.svg | 67 + ...ebcc475060011476a65cbffd7f6_cgraph_org.svg | 41 + ...a2119363481a0001ad6190329c863b_icgraph.map | 5 + ...a2119363481a0001ad6190329c863b_icgraph.md5 | 1 + ...a2119363481a0001ad6190329c863b_icgraph.svg | 67 + ...9363481a0001ad6190329c863b_icgraph_org.svg | 41 + ..._hook_1_1commands_1_1commit__commands.html | 287 ++ ...60ebdd6821c714f9db99f8d447c1b6_icgraph.map | 5 + ...60ebdd6821c714f9db99f8d447c1b6_icgraph.md5 | 1 + ...60ebdd6821c714f9db99f8d447c1b6_icgraph.svg | 67 + ...dd6821c714f9db99f8d447c1b6_icgraph_org.svg | 41 + ...a856c3961f5f8914e58485644572076_cgraph.map | 5 + ...a856c3961f5f8914e58485644572076_cgraph.md5 | 1 + ...a856c3961f5f8914e58485644572076_cgraph.svg | 67 + ...c3961f5f8914e58485644572076_cgraph_org.svg | 41 + ..._hook_1_1commands_1_1config__commands.html | 500 +++ ...59710e44183890121dc3013cb6f374_icgraph.map | 5 + ...59710e44183890121dc3013cb6f374_icgraph.md5 | 1 + ...59710e44183890121dc3013cb6f374_icgraph.svg | 67 + ...0e44183890121dc3013cb6f374_icgraph_org.svg | 41 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map | 8 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 | 1 + ...5bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg | 96 + ...685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg | 70 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map | 5 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 | 1 + ...bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg | 67 + ...85c4dcb5c15ba6a4055e484cf2_icgraph_org.svg | 41 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.map | 11 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 | 1 + ...af2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg | 182 ++ ...062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg | 99 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.map | 10 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.md5 | 1 + ...503d51c905e2f1b299b12d2a73bd812_cgraph.svg | 115 + ...51c905e2f1b299b12d2a73bd812_cgraph_org.svg | 89 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map | 8 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 | 1 + ...492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg | 96 + ...c8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg | 70 + ...59a82d0bf727703d550d1003d3ed20_icgraph.map | 5 + ...59a82d0bf727703d550d1003d3ed20_icgraph.md5 | 1 + ...59a82d0bf727703d550d1003d3ed20_icgraph.svg | 67 + ...2d0bf727703d550d1003d3ed20_icgraph_org.svg | 41 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.map | 4 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.md5 | 1 + ...be277132ce0bc0aacef951cf1dee2ae_cgraph.svg | 57 + ...7132ce0bc0aacef951cf1dee2ae_cgraph_org.svg | 31 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.map | 12 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.md5 | 1 + ...e277132ce0bc0aacef951cf1dee2ae_icgraph.svg | 190 ++ ...132ce0bc0aacef951cf1dee2ae_icgraph_org.svg | 107 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.map | 12 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 | 1 + ...64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg | 191 ++ ...0de6cfdbed6d5d2fe582902bf13_cgraph_org.svg | 108 + ...fy__hook_1_1commands_1_1doc__commands.html | 269 ++ ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.map | 5 + ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 | 1 + ...b2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg | 67 + ...8c0446d85dc4e7d34b3929dad7_icgraph_org.svg | 41 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.map | 5 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 | 1 + ...1d631e51b0533b7d8dc780eea52e1cc_cgraph.svg | 67 + ...1e51b0533b7d8dc780eea52e1cc_cgraph_org.svg | 41 + ...y__hook_1_1commands_1_1hook__commands.html | 236 ++ ...spacepenify__hook_1_1commit__analyzer.html | 152 + ...mespacepenify__hook_1_1commit__analyzer.js | 4 + ...espacepenify__hook_1_1config__command.html | 199 ++ .../namespacepenify__hook_1_1constants.html | 183 ++ ...mespacepenify__hook_1_1file__analyzer.html | 173 ++ ...namespacepenify__hook_1_1file__analyzer.js | 5 + ...spacepenify__hook_1_1folder__analyzer.html | 152 + ...mespacepenify__hook_1_1folder__analyzer.js | 4 + ...amespacepenify__hook_1_1git__analyzer.html | 173 ++ .../namespacepenify__hook_1_1git__analyzer.js | 5 + ...namespacepenify__hook_1_1jira__client.html | 173 ++ .../namespacepenify__hook_1_1jira__client.js | 5 + .../namespacepenify__hook_1_1llm__client.html | 152 + .../namespacepenify__hook_1_1llm__client.js | 4 + ...mespacepenify__hook_1_1login__command.html | 190 ++ .../html/namespacepenify__hook_1_1main.html | 188 ++ ...45db84b8309d570226b2e147e18b5eb_cgraph.map | 4 + ...45db84b8309d570226b2e147e18b5eb_cgraph.md5 | 1 + ...45db84b8309d570226b2e147e18b5eb_cgraph.svg | 56 + ...84b8309d570226b2e147e18b5eb_cgraph_org.svg | 30 + ...5db84b8309d570226b2e147e18b5eb_icgraph.map | 4 + ...5db84b8309d570226b2e147e18b5eb_icgraph.md5 | 1 + ...5db84b8309d570226b2e147e18b5eb_icgraph.svg | 56 + ...4b8309d570226b2e147e18b5eb_icgraph_org.svg | 30 + .../namespacepenify__hook_1_1ui__utils.html | 703 +++++ ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.map | 5 + ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 | 1 + ...5b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg | 67 + ...a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg | 41 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.map | 5 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.md5 | 1 + ...cee29e999fa3c812725cb98f24aae4c_cgraph.svg | 65 + ...9e999fa3c812725cb98f24aae4c_cgraph_org.svg | 39 + ...ca95113c53214d848659a52a099f5e_icgraph.map | 5 + ...ca95113c53214d848659a52a099f5e_icgraph.md5 | 1 + ...ca95113c53214d848659a52a099f5e_icgraph.svg | 67 + ...113c53214d848659a52a099f5e_icgraph_org.svg | 41 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.map | 5 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 | 1 + ...83e3b1ec7b75f08653a9f6cfb897405_cgraph.svg | 66 + ...b1ec7b75f08653a9f6cfb897405_cgraph_org.svg | 40 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.map | 5 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 | 1 + ...3f112b02d36b74c88a3ce3ed1458b45_cgraph.svg | 67 + ...2b02d36b74c88a3ce3ed1458b45_cgraph_org.svg | 41 + ...190fd240641e2c83f6a047490e7797_icgraph.map | 5 + ...190fd240641e2c83f6a047490e7797_icgraph.md5 | 1 + ...190fd240641e2c83f6a047490e7797_icgraph.svg | 67 + ...d240641e2c83f6a047490e7797_icgraph_org.svg | 41 + ...bff909b9e155a344597f69a0530754b_cgraph.map | 5 + ...bff909b9e155a344597f69a0530754b_cgraph.md5 | 1 + ...bff909b9e155a344597f69a0530754b_cgraph.svg | 67 + ...09b9e155a344597f69a0530754b_cgraph_org.svg | 41 + ...e53cca2e23a993884797e523337e41_icgraph.map | 5 + ...e53cca2e23a993884797e523337e41_icgraph.md5 | 1 + ...e53cca2e23a993884797e523337e41_icgraph.svg | 67 + ...ca2e23a993884797e523337e41_icgraph_org.svg | 41 + ...c6826668b45c778d864f5ae741e1b2_icgraph.map | 9 + ...c6826668b45c778d864f5ae741e1b2_icgraph.md5 | 1 + ...c6826668b45c778d864f5ae741e1b2_icgraph.svg | 103 + ...6668b45c778d864f5ae741e1b2_icgraph_org.svg | 77 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map | 5 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 | 1 + ...e4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg | 66 + ...3a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg | 40 + ...e226ee36d43076ed54dade970dc0ca_icgraph.map | 5 + ...e226ee36d43076ed54dade970dc0ca_icgraph.md5 | 1 + ...e226ee36d43076ed54dade970dc0ca_icgraph.svg | 67 + ...ee36d43076ed54dade970dc0ca_icgraph_org.svg | 41 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.map | 5 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 | 1 + ...4f7cab36c3b1f09507654b119d45bfb_cgraph.svg | 67 + ...ab36c3b1f09507654b119d45bfb_cgraph_org.svg | 41 + .../html/namespacepenify__hook_1_1utils.html | 262 ++ .../html/namespacepenify__hook_1_1utils.js | 8 + ...d723ca510c90ac0390819dcae3a800a_cgraph.map | 4 + ...d723ca510c90ac0390819dcae3a800a_cgraph.md5 | 1 + ...d723ca510c90ac0390819dcae3a800a_cgraph.svg | 57 + ...ca510c90ac0390819dcae3a800a_cgraph_org.svg | 31 + ...723ca510c90ac0390819dcae3a800a_icgraph.map | 4 + ...723ca510c90ac0390819dcae3a800a_icgraph.md5 | 1 + ...723ca510c90ac0390819dcae3a800a_icgraph.svg | 57 + ...a510c90ac0390819dcae3a800a_icgraph_org.svg | 31 + docs-test-3rd-techno/html/namespaces.html | 175 ++ docs-test-3rd-techno/html/namespaces_dup.js | 20 + docs-test-3rd-techno/html/namespacesetup.html | 359 +++ docs-test-3rd-techno/html/namespacetests.html | 160 + docs-test-3rd-techno/html/namespacetests.js | 20 + .../html/namespacetests_1_1conftest.html | 144 + ...espacetests_1_1test__commit__commands.html | 152 + ...amespacetests_1_1test__commit__commands.js | 4 + ...espacetests_1_1test__config__commands.html | 152 + ...amespacetests_1_1test__config__commands.js | 4 + ...namespacetests_1_1test__doc__commands.html | 608 ++++ .../namespacetests_1_1test__web__config.html | 152 + .../namespacetests_1_1test__web__config.js | 4 + docs-test-3rd-techno/html/nav_f.png | Bin 0 -> 153 bytes docs-test-3rd-techno/html/nav_fd.png | Bin 0 -> 169 bytes docs-test-3rd-techno/html/nav_g.png | Bin 0 -> 95 bytes docs-test-3rd-techno/html/nav_h.png | Bin 0 -> 98 bytes docs-test-3rd-techno/html/nav_hd.png | Bin 0 -> 114 bytes docs-test-3rd-techno/html/navtree.css | 149 + docs-test-3rd-techno/html/navtree.js | 483 +++ docs-test-3rd-techno/html/navtreedata.js | 254 ++ docs-test-3rd-techno/html/navtreeindex0.js | 253 ++ docs-test-3rd-techno/html/navtreeindex1.js | 253 ++ docs-test-3rd-techno/html/navtreeindex2.js | 13 + docs-test-3rd-techno/html/open.png | Bin 0 -> 123 bytes docs-test-3rd-techno/html/pages.html | 153 + .../html/penify-cli-documentation_8md.html | 144 + .../html/penify__hook_2____init_____8py.html | 152 + ...ify__hook_2commands_2____init_____8py.html | 154 + docs-test-3rd-techno/html/plus.svg | 9 + docs-test-3rd-techno/html/plusd.svg | 9 + docs-test-3rd-techno/html/resize.js | 147 + docs-test-3rd-techno/html/search/all_0.js | 4 + docs-test-3rd-techno/html/search/all_1.js | 4 + docs-test-3rd-techno/html/search/all_10.js | 35 + docs-test-3rd-techno/html/search/all_11.js | 21 + docs-test-3rd-techno/html/search/all_12.js | 7 + docs-test-3rd-techno/html/search/all_13.js | 12 + docs-test-3rd-techno/html/search/all_14.js | 49 + docs-test-3rd-techno/html/search/all_15.js | 23 + docs-test-3rd-techno/html/search/all_16.js | 34 + docs-test-3rd-techno/html/search/all_17.js | 66 + docs-test-3rd-techno/html/search/all_18.js | 19 + docs-test-3rd-techno/html/search/all_19.js | 7 + docs-test-3rd-techno/html/search/all_1a.js | 20 + docs-test-3rd-techno/html/search/all_2.js | 4 + docs-test-3rd-techno/html/search/all_3.js | 4 + docs-test-3rd-techno/html/search/all_4.js | 4 + docs-test-3rd-techno/html/search/all_5.js | 7 + docs-test-3rd-techno/html/search/all_6.js | 35 + docs-test-3rd-techno/html/search/all_7.js | 12 + docs-test-3rd-techno/html/search/all_8.js | 71 + docs-test-3rd-techno/html/search/all_9.js | 31 + docs-test-3rd-techno/html/search/all_a.js | 21 + docs-test-3rd-techno/html/search/all_b.js | 31 + docs-test-3rd-techno/html/search/all_c.js | 42 + docs-test-3rd-techno/html/search/all_d.js | 33 + docs-test-3rd-techno/html/search/all_e.js | 18 + docs-test-3rd-techno/html/search/all_f.js | 14 + docs-test-3rd-techno/html/search/classes_0.js | 4 + docs-test-3rd-techno/html/search/classes_1.js | 4 + docs-test-3rd-techno/html/search/classes_2.js | 4 + docs-test-3rd-techno/html/search/classes_3.js | 4 + docs-test-3rd-techno/html/search/classes_4.js | 5 + docs-test-3rd-techno/html/search/classes_5.js | 5 + docs-test-3rd-techno/html/search/classes_6.js | 4 + docs-test-3rd-techno/html/search/classes_7.js | 4 + docs-test-3rd-techno/html/search/classes_8.js | 6 + docs-test-3rd-techno/html/search/close.svg | 18 + docs-test-3rd-techno/html/search/files_0.js | 4 + docs-test-3rd-techno/html/search/files_1.js | 5 + docs-test-3rd-techno/html/search/files_10.js | 5 + docs-test-3rd-techno/html/search/files_2.js | 4 + docs-test-3rd-techno/html/search/files_3.js | 11 + docs-test-3rd-techno/html/search/files_4.js | 6 + docs-test-3rd-techno/html/search/files_5.js | 4 + docs-test-3rd-techno/html/search/files_6.js | 5 + docs-test-3rd-techno/html/search/files_7.js | 4 + docs-test-3rd-techno/html/search/files_8.js | 4 + docs-test-3rd-techno/html/search/files_9.js | 4 + docs-test-3rd-techno/html/search/files_a.js | 5 + docs-test-3rd-techno/html/search/files_b.js | 4 + docs-test-3rd-techno/html/search/files_c.js | 4 + docs-test-3rd-techno/html/search/files_d.js | 4 + docs-test-3rd-techno/html/search/files_e.js | 4 + docs-test-3rd-techno/html/search/files_f.js | 7 + .../html/search/functions_0.js | 5 + .../html/search/functions_1.js | 4 + .../html/search/functions_2.js | 8 + .../html/search/functions_3.js | 6 + .../html/search/functions_4.js | 11 + .../html/search/functions_5.js | 20 + .../html/search/functions_6.js | 7 + .../html/search/functions_7.js | 5 + .../html/search/functions_8.js | 7 + .../html/search/functions_9.js | 10 + .../html/search/functions_a.js | 11 + .../html/search/functions_b.js | 5 + .../html/search/functions_c.js | 11 + .../html/search/functions_d.js | 34 + .../html/search/functions_e.js | 6 + docs-test-3rd-techno/html/search/mag.svg | 24 + docs-test-3rd-techno/html/search/mag_d.svg | 24 + docs-test-3rd-techno/html/search/mag_sel.svg | 31 + docs-test-3rd-techno/html/search/mag_seld.svg | 31 + .../html/search/namespaces_0.js | 24 + .../html/search/namespaces_1.js | 4 + .../html/search/namespaces_2.js | 9 + docs-test-3rd-techno/html/search/pages_0.js | 12 + docs-test-3rd-techno/html/search/pages_1.js | 6 + docs-test-3rd-techno/html/search/pages_2.js | 4 + docs-test-3rd-techno/html/search/pages_3.js | 5 + docs-test-3rd-techno/html/search/pages_4.js | 9 + docs-test-3rd-techno/html/search/pages_5.js | 4 + docs-test-3rd-techno/html/search/pages_6.js | 4 + docs-test-3rd-techno/html/search/search.css | 291 ++ docs-test-3rd-techno/html/search/search.js | 694 +++++ .../html/search/searchdata.js | 33 + .../html/search/variables_0.js | 4 + .../html/search/variables_1.js | 10 + .../html/search/variables_10.js | 4 + .../html/search/variables_11.js | 4 + .../html/search/variables_12.js | 5 + .../html/search/variables_2.js | 4 + .../html/search/variables_3.js | 4 + .../html/search/variables_4.js | 8 + .../html/search/variables_5.js | 6 + .../html/search/variables_6.js | 5 + .../html/search/variables_7.js | 6 + .../html/search/variables_8.js | 5 + .../html/search/variables_9.js | 8 + .../html/search/variables_a.js | 7 + .../html/search/variables_b.js | 4 + .../html/search/variables_c.js | 5 + .../html/search/variables_d.js | 7 + .../html/search/variables_e.js | 7 + .../html/search/variables_f.js | 6 + docs-test-3rd-techno/html/setup_8py.html | 182 ++ docs-test-3rd-techno/html/setup_8py.js | 16 + docs-test-3rd-techno/html/splitbar.png | Bin 0 -> 314 bytes docs-test-3rd-techno/html/splitbard.png | Bin 0 -> 282 bytes docs-test-3rd-techno/html/svg.min.js | 46 + docs-test-3rd-techno/html/sync_off.png | Bin 0 -> 853 bytes docs-test-3rd-techno/html/sync_on.png | Bin 0 -> 845 bytes docs-test-3rd-techno/html/tab_a.png | Bin 0 -> 142 bytes docs-test-3rd-techno/html/tab_ad.png | Bin 0 -> 135 bytes docs-test-3rd-techno/html/tab_b.png | Bin 0 -> 169 bytes docs-test-3rd-techno/html/tab_bd.png | Bin 0 -> 173 bytes docs-test-3rd-techno/html/tab_h.png | Bin 0 -> 177 bytes docs-test-3rd-techno/html/tab_hd.png | Bin 0 -> 180 bytes docs-test-3rd-techno/html/tab_s.png | Bin 0 -> 184 bytes docs-test-3rd-techno/html/tab_sd.png | Bin 0 -> 188 bytes docs-test-3rd-techno/html/tabs.css | 1 + .../html/test__commit__commands_8py.html | 160 + .../html/test__commit__commands_8py.js | 4 + .../html/test__config__commands_8py.html | 160 + .../html/test__config__commands_8py.js | 4 + .../html/test__doc__commands_8py.html | 180 ++ .../html/test__doc__commands_8py.js | 14 + .../html/test__web__config_8py.html | 160 + .../html/test__web__config_8py.js | 4 + .../html/tests_2____init_____8py.html | 152 + .../html/toggle-alternative-theme.js | 11 + docs-test-3rd-techno/html/ui__utils_8py.html | 214 ++ docs-test-3rd-techno/html/ui__utils_8py.js | 29 + docs-test-3rd-techno/html/utils_8py.html | 176 ++ docs-test-3rd-techno/html/utils_8py.js | 8 + .../penify-cli-Penify-dev-g.tar.gz | Bin 0 -> 436390 bytes 717 files changed, 49797 insertions(+) create mode 100644 docs-test-3rd-techno/html/README_8md.html create mode 100644 docs-test-3rd-techno/html/annotated.html create mode 100644 docs-test-3rd-techno/html/annotated_dup.js create mode 100644 docs-test-3rd-techno/html/api__client_8py.html create mode 100644 docs-test-3rd-techno/html/api__client_8py.js create mode 100644 docs-test-3rd-techno/html/auth__commands_8py.html create mode 100644 docs-test-3rd-techno/html/auth__commands_8py.js create mode 100644 docs-test-3rd-techno/html/base__analyzer_8py.html create mode 100644 docs-test-3rd-techno/html/base__analyzer_8py.js create mode 100644 docs-test-3rd-techno/html/bc_s.png create mode 100644 docs-test-3rd-techno/html/bc_sd.png create mode 100644 docs-test-3rd-techno/html/classException.html create mode 100644 docs-test-3rd-techno/html/classException__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classException__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classException__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classException__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classException__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classException__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classException__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classException__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classes.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.js create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg create mode 100644 docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.html create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.js create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg create mode 100644 docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg create mode 100644 docs-test-3rd-techno/html/clipboard.js create mode 100644 docs-test-3rd-techno/html/closed.png create mode 100644 docs-test-3rd-techno/html/commit-commands_8md.html create mode 100644 docs-test-3rd-techno/html/commit__analyzer_8py.html create mode 100644 docs-test-3rd-techno/html/commit__analyzer_8py.js create mode 100644 docs-test-3rd-techno/html/commit__commands_8py.html create mode 100644 docs-test-3rd-techno/html/commit__commands_8py.js create mode 100644 docs-test-3rd-techno/html/config-commands_8md.html create mode 100644 docs-test-3rd-techno/html/config__command_8py.html create mode 100644 docs-test-3rd-techno/html/config__command_8py.js create mode 100644 docs-test-3rd-techno/html/config__commands_8py.html create mode 100644 docs-test-3rd-techno/html/config__commands_8py.js create mode 100644 docs-test-3rd-techno/html/conftest_8py.html create mode 100644 docs-test-3rd-techno/html/constants_8py.html create mode 100644 docs-test-3rd-techno/html/constants_8py.js create mode 100644 docs-test-3rd-techno/html/cookie.js create mode 100644 docs-test-3rd-techno/html/detailed-usage_8md.html create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.html create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.js create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg create mode 100644 docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg create mode 100644 docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623.html create mode 100644 docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.map create mode 100644 docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 create mode 100644 docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.svg create mode 100644 docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg create mode 100644 docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg create mode 100644 docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html create mode 100644 docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg create mode 100644 docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg create mode 100644 docs-test-3rd-techno/html/doc.svg create mode 100644 docs-test-3rd-techno/html/doc__commands_8md.html create mode 100644 docs-test-3rd-techno/html/doc__commands_8py.html create mode 100644 docs-test-3rd-techno/html/doc__commands_8py.js create mode 100644 docs-test-3rd-techno/html/docd.svg create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-darkmode-toggle.js create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-fragment-copy-button.js create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-interactive-toc.js create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-paragraph-link.js create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-sidebar-only-darkmode-toggle.css create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-sidebar-only.css create mode 100644 docs-test-3rd-techno/html/doxygen-awesome-tabs.js create mode 100644 docs-test-3rd-techno/html/doxygen-awesome.css create mode 100644 docs-test-3rd-techno/html/doxygen.css create mode 100644 docs-test-3rd-techno/html/doxygen.svg create mode 100644 docs-test-3rd-techno/html/doxygen_crawl.html create mode 100644 docs-test-3rd-techno/html/dynsections.js create mode 100644 docs-test-3rd-techno/html/example-workflows_8md.html create mode 100644 docs-test-3rd-techno/html/file__analyzer_8py.html create mode 100644 docs-test-3rd-techno/html/file__analyzer_8py.js create mode 100644 docs-test-3rd-techno/html/files.html create mode 100644 docs-test-3rd-techno/html/files_dup.js create mode 100644 docs-test-3rd-techno/html/folder__analyzer_8py.html create mode 100644 docs-test-3rd-techno/html/folder__analyzer_8py.js create mode 100644 docs-test-3rd-techno/html/folderclosed.svg create mode 100644 docs-test-3rd-techno/html/folderclosedd.svg create mode 100644 docs-test-3rd-techno/html/folderopen.svg create mode 100644 docs-test-3rd-techno/html/folderopend.svg create mode 100644 docs-test-3rd-techno/html/functions.html create mode 100644 docs-test-3rd-techno/html/functions_func.html create mode 100644 docs-test-3rd-techno/html/functions_vars.html create mode 100644 docs-test-3rd-techno/html/git__analyzer_8py.html create mode 100644 docs-test-3rd-techno/html/git__analyzer_8py.js create mode 100644 docs-test-3rd-techno/html/graph_legend.html create mode 100644 docs-test-3rd-techno/html/graph_legend.md5 create mode 100644 docs-test-3rd-techno/html/graph_legend.svg create mode 100644 docs-test-3rd-techno/html/hierarchy.html create mode 100644 docs-test-3rd-techno/html/hierarchy.js create mode 100644 docs-test-3rd-techno/html/hook__commands_8py.html create mode 100644 docs-test-3rd-techno/html/hook__commands_8py.js create mode 100644 docs-test-3rd-techno/html/index.html create mode 100644 docs-test-3rd-techno/html/inherit_graph_0.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_0.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_0.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_1.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_1.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_1.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_2.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_2.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_2.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_3.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_3.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_3.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_4.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_4.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_4.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_5.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_5.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_5.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_6.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_6.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_6.svg create mode 100644 docs-test-3rd-techno/html/inherit_graph_7.map create mode 100644 docs-test-3rd-techno/html/inherit_graph_7.md5 create mode 100644 docs-test-3rd-techno/html/inherit_graph_7.svg create mode 100644 docs-test-3rd-techno/html/inherits.html create mode 100644 docs-test-3rd-techno/html/jira__client_8py.html create mode 100644 docs-test-3rd-techno/html/jira__client_8py.js create mode 100644 docs-test-3rd-techno/html/jquery.js create mode 100644 docs-test-3rd-techno/html/llm__client_8py.html create mode 100644 docs-test-3rd-techno/html/llm__client_8py.js create mode 100644 docs-test-3rd-techno/html/login__command_8py.html create mode 100644 docs-test-3rd-techno/html/login__command_8py.js create mode 100644 docs-test-3rd-techno/html/main_8py.html create mode 100644 docs-test-3rd-techno/html/main_8py.js create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html create mode 100644 docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html create mode 100644 docs-test-3rd-techno/html/menu.js create mode 100644 docs-test-3rd-techno/html/menudata.js create mode 100644 docs-test-3rd-techno/html/minus.svg create mode 100644 docs-test-3rd-techno/html/minusd.svg create mode 100644 docs-test-3rd-techno/html/namespacemembers.html create mode 100644 docs-test-3rd-techno/html/namespacemembers_func.html create mode 100644 docs-test-3rd-techno/html/namespacemembers_vars.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1hook__commands.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1config__command.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1constants.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1login__command.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.html create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.js create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg create mode 100644 docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg create mode 100644 docs-test-3rd-techno/html/namespaces.html create mode 100644 docs-test-3rd-techno/html/namespaces_dup.js create mode 100644 docs-test-3rd-techno/html/namespacesetup.html create mode 100644 docs-test-3rd-techno/html/namespacetests.html create mode 100644 docs-test-3rd-techno/html/namespacetests.js create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1conftest.html create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.html create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.js create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.html create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.js create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__doc__commands.html create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__web__config.html create mode 100644 docs-test-3rd-techno/html/namespacetests_1_1test__web__config.js create mode 100644 docs-test-3rd-techno/html/nav_f.png create mode 100644 docs-test-3rd-techno/html/nav_fd.png create mode 100644 docs-test-3rd-techno/html/nav_g.png create mode 100644 docs-test-3rd-techno/html/nav_h.png create mode 100644 docs-test-3rd-techno/html/nav_hd.png create mode 100644 docs-test-3rd-techno/html/navtree.css create mode 100644 docs-test-3rd-techno/html/navtree.js create mode 100644 docs-test-3rd-techno/html/navtreedata.js create mode 100644 docs-test-3rd-techno/html/navtreeindex0.js create mode 100644 docs-test-3rd-techno/html/navtreeindex1.js create mode 100644 docs-test-3rd-techno/html/navtreeindex2.js create mode 100644 docs-test-3rd-techno/html/open.png create mode 100644 docs-test-3rd-techno/html/pages.html create mode 100644 docs-test-3rd-techno/html/penify-cli-documentation_8md.html create mode 100644 docs-test-3rd-techno/html/penify__hook_2____init_____8py.html create mode 100644 docs-test-3rd-techno/html/penify__hook_2commands_2____init_____8py.html create mode 100644 docs-test-3rd-techno/html/plus.svg create mode 100644 docs-test-3rd-techno/html/plusd.svg create mode 100644 docs-test-3rd-techno/html/resize.js create mode 100644 docs-test-3rd-techno/html/search/all_0.js create mode 100644 docs-test-3rd-techno/html/search/all_1.js create mode 100644 docs-test-3rd-techno/html/search/all_10.js create mode 100644 docs-test-3rd-techno/html/search/all_11.js create mode 100644 docs-test-3rd-techno/html/search/all_12.js create mode 100644 docs-test-3rd-techno/html/search/all_13.js create mode 100644 docs-test-3rd-techno/html/search/all_14.js create mode 100644 docs-test-3rd-techno/html/search/all_15.js create mode 100644 docs-test-3rd-techno/html/search/all_16.js create mode 100644 docs-test-3rd-techno/html/search/all_17.js create mode 100644 docs-test-3rd-techno/html/search/all_18.js create mode 100644 docs-test-3rd-techno/html/search/all_19.js create mode 100644 docs-test-3rd-techno/html/search/all_1a.js create mode 100644 docs-test-3rd-techno/html/search/all_2.js create mode 100644 docs-test-3rd-techno/html/search/all_3.js create mode 100644 docs-test-3rd-techno/html/search/all_4.js create mode 100644 docs-test-3rd-techno/html/search/all_5.js create mode 100644 docs-test-3rd-techno/html/search/all_6.js create mode 100644 docs-test-3rd-techno/html/search/all_7.js create mode 100644 docs-test-3rd-techno/html/search/all_8.js create mode 100644 docs-test-3rd-techno/html/search/all_9.js create mode 100644 docs-test-3rd-techno/html/search/all_a.js create mode 100644 docs-test-3rd-techno/html/search/all_b.js create mode 100644 docs-test-3rd-techno/html/search/all_c.js create mode 100644 docs-test-3rd-techno/html/search/all_d.js create mode 100644 docs-test-3rd-techno/html/search/all_e.js create mode 100644 docs-test-3rd-techno/html/search/all_f.js create mode 100644 docs-test-3rd-techno/html/search/classes_0.js create mode 100644 docs-test-3rd-techno/html/search/classes_1.js create mode 100644 docs-test-3rd-techno/html/search/classes_2.js create mode 100644 docs-test-3rd-techno/html/search/classes_3.js create mode 100644 docs-test-3rd-techno/html/search/classes_4.js create mode 100644 docs-test-3rd-techno/html/search/classes_5.js create mode 100644 docs-test-3rd-techno/html/search/classes_6.js create mode 100644 docs-test-3rd-techno/html/search/classes_7.js create mode 100644 docs-test-3rd-techno/html/search/classes_8.js create mode 100644 docs-test-3rd-techno/html/search/close.svg create mode 100644 docs-test-3rd-techno/html/search/files_0.js create mode 100644 docs-test-3rd-techno/html/search/files_1.js create mode 100644 docs-test-3rd-techno/html/search/files_10.js create mode 100644 docs-test-3rd-techno/html/search/files_2.js create mode 100644 docs-test-3rd-techno/html/search/files_3.js create mode 100644 docs-test-3rd-techno/html/search/files_4.js create mode 100644 docs-test-3rd-techno/html/search/files_5.js create mode 100644 docs-test-3rd-techno/html/search/files_6.js create mode 100644 docs-test-3rd-techno/html/search/files_7.js create mode 100644 docs-test-3rd-techno/html/search/files_8.js create mode 100644 docs-test-3rd-techno/html/search/files_9.js create mode 100644 docs-test-3rd-techno/html/search/files_a.js create mode 100644 docs-test-3rd-techno/html/search/files_b.js create mode 100644 docs-test-3rd-techno/html/search/files_c.js create mode 100644 docs-test-3rd-techno/html/search/files_d.js create mode 100644 docs-test-3rd-techno/html/search/files_e.js create mode 100644 docs-test-3rd-techno/html/search/files_f.js create mode 100644 docs-test-3rd-techno/html/search/functions_0.js create mode 100644 docs-test-3rd-techno/html/search/functions_1.js create mode 100644 docs-test-3rd-techno/html/search/functions_2.js create mode 100644 docs-test-3rd-techno/html/search/functions_3.js create mode 100644 docs-test-3rd-techno/html/search/functions_4.js create mode 100644 docs-test-3rd-techno/html/search/functions_5.js create mode 100644 docs-test-3rd-techno/html/search/functions_6.js create mode 100644 docs-test-3rd-techno/html/search/functions_7.js create mode 100644 docs-test-3rd-techno/html/search/functions_8.js create mode 100644 docs-test-3rd-techno/html/search/functions_9.js create mode 100644 docs-test-3rd-techno/html/search/functions_a.js create mode 100644 docs-test-3rd-techno/html/search/functions_b.js create mode 100644 docs-test-3rd-techno/html/search/functions_c.js create mode 100644 docs-test-3rd-techno/html/search/functions_d.js create mode 100644 docs-test-3rd-techno/html/search/functions_e.js create mode 100644 docs-test-3rd-techno/html/search/mag.svg create mode 100644 docs-test-3rd-techno/html/search/mag_d.svg create mode 100644 docs-test-3rd-techno/html/search/mag_sel.svg create mode 100644 docs-test-3rd-techno/html/search/mag_seld.svg create mode 100644 docs-test-3rd-techno/html/search/namespaces_0.js create mode 100644 docs-test-3rd-techno/html/search/namespaces_1.js create mode 100644 docs-test-3rd-techno/html/search/namespaces_2.js create mode 100644 docs-test-3rd-techno/html/search/pages_0.js create mode 100644 docs-test-3rd-techno/html/search/pages_1.js create mode 100644 docs-test-3rd-techno/html/search/pages_2.js create mode 100644 docs-test-3rd-techno/html/search/pages_3.js create mode 100644 docs-test-3rd-techno/html/search/pages_4.js create mode 100644 docs-test-3rd-techno/html/search/pages_5.js create mode 100644 docs-test-3rd-techno/html/search/pages_6.js create mode 100644 docs-test-3rd-techno/html/search/search.css create mode 100644 docs-test-3rd-techno/html/search/search.js create mode 100644 docs-test-3rd-techno/html/search/searchdata.js create mode 100644 docs-test-3rd-techno/html/search/variables_0.js create mode 100644 docs-test-3rd-techno/html/search/variables_1.js create mode 100644 docs-test-3rd-techno/html/search/variables_10.js create mode 100644 docs-test-3rd-techno/html/search/variables_11.js create mode 100644 docs-test-3rd-techno/html/search/variables_12.js create mode 100644 docs-test-3rd-techno/html/search/variables_2.js create mode 100644 docs-test-3rd-techno/html/search/variables_3.js create mode 100644 docs-test-3rd-techno/html/search/variables_4.js create mode 100644 docs-test-3rd-techno/html/search/variables_5.js create mode 100644 docs-test-3rd-techno/html/search/variables_6.js create mode 100644 docs-test-3rd-techno/html/search/variables_7.js create mode 100644 docs-test-3rd-techno/html/search/variables_8.js create mode 100644 docs-test-3rd-techno/html/search/variables_9.js create mode 100644 docs-test-3rd-techno/html/search/variables_a.js create mode 100644 docs-test-3rd-techno/html/search/variables_b.js create mode 100644 docs-test-3rd-techno/html/search/variables_c.js create mode 100644 docs-test-3rd-techno/html/search/variables_d.js create mode 100644 docs-test-3rd-techno/html/search/variables_e.js create mode 100644 docs-test-3rd-techno/html/search/variables_f.js create mode 100644 docs-test-3rd-techno/html/setup_8py.html create mode 100644 docs-test-3rd-techno/html/setup_8py.js create mode 100644 docs-test-3rd-techno/html/splitbar.png create mode 100644 docs-test-3rd-techno/html/splitbard.png create mode 100644 docs-test-3rd-techno/html/svg.min.js create mode 100644 docs-test-3rd-techno/html/sync_off.png create mode 100644 docs-test-3rd-techno/html/sync_on.png create mode 100644 docs-test-3rd-techno/html/tab_a.png create mode 100644 docs-test-3rd-techno/html/tab_ad.png create mode 100644 docs-test-3rd-techno/html/tab_b.png create mode 100644 docs-test-3rd-techno/html/tab_bd.png create mode 100644 docs-test-3rd-techno/html/tab_h.png create mode 100644 docs-test-3rd-techno/html/tab_hd.png create mode 100644 docs-test-3rd-techno/html/tab_s.png create mode 100644 docs-test-3rd-techno/html/tab_sd.png create mode 100644 docs-test-3rd-techno/html/tabs.css create mode 100644 docs-test-3rd-techno/html/test__commit__commands_8py.html create mode 100644 docs-test-3rd-techno/html/test__commit__commands_8py.js create mode 100644 docs-test-3rd-techno/html/test__config__commands_8py.html create mode 100644 docs-test-3rd-techno/html/test__config__commands_8py.js create mode 100644 docs-test-3rd-techno/html/test__doc__commands_8py.html create mode 100644 docs-test-3rd-techno/html/test__doc__commands_8py.js create mode 100644 docs-test-3rd-techno/html/test__web__config_8py.html create mode 100644 docs-test-3rd-techno/html/test__web__config_8py.js create mode 100644 docs-test-3rd-techno/html/tests_2____init_____8py.html create mode 100644 docs-test-3rd-techno/html/toggle-alternative-theme.js create mode 100644 docs-test-3rd-techno/html/ui__utils_8py.html create mode 100644 docs-test-3rd-techno/html/ui__utils_8py.js create mode 100644 docs-test-3rd-techno/html/utils_8py.html create mode 100644 docs-test-3rd-techno/html/utils_8py.js create mode 100644 docs-test-3rd-techno/penify-cli-Penify-dev-g.tar.gz diff --git a/docs-test-3rd-techno/html/README_8md.html b/docs-test-3rd-techno/html/README_8md.html new file mode 100644 index 0000000..f2f3898 --- /dev/null +++ b/docs-test-3rd-techno/html/README_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/annotated.html b/docs-test-3rd-techno/html/annotated.html new file mode 100644 index 0000000..e594f6a --- /dev/null +++ b/docs-test-3rd-techno/html/annotated.html @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/annotated_dup.js b/docs-test-3rd-techno/html/annotated_dup.js new file mode 100644 index 0000000..e374ec6 --- /dev/null +++ b/docs-test-3rd-techno/html/annotated_dup.js @@ -0,0 +1,44 @@ +var annotated_dup = +[ + [ "penify_hook", "namespacepenify__hook.html", [ + [ "api_client", "namespacepenify__hook_1_1api__client.html", [ + [ "APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] + ] ], + [ "base_analyzer", "namespacepenify__hook_1_1base__analyzer.html", [ + [ "BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] + ] ], + [ "commit_analyzer", "namespacepenify__hook_1_1commit__analyzer.html", [ + [ "CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] + ] ], + [ "file_analyzer", "namespacepenify__hook_1_1file__analyzer.html", [ + [ "FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ] + ] ], + [ "folder_analyzer", "namespacepenify__hook_1_1folder__analyzer.html", [ + [ "FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] + ] ], + [ "git_analyzer", "namespacepenify__hook_1_1git__analyzer.html", [ + [ "GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ] + ] ], + [ "jira_client", "namespacepenify__hook_1_1jira__client.html", [ + [ "JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ] + ] ], + [ "llm_client", "namespacepenify__hook_1_1llm__client.html", [ + [ "LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] + ] ], + [ "utils", "namespacepenify__hook_1_1utils.html", [ + [ "GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ] + ] ] + ] ], + [ "tests", "namespacetests.html", [ + [ "test_commit_commands", "namespacetests_1_1test__commit__commands.html", [ + [ "TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] + ] ], + [ "test_config_commands", "namespacetests_1_1test__config__commands.html", [ + [ "TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] + ] ], + [ "test_web_config", "namespacetests_1_1test__web__config.html", [ + [ "TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] + ] ] + ] ], + [ "Exception", "classException.html", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/api__client_8py.html b/docs-test-3rd-techno/html/api__client_8py.html new file mode 100644 index 0000000..ec93f23 --- /dev/null +++ b/docs-test-3rd-techno/html/api__client_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
api_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.api_client.APIClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.api_client
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/api__client_8py.js b/docs-test-3rd-techno/html/api__client_8py.js new file mode 100644 index 0000000..a3575a0 --- /dev/null +++ b/docs-test-3rd-techno/html/api__client_8py.js @@ -0,0 +1,4 @@ +var api__client_8py = +[ + [ "penify_hook.api_client.APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/auth__commands_8py.html b/docs-test-3rd-techno/html/auth__commands_8py.html new file mode 100644 index 0000000..1019870 --- /dev/null +++ b/docs-test-3rd-techno/html/auth__commands_8py.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/auth_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
auth_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.auth_commands
 
+ + + + + +

+Functions

 penify_hook.commands.auth_commands.save_credentials (api_key)
 
 penify_hook.commands.auth_commands.login (api_url, dashboard_url)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/auth__commands_8py.js b/docs-test-3rd-techno/html/auth__commands_8py.js new file mode 100644 index 0000000..c76c883 --- /dev/null +++ b/docs-test-3rd-techno/html/auth__commands_8py.js @@ -0,0 +1,5 @@ +var auth__commands_8py = +[ + [ "penify_hook.commands.auth_commands.login", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6", null ], + [ "penify_hook.commands.auth_commands.save_credentials", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/base__analyzer_8py.html b/docs-test-3rd-techno/html/base__analyzer_8py.html new file mode 100644 index 0000000..085544d --- /dev/null +++ b/docs-test-3rd-techno/html/base__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
base_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.base_analyzer.BaseAnalyzer
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.base_analyzer
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/base__analyzer_8py.js b/docs-test-3rd-techno/html/base__analyzer_8py.js new file mode 100644 index 0000000..0d5c745 --- /dev/null +++ b/docs-test-3rd-techno/html/base__analyzer_8py.js @@ -0,0 +1,4 @@ +var base__analyzer_8py = +[ + [ "penify_hook.base_analyzer.BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/bc_s.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/bc_sd.png b/docs-test-3rd-techno/html/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/classException.html b/docs-test-3rd-techno/html/classException.html new file mode 100644 index 0000000..9e83bed --- /dev/null +++ b/docs-test-3rd-techno/html/classException.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Exception Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Exception Class Reference
+
+
+
+Inheritance diagram for Exception:
+
+
+
+
+Collaboration diagram for Exception:
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classException__coll__graph.map b/docs-test-3rd-techno/html/classException__coll__graph.map new file mode 100644 index 0000000..1264386 --- /dev/null +++ b/docs-test-3rd-techno/html/classException__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classException__coll__graph.md5 b/docs-test-3rd-techno/html/classException__coll__graph.md5 new file mode 100644 index 0000000..3ac9d9b --- /dev/null +++ b/docs-test-3rd-techno/html/classException__coll__graph.md5 @@ -0,0 +1 @@ +75cb8f3b3754e18418ff81689ad8fc7e \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classException__coll__graph.svg b/docs-test-3rd-techno/html/classException__coll__graph.svg new file mode 100644 index 0000000..5524c00 --- /dev/null +++ b/docs-test-3rd-techno/html/classException__coll__graph.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classException__coll__graph_org.svg b/docs-test-3rd-techno/html/classException__coll__graph_org.svg new file mode 100644 index 0000000..845d630 --- /dev/null +++ b/docs-test-3rd-techno/html/classException__coll__graph_org.svg @@ -0,0 +1,26 @@ + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + diff --git a/docs-test-3rd-techno/html/classException__inherit__graph.map b/docs-test-3rd-techno/html/classException__inherit__graph.map new file mode 100644 index 0000000..bb7ba7e --- /dev/null +++ b/docs-test-3rd-techno/html/classException__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classException__inherit__graph.md5 b/docs-test-3rd-techno/html/classException__inherit__graph.md5 new file mode 100644 index 0000000..6b5e5ff --- /dev/null +++ b/docs-test-3rd-techno/html/classException__inherit__graph.md5 @@ -0,0 +1 @@ +21613c0308db4d8aa644a414d85c2b24 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classException__inherit__graph.svg b/docs-test-3rd-techno/html/classException__inherit__graph.svg new file mode 100644 index 0000000..a52151e --- /dev/null +++ b/docs-test-3rd-techno/html/classException__inherit__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + +Node2 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classException__inherit__graph_org.svg b/docs-test-3rd-techno/html/classException__inherit__graph_org.svg new file mode 100644 index 0000000..7425a0c --- /dev/null +++ b/docs-test-3rd-techno/html/classException__inherit__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +Exception + + +Node1 + + +Exception +  +  + + + + + + + + +Node2 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classes.html b/docs-test-3rd-techno/html/classes.html new file mode 100644 index 0000000..4a7fd91 --- /dev/null +++ b/docs-test-3rd-techno/html/classes.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Index + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient-members.html new file mode 100644 index 0000000..38bd24c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient-members.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.api_client.APIClient Member List
+
+
+ +

This is the complete list of members for penify_hook.api_client.APIClient, including all inherited members.

+ + + + + + + + + + +
__init__(self, api_url, str api_token=None, str bearer_token=None)penify_hook.api_client.APIClient
api_urlpenify_hook.api_client.APIClient
AUTH_TOKENpenify_hook.api_client.APIClient
BEARER_TOKENpenify_hook.api_client.APIClient
generate_commit_summary(self, git_diff, str instruction="", repo_details=None, dict jira_context=None)penify_hook.api_client.APIClient
generate_commit_summary_with_llm(self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None)penify_hook.api_client.APIClient
get_api_key(self)penify_hook.api_client.APIClient
get_supported_file_types(self)penify_hook.api_client.APIClient
send_file_for_docstring_generation(self, file_name, content, line_numbers, repo_details=None)penify_hook.api_client.APIClient
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.html b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.html new file mode 100644 index 0000000..3f87012 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.html @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.api_client.APIClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.api_client.APIClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.api_client.APIClient:
+
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, api_url, str api_token=None, str bearer_token=None)
 
 send_file_for_docstring_generation (self, file_name, content, line_numbers, repo_details=None)
 
 generate_commit_summary (self, git_diff, str instruction="", repo_details=None, dict jira_context=None)
 
list[str] get_supported_file_types (self)
 
 generate_commit_summary_with_llm (self, diff, message, bool generate_description, repo_details, LLMClient llm_client, jira_context=None)
 
 get_api_key (self)
 
+ + + + + + + +

+Public Attributes

 api_url = api_url
 
 AUTH_TOKEN = api_token
 
 BEARER_TOKEN = bearer_token
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.__init__ ( self,
api_url,
str api_token = None,
str bearer_token = None )
+
+ +
+
+

Member Function Documentation

+ +

◆ generate_commit_summary()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.generate_commit_summary ( self,
git_diff,
str instruction = "",
repo_details = None,
dict jira_context = None )
+
+
Generates a commit summary by sending a POST request to the API endpoint.
+
+This function constructs a payload containing the git diff and any additional
+instructions provided. It then sends this payload to a specified API endpoint
+to generate a summary of the commit. If the request is successful, it returns
+the response from the API; otherwise, it returns None. The function also
+handles optional repository details and JIRA context if they are provided.
+
+Args:
+    git_diff (str): The git diff of the commit.
+    instruction (str): Additional instruction for the commit. Defaults to "".
+    repo_details (dict): Details of the git repository. Defaults to None.
+    jira_context (dict): JIRA issue details to enhance the commit summary. Defaults to None.
+
+Returns:
+    dict: The response from the API if the request is successful, None otherwise.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ generate_commit_summary_with_llm()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.generate_commit_summary_with_llm ( self,
diff,
message,
bool generate_description,
repo_details,
LLMClient llm_client,
jira_context = None )
+
+
Generates a commit summary using a local LLM client; falls back to API on
+error.
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ get_api_key()

+ +
+
+ + + + + + + +
penify_hook.api_client.APIClient.get_api_key ( self)
+
+
Fetch an API key from a specified URL using a Bearer token.
+
+
+ +

◆ get_supported_file_types()

+ +
+
+ + + + + + + +
list[str] penify_hook.api_client.APIClient.get_supported_file_types ( self)
+
+
Retrieve supported file types from the API or return a default list.
+
+
+ +

◆ send_file_for_docstring_generation()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.api_client.APIClient.send_file_for_docstring_generation ( self,
file_name,
content,
line_numbers,
repo_details = None )
+
+
Send file content and modified lines to the API and return modified content.
+
+
+

Member Data Documentation

+ +

◆ api_url

+ +
+
+ + + + +
penify_hook.api_client.APIClient.api_url = api_url
+
+ +
+
+ +

◆ AUTH_TOKEN

+ +
+
+ + + + +
penify_hook.api_client.APIClient.AUTH_TOKEN = api_token
+
+ +
+
+ +

◆ BEARER_TOKEN

+ +
+
+ + + + +
penify_hook.api_client.APIClient.BEARER_TOKEN = bearer_token
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/api_client.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.js b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.js new file mode 100644 index 0000000..e58299a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient.js @@ -0,0 +1,12 @@ +var classpenify__hook_1_1api__client_1_1APIClient = +[ + [ "__init__", "classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37", null ], + [ "generate_commit_summary", "classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd", null ], + [ "generate_commit_summary_with_llm", "classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286", null ], + [ "get_api_key", "classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b", null ], + [ "get_supported_file_types", "classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402", null ], + [ "send_file_for_docstring_generation", "classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd", null ], + [ "api_url", "classpenify__hook_1_1api__client_1_1APIClient.html#a130cf688ed35dc0e8cbd8320b6b2d872", null ], + [ "AUTH_TOKEN", "classpenify__hook_1_1api__client_1_1APIClient.html#a5bb502603717946ad710b49ad9d95237", null ], + [ "BEARER_TOKEN", "classpenify__hook_1_1api__client_1_1APIClient.html#a7d7e2cf42c54eb4f25adee96a09ee7b0", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map new file mode 100644 index 0000000..a326652 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 new file mode 100644 index 0000000..47f16ab --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.md5 @@ -0,0 +1 @@ +6e4d7aebf1e7e05a36b84363da6d2f68 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg new file mode 100644 index 0000000..864fb26 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient + + +Node1 + + +penify_hook.api_client.APIClient ++ +api_url ++ +AUTH_TOKEN ++ +BEARER_TOKEN ++ +__init__() ++ +send_file_for_docstring +_generation() ++ +generate_commit_summary() ++ +get_supported_file +_types() ++ +generate_commit_summary +_with_llm() ++ +get_api_key() + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg new file mode 100644 index 0000000..042bf1e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient__coll__graph_org.svg @@ -0,0 +1,46 @@ + + + + + + +penify_hook.api_client.APIClient + + +Node1 + + +penify_hook.api_client.APIClient ++ +api_url ++ +AUTH_TOKEN ++ +BEARER_TOKEN ++ +__init__() ++ +send_file_for_docstring +_generation() ++ +generate_commit_summary() ++ +get_supported_file +_types() ++ +generate_commit_summary +_with_llm() ++ +get_api_key() + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map new file mode 100644 index 0000000..a3bcfd3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 new file mode 100644 index 0000000..6db7d54 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.md5 @@ -0,0 +1 @@ +67bfcba9a90e6a255eb775ced957c533 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg new file mode 100644 index 0000000..27e3d26 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg new file mode 100644 index 0000000..9fd9bf5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_a07bc97b2af31662029a24169f285c286_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary_with_llm + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map new file mode 100644 index 0000000..428efcd --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 new file mode 100644 index 0000000..20adf83 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.md5 @@ -0,0 +1 @@ +2a2e523f3c074b78685cd2eee47ac3a4 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg new file mode 100644 index 0000000..d1cdfc6 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg new file mode 100644 index 0000000..2afc2d1 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1api__client_1_1APIClient_af0c2fac38629fed60e8440203a1197dd_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.api_client.APIClient.generate_commit_summary + + +Node1 + + +penify_hook.api_client.APIClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.api_client.APIClient.generate +_commit_summary_with_llm + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html new file mode 100644 index 0000000..7bf1021 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer-members.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html new file mode 100644 index 0000000..585959f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.base_analyzer.BaseAnalyzer Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.base_analyzer.BaseAnalyzer Class Reference
+
+
+
+Inheritance diagram for penify_hook.base_analyzer.BaseAnalyzer:
+
+
+
+
+Collaboration diagram for penify_hook.base_analyzer.BaseAnalyzer:
+
+
+
+ + + + +

+Public Member Functions

 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.base_analyzer.BaseAnalyzer.__init__ ( self,
str folder_path,
APIClient api_client )
+
+ +
+
+

Member Data Documentation

+ +

◆ api_client

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.api_client = api_client
+
+ +
+
+ +

◆ folder_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.folder_path = folder_path
+
+ +
+
+ +

◆ relative_file_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.relative_file_path = os.path.relpath(folder_path)
+
+ +
+
+ +

◆ repo

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo = None
+
+ +
+
+ +

◆ repo_details

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo_details = None
+
+ +
+
+ +

◆ repo_path

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.repo_path = recursive_search_git_folder(folder_path)
+
+ +
+
+ +

◆ supported_file_types

+ +
+
+ + + + +
penify_hook.base_analyzer.BaseAnalyzer.supported_file_types = set(api_client.get_supported_file_types())
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/base_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js new file mode 100644 index 0000000..91681ae --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.js @@ -0,0 +1,11 @@ +var classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer = +[ + [ "__init__", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5", null ], + [ "api_client", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a81e9c55709205aaf4ebbe2b41683baf2", null ], + [ "folder_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa67c06dd12b1bafaeaee81c41dcb7e25", null ], + [ "relative_file_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#ab702c0c3ba81d159d7c3bcd7ea2abba4", null ], + [ "repo", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a3a9ddfa1dfba81fe21214fe486389369", null ], + [ "repo_details", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a9cca3465b0cc00d78324b0a9eac1d7f5", null ], + [ "repo_path", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a957e81a1ab561f6cecfbe999e7b85499", null ], + [ "supported_file_types", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a0cac0310ec635aa64a34857cf30ce1eb", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map new file mode 100644 index 0000000..66d222b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 new file mode 100644 index 0000000..ad1c845 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.md5 @@ -0,0 +1 @@ +456222cf8efc85e65f25381ed3b9a88d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg new file mode 100644 index 0000000..1e464dc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg new file mode 100644 index 0000000..b22e7ae --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__coll__graph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map new file mode 100644 index 0000000..f8c9861 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 new file mode 100644 index 0000000..74c5684 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.md5 @@ -0,0 +1 @@ +a4825e68bed8ab45d295e689402c854c \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg new file mode 100644 index 0000000..bed641c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph.svg @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node1->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg new file mode 100644 index 0000000..99281ed --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer__inherit__graph_org.svg @@ -0,0 +1,177 @@ + + + + + + +penify_hook.base_analyzer.BaseAnalyzer + + +Node1 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node1->Node5 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html new file mode 100644 index 0000000..c5813ae --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook-members.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html new file mode 100644 index 0000000..13db316 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commit_analyzer.CommitDocGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.commit_analyzer.CommitDocGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.commit_analyzer.CommitDocGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.commit_analyzer.CommitDocGenHook:
+
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str repo_path, APIClient api_client, llm_client=None, jira_client=None)
 
dict get_summary (self, str instruction, bool generate_description)
 
 run (self, Optional[str] msg, bool edit_commit_message, bool generate_description)
 
tuple process_jira_integration (self, str title, str description, str msg)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

 llm_client = llm_client
 
JiraClient jira_client = jira_client
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+ + + +

+Protected Member Functions

 _amend_commit (self)
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook.__init__ ( self,
str repo_path,
APIClient api_client,
llm_client = None,
jira_client = None )
+
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ _amend_commit()

+ +
+
+ + + + + +
+ + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook._amend_commit ( self)
+
+protected
+
+
Amends the last commit message in the repository.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_summary()

+ +
+
+ + + + + + + + + + + + + + + + +
dict penify_hook.commit_analyzer.CommitDocGenHook.get_summary ( self,
str instruction,
bool generate_description )
+
+
Generate a summary for the commit based on the staged changes.
+
+This function retrieves the differences of the staged changes in the repository
+and generates a commit summary using the provided instruction. If there are no
+changes staged for commit, an exception is raised. If a JIRA client is
+connected, it will attempt to extract issue keys from the current branch and
+use them to fetch context. The summary can be generated either with a Language
+Model (LLM) client or through the API client.
+
+Args:
+    instruction (str): A string containing instructions for generating the commit summary.
+    generate_description (bool): Whether to include detailed descriptions in the summary.
+
+Raises:
+    ValueError: If there are no changes staged for commit.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ process_jira_integration()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration ( self,
str title,
str description,
str msg )
+
+
Process JIRA integration by extracting issue keys from commit message
+components and branch name.
+
+This function looks for JIRA issue keys in the provided commit title,
+description, original user message, and the active branch name. It uses these
+keys to update the commit message with JIRA information and adds comments to
+the corresponding JIRA issues. If no keys are found, it logs a warning.
+
+Args:
+    title (str): The generated commit title.
+    description (str): The generated commit description.
+    msg (str): The original user message that might contain JIRA references.
+
+Returns:
+    tuple: A tuple containing the updated commit title and description with included JIRA
+        information.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.commit_analyzer.CommitDocGenHook.run ( self,
Optional[str] msg,
bool edit_commit_message,
bool generate_description )
+
+
Run the post-commit hook.
+
+This method processes the modified files from the last commit, stages them, and
+creates an auto-commit with an optional message. It also handles JIRA
+integration if available. If there is an error generating the commit summary,
+an exception is raised.
+
+Args:
+    msg (Optional[str]): An optional message to include in the commit.
+    edit_commit_message (bool): A flag indicating whether to open the git commit
+        edit terminal after committing.
+    generate_description (bool): A flag indicating whether to include a description
+        in the commit message.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ jira_client

+ +
+
+ + + + +
JiraClient penify_hook.commit_analyzer.CommitDocGenHook.jira_client = jira_client
+
+ +
+
+ +

◆ llm_client

+ +
+
+ + + + +
penify_hook.commit_analyzer.CommitDocGenHook.llm_client = llm_client
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js new file mode 100644 index 0000000..0372b7c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.js @@ -0,0 +1,10 @@ +var classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook = +[ + [ "__init__", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778", null ], + [ "_amend_commit", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111", null ], + [ "get_summary", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37", null ], + [ "process_jira_integration", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f", null ], + [ "run", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03", null ], + [ "jira_client", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ab03214b60248a10bca32597098b0a107", null ], + [ "llm_client", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ad93360e31f2ec58a0d7c9f08b219028a", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map new file mode 100644 index 0000000..1a8dd63 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..ad502df --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +7f0a217e67e95d0bfca7760ee77eff80 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..1e51d3b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph.svg @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + +Node3->Node1 + + + + + + +jira_client + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg new file mode 100644 index 0000000..b83dd01 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__coll__graph_org.svg @@ -0,0 +1,135 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + +Node3->Node1 + + + + + + +jira_client + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map new file mode 100644 index 0000000..422189a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..ea27469 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +71b8c27971969c2195140ff298793113 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..7571cdc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..9458122 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook__inherit__graph_org.svg @@ -0,0 +1,79 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook ++ +llm_client ++ +jira_client ++ +__init__() ++ +get_summary() ++ +run() ++ +process_jira_integration() +# +_amend_commit() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map new file mode 100644 index 0000000..e536254 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 new file mode 100644 index 0000000..141c6ce --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.md5 @@ -0,0 +1 @@ +1d956904b17e984d4fe08b63712af5b8 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg new file mode 100644 index 0000000..e460d9d --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg new file mode 100644 index 0000000..7928547 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a011812b68bf904e3beb051e585eff111_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook._amend_commit + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map new file mode 100644 index 0000000..9ad9414 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 new file mode 100644 index 0000000..d763e05 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.md5 @@ -0,0 +1 @@ +8f6d99cd255e9f96c88a98a310f284a7 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg new file mode 100644 index 0000000..d841efa --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg new file mode 100644 index 0000000..f08c875 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_cgraph_org.svg @@ -0,0 +1,32 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map new file mode 100644 index 0000000..40d52aa --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 new file mode 100644 index 0000000..a09afc3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.md5 @@ -0,0 +1 @@ +76ae1a4aa74d7b206a88fc8fc036a978 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg new file mode 100644 index 0000000..8e58a78 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg new file mode 100644 index 0000000..ca5fc87 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a1fa29d890af3f3770743197e15776778_icgraph_org.svg @@ -0,0 +1,32 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.__init__ + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map new file mode 100644 index 0000000..2997f60 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 new file mode 100644 index 0000000..c271bba --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.md5 @@ -0,0 +1 @@ +909ae9a0a7b70478c834c118f6207927 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg new file mode 100644 index 0000000..27f566c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.run + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg new file mode 100644 index 0000000..2f3e9c5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a2d0bb9eba04614915fa33a1d7b0b8f03_cgraph_org.svg @@ -0,0 +1,82 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.run + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook. +_amend_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map new file mode 100644 index 0000000..220c14b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 new file mode 100644 index 0000000..2ac860e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.md5 @@ -0,0 +1 @@ +a9c27f3d7950cafa2b938f10dddc4952 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg new file mode 100644 index 0000000..99a9929 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg new file mode 100644 index 0000000..d406ad4 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_a8496194276441fa2eb2fa014eaab9a37_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.get_summary + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.get +_summary + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map new file mode 100644 index 0000000..e426636 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 new file mode 100644 index 0000000..453f89f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.md5 @@ -0,0 +1 @@ +9eb9d60621b71ccf464ab6bdcfa2b30e \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg new file mode 100644 index 0000000..1670f7b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg new file mode 100644 index 0000000..d2a7a66 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook_adda13cc121d96342476ccf72b63a007f_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.commit_analyzer.CommitDocGenHook.process_jira_integration + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook.process +_jira_integration + + + + + +Node2 + + +penify_hook.commit +_analyzer.CommitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html new file mode 100644 index 0000000..3edf21a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html new file mode 100644 index 0000000..0e8d685 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.file_analyzer.FileAnalyzerGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.file_analyzer.FileAnalyzerGenHook:
+
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str file_path, APIClient api_client)
 
 process_file (self, file_path, pbar, str new_param="")
 
 print_processing (self, file_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

 file_path = file_path
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.__init__ ( self,
str file_path,
APIClient api_client )
+
+ +
+
+

Member Function Documentation

+ +

◆ print_processing()

+ +
+
+ + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing ( self,
file_path )
+
+
Prints a message indicating that a file is being processed.
+
+
+ +

◆ process_file()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.process_file ( self,
file_path,
pbar,
str new_param = "" )
+
+
Processes a file by validating its extension, reading content,
+generating documentation, and writing changes back to the file.  The function
+performs several stages of processing: 1. Validates the file's extension to
+ensure it is supported. 2. Reads the content of the file. 3. Sends the file
+content for documentation generation. 4. Writes the generated documentation
+back to the file if there are changes.
+
+Args:
+    file_path (str): The path of the file to be processed.
+    pbar (tqdm.tqdm): A progress bar object to update the status of processing stages.
+    new_param (str?): An additional parameter for future use. Defaults to an empty string.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.run ( self)
+
+
Runs the documentation process with a progress bar.
+
+This method orchestrates the documentation process by creating a progress bar,
+processing the file, and handling exceptions to ensure the progress bar
+completes properly. It updates the progress bar through various stages and
+provides feedback based on the result of the file processing.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ file_path

+ +
+
+ + + + +
penify_hook.file_analyzer.FileAnalyzerGenHook.file_path = file_path
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js new file mode 100644 index 0000000..9cda633 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook = +[ + [ "__init__", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb", null ], + [ "print_processing", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747", null ], + [ "process_file", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda", null ], + [ "run", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49", null ], + [ "file_path", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a9b03b88a9ce1b9af945279375048dc32", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map new file mode 100644 index 0000000..aa7bf1a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..3f45827 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +117a1a4e2d4f201e19a6d591f508ba7f \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..e571ebd --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg new file mode 100644 index 0000000..676c7de --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__coll__graph_org.svg @@ -0,0 +1,75 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map new file mode 100644 index 0000000..aa7bf1a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..3f45827 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +117a1a4e2d4f201e19a6d591f508ba7f \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..e571ebd --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..676c7de --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook__inherit__graph_org.svg @@ -0,0 +1,75 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook ++ +file_path ++ +__init__() ++ +process_file() ++ +print_processing() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map new file mode 100644 index 0000000..7237ad5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 new file mode 100644 index 0000000..9698276 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.md5 @@ -0,0 +1 @@ +93117f42801fa341b01b414b2442652c \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg new file mode 100644 index 0000000..5b041ca --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.run + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg new file mode 100644 index 0000000..d3029dc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_a503c97b07cb2db1df0d881094dd6bb49_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.run + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map new file mode 100644 index 0000000..dd9eac5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 new file mode 100644 index 0000000..f5cf73b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.md5 @@ -0,0 +1 @@ +74ae83cb32a84b3eaab417d6615b579f \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg new file mode 100644 index 0000000..ed619c5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg new file mode 100644 index 0000000..640c4a9 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook_aeb3be324ba517855d6e5cdb684a6efda_icgraph_org.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.file_analyzer.FileAnalyzerGenHook.process_file + + +Node1 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.run + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html new file mode 100644 index 0000000..65ddda0 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook-members.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html new file mode 100644 index 0000000..8a76fbc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.folder_analyzer.FolderAnalyzerGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.folder_analyzer.FolderAnalyzerGenHook:
+
+
+
+ + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str dir_path, APIClient api_client)
 
 list_all_files_in_dir (self, str dir_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

 dir_path = dir_path
 
- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__ ( self,
str dir_path,
APIClient api_client )
+
+ +
+
+

Member Function Documentation

+ +

◆ list_all_files_in_dir()

+ +
+
+ + + + + + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir ( self,
str dir_path )
+
+
List all non-hidden files in a directory and its subdirectories.
+
+This function recursively traverses the specified directory and its
+subdirectories, collecting paths of all non-hidden files. It filters out hidden
+directories and files (those starting with a dot) to ensure only visible files
+are returned.
+
+Args:
+    dir_path (str): The path to the directory whose files and subdirectory files need to be listed.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.run ( self)
+
+
Run the post-commit hook and process files with a progress bar.
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ dir_path

+ +
+
+ + + + +
penify_hook.folder_analyzer.FolderAnalyzerGenHook.dir_path = dir_path
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js new file mode 100644 index 0000000..c313328 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.js @@ -0,0 +1,7 @@ +var classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook = +[ + [ "__init__", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344", null ], + [ "list_all_files_in_dir", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc", null ], + [ "run", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d", null ], + [ "dir_path", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53f73d69cc0f00763ee4830e4f0f7393", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map new file mode 100644 index 0000000..62eddcb --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 new file mode 100644 index 0000000..3acd4b8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.md5 @@ -0,0 +1 @@ +5834d046c4f445c6ef3e2e9cc5f3f1ba \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg new file mode 100644 index 0000000..fc03766 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg new file mode 100644 index 0000000..fd06869 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__coll__graph_org.svg @@ -0,0 +1,73 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map new file mode 100644 index 0000000..62eddcb --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 new file mode 100644 index 0000000..3acd4b8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +5834d046c4f445c6ef3e2e9cc5f3f1ba \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg new file mode 100644 index 0000000..fc03766 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..fd06869 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook__inherit__graph_org.svg @@ -0,0 +1,73 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook ++ +dir_path ++ +__init__() ++ +list_all_files_in_dir() ++ +run() + + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map new file mode 100644 index 0000000..e9ab4a7 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 new file mode 100644 index 0000000..3b9ea89 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.md5 @@ -0,0 +1 @@ +dfee0c4d5deafcae96bcf260e4a5a040 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg new file mode 100644 index 0000000..4be5ee0 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg new file mode 100644 index 0000000..72bc9ea --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a050554646cbc07aef1fbaa748ee4c0fc_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.list_all_files_in_dir + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map new file mode 100644 index 0000000..0c31fc2 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 new file mode 100644 index 0000000..e9d17b5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.md5 @@ -0,0 +1 @@ +31d341234bd6ac902e31eb06782bcf7d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg new file mode 100644 index 0000000..797801c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg new file mode 100644 index 0000000..c7b7746 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook_a53c61ef41d39dd9bb1c8020a94f1dd8d_cgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.folder_analyzer.FolderAnalyzerGenHook.run + + +Node1 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.run + + + + + +Node2 + + +penify_hook.folder +_analyzer.FolderAnalyzerGen +Hook.list_all_files_in_dir + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html new file mode 100644 index 0000000..3566739 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html new file mode 100644 index 0000000..4fba7dc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.git_analyzer.GitDocGenHook Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.git_analyzer.GitDocGenHook Class Reference
+
+
+
+Inheritance diagram for penify_hook.git_analyzer.GitDocGenHook:
+
+
+
+
+Collaboration diagram for penify_hook.git_analyzer.GitDocGenHook:
+
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str repo_path, APIClient api_client)
 
 get_modified_files_in_last_commit (self)
 
 get_modified_lines (self, diff_text)
 
 process_file (self, file_path)
 
 run (self)
 
- Public Member Functions inherited from penify_hook.base_analyzer.BaseAnalyzer
 __init__ (self, str folder_path, APIClient api_client)
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from penify_hook.base_analyzer.BaseAnalyzer
 folder_path = folder_path
 
 repo_path = recursive_search_git_folder(folder_path)
 
 repo = None
 
 repo_details = None
 
 relative_file_path = os.path.relpath(folder_path)
 
 api_client = api_client
 
 supported_file_types = set(api_client.get_supported_file_types())
 
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.__init__ ( self,
str repo_path,
APIClient api_client )
+
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_modified_files_in_last_commit()

+ +
+
+ + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit ( self)
+
+
Get the list of files modified in the last commit.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_modified_lines()

+ +
+
+ + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.get_modified_lines ( self,
diff_text )
+
+
Extract modified line numbers from a diff text.
+
+This function processes a diff text to identify and extract the line numbers
+that have been modified. It distinguishes between added and deleted lines and
+keeps track of the current line number as it parses through the diff. The
+function handles hunk headers and ensures that any deletions at the end of the
+file are also captured.
+
+Args:
+    diff_text (str): A string containing the diff text to be processed.
+
+
+
+ +

◆ process_file()

+ +
+
+ + + + + + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.process_file ( self,
file_path )
+
+
Processes a file by checking its type, reading its content, and sending it to
+an API.
+
+This method constructs the absolute path of the specified file and verifies if
+the file has a valid extension. If the file type is supported, it reads the
+content of the file and retrieves the differences from the last commit in the
+repository. If changes are detected, it sends the file content along with the
+modified lines to an API for further processing. If the API response indicates
+no changes, the original file will not be overwritten.
+
+Args:
+    file_path (str): The relative path to the file to be processed.
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ run()

+ +
+
+ + + + + + + +
penify_hook.git_analyzer.GitDocGenHook.run ( self)
+
+
Run the post-commit hook.
+
+This method retrieves the list of modified files from the last commit and
+processes each file. It stages any files that have been modified during
+processing and creates an auto-commit if changes were made. A progress bar is
+displayed to indicate the processing status of each file. The method handles
+any exceptions that occur during file processing, printing an error message for
+each file that fails to process. If any modifications are made to the files, an
+auto-commit is created to save those changes.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js new file mode 100644 index 0000000..b1f26f7 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1git__analyzer_1_1GitDocGenHook = +[ + [ "__init__", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24", null ], + [ "get_modified_files_in_last_commit", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab", null ], + [ "get_modified_lines", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328", null ], + [ "process_file", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81", null ], + [ "run", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map new file mode 100644 index 0000000..c071a87 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 new file mode 100644 index 0000000..2e9a048 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.md5 @@ -0,0 +1 @@ +24a454e47d3ff0abc2bfff962dc00afe \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg new file mode 100644 index 0000000..61a7636 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg new file mode 100644 index 0000000..aff5080 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__coll__graph_org.svg @@ -0,0 +1,76 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map new file mode 100644 index 0000000..c071a87 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 new file mode 100644 index 0000000..2e9a048 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.md5 @@ -0,0 +1 @@ +24a454e47d3ff0abc2bfff962dc00afe \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg new file mode 100644 index 0000000..61a7636 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg new file mode 100644 index 0000000..aff5080 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook__inherit__graph_org.svg @@ -0,0 +1,76 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook +  ++ +__init__() ++ +get_modified_files +_in_last_commit() ++ +get_modified_lines() ++ +process_file() ++ +run() + + + + + + + + +Node2 + + +penify_hook.base_analyzer. +BaseAnalyzer ++ +folder_path ++ +repo_path ++ +repo ++ +repo_details ++ +relative_file_path ++ +api_client ++ +supported_file_types ++ +__init__() + + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map new file mode 100644 index 0000000..01b25cb --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 new file mode 100644 index 0000000..cdebba3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.md5 @@ -0,0 +1 @@ +d9f160cfdfa1d36f70d512752eac7200 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg new file mode 100644 index 0000000..8c63bf8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg new file mode 100644 index 0000000..7e1f901 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a0fcec06966a3a5ef1df21529a6a3db81_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.process_file + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map new file mode 100644 index 0000000..5304b28 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 new file mode 100644 index 0000000..7796201 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.md5 @@ -0,0 +1 @@ +c6c9fa3833b2627344e74616fe46c91a \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg new file mode 100644 index 0000000..0fab064 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.run + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg new file mode 100644 index 0000000..9c6fa2d --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a38fe1e50fc9448d995851d933283b633_cgraph_org.svg @@ -0,0 +1,80 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.run + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook.process_file + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook.process_file + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map new file mode 100644 index 0000000..1e11953 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 new file mode 100644 index 0000000..79d04d4 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.md5 @@ -0,0 +1 @@ +42b036f12e21b8fd11794b04f4ebbb21 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg new file mode 100644 index 0000000..f79241c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg new file mode 100644 index 0000000..e88430c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map new file mode 100644 index 0000000..08a0cc6 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 new file mode 100644 index 0000000..34759eb --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.md5 @@ -0,0 +1 @@ +291583ab7d335081162c5b975d80c9b4 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg new file mode 100644 index 0000000..ba71345 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg new file mode 100644 index 0000000..53e7c2e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a6f94663c0330ae7e6cbb7a8748177c24_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.__init__ + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.__init__ + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map new file mode 100644 index 0000000..ea242d9 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 new file mode 100644 index 0000000..1b24801 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.md5 @@ -0,0 +1 @@ +78d3bb13be1da63a63998b6dea414c76 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg new file mode 100644 index 0000000..9321125 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg new file mode 100644 index 0000000..20b3424 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1git__analyzer_1_1GitDocGenHook_a7070449b5dc058808eb13013db3d8eab_icgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.git_analyzer.GitDocGenHook.get_modified_files_in_last_commit + + +Node1 + + +penify_hook.git_analyzer. +GitDocGenHook.get_modified +_files_in_last_commit + + + + + +Node2 + + +penify_hook.git_analyzer. +GitDocGenHook.run + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html new file mode 100644 index 0000000..144bc67 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient-members.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.jira_client.JiraClient Member List
+
+ +
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.html b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.html new file mode 100644 index 0000000..2ec5b7f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.html @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.jira_client.JiraClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.jira_client.JiraClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.jira_client.JiraClient:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 __init__ (self, str jira_url=None, str jira_user=None, str jira_api_token=None)
 
bool is_connected (self)
 
List[str] extract_issue_keys_from_branch (self, str branch_name)
 
List[str] extract_issue_keys (self, str text)
 
Optional[Dict[str, Any]] get_issue_details (self, str issue_key)
 
bool add_comment (self, str issue_key, str comment)
 
bool update_issue_status (self, str issue_key, str transition_name)
 
tuple format_commit_message_with_jira_info (self, str commit_title, str commit_description, List[str] issue_keys=None)
 
Dict[str, Any] get_detailed_issue_context (self, str issue_key)
 
Dict[str, Any] get_commit_context_from_issues (self, List[str] issue_keys)
 
tuple enhance_commit_message (self, str title, str description, List[str] issue_keys)
 
+ + + + + + + + + +

+Public Attributes

 jira_url = jira_url
 
 jira_user = jira_user
 
 jira_api_token = jira_api_token
 
 jira_client = None
 
+

Detailed Description

+
Client for interacting with JIRA API
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.jira_client.JiraClient.__init__ ( self,
str jira_url = None,
str jira_user = None,
str jira_api_token = None )
+
+
Initialize the JIRA client.
+
+Args:
+    jira_url: Base URL for JIRA instance (e.g., "https://your-domain.atlassian.net")
+    jira_user: JIRA username or email
+    jira_api_token: JIRA API token
+
+
+
+

Member Function Documentation

+ +

◆ add_comment()

+ +
+
+ + + + + + + + + + + + + + + + +
bool penify_hook.jira_client.JiraClient.add_comment ( self,
str issue_key,
str comment )
+
+
Adds a comment to a JIRA issue.
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ enhance_commit_message()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.jira_client.JiraClient.enhance_commit_message ( self,
str title,
str description,
List[str] issue_keys )
+
+
Enhance a commit message with business and technical context from JIRA issues.
+
+This function first checks if the list of issue keys is empty or if there is no
+connection. If so, it returns the original title and description without
+modification. It then retrieves context information from the specified JIRA
+issues. If the primary issue is missing, it formats the commit message with
+basic JIRA info.  The function enhances the commit title by prefixing it with
+the primary issue key if not already included. It appends a business context
+section to the description, including details like issue type, status,
+priority, sprint, acceptance criteria, and a condensed issue description. If
+comments are available, they are added as technical notes. Finally, related
+issues are listed.
+
+Args:
+    title (str): Original commit title.
+    description (str): Original commit description.
+    issue_keys (List[str]): List of JIRA issue keys to include in the enhanced commit message.
+
+Returns:
+    tuple: A tuple containing the enhanced commit title and description with added
+        context from JIRA issues.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ extract_issue_keys()

+ +
+
+ + + + + + + + + + + +
List[str] penify_hook.jira_client.JiraClient.extract_issue_keys ( self,
str text )
+
+
Extract unique JIRA issue keys from the given text.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ extract_issue_keys_from_branch()

+ +
+
+ + + + + + + + + + + +
List[str] penify_hook.jira_client.JiraClient.extract_issue_keys_from_branch ( self,
str branch_name )
+
+
Extracts unique JIRA issue keys from a branch name.
+
+
+ +

◆ format_commit_message_with_jira_info()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tuple penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info ( self,
str commit_title,
str commit_description,
List[str] issue_keys = None )
+
+
Format commit message with JIRA issue information.
+
+This function updates the provided commit title and description by
+incorporating JIRA issue keys. If no issue keys are supplied, it extracts them
+from the commit title and description. It then formats the commit title to
+include the first issue key if not already present and appends detailed
+information about each issue to the commit description.
+
+Args:
+    commit_title (str): The original commit title.
+    commit_description (str): The original commit description.
+    issue_keys (List[str]?): A list of JIRA issue keys to include in the commit message. If not
+        provided, issue keys will be extracted from both the title and the description.
+
+Returns:
+    tuple: A tuple containing the updated commit title and description with JIRA
+        information included.
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_commit_context_from_issues()

+ +
+
+ + + + + + + + + + + +
Dict[str, Any] penify_hook.jira_client.JiraClient.get_commit_context_from_issues ( self,
List[str] issue_keys )
+
+
Gather contextual information from JIRA issues to improve commit messages.
+
+This function processes a list of JIRA issue keys, retrieves detailed context
+for each issue, and aggregates it into a dictionary that can be used to enhance
+commit messages. It first retrieves the primary issue (the first key in the
+list) and then gathers basic details for any related issues. The resulting
+context includes information from both the primary and related issues, along
+with all issue keys.
+
+Args:
+    issue_keys: List of JIRA issue keys to gather information from
+
+Returns:
+    Dict containing business and technical context from the issues
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_detailed_issue_context()

+ +
+
+ + + + + + + + + + + +
Dict[str, Any] penify_hook.jira_client.JiraClient.get_detailed_issue_context ( self,
str issue_key )
+
+
Retrieve comprehensive details about a JIRA issue including context for better
+commit messages.
+
+This function fetches detailed information from a specified JIRA issue and
+constructs a dictionary containing various context fields such as the issue
+summary, description, type, status, priority, comments, URL, and additional
+custom fields like acceptance criteria and sprint information. It handles
+errors by logging appropriate warnings or errors.
+
+Args:
+    issue_key (str): The JIRA issue key (e.g., "PROJECT-123").
+
+Returns:
+    Dict[str, Any]: A dictionary containing business and technical context from the issue.
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ get_issue_details()

+ +
+
+ + + + + + + + + + + +
Optional[Dict[str, Any]] penify_hook.jira_client.JiraClient.get_issue_details ( self,
str issue_key )
+
+
Retrieve details of a JIRA issue based on its key.
+
+This function fetches detailed information about a specified JIRA issue using
+the provided issue key. It first checks if the JIRA client is connected; if
+not, it logs a warning and returns `None`. If connected, it attempts to
+retrieve the issue from the JIRA server. On success, it constructs and returns
+a dictionary containing various details such as the issue's key, summary,
+status, description, assignee, reporter, type, priority, and URL. Errors during
+this process are logged, and `None` is returned.
+
+Args:
+    issue_key (str): The JIRA issue key (e.g., "PROJECT-123").
+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ is_connected()

+ +
+
+ + + + + + + +
bool penify_hook.jira_client.JiraClient.is_connected ( self)
+
+
Check if the JIRA client is connected.
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ update_issue_status()

+ +
+
+ + + + + + + + + + + + + + + + +
bool penify_hook.jira_client.JiraClient.update_issue_status ( self,
str issue_key,
str transition_name )
+
+
Update the status of a JIRA issue.
+
+This method checks if the JIRA client is connected, retrieves available
+transitions for the given issue, finds the transition ID by name, and updates
+the issue's status accordingly. If any step fails or the specified transition
+is not found, appropriate logs are generated, and False is returned.
+
+Args:
+    issue_key (str): The key of the JIRA issue to be updated.
+    transition_name (str): The name of the desired transition.
+
+Returns:
+    bool: True if the status was successfully updated, False otherwise.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ jira_api_token

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_api_token = jira_api_token
+
+ +
+
+ +

◆ jira_client

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_client = None
+
+ +
+
+ +

◆ jira_url

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_url = jira_url
+
+ +
+
+ +

◆ jira_user

+ +
+
+ + + + +
penify_hook.jira_client.JiraClient.jira_user = jira_user
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.js b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.js new file mode 100644 index 0000000..d376d88 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient.js @@ -0,0 +1,18 @@ +var classpenify__hook_1_1jira__client_1_1JiraClient = +[ + [ "__init__", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355", null ], + [ "add_comment", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1", null ], + [ "enhance_commit_message", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760", null ], + [ "extract_issue_keys", "classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7", null ], + [ "extract_issue_keys_from_branch", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c", null ], + [ "format_commit_message_with_jira_info", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23", null ], + [ "get_commit_context_from_issues", "classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd", null ], + [ "get_detailed_issue_context", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746", null ], + [ "get_issue_details", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a", null ], + [ "is_connected", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8", null ], + [ "update_issue_status", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826", null ], + [ "jira_api_token", "classpenify__hook_1_1jira__client_1_1JiraClient.html#afc5c90e53b702f9fc27e2ee7d3f991b9", null ], + [ "jira_client", "classpenify__hook_1_1jira__client_1_1JiraClient.html#aefb3f96c79358cf3a95d96d3747235b6", null ], + [ "jira_url", "classpenify__hook_1_1jira__client_1_1JiraClient.html#a3c0cfecff02a75cb7001509a595b8197", null ], + [ "jira_user", "classpenify__hook_1_1jira__client_1_1JiraClient.html#ae56104d5aa7bda7bb26d169c4b46038c", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map new file mode 100644 index 0000000..cdaefc2 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 new file mode 100644 index 0000000..0c1111c --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.md5 @@ -0,0 +1 @@ +cb6abffe2776ef8b917dcf9ccbfe13d9 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg new file mode 100644 index 0000000..362789b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient + + +Node1 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg new file mode 100644 index 0000000..f2e6d7e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient__coll__graph_org.svg @@ -0,0 +1,60 @@ + + + + + + +penify_hook.jira_client.JiraClient + + +Node1 + + +penify_hook.jira_client. +JiraClient ++ +jira_url ++ +jira_user ++ +jira_api_token ++ +jira_client ++ +__init__() ++ +is_connected() ++ +extract_issue_keys +_from_branch() ++ +extract_issue_keys() ++ +get_issue_details() ++ +add_comment() ++ +update_issue_status() ++ +format_commit_message +_with_jira_info() ++ +get_detailed_issue +_context() ++ +get_commit_context +_from_issues() ++ +enhance_commit_message() + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map new file mode 100644 index 0000000..af0a43a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 new file mode 100644 index 0000000..87c42b9 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.md5 @@ -0,0 +1 @@ +717d5801960370f08b353ff800782e04 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg new file mode 100644 index 0000000..076cc77 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.is_connected + + +Node1 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node1->Node8 + + + + + + + + +Node2->Node2 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node4 + + + + + + + + +Node7->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg new file mode 100644 index 0000000..81bda1a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a00d0f9ae006313a21576362d26ac5ec8_icgraph_org.svg @@ -0,0 +1,214 @@ + + + + + + +penify_hook.jira_client.JiraClient.is_connected + + +Node1 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node1->Node8 + + + + + + + + +Node2->Node2 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7->Node4 + + + + + + + + +Node7->Node5 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map new file mode 100644 index 0000000..333928f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 new file mode 100644 index 0000000..da6010d --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.md5 @@ -0,0 +1 @@ +418490b7d72a19f4b66a9d571f00a405 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg new file mode 100644 index 0000000..574eb14 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg new file mode 100644 index 0000000..2d1925e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_cgraph_org.svg @@ -0,0 +1,89 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map new file mode 100644 index 0000000..fc7a580 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 new file mode 100644 index 0000000..31affd1 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.md5 @@ -0,0 +1 @@ +64b10c681d95ce3a7d9a088dee97f2fa \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg new file mode 100644 index 0000000..83e0ee7 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg new file mode 100644 index 0000000..230fdc6 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a49ea1149758f7f5212149d357b13cc23_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.jira_client.JiraClient.format_commit_message_with_jira_info + + +Node1 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map new file mode 100644 index 0000000..3ea65f8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 new file mode 100644 index 0000000..4243138 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.md5 @@ -0,0 +1 @@ +dde2ac2af40342b31ee669cca048b1d5 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg new file mode 100644 index 0000000..3985971 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg new file mode 100644 index 0000000..4e8bb0b --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map new file mode 100644 index 0000000..1bd6647 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 new file mode 100644 index 0000000..031a22f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.md5 @@ -0,0 +1 @@ +6c661a2fda40fd56a413ec2fa08a59b0 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg new file mode 100644 index 0000000..1b00d64 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg new file mode 100644 index 0000000..4d81f52 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a65f6924819084b7c8d268956a784804a_icgraph_org.svg @@ -0,0 +1,91 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_issue_details + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map new file mode 100644 index 0000000..42dd982 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 new file mode 100644 index 0000000..8120387 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.md5 @@ -0,0 +1 @@ +5ddc66300fa5b7ead562ae1458f5a2d1 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg new file mode 100644 index 0000000..eb63ff5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.enhance_commit_message + + +Node1 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node6->Node7 + + + + + + + + +Node7->Node5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg new file mode 100644 index 0000000..74ddb79 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_a70d2c5a6432aa6f238da0ff65d49a760_cgraph_org.svg @@ -0,0 +1,185 @@ + + + + + + +penify_hook.jira_client.JiraClient.enhance_commit_message + + +Node1 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node4->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node6->Node7 + + + + + + + + +Node7->Node5 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map new file mode 100644 index 0000000..68f5855 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 new file mode 100644 index 0000000..4872206 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.md5 @@ -0,0 +1 @@ +2516741eaa318777630ef1a3c4503bec \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg new file mode 100644 index 0000000..2230ab2 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg new file mode 100644 index 0000000..31d4e73 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_cgraph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map new file mode 100644 index 0000000..c3693f6 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 new file mode 100644 index 0000000..5a0d146 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.md5 @@ -0,0 +1 @@ +383e070712c31e89209aa7b1e1122f61 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg new file mode 100644 index 0000000..bc05031 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg new file mode 100644 index 0000000..93a2839 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa1f374116c64cd5f1492ec7f7e40f9c1_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.jira_client.JiraClient.add_comment + + +Node1 + + +penify_hook.jira_client. +JiraClient.add_comment + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map new file mode 100644 index 0000000..3c585f2 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 new file mode 100644 index 0000000..e170f1a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.md5 @@ -0,0 +1 @@ +63a3882ce41ba6db173cea3a6a69cc12 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg new file mode 100644 index 0000000..16e6732 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg new file mode 100644 index 0000000..b662d76 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_cgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map new file mode 100644 index 0000000..4f6db46 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 new file mode 100644 index 0000000..76f9aba --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.md5 @@ -0,0 +1 @@ +7b753bb07d4e9d56f0a95d651e44ff1d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg new file mode 100644 index 0000000..a2078d9 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg new file mode 100644 index 0000000..4521658 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aa967169a4b7970c67c0947b9ac56f746_icgraph_org.svg @@ -0,0 +1,63 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_detailed_issue_context + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map new file mode 100644 index 0000000..894ec8a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 new file mode 100644 index 0000000..9d11f10 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.md5 @@ -0,0 +1 @@ +efdd957df986904623f97d9b11661563 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg new file mode 100644 index 0000000..df89180 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.update_issue_status + + +Node1 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg new file mode 100644 index 0000000..424d967 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_aca8837552d37bfd611de23441a240826_cgraph_org.svg @@ -0,0 +1,42 @@ + + + + + + +penify_hook.jira_client.JiraClient.update_issue_status + + +Node1 + + +penify_hook.jira_client. +JiraClient.update_issue +_status + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map new file mode 100644 index 0000000..7520eef --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 new file mode 100644 index 0000000..6901a15 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.md5 @@ -0,0 +1 @@ +1e99adb62e67060686dd8813dd04b0a1 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg new file mode 100644 index 0000000..67bc403 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg new file mode 100644 index 0000000..08aba67 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_ad2823ad1d3baaedd38039913c3a97fd7_icgraph_org.svg @@ -0,0 +1,62 @@ + + + + + + +penify_hook.jira_client.JiraClient.extract_issue_keys + + +Node1 + + +penify_hook.jira_client. +JiraClient.extract_issue_keys + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.format_commit +_message_with_jira_info + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map new file mode 100644 index 0000000..8ed21fe --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 new file mode 100644 index 0000000..b7398a5 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.md5 @@ -0,0 +1 @@ +1ffa67f807985b455093a76176bbf0a2 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg new file mode 100644 index 0000000..1f184f1 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node4 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg new file mode 100644 index 0000000..0757634 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_cgraph_org.svg @@ -0,0 +1,99 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.get_detailed +_issue_context + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.jira_client. +JiraClient.is_connected + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.jira_client. +JiraClient.get_issue_details + + + + + +Node1->Node4 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map new file mode 100644 index 0000000..85570b3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 new file mode 100644 index 0000000..d4c3c7e --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.md5 @@ -0,0 +1 @@ +689439215ff383b255572760a7c9eb3c \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg new file mode 100644 index 0000000..69ca8a8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg new file mode 100644 index 0000000..4bba78f --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1jira__client_1_1JiraClient_afb41ce6f13c30b1265d439ddf04bf2cd_icgraph_org.svg @@ -0,0 +1,43 @@ + + + + + + +penify_hook.jira_client.JiraClient.get_commit_context_from_issues + + +Node1 + + +penify_hook.jira_client. +JiraClient.get_commit +_context_from_issues + + + + + +Node2 + + +penify_hook.jira_client. +JiraClient.enhance_commit +_message + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html new file mode 100644 index 0000000..a800bdc --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient-members.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.llm_client.LLMClient Member List
+
+
+ +

This is the complete list of members for penify_hook.llm_client.LLMClient, including all inherited members.

+ + + + + + +
__init__(self, str model=None, str api_base=None, str api_key=None)penify_hook.llm_client.LLMClient
_litellmpenify_hook.llm_client.LLMClientprotected
generate_commit_summary(self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None, str additonal_param="", str additonal_param_2="")penify_hook.llm_client.LLMClient
litellm(self)penify_hook.llm_client.LLMClient
modelpenify_hook.llm_client.LLMClient
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.html b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.html new file mode 100644 index 0000000..eb159cf --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.llm_client.LLMClient Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
penify_hook.llm_client.LLMClient Class Reference
+
+
+
+Collaboration diagram for penify_hook.llm_client.LLMClient:
+
+
+
+ + + + + + + + +

+Public Member Functions

 __init__ (self, str model=None, str api_base=None, str api_key=None)
 
 litellm (self)
 
Dict generate_commit_summary (self, str diff, str message, bool generate_description, Dict repo_details, Dict jira_context=None, str additonal_param="", str additonal_param_2="")
 
+ + + +

+Public Attributes

 model = model
 
+ + + +

+Protected Attributes

 _litellm = None
 
+

Detailed Description

+
Client for interacting with LLM models using LiteLLM.
+

Constructor & Destructor Documentation

+ +

◆ __init__()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
penify_hook.llm_client.LLMClient.__init__ ( self,
str model = None,
str api_base = None,
str api_key = None )
+
+
Initialize the LLM client.
+
+Args:
+    model: LLM model to use (e.g., "gpt-4", "ollama/llama2", etc.)
+    api_base: Base URL for API requests (e.g., "http://localhost:11434" for Ollama)
+    api_key: API key for the LLM service
+
+
+
+

Member Function Documentation

+ +

◆ generate_commit_summary()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Dict penify_hook.llm_client.LLMClient.generate_commit_summary ( self,
str diff,
str message,
bool generate_description,
Dict repo_details,
Dict jira_context = None,
str additonal_param = "",
str additonal_param_2 = "" )
+
+
Generate a concise and descriptive commit summary based on Git diff, user
+instructions, repository details, and optional JIRA context.
+
+This function constructs a prompt for an LLM to produce a commit title and, if
+requested, a detailed description. The summary adheres to Semantic Commit
+Messages guidelines. If JIRA context is provided, it enriches the prompt with
+relevant issue information. The function also handles token limits by
+truncating large diffs and includes additional parameters for flexibility.
+
+Args:
+    diff (str): Git diff of changes.
+    message (str): User-provided commit message or instructions.
+    generate_description (bool): Flag indicating whether to include a detailed description in the summary.
+    repo_details (Dict): Details about the repository.
+    jira_context (Dict?): Optional JIRA issue context to enhance the summary. Defaults to None.
+    additonal_param (str?): An additional parameter for further customization. Defaults to "".
+    additonal_param_2 (str?): Another additional parameter for further customization. Defaults to "".
+
+Returns:
+    Dict: A dictionary containing 'title' and optionally 'description'.
+
+Raises:
+    ValueError: If the JSON structure from the LLM response is invalid.
+    Exception: Any other errors during the process, which will exit the script with an error
+        message.
+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ litellm()

+ +
+
+ + + + + + + +
penify_hook.llm_client.LLMClient.litellm ( self)
+
+
Returns the litellm module, loading it if necessary.
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ _litellm

+ +
+
+ + + + + +
+ + + + +
penify_hook.llm_client.LLMClient._litellm = None
+
+protected
+
+ +
+
+ +

◆ model

+ +
+
+ + + + +
penify_hook.llm_client.LLMClient.model = model
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.js b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.js new file mode 100644 index 0000000..e5502de --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient.js @@ -0,0 +1,8 @@ +var classpenify__hook_1_1llm__client_1_1LLMClient = +[ + [ "__init__", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b", null ], + [ "generate_commit_summary", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a15bdb0eab18f46b9f78e38f07b5e899e", null ], + [ "litellm", "classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24", null ], + [ "_litellm", "classpenify__hook_1_1llm__client_1_1LLMClient.html#a76c2e9805f805624ab9c55a9f1f8d362", null ], + [ "model", "classpenify__hook_1_1llm__client_1_1LLMClient.html#abc2cb6b1d6d9b5dc16401ca078ec8c10", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map new file mode 100644 index 0000000..0799e07 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 new file mode 100644 index 0000000..32e431a --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.md5 @@ -0,0 +1 @@ +f5a85cb1914200227761fbafb29a028d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg new file mode 100644 index 0000000..c17cfa7 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient + + +Node1 + + +penify_hook.llm_client.LLMClient ++ +model +# +_litellm ++ +__init__() ++ +litellm() ++ +generate_commit_summary() + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg new file mode 100644 index 0000000..e539abe --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient__coll__graph_org.svg @@ -0,0 +1,35 @@ + + + + + + +penify_hook.llm_client.LLMClient + + +Node1 + + +penify_hook.llm_client.LLMClient ++ +model +# +_litellm ++ +__init__() ++ +litellm() ++ +generate_commit_summary() + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.map new file mode 100644 index 0000000..4ef0528 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.md5 new file mode 100644 index 0000000..01de6eb --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.md5 @@ -0,0 +1 @@ +34b0fee7d75710e4a00c53f6fd9aa8be \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.svg new file mode 100644 index 0000000..8396724 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph_org.svg new file mode 100644 index 0000000..a18f3b8 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_a15bdb0eab18f46b9f78e38f07b5e899e_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.llm_client.LLMClient.generate_commit_summary + + +Node1 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map new file mode 100644 index 0000000..6b9d521 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 new file mode 100644 index 0000000..b9084c7 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.md5 @@ -0,0 +1 @@ +0b2413a0d519c9ed3836f805e35a5b3d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg new file mode 100644 index 0000000..a4f68bd --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.llm_client.LLMClient.litellm + + +Node1 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg new file mode 100644 index 0000000..ff5e10d --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1llm__client_1_1LLMClient_aa646fddc43ecd633d2c358d58dd4df24_icgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.llm_client.LLMClient.litellm + + +Node1 + + +penify_hook.llm_client.LLMClient.litellm + + + + + +Node2 + + +penify_hook.llm_client.LLMClient.generate +_commit_summary + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html new file mode 100644 index 0000000..afbbb79 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.utils.GitRepoNotFoundError Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook.utils.GitRepoNotFoundError Class Reference
+
+
+
+Inheritance diagram for penify_hook.utils.GitRepoNotFoundError:
+
+
+
+
+Collaboration diagram for penify_hook.utils.GitRepoNotFoundError:
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map new file mode 100644 index 0000000..22a6cb3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 new file mode 100644 index 0000000..671ea14 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.md5 @@ -0,0 +1 @@ +a12e925b7b00d944f3725fa4235987da \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg new file mode 100644 index 0000000..d92e280 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg new file mode 100644 index 0000000..4b075ca --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__coll__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map new file mode 100644 index 0000000..22a6cb3 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 new file mode 100644 index 0000000..671ea14 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.md5 @@ -0,0 +1 @@ +a12e925b7b00d944f3725fa4235987da \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg new file mode 100644 index 0000000..d92e280 --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg new file mode 100644 index 0000000..4b075ca --- /dev/null +++ b/docs-test-3rd-techno/html/classpenify__hook_1_1utils_1_1GitRepoNotFoundError__inherit__graph_org.svg @@ -0,0 +1,50 @@ + + + + + + +penify_hook.utils.GitRepoNotFoundError + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError +  +  + + + + + + + + +Node2 + + +Exception +  +  + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html new file mode 100644 index 0000000..a62b472 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_commit_commands.TestCommitCommands Member List
+
+
+ +

This is the complete list of members for tests.test_commit_commands.TestCommitCommands, including all inherited members.

+ + + + + + + + + + + + + +
mock_api_client(self)tests.test_commit_commands.TestCommitCommands
mock_commit_doc_gen(self)tests.test_commit_commands.TestCommitCommands
mock_git_folder_search(self)tests.test_commit_commands.TestCommitCommands
mock_jira_client(self)tests.test_commit_commands.TestCommitCommands
mock_llm_client(self)tests.test_commit_commands.TestCommitCommands
mock_print_functions(self)tests.test_commit_commands.TestCommitCommands
test_commit_code_error_handling(self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_jira_client(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_jira_connection_failure(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_commit_code_with_llm_client(self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client)tests.test_commit_commands.TestCommitCommands
test_handle_commit(self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config)tests.test_commit_commands.TestCommitCommands
test_setup_commit_parser(self)tests.test_commit_commands.TestCommitCommands
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html new file mode 100644 index 0000000..18dae2a --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.html @@ -0,0 +1,699 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_commit_commands.TestCommitCommands Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_commit_commands.TestCommitCommands Class Reference
+
+
+
+Collaboration diagram for tests.test_commit_commands.TestCommitCommands:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 mock_api_client (self)
 
 mock_llm_client (self)
 
 mock_jira_client (self)
 
 mock_commit_doc_gen (self)
 
 mock_git_folder_search (self)
 
 mock_print_functions (self)
 
 test_commit_code_with_llm_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_llm_client, mock_api_client)
 
 test_commit_code_with_jira_client (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_llm_client, mock_api_client)
 
 test_commit_code_with_jira_connection_failure (self, mock_error, mock_warning, mock_info, mock_git_folder_search, mock_doc_gen, mock_jira_client, mock_api_client)
 
 test_commit_code_error_handling (self, mock_print, mock_exit, mock_git_folder_search, mock_doc_gen, mock_api_client)
 
 test_setup_commit_parser (self)
 
 test_handle_commit (self, mock_print_info, mock_commit_code, mock_get_token, mock_get_llm_config, mock_get_jira_config)
 
+

Member Function Documentation

+ +

◆ mock_api_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_api_client ( self)
+
+
Mocks an instance of APIClient using unittest.mock.
+
+This function creates a mock object for APIClient and yields it along
+with the mocked instance. It is useful for testing purposes where real
+API calls should be avoided.
+
+Yields:
+    tuple: A tuple containing the mock of APIClient and the mocked instance of
+        APIClient.
+
+
+
+ +

◆ mock_commit_doc_gen()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_commit_doc_gen ( self)
+
+
Mocks the CommitDocGenHook class and returns a MagicMock instance.
+
+This function uses the `patch` decorator from the `unittest.mock` module
+to create a mock of the `CommitDocGenHook` class. It then sets up this
+mock to return a new `MagicMock` instance when invoked. The function
+yields both the mock object and the mocked instance, allowing for easy
+testing of functions that rely on `CommitDocGenHook`.
+
+Returns:
+    tuple: A tuple containing two elements:
+        - mock (patch): The patch object used to mock the `CommitDocGenHook`
+        class.
+        - doc_gen_instance (MagicMock): The mocked instance of
+        `CommitDocGenHook`.
+
+
+
+ +

◆ mock_git_folder_search()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_git_folder_search ( self)
+
+
Mock the `recursive_search_git_folder` function to return a predefined
+git folder path.
+
+This function uses the `patch` decorator from the `unittest.mock` module
+to intercept calls to `penify_hook.utils.recursive_search_git_folder`.
+When called, it will return '/mock/git/folder' instead of performing an
+actual search. This is useful for testing purposes where you need a
+consistent response without interacting with the file system.
+
+Yields:
+    MagicMock: A mock object that simulates the `recursive_search_git_folder` function.
+
+
+
+ +

◆ mock_jira_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_jira_client ( self)
+
+
Create a mock JIRA client for testing purposes.
+
+This function yields a tuple containing a mock JIRA client instance and
+its `is_connected` method. The mock client is configured to simulate an
+active connection. This is useful for unit tests that require
+interaction with a JIRA client without making actual network calls.
+
+Yields:
+    tuple: A tuple containing the mocked JIRA client instance and its
+        `is_connected` method.
+
+
+
+ +

◆ mock_llm_client()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_llm_client ( self)
+
+
Mock an instance of LLMClient for testing purposes.
+
+This function yields a mock object representing an instance of
+LLMClient, which can be used to simulate interactions with a language
+model during testing. The mock is patched to replace the actual
+LLMClient class from the penify_hook module.
+
+Yields:
+    tuple: A tuple containing two elements:
+        - mock (MagicMock): The mock object for LLMClient.
+        - llm_client_instance (MagicMock): An instance of the mocked LLMClient.
+
+
+
+ +

◆ mock_print_functions()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.mock_print_functions ( self)
+
+
Mocks the print functions from `penify_hook.ui_utils` for testing
+purposes.
+
+This function uses Python's `unittest.mock.patch` to replace the actual
+print functions (`print`, `print_warning`, and `print_error`) with mock
+objects. These mock objects can be used in tests to capture calls made
+to these print functions without actually printing anything.
+
+Yields:
+    tuple: A tuple containing three mock objects corresponding to `print_info`,
+        `print_warning`,
+        and `print_error`.
+
+
+
+ +

◆ test_commit_code_error_handling()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_error_handling ( self,
mock_print,
mock_exit,
mock_git_folder_search,
mock_doc_gen,
mock_api_client )
+
+
Test the error handling in the test_commit_code function.
+
+This function sets up mocks to simulate exceptions and test the error
+handling of the commit_code function. It verifies that the function
+correctly prints an error message and exits with a status code of 1 when
+an exception occurs during documentation generation.
+
+Args:
+    mock_print (MagicMock): Mock for the print function, used to verify error message output.
+    mock_exit (MagicMock): Mock for the sys.exit function, used to verify exit behavior.
+    mock_git_folder_search (MagicMock): Mock for the git_folder_search function, returning a mock Git folder
+        path.
+    mock_doc_gen (MagicMock): Mock for the doc_gen function, simulating an exception during
+        documentation generation.
+    mock_api_client (MagicMock): Mock for the API client class, not directly used but referenced in the
+        function signature.
+
+
+
+ +

◆ test_commit_code_with_jira_client()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_client ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_jira_client,
mock_llm_client,
mock_api_client )
+
+
Test committing code using a JIRA client.
+
+This function tests the commit_code function with various parameters,
+including API and JIRA credentials. It sets up mock objects for
+dependencies such as the JIRA client, LLM client, and doc generator to
+simulate the behavior of the real classes. The function then calls
+commit_code and verifies that the JIRA client and doc generator are
+called with the correct parameters.
+
+Args:
+    mock_error (MagicMock): A MagicMock object for simulating error logging.
+    mock_warning (MagicMock): A MagicMock object for simulating warning logging.
+    mock_info (MagicMock): A MagicMock object for simulating info logging.
+    mock_git_folder_search (MagicMock): A MagicMock object for simulating the git folder search function.
+    mock_doc_gen (MagicMock): A MagicMock object for simulating the doc generator function.
+    mock_jira_client (MagicMock): A MagicMock object for simulating the JIRA client class.
+    mock_llm_client (MagicMock): A MagicMock object for simulating the LLM client class.
+    mock_api_client (MagicMock): A MagicMock object for simulating the API client class.
+
+
+
+ +

◆ test_commit_code_with_jira_connection_failure()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_jira_connection_failure ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_jira_client,
mock_api_client )
+
+
Test the commit_code function when JIRA connection fails.
+
+This function tests the scenario where the JIRA connection fails during
+a code commit. It sets up various mocks to simulate different components
+of the system and then calls the `commit_code` function with specific
+parameters. The function is expected to handle the JIRA connection
+failure gracefully by logging an appropriate warning.
+
+Args:
+    mock_error (MagicMock): Mock for error logging.
+    mock_warning (MagicMock): Mock for warning logging.
+    mock_info (MagicMock): Mock for info logging.
+    mock_git_folder_search (MagicMock): Mock for searching the Git folder.
+    mock_doc_gen (MagicMock): Mock for generating documentation.
+    mock_jira_client (MagicMock): Mock for creating a JIRA client.
+    mock_api_client (MagicMock): Mock for creating an API client.
+
+
+
+ +

◆ test_commit_code_with_llm_client()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_commit_code_with_llm_client ( self,
mock_error,
mock_warning,
mock_info,
mock_git_folder_search,
mock_doc_gen,
mock_llm_client,
mock_api_client )
+
+
Test committing code using an LLM client.
+
+This function sets up mock objects for various components and then calls
+the `commit_code` function with specified parameters. It verifies that
+the correct mocks are created and called with the appropriate arguments.
+
+Args:
+    mock_error (MagicMock): Mock object for error handling.
+    mock_warning (MagicMock): Mock object for warning logging.
+    mock_info (MagicMock): Mock object for info logging.
+    mock_git_folder_search (MagicMock): Mock object to simulate git folder search.
+    mock_doc_gen (MagicMock): Mock object for document generation.
+    mock_llm_client (MagicMock): Mock object for LLM client interaction.
+    mock_api_client (MagicMock): Mock object for API client interaction.
+
+
+
+ +

◆ test_handle_commit()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_handle_commit ( self,
mock_print_info,
mock_commit_code,
mock_get_token,
mock_get_llm_config,
mock_get_jira_config )
+
+
Test the handle_commit function with various mock objects.
+
+This function sets up mocks for retrieving LLM configuration, JIRA
+configuration, and commit code. It then creates an argument object and
+calls the handle_commit function. Finally, it verifies that the mock
+functions were called with the expected arguments.
+
+Args:
+    mock_print_info (MagicMock): Mock object for printing information.
+    mock_commit_code (MagicMock): Mock object for committing code.
+    mock_get_token (MagicMock): Mock object for retrieving API token.
+    mock_get_llm_config (MagicMock): Mock object for retrieving LLM configuration.
+    mock_get_jira_config (MagicMock): Mock object for retrieving JIRA configuration.
+
+
+
+ +

◆ test_setup_commit_parser()

+ +
+
+ + + + + + + +
tests.test_commit_commands.TestCommitCommands.test_setup_commit_parser ( self)
+
+
Set up the argument parser for the commit command.
+
+This function configures an argument parser to handle various options
+for committing changes. It adds three arguments: - '-m' or '--message':
+An optional argument to specify a contextual commit message with a
+default value of "N/A". - '-e' or '--terminal': A boolean flag to open
+an edit terminal before committing. - '-d' or '--description': A boolean
+flag that, when set to False, indicates the generation of a commit
+message with title and description.
+
+Args:
+    parser (MagicMock): The argument parser to be configured.
+
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js new file mode 100644 index 0000000..1d00e21 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands.js @@ -0,0 +1,15 @@ +var classtests_1_1test__commit__commands_1_1TestCommitCommands = +[ + [ "mock_api_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661", null ], + [ "mock_commit_doc_gen", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7", null ], + [ "mock_git_folder_search", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5", null ], + [ "mock_jira_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881", null ], + [ "mock_llm_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107", null ], + [ "mock_print_functions", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab", null ], + [ "test_commit_code_error_handling", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658", null ], + [ "test_commit_code_with_jira_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93", null ], + [ "test_commit_code_with_jira_connection_failure", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b", null ], + [ "test_commit_code_with_llm_client", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218", null ], + [ "test_handle_commit", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a", null ], + [ "test_setup_commit_parser", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map new file mode 100644 index 0000000..3516f53 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 new file mode 100644 index 0000000..18b99dc --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.md5 @@ -0,0 +1 @@ +71c96ed0780aa2849585edbd23265cd5 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg new file mode 100644 index 0000000..979fc86 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + +tests.test_commit_commands.TestCommitCommands + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands +  ++ +mock_api_client() ++ +mock_llm_client() ++ +mock_jira_client() ++ +mock_commit_doc_gen() ++ +mock_git_folder_search() ++ +mock_print_functions() ++ +test_commit_code_with +_llm_client() ++ +test_commit_code_with +_jira_client() ++ +test_commit_code_with +_jira_connection_failure() ++ +test_commit_code_error +_handling() ++ +test_setup_commit_parser() ++ +test_handle_commit() + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg new file mode 100644 index 0000000..34b111b --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__commit__commands_1_1TestCommitCommands__coll__graph_org.svg @@ -0,0 +1,54 @@ + + + + + + +tests.test_commit_commands.TestCommitCommands + + +Node1 + + +tests.test_commit_commands. +TestCommitCommands +  ++ +mock_api_client() ++ +mock_llm_client() ++ +mock_jira_client() ++ +mock_commit_doc_gen() ++ +mock_git_folder_search() ++ +mock_print_functions() ++ +test_commit_code_with +_llm_client() ++ +test_commit_code_with +_jira_client() ++ +test_commit_code_with +_jira_connection_failure() ++ +test_commit_code_error +_handling() ++ +test_setup_commit_parser() ++ +test_handle_commit() + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html new file mode 100644 index 0000000..5cb12ee --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands-members.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_config_commands.TestConfigCommands Member List
+
+
+ +

This is the complete list of members for tests.test_config_commands.TestConfigCommands, including all inherited members.

+ + + + + + + + + + + + + +
test_get_jira_config_exists(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_empty(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_exists(self, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_llm_config_invalid_json(self, mock_print, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_get_penify_config_existing_dir(self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)tests.test_config_commands.TestConfigCommands
test_get_penify_config_new_dir(self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)tests.test_config_commands.TestConfigCommands
test_get_token_from_config(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_get_token_from_env(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_get_token_not_found(self, mock_file_open, mock_path, mock_getenv)tests.test_config_commands.TestConfigCommands
test_save_jira_config_success(self, mock_print, mock_json_dump, mock_file_open, mock_path)tests.test_config_commands.TestConfigCommands
test_save_llm_config_failure(self, mock_print, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
test_save_llm_config_success(self, mock_print, mock_json_dump, mock_file_open, mock_get_config)tests.test_config_commands.TestConfigCommands
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html new file mode 100644 index 0000000..a8d0f7c --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.html @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_config_commands.TestConfigCommands Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_config_commands.TestConfigCommands Class Reference
+
+
+
+Collaboration diagram for tests.test_config_commands.TestConfigCommands:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 test_get_penify_config_existing_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)
 
 test_get_penify_config_new_dir (self, mock_file_open, mock_makedirs, mock_path, mock_git_folder)
 
 test_get_llm_config_exists (self, mock_file_open, mock_get_config)
 
 test_get_llm_config_empty (self, mock_file_open, mock_get_config)
 
 test_get_llm_config_invalid_json (self, mock_print, mock_file_open, mock_get_config)
 
 test_get_jira_config_exists (self, mock_file_open, mock_get_config)
 
 test_save_llm_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_get_config)
 
 test_save_llm_config_failure (self, mock_print, mock_file_open, mock_get_config)
 
 test_save_jira_config_success (self, mock_print, mock_json_dump, mock_file_open, mock_path)
 
 test_get_token_from_env (self, mock_file_open, mock_path, mock_getenv)
 
 test_get_token_from_config (self, mock_file_open, mock_path, mock_getenv)
 
 test_get_token_not_found (self, mock_file_open, mock_path, mock_getenv)
 
+

Member Function Documentation

+ +

◆ test_get_jira_config_exists()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_jira_config_exists ( self,
mock_file_open,
mock_get_config )
+
+
Test that get_jira_config returns the correct JIRA configuration when
+the configuration file exists.
+
+It sets up a mock for the configuration file to simulate its existence
+and verifies that the function reads from the correct file and returns
+the expected JIRA configuration dictionary. Additionally, it checks that
+the mock file open is called with the appropriate arguments.
+
+Args:
+    mock_file_open (MagicMock): A mock for the `open` function.
+    mock_get_config (MagicMock): A mock for the `get_config` function, which is expected to return a mock
+        configuration file object.
+
+Returns:
+    None: This test function does not explicitly return anything. Its assertions
+        serve as the verification of its correctness.
+
+
+
+ +

◆ test_get_llm_config_empty()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_empty ( self,
mock_file_open,
mock_get_config )
+
+
Test the behavior of get_llm_config when called with an empty
+configuration file.
+
+This function sets up a mock configuration file that exists but returns
+no content. It then calls the `get_llm_config` function and asserts that
+it returns an empty dictionary and that the file open method was called
+exactly once with the correct arguments.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the built-in open function.
+    mock_get_config (MagicMock): A MagicMock object simulating the get_config function.
+
+
+
+ +

◆ test_get_llm_config_exists()

+ +
+
+ + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_exists ( self,
mock_file_open,
mock_get_config )
+
+
Test the get_llm_config function when the configuration file exists.
+
+This function sets up a mock configuration file that exists and returns
+it when called. It then calls the get_llm_config function and asserts
+that it returns the correct configuration dictionary. Additionally, it
+checks that the mock_file_open function was called with the correct
+arguments.
+
+Args:
+    mock_file_open (MagicMock): A mock for the open() function.
+    mock_get_config (MagicMock): A mock for the get_config() function.
+
+
+
+ +

◆ test_get_llm_config_invalid_json()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_llm_config_invalid_json ( self,
mock_print,
mock_file_open,
mock_get_config )
+
+
Test function to verify the behavior of get_llm_config when reading an
+invalid JSON file.
+
+It sets up a mock configuration file that exists but contains invalid
+JSON. The function is expected to handle this gracefully by printing an
+error message and returning an empty dictionary.
+
+Args:
+    mock_print (MagicMock): Mock for the print function.
+    mock_file_open (MagicMock): Mock for the open function.
+    mock_get_config (MagicMock): Mock for the get_config function, which returns the mock configuration
+        file.
+
+
+
+ +

◆ test_get_penify_config_existing_dir()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_penify_config_existing_dir ( self,
mock_file_open,
mock_makedirs,
mock_path,
mock_git_folder )
+
+
Test the get_penify_config function when the .penify config directory
+exists.
+
+It should not create a new directory and assert that all mocked
+functions were called correctly.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the open() function.
+    mock_makedirs (MagicMock): A MagicMock object simulating the os.makedirs() function.
+    mock_path (MagicMock): A MagicMock object simulating the Path class from pathlib module.
+    mock_git_folder (MagicMock): A MagicMock object simulating the git_folder_search() function.
+
+
+
+ +

◆ test_get_penify_config_new_dir()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_penify_config_new_dir ( self,
mock_file_open,
mock_makedirs,
mock_path,
mock_git_folder )
+
+
Test the behavior of get_penify_config when the .penify directory does
+not exist.
+
+This function mocks various system calls to simulate a scenario where
+the .penify directory is not present. It then asserts that the
+appropriate actions are taken to create the directory and write an empty
+JSON file.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object simulating the `open` function.
+    mock_makedirs (MagicMock): A MagicMock object simulating the `os.makedirs` function.
+    mock_path (MagicMock): A MagicMock object simulating the `Path` class from `pathlib`.
+    mock_git_folder (MagicMock): A MagicMock object simulating a git folder search function.
+
+
+
+ +

◆ test_get_token_from_config()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_from_config ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test retrieving a token from the configuration.
+
+This function sets up mocks for environment variables and configuration
+files, calls the `get_token` function, and asserts its behavior. It
+verifies that when the environment variable is not found, the function
+reads a token from a configuration file located in the user's home
+directory.
+
+Args:
+    mock_file_open (MagicMock): A mock for the `open` function.
+    mock_path (MagicMock): A mock for the `pathlib.Path` class.
+    mock_getenv (MagicMock): A mock for the `os.getenv` function.
+
+
+
+ +

◆ test_get_token_from_env()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_from_env ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test retrieving a token from the environment variable.
+
+This function tests the behavior of `get_token` when an environment
+variable is set. It verifies that if the 'PENIFY_API_TOKEN' environment
+variable exists, the function returns its value without attempting to
+read a file.
+
+Args:
+    mock_file_open (MagicMock): A MagicMock object for simulating file operations.
+    mock_path (MagicMock): A MagicMock object for simulating path operations.
+    mock_getenv (MagicMock): A MagicMock object for simulating environment variable retrieval.
+
+
+
+ +

◆ test_get_token_not_found()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_get_token_not_found ( self,
mock_file_open,
mock_path,
mock_getenv )
+
+
Test the get_token function when the API token environment variable is
+not found.
+
+This function tests the scenario where the `PENIFY_API_TOKEN`
+environment variable is not set. It mocks the environment variable to
+return `None`, and verifies that the function returns `None`. The test
+also checks that the environment variable is accessed once and that a
+file open operation is attempted on a configuration file located in the
+user's home directory.
+
+Args:
+    mock_file_open (MagicMock): Mock for the built-in `open` function.
+    mock_path (MagicMock): Mock for the `pathlib.Path` module.
+    mock_getenv (MagicMock): Mock for the `os.getenv` function.
+
+Returns:
+    None: The function does not return anything; it asserts conditions to verify
+        correctness.
+
+
+
+ +

◆ test_save_jira_config_success()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_jira_config_success ( self,
mock_print,
mock_json_dump,
mock_file_open,
mock_path )
+
+
Test the save_jira_config function to ensure it saves JIRA configuration
+successfully.
+
+This function sets up mocks for various dependencies and tests the
+functionality of saving a JIRA configuration. It asserts that the
+function returns `True`, the JSON dump is called with the correct
+configuration, and the print statement contains the expected message.
+
+Args:
+    mock_print (MagicMock): Mock for the print function.
+    mock_json_dump (MagicMock): Mock for the json.dump function.
+    mock_file_open (MagicMock): Mock for the open function.
+    mock_path (MagicMock): Mock for the path module.
+
+
+
+ +

◆ test_save_llm_config_failure()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_llm_config_failure ( self,
mock_print,
mock_file_open,
mock_get_config )
+
+
Test function to verify that the save_llm_config function returns False
+and prints an error message when it fails to save the LLM configuration
+due to a permission error.
+
+It sets up a mock configuration file that exists and calls the
+save_llm_config function with valid parameters. The function is expected
+to return False and print "Error saving LLM configuration: Permission
+denied" in case of a failure.
+
+Args:
+    self (TestLLMConfig): An instance of the test class.
+    mock_print (MagicMock): A MagicMock object representing the print function, which will be used
+        to assert that it was called with the expected error message.
+    mock_file_open (MagicMock): A MagicMock object representing the open function, which is not used in
+        this test but is included as a parameter for completeness.
+    mock_get_config (MagicMock): A MagicMock object representing the get_config function, which will be
+        used to return the mock configuration file.
+
+
+
+ +

◆ test_save_llm_config_success()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
tests.test_config_commands.TestConfigCommands.test_save_llm_config_success ( self,
mock_print,
mock_json_dump,
mock_file_open,
mock_get_config )
+
+
Test the save_llm_config function successfully.
+
+This function tests that the save_llm_config function correctly saves an
+LLM configuration and handles various mock objects and side effects. It
+ensures that the function returns True upon successful execution, writes
+the expected configuration to a file, and prints a confirmation message.
+
+Args:
+    mock_print (MagicMock): A mock object for the print function.
+    mock_json_dump (MagicMock): A mock object for json.dump.
+    mock_file_open (MagicMock): A mock object for file opening.
+    mock_get_config (MagicMock): A mock object to return a configuration file mock.
+
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js new file mode 100644 index 0000000..1f30423 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands.js @@ -0,0 +1,15 @@ +var classtests_1_1test__config__commands_1_1TestConfigCommands = +[ + [ "test_get_jira_config_exists", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85", null ], + [ "test_get_llm_config_empty", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541", null ], + [ "test_get_llm_config_exists", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db", null ], + [ "test_get_llm_config_invalid_json", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd", null ], + [ "test_get_penify_config_existing_dir", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4", null ], + [ "test_get_penify_config_new_dir", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e", null ], + [ "test_get_token_from_config", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0", null ], + [ "test_get_token_from_env", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1", null ], + [ "test_get_token_not_found", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a", null ], + [ "test_save_jira_config_success", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50", null ], + [ "test_save_llm_config_failure", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b", null ], + [ "test_save_llm_config_success", "classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map new file mode 100644 index 0000000..147384e --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 new file mode 100644 index 0000000..6d969f9 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.md5 @@ -0,0 +1 @@ +43afd25a19ba833341fc30c910e840f8 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg new file mode 100644 index 0000000..57cb02f --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + +tests.test_config_commands.TestConfigCommands + + +Node1 + + +tests.test_config_commands. +TestConfigCommands +  ++ +test_get_penify_config +_existing_dir() ++ +test_get_penify_config +_new_dir() ++ +test_get_llm_config +_exists() ++ +test_get_llm_config +_empty() ++ +test_get_llm_config +_invalid_json() ++ +test_get_jira_config +_exists() ++ +test_save_llm_config +_success() ++ +test_save_llm_config +_failure() ++ +test_save_jira_config +_success() ++ +test_get_token_from +_env() ++ +test_get_token_from +_config() ++ +test_get_token_not +_found() + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg new file mode 100644 index 0000000..db1925c --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__config__commands_1_1TestConfigCommands__coll__graph_org.svg @@ -0,0 +1,62 @@ + + + + + + +tests.test_config_commands.TestConfigCommands + + +Node1 + + +tests.test_config_commands. +TestConfigCommands +  ++ +test_get_penify_config +_existing_dir() ++ +test_get_penify_config +_new_dir() ++ +test_get_llm_config +_exists() ++ +test_get_llm_config +_empty() ++ +test_get_llm_config +_invalid_json() ++ +test_get_jira_config +_exists() ++ +test_save_llm_config +_success() ++ +test_save_llm_config +_failure() ++ +test_save_jira_config +_success() ++ +test_get_token_from +_env() ++ +test_get_token_from +_config() ++ +test_get_token_not +_found() + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html new file mode 100644 index 0000000..df7e38a --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig-members.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests.test_web_config.TestWebConfig Member List
+
+
+ +

This is the complete list of members for tests.test_web_config.TestWebConfig, including all inherited members.

+ + + +
test_config_jira_web_server_setup(self, mock_resource_filename, mock_server, mock_webbrowser)tests.test_web_config.TestWebConfig
test_config_llm_web_server_setup(self, mock_resource_filename, mock_server, mock_webbrowser)tests.test_web_config.TestWebConfig
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.html b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.html new file mode 100644 index 0000000..08ef094 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.html @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_web_config.TestWebConfig Class Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
tests.test_web_config.TestWebConfig Class Reference
+
+
+
+Collaboration diagram for tests.test_web_config.TestWebConfig:
+
+
+
+ + + + + + +

+Public Member Functions

 test_config_llm_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser)
 
 test_config_jira_web_server_setup (self, mock_resource_filename, mock_server, mock_webbrowser)
 
+

Member Function Documentation

+ +

◆ test_config_jira_web_server_setup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_web_config.TestWebConfig.test_config_jira_web_server_setup ( self,
mock_resource_filename,
mock_server,
mock_webbrowser )
+
+
Test the configuration and setup of a JIRA web server.
+
+This function tests the entire process of setting up a JIRA web server,
+including mocking necessary resources, configuring the server to shut
+down after handling one request, and verifying that the web browser is
+opened with the correct URL. The function uses several mocks to simulate
+external dependencies such as resource files, servers, and web browsers.
+
+Args:
+    mock_resource_filename (MagicMock): A MagicMock object for simulating the `resource_filename` function.
+    mock_server (MagicMock): A MagicMock object for simulating the server setup.
+    mock_webbrowser (MagicMock): A MagicMock object for simulating the web browser opening.
+
+
+
+ +

◆ test_config_llm_web_server_setup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
tests.test_web_config.TestWebConfig.test_config_llm_web_server_setup ( self,
mock_resource_filename,
mock_server,
mock_webbrowser )
+
+
Set up and test the web server configuration for an LLM (Large Language
+Model) web interface.
+
+This function configures a mock web server for testing purposes,
+including setting up resource filenames, mocking server behavior, and
+verifying that the web browser is opened and the server starts
+correctly. The function uses various mocks to simulate external
+dependencies such as `resource_filename` and `server`.
+
+Args:
+    mock_resource_filename (MagicMock): A MagicMock object simulating the `resource_filename` function.
+    mock_server (MagicMock): A MagicMock object simulating the context manager for the web server.
+    mock_webbrowser (MagicMock): A MagicMock object simulating the `webbrowser` module.
+
+
+
+
The documentation for this class was generated from the following file:
    +
  • /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.js b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.js new file mode 100644 index 0000000..10f3ae1 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig.js @@ -0,0 +1,5 @@ +var classtests_1_1test__web__config_1_1TestWebConfig = +[ + [ "test_config_jira_web_server_setup", "classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b", null ], + [ "test_config_llm_web_server_setup", "classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map new file mode 100644 index 0000000..5debbc3 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 new file mode 100644 index 0000000..f63151a --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.md5 @@ -0,0 +1 @@ +99b279c5b453f20fef555416a5139c9b \ No newline at end of file diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg new file mode 100644 index 0000000..b623549 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + +tests.test_web_config.TestWebConfig + + +Node1 + + +tests.test_web_config.Test +WebConfig +  ++ +test_config_llm_web +_server_setup() ++ +test_config_jira_web +_server_setup() + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg new file mode 100644 index 0000000..dab4d66 --- /dev/null +++ b/docs-test-3rd-techno/html/classtests_1_1test__web__config_1_1TestWebConfig__coll__graph_org.svg @@ -0,0 +1,32 @@ + + + + + + +tests.test_web_config.TestWebConfig + + +Node1 + + +tests.test_web_config.Test +WebConfig +  ++ +test_config_llm_web +_server_setup() ++ +test_config_jira_web +_server_setup() + + + + + + + + diff --git a/docs-test-3rd-techno/html/clipboard.js b/docs-test-3rd-techno/html/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs-test-3rd-techno/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +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. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs-test-3rd-techno/html/closed.png b/docs-test-3rd-techno/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%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/docs-test-3rd-techno/html/commit-commands_8md.html b/docs-test-3rd-techno/html/commit-commands_8md.html new file mode 100644 index 0000000..92e0226 --- /dev/null +++ b/docs-test-3rd-techno/html/commit-commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/commit-commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/commit__analyzer_8py.html b/docs-test-3rd-techno/html/commit__analyzer_8py.html new file mode 100644 index 0000000..0805c8b --- /dev/null +++ b/docs-test-3rd-techno/html/commit__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commit_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
commit_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.commit_analyzer.CommitDocGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commit_analyzer
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/commit__analyzer_8py.js b/docs-test-3rd-techno/html/commit__analyzer_8py.js new file mode 100644 index 0000000..d7c51ca --- /dev/null +++ b/docs-test-3rd-techno/html/commit__analyzer_8py.js @@ -0,0 +1,4 @@ +var commit__analyzer_8py = +[ + [ "penify_hook.commit_analyzer.CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/commit__commands_8py.html b/docs-test-3rd-techno/html/commit__commands_8py.html new file mode 100644 index 0000000..06d1eef --- /dev/null +++ b/docs-test-3rd-techno/html/commit__commands_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/commit_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
commit_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.commit_commands
 
+ + + + + + + +

+Functions

 penify_hook.commands.commit_commands.commit_code (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None)
 
 penify_hook.commands.commit_commands.setup_commit_parser (parser)
 
 penify_hook.commands.commit_commands.handle_commit (args)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/commit__commands_8py.js b/docs-test-3rd-techno/html/commit__commands_8py.js new file mode 100644 index 0000000..e63b07e --- /dev/null +++ b/docs-test-3rd-techno/html/commit__commands_8py.js @@ -0,0 +1,6 @@ +var commit__commands_8py = +[ + [ "penify_hook.commands.commit_commands.commit_code", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6", null ], + [ "penify_hook.commands.commit_commands.handle_commit", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076", null ], + [ "penify_hook.commands.commit_commands.setup_commit_parser", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/config-commands_8md.html b/docs-test-3rd-techno/html/config-commands_8md.html new file mode 100644 index 0000000..892d266 --- /dev/null +++ b/docs-test-3rd-techno/html/config-commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/config-commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/config__command_8py.html b/docs-test-3rd-techno/html/config__command_8py.html new file mode 100644 index 0000000..d5fd5cc --- /dev/null +++ b/docs-test-3rd-techno/html/config__command_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/config_command.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
config_command.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.config_command
 
+ + + + + +

+Functions

 penify_hook.config_command.setup_config_parser (parent_parser)
 
 penify_hook.config_command.handle_config (args)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/config__command_8py.js b/docs-test-3rd-techno/html/config__command_8py.js new file mode 100644 index 0000000..41554a2 --- /dev/null +++ b/docs-test-3rd-techno/html/config__command_8py.js @@ -0,0 +1,5 @@ +var config__command_8py = +[ + [ "penify_hook.config_command.handle_config", "namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5", null ], + [ "penify_hook.config_command.setup_config_parser", "namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/config__commands_8py.html b/docs-test-3rd-techno/html/config__commands_8py.html new file mode 100644 index 0000000..5b8c014 --- /dev/null +++ b/docs-test-3rd-techno/html/config__commands_8py.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/config_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
config_commands.py File Reference
+
+ +
+ + + + + diff --git a/docs-test-3rd-techno/html/config__commands_8py.js b/docs-test-3rd-techno/html/config__commands_8py.js new file mode 100644 index 0000000..24e7120 --- /dev/null +++ b/docs-test-3rd-techno/html/config__commands_8py.js @@ -0,0 +1,15 @@ +var config__commands_8py = +[ + [ "penify_hook.commands.config_commands.config_jira_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13", null ], + [ "penify_hook.commands.config_commands.config_llm_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62", null ], + [ "penify_hook.commands.config_commands.get_env_var_or_default", "namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87", null ], + [ "penify_hook.commands.config_commands.get_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2", null ], + [ "penify_hook.commands.config_commands.get_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0", null ], + [ "penify_hook.commands.config_commands.get_penify_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20", null ], + [ "penify_hook.commands.config_commands.get_token", "namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812", null ], + [ "penify_hook.commands.config_commands.load_env_files", "namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae", null ], + [ "penify_hook.commands.config_commands.save_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374", null ], + [ "penify_hook.commands.config_commands.save_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4", null ], + [ "penify_hook.commands.config_commands.DOTENV_AVAILABLE", "namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67", null ], + [ "penify_hook.commands.config_commands.path", "namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/conftest_8py.html b/docs-test-3rd-techno/html/conftest_8py.html new file mode 100644 index 0000000..9725188 --- /dev/null +++ b/docs-test-3rd-techno/html/conftest_8py.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/conftest.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
conftest.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  tests
 
namespace  tests.conftest
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/constants_8py.html b/docs-test-3rd-techno/html/constants_8py.html new file mode 100644 index 0000000..62a9651 --- /dev/null +++ b/docs-test-3rd-techno/html/constants_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/constants.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
constants.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.constants
 
+ + + + + +

+Variables

str penify_hook.constants.API_URL = 'http://localhost:8000/api'
 
str penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/constants_8py.js b/docs-test-3rd-techno/html/constants_8py.js new file mode 100644 index 0000000..f38739d --- /dev/null +++ b/docs-test-3rd-techno/html/constants_8py.js @@ -0,0 +1,5 @@ +var constants_8py = +[ + [ "penify_hook.constants.API_URL", "namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34", null ], + [ "penify_hook.constants.DASHBOARD_URL", "namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/cookie.js b/docs-test-3rd-techno/html/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs-test-3rd-techno/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs-test-3rd-techno/html/detailed-usage_8md.html b/docs-test-3rd-techno/html/detailed-usage_8md.html new file mode 100644 index 0000000..f8ab567 --- /dev/null +++ b/docs-test-3rd-techno/html/detailed-usage_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/detailed-usage.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.html b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.html new file mode 100644 index 0000000..7857b35 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.html @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests Directory Reference
+
+
+
+Directory dependency graph for tests:
+
+
+
+ + + + + + + + + + + + + + +

+Files

 __init__.py
 
 conftest.py
 
 test_commit_commands.py
 
 test_config_commands.py
 
 test_doc_commands.py
 
 test_web_config.py
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.js b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.js new file mode 100644 index 0000000..176f804 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c.js @@ -0,0 +1,9 @@ +var dir_063e2d5fe58a131099a7fe4200cca78c = +[ + [ "__init__.py", "tests_2____init_____8py.html", null ], + [ "conftest.py", "conftest_8py.html", null ], + [ "test_commit_commands.py", "test__commit__commands_8py.html", "test__commit__commands_8py" ], + [ "test_config_commands.py", "test__config__commands_8py.html", "test__config__commands_8py" ], + [ "test_doc_commands.py", "test__doc__commands_8py.html", "test__doc__commands_8py" ], + [ "test_web_config.py", "test__web__config_8py.html", "test__web__config_8py" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map new file mode 100644 index 0000000..f794c52 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 new file mode 100644 index 0000000..d29a556 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.md5 @@ -0,0 +1 @@ +a74d493add38d88c077fbc040ee53346 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg new file mode 100644 index 0000000..3167f63 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_063e2d5fe58a131099a7fe4200cca78c + + +tests + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg new file mode 100644 index 0000000..09c1fb8 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_063e2d5fe58a131099a7fe4200cca78c_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_063e2d5fe58a131099a7fe4200cca78c + + +tests + + + + + diff --git a/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623.html b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623.html new file mode 100644 index 0000000..618dc6a --- /dev/null +++ b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
docs Directory Reference
+
+
+
+Directory dependency graph for docs:
+
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.map b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.map new file mode 100644 index 0000000..ac6fd15 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 new file mode 100644 index 0000000..9100a5b --- /dev/null +++ b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.md5 @@ -0,0 +1 @@ +8efa12a11fdd9a2b2db506251cd13e6c \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.svg b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.svg new file mode 100644 index 0000000..9a350f0 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_1648a057408aae8db85b8e3797335623 + + +docs + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg new file mode 100644 index 0000000..4f7b6d6 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_1648a057408aae8db85b8e3797335623_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + + +dir_1648a057408aae8db85b8e3797335623 + + +docs + + + + + diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html new file mode 100644 index 0000000..4cd026d --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.html @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
commands Directory Reference
+
+
+
+Directory dependency graph for commands:
+
+
+
+ + + + + + + + + + + + + + +

+Files

 __init__.py
 
 auth_commands.py
 
 commit_commands.py
 
 config_commands.py
 
 doc_commands.py
 
 hook_commands.py
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js new file mode 100644 index 0000000..94925e7 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23.js @@ -0,0 +1,9 @@ +var dir_624fa2a8bce97f0444ac5cca335d4e23 = +[ + [ "__init__.py", "penify__hook_2commands_2____init_____8py.html", null ], + [ "auth_commands.py", "auth__commands_8py.html", "auth__commands_8py" ], + [ "commit_commands.py", "commit__commands_8py.html", "commit__commands_8py" ], + [ "config_commands.py", "config__commands_8py.html", "config__commands_8py" ], + [ "doc_commands.py", "doc__commands_8py.html", "doc__commands_8py" ], + [ "hook_commands.py", "hook__commands_8py.html", "hook__commands_8py" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map new file mode 100644 index 0000000..ea27c89 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 new file mode 100644 index 0000000..26a8990 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.md5 @@ -0,0 +1 @@ +c67772676d6a81b0d481b48e44e95fb0 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg new file mode 100644 index 0000000..eafaf7f --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + +penify_hook + + + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg new file mode 100644 index 0000000..d1a3001 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_624fa2a8bce97f0444ac5cca335d4e23_dep_org.svg @@ -0,0 +1,29 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + +penify_hook + + + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html b/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html new file mode 100644 index 0000000..9ff32c3 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.html @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli Directory Reference
+
+
+ + + + + + + + +

+Directories

 docs
 
 penify_hook
 
 tests
 
+ + + +

+Files

 setup.py
 
+

Detailed Description

+

Tests Coverage

+

A CLI tool to generate smart commit messages, code documentation, and more.

+

+Features

+
    +
  • Automatically generate documentation for your code
  • +
  • Support for multiple programming languages
  • +
  • Git hook integration for automatic documentation on commits
  • +
  • Folder and file analysis
  • +
+

+Installation

+

Install from PyPI:

+
pip install penify
+

+Usage

+

Penify CLI provides several subcommands for different functionalities, organized into basic commands (no login required) and advanced commands (login required).

+

+Basic Commands (No login required)

+

+Commit

+

Generate smart commit messages using local LLM:

+
penify commit [-m "Optional message"] [-e] [-d]
+

Options:

    +
  • -m, --message: Optional custom commit message
  • +
  • -e, --terminal: Open editor to modify commit message before committing
  • +
  • -d, --description: Generate commit message with both title and description (without this flag, only title is generated)
  • +
+

+Config

+

Configure local LLM and JIRA settings:

+
# Configure LLM settings
+
penify config llm --model MODEL_NAME [--api-base API_URL] [--api-key API_KEY]
+
+
# Configure LLM settings through web interface
+
penify config llm-web
+
+
# Configure JIRA settings
+
penify config jira --url JIRA_URL --username USERNAME --api-token TOKEN [--verify]
+
+
# Configure JIRA settings through web interface
+
penify config jira-web
+

+Advanced Commands (Login required)

+

+Login

+

To log in and obtain an API token:

+
penify login
+

This command will open a browser window for authentication. After successful login, the API key will be saved locally for future use.

+

+Documentation Generation

+

Generate documentation for Git diff, files or folders:

+
# Generate documentation for latest Git commit diff
+
penify docgen
+
+
# Generate documentation for specific file or folder
+
penify docgen -l /path/to/file/or/folder
+

Options:

    +
  • -l, --location: Path to specific file or folder for documentation generation (defaults to current directory)
  • +
+

+Git Hook Management

+

Install or uninstall Git post-commit hooks:

+
# Install Git hook
+
penify docgen install-hook [-l /path/to/repo]
+
+
# Uninstall Git hook
+
penify docgen uninstall-hook [-l /path/to/repo]
+

Options:

    +
  • -l, --location: Path to the Git repository (defaults to current directory)
  • +
+

+Authentication

+

Penify CLI uses an API token for authentication with advanced features.

+

If no token is available and you try to access an advanced feature, you'll be prompted to log in.

+

+Local LLM Configuration

+

For commit message generation, Penify can use a local LLM. Configure it using:

+
penify config llm --model MODEL_NAME --api-base API_URL --api-key API_KEY
+

Common configurations:

+

+JIRA Integration

+

Configure JIRA integration to enhance commit messages with issue details:

+
penify config jira --url https://your-domain.atlassian.net --username your-email@example.com --api-token YOUR_API_TOKEN
+

+Development

+

To set up the development environment:

+
    +
  1. Clone the repository:
    git clone https://github.com/SingularityX-ai/penify-cli.git
    +
  2. +
  3. Install the package in editable mode:
    pip install -e .
    +
  4. +
+

+Running Tests

+
pytest
+

+License

+

This project is licensed under the MIT License.

+

+Author

+

Suman Saurabh (ss.su.nosp@m.mans.nosp@m.aurab.nosp@m.h92@.nosp@m.gmail.nosp@m..com)

+

+Contributing

+

Contributions are welcome! Please feel free to submit a Pull Request.

+

+Issues

+

If you encounter any problems or have suggestions, please file an issue on the GitHub repository.

+

+Support

+

For automated API Documentation, Architecture Documentation, Code Documentation, Pull Request Documentation, or if you need a demo, please join our Discord support channel.

+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js b/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js new file mode 100644 index 0000000..f7aa196 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_b3b22d2ab7966b65f6b237e3231b41be.js @@ -0,0 +1,7 @@ +var dir_b3b22d2ab7966b65f6b237e3231b41be = +[ + [ "docs", "dir_1648a057408aae8db85b8e3797335623.html", null ], + [ "penify_hook", "dir_f88c3381c1861b3f7ca1f3d63cf244b5.html", "dir_f88c3381c1861b3f7ca1f3d63cf244b5" ], + [ "tests", "dir_063e2d5fe58a131099a7fe4200cca78c.html", "dir_063e2d5fe58a131099a7fe4200cca78c" ], + [ "setup.py", "setup_8py.html", "setup_8py" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html new file mode 100644 index 0000000..31d7a8c --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify_hook Directory Reference
+
+
+
+Directory dependency graph for penify_hook:
+
+
+
+ + + + +

+Directories

 commands
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 __init__.py
 
 api_client.py
 
 base_analyzer.py
 
 commit_analyzer.py
 
 config_command.py
 
 constants.py
 
 file_analyzer.py
 
 folder_analyzer.py
 
 git_analyzer.py
 
 jira_client.py
 
 llm_client.py
 
 login_command.py
 
 main.py
 
 ui_utils.py
 
 utils.py
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js new file mode 100644 index 0000000..1be563a --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5.js @@ -0,0 +1,19 @@ +var dir_f88c3381c1861b3f7ca1f3d63cf244b5 = +[ + [ "commands", "dir_624fa2a8bce97f0444ac5cca335d4e23.html", "dir_624fa2a8bce97f0444ac5cca335d4e23" ], + [ "__init__.py", "penify__hook_2____init_____8py.html", null ], + [ "api_client.py", "api__client_8py.html", "api__client_8py" ], + [ "base_analyzer.py", "base__analyzer_8py.html", "base__analyzer_8py" ], + [ "commit_analyzer.py", "commit__analyzer_8py.html", "commit__analyzer_8py" ], + [ "config_command.py", "config__command_8py.html", "config__command_8py" ], + [ "constants.py", "constants_8py.html", "constants_8py" ], + [ "file_analyzer.py", "file__analyzer_8py.html", "file__analyzer_8py" ], + [ "folder_analyzer.py", "folder__analyzer_8py.html", "folder__analyzer_8py" ], + [ "git_analyzer.py", "git__analyzer_8py.html", "git__analyzer_8py" ], + [ "jira_client.py", "jira__client_8py.html", "jira__client_8py" ], + [ "llm_client.py", "llm__client_8py.html", "llm__client_8py" ], + [ "login_command.py", "login__command_8py.html", "login__command_8py" ], + [ "main.py", "main_8py.html", "main_8py" ], + [ "ui_utils.py", "ui__utils_8py.html", "ui__utils_8py" ], + [ "utils.py", "utils_8py.html", "utils_8py" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map new file mode 100644 index 0000000..66a1ea9 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 new file mode 100644 index 0000000..0b05f93 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.md5 @@ -0,0 +1 @@ +e96b19bd5072094211274c24b1ca89a3 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg new file mode 100644 index 0000000..ee63fb6 --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + + + + + + +dir_f88c3381c1861b3f7ca1f3d63cf244b5 +penify_hook + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg new file mode 100644 index 0000000..266bbfb --- /dev/null +++ b/docs-test-3rd-techno/html/dir_f88c3381c1861b3f7ca1f3d63cf244b5_dep_org.svg @@ -0,0 +1,41 @@ + + + + + + +/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook + +clusterdir_b3b22d2ab7966b65f6b237e3231b41be + + +penify-cli + + + + +clusterdir_f88c3381c1861b3f7ca1f3d63cf244b5 + + + + + + + +dir_f88c3381c1861b3f7ca1f3d63cf244b5 +penify_hook + + + +dir_624fa2a8bce97f0444ac5cca335d4e23 + + +commands + + + + + diff --git a/docs-test-3rd-techno/html/doc.svg b/docs-test-3rd-techno/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs-test-3rd-techno/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/doc__commands_8md.html b/docs-test-3rd-techno/html/doc__commands_8md.html new file mode 100644 index 0000000..78a4a9f --- /dev/null +++ b/docs-test-3rd-techno/html/doc__commands_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/doc_commands.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/doc__commands_8py.html b/docs-test-3rd-techno/html/doc__commands_8py.html new file mode 100644 index 0000000..e95c46a --- /dev/null +++ b/docs-test-3rd-techno/html/doc__commands_8py.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/doc_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
doc_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.doc_commands
 
+ + + + + + + +

+Functions

 penify_hook.commands.doc_commands.generate_doc (api_url, token, location=None)
 
 penify_hook.commands.doc_commands.setup_docgen_parser (parser)
 
 penify_hook.commands.doc_commands.handle_docgen (args)
 
+ + + +

+Variables

str penify_hook.commands.doc_commands.docgen_description
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/doc__commands_8py.js b/docs-test-3rd-techno/html/doc__commands_8py.js new file mode 100644 index 0000000..4767b3a --- /dev/null +++ b/docs-test-3rd-techno/html/doc__commands_8py.js @@ -0,0 +1,7 @@ +var doc__commands_8py = +[ + [ "penify_hook.commands.doc_commands.generate_doc", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7", null ], + [ "penify_hook.commands.doc_commands.handle_docgen", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc", null ], + [ "penify_hook.commands.doc_commands.setup_docgen_parser", "namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6", null ], + [ "penify_hook.commands.doc_commands.docgen_description", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/docd.svg b/docs-test-3rd-techno/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs-test-3rd-techno/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/doxygen-awesome-darkmode-toggle.js b/docs-test-3rd-techno/html/doxygen-awesome-darkmode-toggle.js new file mode 100644 index 0000000..40fe2d3 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-darkmode-toggle.js @@ -0,0 +1,157 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +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. + +*/ + +class DoxygenAwesomeDarkModeToggle extends HTMLElement { + // SVG icons from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static lightModeIcon = `` + static darkModeIcon = `` + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + toggleButton.title = DoxygenAwesomeDarkModeToggle.title + toggleButton.updateIcon() + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + toggleButton.updateIcon() + }) + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + $(window).resize(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + } + + static set userPreference(userPreference) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference + if(!userPreference) { + if(DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + } + } + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() + } + + static enableDarkMode(enable) { + if(enable) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + } + + static onSystemPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference + this.updateIcon() + } + + updateIcon() { + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon + } else { + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon + } + } +} + +customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/docs-test-3rd-techno/html/doxygen-awesome-fragment-copy-button.js b/docs-test-3rd-techno/html/doxygen-awesome-fragment-copy-button.js new file mode 100644 index 0000000..86c16fd --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-fragment-copy-button.js @@ -0,0 +1,85 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +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. + +*/ + +class DoxygenAwesomeFragmentCopyButton extends HTMLElement { + constructor() { + super(); + this.onclick=this.copyContent + } + static title = "Copy to clipboard" + static copyIcon = `` + static successIcon = `` + static successDuration = 980 + static init() { + $(function() { + $(document).ready(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const fragmentWrapper = document.createElement("div") + fragmentWrapper.className = "doxygen-awesome-fragment-wrapper" + const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button") + fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title + + fragment.parentNode.replaceChild(fragmentWrapper, fragment) + fragmentWrapper.appendChild(fragment) + fragmentWrapper.appendChild(fragmentCopyButton) + + } + } + }) + }) + } + + + copyContent() { + const content = this.previousSibling.cloneNode(true) + // filter out line number from file listings + content.querySelectorAll(".lineno, .ttc").forEach((node) => { + node.remove() + }) + let textContent = content.textContent + // remove trailing newlines that appear in file listings + let numberOfTrailingNewlines = 0 + while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') { + numberOfTrailingNewlines++; + } + textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines) + navigator.clipboard.writeText(textContent); + this.classList.add("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon + window.setTimeout(() => { + this.classList.remove("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + }, DoxygenAwesomeFragmentCopyButton.successDuration); + } +} + +customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton) diff --git a/docs-test-3rd-techno/html/doxygen-awesome-interactive-toc.js b/docs-test-3rd-techno/html/doxygen-awesome-interactive-toc.js new file mode 100644 index 0000000..20a9669 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-interactive-toc.js @@ -0,0 +1,81 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +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. + +*/ + +class DoxygenAwesomeInteractiveToc { + static topOffset = 38 + static hideMobileMenu = true + static headers = [] + + static init() { + window.addEventListener("load", () => { + let toc = document.querySelector(".contents > .toc") + if(toc) { + toc.classList.add("interactive") + if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) { + toc.classList.add("open") + } + document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => { + if(toc.classList.contains("open")) { + toc.classList.remove("open") + } else { + toc.classList.add("open") + } + }) + + document.querySelectorAll(".contents > .toc > ul a").forEach((node) => { + let id = node.getAttribute("href").substring(1) + DoxygenAwesomeInteractiveToc.headers.push({ + node: node, + headerNode: document.getElementById(id) + }) + + document.getElementById("doc-content")?.addEventListener("scroll", () => { + DoxygenAwesomeInteractiveToc.update() + }) + }) + DoxygenAwesomeInteractiveToc.update() + } + }) + } + + static update() { + let active = DoxygenAwesomeInteractiveToc.headers[0]?.node + DoxygenAwesomeInteractiveToc.headers.forEach((header) => { + let position = header.headerNode.getBoundingClientRect().top + header.node.classList.remove("active") + header.node.classList.remove("aboveActive") + if(position < DoxygenAwesomeInteractiveToc.topOffset) { + active = header.node + active?.classList.add("aboveActive") + } + }) + active?.classList.add("active") + active?.classList.remove("aboveActive") + } +} \ No newline at end of file diff --git a/docs-test-3rd-techno/html/doxygen-awesome-paragraph-link.js b/docs-test-3rd-techno/html/doxygen-awesome-paragraph-link.js new file mode 100644 index 0000000..e53d132 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-paragraph-link.js @@ -0,0 +1,51 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +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. + +*/ + +class DoxygenAwesomeParagraphLink { + // Icon from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static icon = `` + static title = "Permanent Link" + static init() { + $(function() { + $(document).ready(function() { + document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { + let anchorlink = document.createElement("a") + anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) + anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) + anchorlink.classList.add("anchorlink") + node.classList.add("anchor") + anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon + node.parentElement.appendChild(anchorlink) + }) + }) + }) + } +} diff --git a/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only-darkmode-toggle.css b/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only-darkmode-toggle.css new file mode 100644 index 0000000..d207446 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only-darkmode-toggle.css @@ -0,0 +1,40 @@ + +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +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. + +*/ + +@media screen and (min-width: 768px) { + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height)); + } +} diff --git a/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only.css b/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only.css new file mode 100644 index 0000000..853f6d6 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +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. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/docs-test-3rd-techno/html/doxygen-awesome-tabs.js b/docs-test-3rd-techno/html/doxygen-awesome-tabs.js new file mode 100644 index 0000000..06dfd3d --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome-tabs.js @@ -0,0 +1,90 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2023 jothepro + +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. + +*/ + +class DoxygenAwesomeTabs { + + static init() { + window.addEventListener("load", () => { + document.querySelectorAll(".tabbed:not(:empty)").forEach((tabbed, tabbedIndex) => { + let tabLinkList = [] + tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => { + tab.id = "tab_" + tabbedIndex + "_" + tabIndex + let header = tab.querySelector(".tab-title") + let tabLink = document.createElement("button") + tabLink.classList.add("tab-button") + tabLink.appendChild(header) + header.title = header.textContent + tabLink.addEventListener("click", () => { + tabbed.querySelectorAll(":scope > ul > li").forEach((tab) => { + tab.classList.remove("selected") + }) + tabLinkList.forEach((tabLink) => { + tabLink.classList.remove("active") + }) + tab.classList.add("selected") + tabLink.classList.add("active") + }) + tabLinkList.push(tabLink) + if(tabIndex == 0) { + tab.classList.add("selected") + tabLink.classList.add("active") + } + }) + let tabsOverview = document.createElement("div") + tabsOverview.classList.add("tabs-overview") + let tabsOverviewContainer = document.createElement("div") + tabsOverviewContainer.classList.add("tabs-overview-container") + tabLinkList.forEach((tabLink) => { + tabsOverview.appendChild(tabLink) + }) + tabsOverviewContainer.appendChild(tabsOverview) + tabbed.before(tabsOverviewContainer) + + function resize() { + let maxTabHeight = 0 + tabbed.querySelectorAll(":scope > ul > li").forEach((tab, tabIndex) => { + let visibility = tab.style.display + tab.style.display = "block" + maxTabHeight = Math.max(tab.offsetHeight, maxTabHeight) + tab.style.display = visibility + }) + tabbed.style.height = `${maxTabHeight + 10}px` + } + + resize() + new ResizeObserver(resize).observe(tabbed) + }) + }) + + } + + static resize(tabbed) { + + } +} \ No newline at end of file diff --git a/docs-test-3rd-techno/html/doxygen-awesome.css b/docs-test-3rd-techno/html/doxygen-awesome.css new file mode 100644 index 0000000..a44945b --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen-awesome.css @@ -0,0 +1,2675 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +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. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/docs-test-3rd-techno/html/doxygen.css b/docs-test-3rd-techno/html/doxygen.css new file mode 100644 index 0000000..90fba19 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen.css @@ -0,0 +1,1849 @@ +/* The standard CSS for doxygen 1.13.2*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +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; +} + +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 { + 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: white; + 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; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +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.even { + background-color: white; +} + +.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: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +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.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#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; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + 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.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + 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.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 { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +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; + width: 104px; +} + +.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.xmlcdata { + color: black; +} + +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; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + 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; +} + +.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; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + 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; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* 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; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.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: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + 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.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.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; + line-height: normal; + 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.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @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 { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + 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, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.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; + 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:#283A5D; + 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; + 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: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.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: #2A3D61; + 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.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 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.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +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; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") 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; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,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[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +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; + */ +} + +span.obfuscator { + display: none; +} + +.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;*/ + color: black; + 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 a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#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: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + 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: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + 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: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + 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 +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs-test-3rd-techno/html/doxygen.svg b/docs-test-3rd-techno/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/doxygen_crawl.html b/docs-test-3rd-techno/html/doxygen_crawl.html new file mode 100644 index 0000000..e9e4423 --- /dev/null +++ b/docs-test-3rd-techno/html/doxygen_crawl.html @@ -0,0 +1,447 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/dynsections.js b/docs-test-3rd-techno/html/dynsections.js new file mode 100644 index 0000000..3cc426a --- /dev/null +++ b/docs-test-3rd-techno/html/dynsections.js @@ -0,0 +1,198 @@ +/* + @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) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const 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; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs-test-3rd-techno/html/example-workflows_8md.html b/docs-test-3rd-techno/html/example-workflows_8md.html new file mode 100644 index 0000000..9b6b4a2 --- /dev/null +++ b/docs-test-3rd-techno/html/example-workflows_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/example-workflows.md File Reference
+
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/file__analyzer_8py.html b/docs-test-3rd-techno/html/file__analyzer_8py.html new file mode 100644 index 0000000..a89b9c1 --- /dev/null +++ b/docs-test-3rd-techno/html/file__analyzer_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/file_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
file_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.file_analyzer.FileAnalyzerGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.file_analyzer
 
+ + + +

+Variables

 penify_hook.file_analyzer.logger = logging.getLogger(__name__)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/file__analyzer_8py.js b/docs-test-3rd-techno/html/file__analyzer_8py.js new file mode 100644 index 0000000..5890a99 --- /dev/null +++ b/docs-test-3rd-techno/html/file__analyzer_8py.js @@ -0,0 +1,5 @@ +var file__analyzer_8py = +[ + [ "penify_hook.file_analyzer.FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ], + [ "penify_hook.file_analyzer.logger", "namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/files.html b/docs-test-3rd-techno/html/files.html new file mode 100644 index 0000000..8982481 --- /dev/null +++ b/docs-test-3rd-techno/html/files.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: File List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+ +
+ + + + + diff --git a/docs-test-3rd-techno/html/files_dup.js b/docs-test-3rd-techno/html/files_dup.js new file mode 100644 index 0000000..dd5a1a9 --- /dev/null +++ b/docs-test-3rd-techno/html/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "penify-cli", "dir_b3b22d2ab7966b65f6b237e3231b41be.html", "dir_b3b22d2ab7966b65f6b237e3231b41be" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/folder__analyzer_8py.html b/docs-test-3rd-techno/html/folder__analyzer_8py.html new file mode 100644 index 0000000..354e753 --- /dev/null +++ b/docs-test-3rd-techno/html/folder__analyzer_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/folder_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
folder_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.folder_analyzer.FolderAnalyzerGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.folder_analyzer
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/folder__analyzer_8py.js b/docs-test-3rd-techno/html/folder__analyzer_8py.js new file mode 100644 index 0000000..f51e8e5 --- /dev/null +++ b/docs-test-3rd-techno/html/folder__analyzer_8py.js @@ -0,0 +1,4 @@ +var folder__analyzer_8py = +[ + [ "penify_hook.folder_analyzer.FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/folderclosed.svg b/docs-test-3rd-techno/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs-test-3rd-techno/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/folderclosedd.svg b/docs-test-3rd-techno/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs-test-3rd-techno/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/folderopen.svg b/docs-test-3rd-techno/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs-test-3rd-techno/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/folderopend.svg b/docs-test-3rd-techno/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs-test-3rd-techno/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/functions.html b/docs-test-3rd-techno/html/functions.html new file mode 100644 index 0000000..59fe140 --- /dev/null +++ b/docs-test-3rd-techno/html/functions.html @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- j -

+ + +

- l -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/functions_func.html b/docs-test-3rd-techno/html/functions_func.html new file mode 100644 index 0000000..7d30023 --- /dev/null +++ b/docs-test-3rd-techno/html/functions_func.html @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members - Functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/functions_vars.html b/docs-test-3rd-techno/html/functions_vars.html new file mode 100644 index 0000000..a94e856 --- /dev/null +++ b/docs-test-3rd-techno/html/functions_vars.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Members - Variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/git__analyzer_8py.html b/docs-test-3rd-techno/html/git__analyzer_8py.html new file mode 100644 index 0000000..f462e6e --- /dev/null +++ b/docs-test-3rd-techno/html/git__analyzer_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/git_analyzer.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
git_analyzer.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.git_analyzer.GitDocGenHook
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.git_analyzer
 
+ + + +

+Variables

 penify_hook.git_analyzer.logger = logging.getLogger(__name__)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/git__analyzer_8py.js b/docs-test-3rd-techno/html/git__analyzer_8py.js new file mode 100644 index 0000000..5aa8368 --- /dev/null +++ b/docs-test-3rd-techno/html/git__analyzer_8py.js @@ -0,0 +1,5 @@ +var git__analyzer_8py = +[ + [ "penify_hook.git_analyzer.GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ], + [ "penify_hook.git_analyzer.logger", "namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/graph_legend.html b/docs-test-3rd-techno/html/graph_legend.html new file mode 100644 index 0000000..ce636c6 --- /dev/null +++ b/docs-test-3rd-techno/html/graph_legend.html @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Graph Legend + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/graph_legend.md5 b/docs-test-3rd-techno/html/graph_legend.md5 new file mode 100644 index 0000000..34a71d6 --- /dev/null +++ b/docs-test-3rd-techno/html/graph_legend.md5 @@ -0,0 +1 @@ +238bc3d95adc1929b3259d0c39010ed6 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/graph_legend.svg b/docs-test-3rd-techno/html/graph_legend.svg new file mode 100644 index 0000000..f90d1bf --- /dev/null +++ b/docs-test-3rd-techno/html/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/docs-test-3rd-techno/html/hierarchy.html b/docs-test-3rd-techno/html/hierarchy.html new file mode 100644 index 0000000..59f5e8d --- /dev/null +++ b/docs-test-3rd-techno/html/hierarchy.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/docs-test-3rd-techno/html/hierarchy.js b/docs-test-3rd-techno/html/hierarchy.js new file mode 100644 index 0000000..6af7a4f --- /dev/null +++ b/docs-test-3rd-techno/html/hierarchy.js @@ -0,0 +1,18 @@ +var hierarchy = +[ + [ "penify_hook.api_client.APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", null ], + [ "penify_hook.base_analyzer.BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", [ + [ "penify_hook.commit_analyzer.CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", null ], + [ "penify_hook.file_analyzer.FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", null ], + [ "penify_hook.folder_analyzer.FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", null ], + [ "penify_hook.git_analyzer.GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", null ] + ] ], + [ "Exception", "classException.html", [ + [ "penify_hook.utils.GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ] + ] ], + [ "penify_hook.jira_client.JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", null ], + [ "penify_hook.llm_client.LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", null ], + [ "tests.test_commit_commands.TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", null ], + [ "tests.test_config_commands.TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", null ], + [ "tests.test_web_config.TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/hook__commands_8py.html b/docs-test-3rd-techno/html/hook__commands_8py.html new file mode 100644 index 0000000..b981abe --- /dev/null +++ b/docs-test-3rd-techno/html/hook__commands_8py.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/hook_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
hook_commands.py File Reference
+
+
+ + + + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.commands
 
namespace  penify_hook.commands.hook_commands
 
+ + + + + +

+Functions

 penify_hook.commands.hook_commands.install_git_hook (location, token)
 
 penify_hook.commands.hook_commands.uninstall_git_hook (location)
 
+ + + + + +

+Variables

str penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"
 
str penify_hook.commands.hook_commands.HOOK_TEMPLATE
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/hook__commands_8py.js b/docs-test-3rd-techno/html/hook__commands_8py.js new file mode 100644 index 0000000..d8d8532 --- /dev/null +++ b/docs-test-3rd-techno/html/hook__commands_8py.js @@ -0,0 +1,7 @@ +var hook__commands_8py = +[ + [ "penify_hook.commands.hook_commands.install_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135", null ], + [ "penify_hook.commands.hook_commands.uninstall_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443", null ], + [ "penify_hook.commands.hook_commands.HOOK_FILENAME", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c", null ], + [ "penify_hook.commands.hook_commands.HOOK_TEMPLATE", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/index.html b/docs-test-3rd-techno/html/index.html new file mode 100644 index 0000000..52c3cc5 --- /dev/null +++ b/docs-test-3rd-techno/html/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Main Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli Documentation
+
+
+ +
+
+ + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_0.map b/docs-test-3rd-techno/html/inherit_graph_0.map new file mode 100644 index 0000000..406384b --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_0.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_0.md5 b/docs-test-3rd-techno/html/inherit_graph_0.md5 new file mode 100644 index 0000000..ea96ec0 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_0.md5 @@ -0,0 +1 @@ +3eb6427f44b1f537abaa72acbefc02c8 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_0.svg b/docs-test-3rd-techno/html/inherit_graph_0.svg new file mode 100644 index 0000000..44609dd --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_0.svg @@ -0,0 +1,40 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Exception + + + + + +Node1 + + +penify_hook.utils.GitRepo +NotFoundError + + + + + +Node0->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_1.map b/docs-test-3rd-techno/html/inherit_graph_1.map new file mode 100644 index 0000000..a3a551d --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_1.md5 b/docs-test-3rd-techno/html/inherit_graph_1.md5 new file mode 100644 index 0000000..f27860d --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_1.md5 @@ -0,0 +1 @@ +30ab7e0f934acf6ce02c608f7b130af8 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_1.svg b/docs-test-3rd-techno/html/inherit_graph_1.svg new file mode 100644 index 0000000..9381d53 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_1.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.api_client.APIClient + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_2.map b/docs-test-3rd-techno/html/inherit_graph_2.map new file mode 100644 index 0000000..5adb40c --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_2.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_2.md5 b/docs-test-3rd-techno/html/inherit_graph_2.md5 new file mode 100644 index 0000000..c36e284 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_2.md5 @@ -0,0 +1 @@ +874705f4d60bd6db03044e05449f2c1a \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_2.svg b/docs-test-3rd-techno/html/inherit_graph_2.svg new file mode 100644 index 0000000..21b60f3 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_2.svg @@ -0,0 +1,98 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.base_analyzer. +BaseAnalyzer + + + + + +Node1 + + +penify_hook.commit +_analyzer.CommitDocGenHook + + + + + +Node0->Node1 + + + + + + + + +Node2 + + +penify_hook.file_analyzer. +FileAnalyzerGenHook + + + + + +Node0->Node2 + + + + + + + + +Node3 + + +penify_hook.folder +_analyzer.FolderAnalyzerGenHook + + + + + +Node0->Node3 + + + + + + + + +Node4 + + +penify_hook.git_analyzer. +GitDocGenHook + + + + + +Node0->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_3.map b/docs-test-3rd-techno/html/inherit_graph_3.map new file mode 100644 index 0000000..69418a3 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_3.md5 b/docs-test-3rd-techno/html/inherit_graph_3.md5 new file mode 100644 index 0000000..bf0a2c8 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_3.md5 @@ -0,0 +1 @@ +af6bb0b4f75102cbee5ca7be41f73a3a \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_3.svg b/docs-test-3rd-techno/html/inherit_graph_3.svg new file mode 100644 index 0000000..ea65e68 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_3.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.jira_client. +JiraClient + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_4.map b/docs-test-3rd-techno/html/inherit_graph_4.map new file mode 100644 index 0000000..030b056 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_4.md5 b/docs-test-3rd-techno/html/inherit_graph_4.md5 new file mode 100644 index 0000000..ffe5e19 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_4.md5 @@ -0,0 +1 @@ +889026fbb54979a4167ba59a47d79890 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_4.svg b/docs-test-3rd-techno/html/inherit_graph_4.svg new file mode 100644 index 0000000..1f83fb0 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_4.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +penify_hook.llm_client.LLMClient + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_5.map b/docs-test-3rd-techno/html/inherit_graph_5.map new file mode 100644 index 0000000..c211868 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_5.md5 b/docs-test-3rd-techno/html/inherit_graph_5.md5 new file mode 100644 index 0000000..9ad4789 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_5.md5 @@ -0,0 +1 @@ +70fd9fd520f30c258462f2b03b683a94 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_5.svg b/docs-test-3rd-techno/html/inherit_graph_5.svg new file mode 100644 index 0000000..aab0886 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_5.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_commit_commands. +TestCommitCommands + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_6.map b/docs-test-3rd-techno/html/inherit_graph_6.map new file mode 100644 index 0000000..6e6be2f --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_6.md5 b/docs-test-3rd-techno/html/inherit_graph_6.md5 new file mode 100644 index 0000000..da0026d --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_6.md5 @@ -0,0 +1 @@ +50eefd0e039ff697d7ac30f0ea20cb79 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_6.svg b/docs-test-3rd-techno/html/inherit_graph_6.svg new file mode 100644 index 0000000..fddd160 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_6.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_config_commands. +TestConfigCommands + + + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_7.map b/docs-test-3rd-techno/html/inherit_graph_7.map new file mode 100644 index 0000000..31cf321 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/docs-test-3rd-techno/html/inherit_graph_7.md5 b/docs-test-3rd-techno/html/inherit_graph_7.md5 new file mode 100644 index 0000000..ac4cccf --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_7.md5 @@ -0,0 +1 @@ +3b375f5c24cefc177dd2f4d4819b5727 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/inherit_graph_7.svg b/docs-test-3rd-techno/html/inherit_graph_7.svg new file mode 100644 index 0000000..541f678 --- /dev/null +++ b/docs-test-3rd-techno/html/inherit_graph_7.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +tests.test_web_config.Test +WebConfig + + + + + diff --git a/docs-test-3rd-techno/html/inherits.html b/docs-test-3rd-techno/html/inherits.html new file mode 100644 index 0000000..a341c12 --- /dev/null +++ b/docs-test-3rd-techno/html/inherits.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + +
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/jira__client_8py.html b/docs-test-3rd-techno/html/jira__client_8py.html new file mode 100644 index 0000000..bea7f5a --- /dev/null +++ b/docs-test-3rd-techno/html/jira__client_8py.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/jira_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jira_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.jira_client.JiraClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.jira_client
 
+ + + +

+Variables

bool penify_hook.jira_client.JIRA_AVAILABLE = True
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/jira__client_8py.js b/docs-test-3rd-techno/html/jira__client_8py.js new file mode 100644 index 0000000..f2f0342 --- /dev/null +++ b/docs-test-3rd-techno/html/jira__client_8py.js @@ -0,0 +1,5 @@ +var jira__client_8py = +[ + [ "penify_hook.jira_client.JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ], + [ "penify_hook.jira_client.JIRA_AVAILABLE", "namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/jquery.js b/docs-test-3rd-techno/html/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs-test-3rd-techno/html/jquery.js @@ -0,0 +1,204 @@ +/*! 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?"�":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 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},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;n").css({overflow:"hidden",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,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),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(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(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),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".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=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),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=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-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")];e<4;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;e").css({overflow:"hidden"}),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:++e.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;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,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}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=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"},$}); diff --git a/docs-test-3rd-techno/html/llm__client_8py.html b/docs-test-3rd-techno/html/llm__client_8py.html new file mode 100644 index 0000000..c812d72 --- /dev/null +++ b/docs-test-3rd-techno/html/llm__client_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/llm_client.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
llm_client.py File Reference
+
+
+ + + + +

+Classes

class  penify_hook.llm_client.LLMClient
 
+ + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.llm_client
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/llm__client_8py.js b/docs-test-3rd-techno/html/llm__client_8py.js new file mode 100644 index 0000000..afd0616 --- /dev/null +++ b/docs-test-3rd-techno/html/llm__client_8py.js @@ -0,0 +1,4 @@ +var llm__client_8py = +[ + [ "penify_hook.llm_client.LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/login__command_8py.html b/docs-test-3rd-techno/html/login__command_8py.html new file mode 100644 index 0000000..ccca2c7 --- /dev/null +++ b/docs-test-3rd-techno/html/login__command_8py.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/login_command.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
login_command.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.login_command
 
+ + + + + +

+Functions

 penify_hook.login_command.setup_login_parser (parser)
 
 penify_hook.login_command.handle_login (args)
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/login__command_8py.js b/docs-test-3rd-techno/html/login__command_8py.js new file mode 100644 index 0000000..f2fc81c --- /dev/null +++ b/docs-test-3rd-techno/html/login__command_8py.js @@ -0,0 +1,5 @@ +var login__command_8py = +[ + [ "penify_hook.login_command.handle_login", "namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411", null ], + [ "penify_hook.login_command.setup_login_parser", "namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/main_8py.html b/docs-test-3rd-techno/html/main_8py.html new file mode 100644 index 0000000..6d0e30b --- /dev/null +++ b/docs-test-3rd-techno/html/main_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/main.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
main.py File Reference
+
+
+ + + + + + +

+Namespaces

namespace  penify_hook
 
namespace  penify_hook.main
 
+ + + +

+Functions

 penify_hook.main.main ()
 
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/main_8py.js b/docs-test-3rd-techno/html/main_8py.js new file mode 100644 index 0000000..fac2812 --- /dev/null +++ b/docs-test-3rd-techno/html/main_8py.js @@ -0,0 +1,4 @@ +var main_8py = +[ + [ "penify_hook.main.main", "namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html new file mode 100644 index 0000000..6a4097d --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Commit Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Commit Commands
+
+
+

+

The commit command allows you to generate smart, AI-powered commit messages for your Git changes. This document explains all available options and combinations.

+

+Basic Usage

+
penify commit
+

By default, this command:

    +
  • Analyzes your staged Git changes
  • +
  • Generates a concise commit title only
  • +
  • Uses local LLM if configured, or falls back to Penify API
  • +
+

+Command Options

+

+-m, --message

+

Provide context for the commit message generation:

+
penify commit -m "Fix login flow"
+

This hint helps the AI understand your intention and improves the quality of the generated message.

+

+-e, --terminal

+

Open an editor to review and edit the generated commit message before committing:

+
penify commit -e
+

This opens your default Git editor with the generated message for review.

+

+-d, --description

+

Generate a detailed commit message with both title and description:

+
penify commit -d
+

Without this flag, only the commit title is generated.

+

+Option Combinations

+

You can combine these options for different workflows:

+

+Generate Title Only with Context

+
penify commit -m "Update login UI"
+

+Generate Title and Description with Context

+
penify commit -m "Update login UI" -d
+

+Generate and Edit Full Commit Message

+
penify commit -d -e
+

+Generate, Edit, and Provide Context

+
penify commit -m "Refactor authentication" -d -e
+

+LLM and JIRA Integration

+

+Using Local LLM

+

If you've configured a local LLM using penify config llm, the commit command will automatically use it for message generation.

+

Benefits:

    +
  • Privacy: your code changes don't leave your machine
  • +
  • Speed: no network latency
  • +
  • Works offline
  • +
+

+JIRA Enhancement

+

If you've configured JIRA integration using penify config jira, the commit command will:

+
    +
  1. Detect JIRA issue references in your changes
  2. +
  3. Fetch issue details from your JIRA instance
  4. +
  5. Include issue information in the commit message
  6. +
  7. Format the commit message according to JIRA's smart commit format
  8. +
+

Example output:

PROJ-123: Fix authentication bug in login flow
+
+
- Updated OAuth token validation
+
- Fixed session timeout handling
+
- Added unit tests for edge cases
+
+
[PROJ-123]
+

+Configuration Requirements

+

For the commit command to work:

+
    +
  1. You must have configured either:
      +
    • Local LLM via penify config llm, OR
    • +
    • Logged in via penify login
    • +
    +
  2. +
  3. For JIRA enhancement (optional):
      +
    • Configure JIRA via penify config jira
    • +
    +
  4. +
+

+Examples

+

+Basic Commit with Default Settings

+
# Stage your changes
+
git add .
+
+
# Generate commit message
+
penify commit
+
+
# Commit with the generated message
+
git commit -m "Generated message here"
+

+Full Workflow with All Features

+
# Stage your changes
+
git add .
+
+
# Generate detailed commit message with JIRA integration,
+
# provide context, and open editor for review
+
penify commit -m "Fix login issue" -d -e
+
+
# The commit is automatically completed after you save and exit the editor
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "No LLM model or API token provided"
      +
    • Run penify config llm to configure a local LLM, or
    • +
    • Run penify login to authenticate with Penify
    • +
    +
  2. +
  3. "Failed to connect to JIRA"
      +
    • Check your JIRA configuration with cat ~/.penify
    • +
    • Verify your network connection
    • +
    • Ensure your JIRA credentials are valid
    • +
    +
  4. +
  5. "Error initializing LLM client"
      +
    • Verify your LLM configuration settings
    • +
    • Ensure the LLM API is accessible
    • +
    +
  6. +
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html new file mode 100644 index 0000000..ef7697a --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Configuration Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Configuration Commands
+
+
+

+

The config command allows you to set up and manage configuration settings for Penify CLI. This document explains all available configuration options and how to use them.

+

+Configuration Overview

+

Penify CLI stores configuration in a JSON file at ~/.penify/config.json. The configuration includes:

+
    +
  • LLM (Large Language Model) settings for local commit message generation
  • +
  • JIRA integration settings for enhanced commit messages
  • +
  • API tokens and other credentials
  • +
+

+Basic Usage

+
# Configure LLM settings
+
penify config llm
+
+
# Configure JIRA integration
+
penify config jira
+

+LLM Configuration

+

+Web Interface

+

Running penify config llm opens a web interface in your browser where you can configure:

+
    +
  1. Model: The LLM model to use (e.g., gpt-3.5-turbo)
  2. +
  3. API Base URL: The endpoint URL for your LLM API (e.g., https://api.openai.com/v1)
  4. +
  5. API Key: Your authentication key for the LLM API
  6. +
+

+Supported LLMs

+

Penify CLI supports various LLM providers:

+

+OpenAI

+ +

+Anthropic

+ +

+Ollama (Local)

+ +

+Azure OpenAI

+
    +
  • Model: Your deployed model name
  • +
  • API Base: Your Azure endpoint
  • +
  • API Key: Your Azure API key
  • +
+

+Configuration File Structure

+

After configuration, your ~/.penify/config.json will contain:

+
{
+
"llm": {
+
"model": "gpt-3.5-turbo",
+
"api_base": "https://api.openai.com/v1",
+
"api_key": "sk-..."
+
}
+
}
+

+JIRA Configuration

+

+Web Interface

+

Running penify config jira opens a web interface where you can configure:

+
    +
  1. JIRA URL: Your JIRA instance URL (e.g., https://yourcompany.atlassian.net)
  2. +
  3. Username: Your JIRA username (typically your email)
  4. +
  5. API Token: Your JIRA API token
  6. +
+

+Creating a JIRA API Token

+
    +
  1. Log in to https://id.atlassian.com/manage-profile/security/api-tokens
  2. +
  3. Click "Create API token"
  4. +
  5. Give it a name (e.g., "Penify CLI")
  6. +
  7. Copy the generated token and paste it into the configuration
  8. +
+

+Configuration File Structure

+

After configuration, your ~/.penify/config.json will contain:

+
{
+
"jira": {
+
"url": "https://yourcompany.atlassian.net",
+
"username": "your.email@example.com",
+
"api_token": "your-jira-api-token"
+
}
+
}
+

+Configuration Locations

+

Penify CLI looks for configuration in multiple locations:

+
    +
  1. Project-specific: .penify/config.json in the Git repository root
  2. +
  3. User-specific: ~/.penify/config.json in your home directory
  4. +
+

The project-specific configuration takes precedence if both exist.

+

+Environment Variables

+

You can override configuration settings using environment variables:

+
    +
  • PENIFY_API_TOKEN: Override the stored API token
  • +
  • PENIFY_LLM_MODEL: Override the configured LLM model
  • +
  • PENIFY_LLM_API_BASE: Override the configured LLM API base URL
  • +
  • PENIFY_LLM_API_KEY: Override the configured LLM API key
  • +
  • PENIFY_JIRA_URL: Override the configured JIRA URL
  • +
  • PENIFY_JIRA_USER: Override the configured JIRA username
  • +
  • PENIFY_JIRA_TOKEN: Override the configured JIRA API token
  • +
+

Example:

export PENIFY_LLM_MODEL="gpt-4"
+
penify commit
+

+Command-Line Configuration

+

For advanced users or scripting, you can directly edit the configuration file:

+
# View current configuration
+
cat ~/.penify/config.json
+
+
# Edit configuration with your preferred editor
+
nano ~/.penify/config.json
+

+Sharing Configuration

+

You can share configuration between machines by copying the .penify/config.json file. However, be cautious with API keys and credentials.

+

For team settings, consider:

    +
  1. Using a project-specific .penify/config.json with shared settings
  2. +
  3. Excluding API keys from shared configuration
  4. +
  5. Using environment variables for sensitive credentials
  6. +
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "Error reading configuration file"
      +
    • Check if the file exists: ls -la ~/.penify
    • +
    • Ensure it contains valid JSON: cat ~/.penify/config.json
    • +
    +
  2. +
  3. "Failed to connect to LLM API"
      +
    • Verify API base URL and API key
    • +
    • Check network connectivity to the API endpoint
    • +
    • Ensure your account has access to the specified model
    • +
    +
  4. +
  5. "Failed to connect to JIRA"
      +
    • Check JIRA URL format (should include https://)
    • +
    • Verify username and API token
    • +
    • Ensure your JIRA account has API access permissions
    • +
    +
  6. +
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html new file mode 100644 index 0000000..2e18f21 --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Detailed Usage Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Detailed Usage Guide
+
+
+

+

This document provides in-depth information about all features and capabilities of the Penify CLI tool.

+

+Table of Contents

+
    +
  • Penify CLI - Detailed Usage Guide
      +
    • Table of Contents
    • +
    • Authentication
        +
      • Login Process
      • +
      • API Token Storage
      • +
      • Token Precedence
      • +
      +
    • +
    • Command Overview
    • +
    • Commit Message Generation
    • +
    • Code Documentation Generation
        +
      • Use Cases
      • +
      • Authentication Requirement
      • +
      +
    • +
    • Configuration Settings
    • +
    • Git Hooks
        +
      • Post-Commit Hook
      • +
      • Custom Hook Location
      • +
      +
    • +
    • Advanced Use Cases
        +
      • CI/CD Integration
      • +
      • Remote Repository Documentation
      • +
      +
    • +
    • Troubleshooting
        +
      • Common Issues
      • +
      • Logs
      • +
      • Support
      • +
      +
    • +
    +
  • +
+

+Authentication

+

+Login Process

+

When you run penify login, the tool:

+
    +
  1. Opens your default web browser
  2. +
  3. Redirects you to Penify's login page
  4. +
  5. Captures the authentication token after successful login
  6. +
  7. Saves the token in ~/.penify file
  8. +
+

+API Token Storage

+

API tokens are stored in your home directory in the .penify file. This JSON file contains:

+
{
+
"api_keys": "your-api-token",
+
"llm": { "model": "...", "api_base": "...", "api_key": "..." },
+
"jira": { "url": "...", "username": "...", "api_token": "..." }
+
}
+

+Token Precedence

+
    +
  1. Environment variable PENIFY_API_TOKEN (highest priority)
  2. +
  3. Token in ~/.penify file
  4. +
+

+Command Overview

+
penify
+
├── commit Generate smart commit messages
+
├── config Configure local LLM and JIRA
+
│ ├── llm Configure local LLM settings
+
│ └── jira Configure JIRA integration
+
├── login Log in to Penify account
+
└── docgen Generate code documentation
+
├── install-hook Install Git post-commit hook
+
└── uninstall-hook Remove Git post-commit hook
+

+Commit Message Generation

+

The commit command analyzes your staged changes and generates meaningful commit messages. It can:

+
    +
  • Use a local LLM if configured
  • +
  • Enhance messages with JIRA issue details
  • +
  • Provide both title and description
  • +
+

For specific options and examples, see docs/commit-commands.md.

+

+Code Documentation Generation

+

The docgen command generates documentation for your code:

+

+Use Cases

+
    +
  1. Current Git Diff: Default behavior, documents only changed files
  2. +
  3. Specific File: Pass a file path with -l path/to/file.py
  4. +
  5. Entire Folder: Pass a folder path with -l path/to/folder
  6. +
+

+Authentication Requirement

+

This feature requires authentication with a Penify account. Run penify login before using documentation features.

+

+Configuration Settings

+

Configure local settings using the config command:

+
    +
  • LLM Settings: Configure a local LLM for commit message generation
  • +
  • JIRA Settings: Set up JIRA integration for enhanced commit messages
  • +
+

For detailed configuration options, see docs/config-commands.md.

+

+Git Hooks

+

Penify can install Git hooks to automate documentation generation:

+

+Post-Commit Hook

+
    +
  • Install: penify docgen install-hook
  • +
  • What it does: Automatically generates documentation for changed files after each commit
  • +
  • Uninstall: penify docgen uninstall-hook
  • +
+

+Custom Hook Location

+

You can specify a custom location for Git hooks:

+
penify docgen install-hook -l /path/to/git/repo
+

+Advanced Use Cases

+

+CI/CD Integration

+

For CI/CD pipelines:

+
    +
  1. Set PENIFY_API_TOKEN as an environment variable
  2. +
  3. Run commands without requiring interactive login
  4. +
+

+Remote Repository Documentation

+

Generate documentation for an entire repository:

+
git clone https://github.com/user/repo
+
cd repo
+
penify docgen -l .
+

+Troubleshooting

+

+Common Issues

+
    +
  1. API Key Errors: Ensure you've run penify login or set PENIFY_API_TOKEN
  2. +
  3. LLM Configuration: Check your LLM settings with cat ~/.penify
  4. +
  5. JIRA Integration: Verify JIRA credentials in your configuration
  6. +
+

+Logs

+

For more detailed logs, you can set the environment variable:

+
export PENIFY_DEBUG=1
+

+Support

+

For additional help, visit https://docs.penify.dev/ or contact suppo.nosp@m.rt@p.nosp@m.enify.nosp@m..dev

+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html new file mode 100644 index 0000000..a2e5d0e --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI - Documentation Generation Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI - Documentation Generation Commands
+
+
+

+

This document provides a detailed guide to all permutations and combinations of the docgen command, including extensive information about Git hook commands for automating documentation generation.

+

+Table of Contents

+
    +
  • Basic Usage
  • +
  • Command Options
  • +
  • Option Combinations
  • +
  • Git Hook Commands
      +
    • Hook Installation
    • +
    • Hook Customization
    • +
    • Hook Uninstallation
    • +
    +
  • +
  • Advanced Use Cases
  • +
  • Troubleshooting
  • +
+

+Basic Usage

+
penify docgen
+

By default, this command:

    +
  • Analyzes the current Git diff (changes since last commit)
  • +
  • Generates documentation for changed files only
  • +
  • Requires authentication via penify login
  • +
+

+Command Options

+

+-l, --location

+

Specify a target for documentation generation:

+
# Generate documentation for a specific file
+
penify docgen -l path/to/file.py
+
+
# Generate documentation for a specific folder
+
penify docgen -l path/to/folder
+

Without this flag, Penify analyzes only Git-tracked modified files.

+

+Subcommands

+

+install-hook

+

Install a Git post-commit hook to automatically generate documentation:

+
penify docgen install-hook
+

+uninstall-hook

+

Remove the Git post-commit hook:

+
penify docgen uninstall-hook
+

+Option Combinations

+

+Generate Documentation for Current Git Diff

+
# Basic usage - current Git diff
+
penify docgen
+

+Generate Documentation for a Specific File

+
# Single file documentation
+
penify docgen -l src/main.py
+

+Generate Documentation for a Folder

+
# Folder documentation
+
penify docgen -l src/models/
+

+Install Hook in Current Repository

+
# Install hook in current Git repository
+
penify docgen install-hook
+

+Install Hook in Specific Repository

+
# Install hook in a specific Git repository
+
penify docgen install-hook -l /path/to/repo
+

+Uninstall Hook from Current Repository

+
# Uninstall hook from current Git repository
+
penify docgen uninstall-hook
+

+Uninstall Hook from Specific Repository

+
# Uninstall hook from a specific Git repository
+
penify docgen uninstall-hook -l /path/to/repo
+

+Git Hook Commands

+

Penify provides Git hook commands to automate documentation generation as part of your Git workflow.

+

+Hook Installation

+

+How Hooks Work

+

When you install a Git hook with penify docgen install-hook, Penify:

+
    +
  1. Creates a post-commit hook script in the .git/hooks directory
  2. +
  3. Makes the script executable
  4. +
  5. Configures the hook to run penify docgen after each commit
  6. +
+

+Hook Script Content

+

The generated post-commit hook contains:

+
#!/bin/sh
+
# This is a post-commit hook generated by penify.
+
# Automatically generates documentation for changed files after each commit.
+
+
penify docgen -gf /path/to/git/repository -t your_api_token
+

+Installation Location

+

By default, hooks are installed in the current Git repository. You can specify a different location:

+
penify docgen install-hook -l /path/to/repo
+

+Installation Requirements

+

To install hooks, you need:

    +
  • A valid Penify API token (login first with penify login)
  • +
  • Write permissions to the .git/hooks directory
  • +
+

+Verifying Installation

+

After installation, you can verify that the hook is installed:

+
cat .git/hooks/post-commit
+

+Hook Customization

+

You can customize the post-commit hook after installation:

+

+Modifying Hook Behavior

+
    +
  1. Edit the .git/hooks/post-commit file
  2. +
  3. Add additional options to the penify docgen command
  4. +
  5. Add other commands to run after commit
  6. +
+

Example of a customized hook:

+
#!/bin/sh
+
# This is a post-commit hook generated by penify.
+
# Automatically generates documentation for changed files after each commit.
+
+
# Generate documentation
+
penify docgen -gf /path/to/git/repository -t your_api_token
+
+
# Additional custom commands
+
echo "Documentation generation complete!"
+

+Advanced Hook Scenarios

+

Conditional Documentation Generation:

+
#!/bin/sh
+
# Only generate documentation for commits to the main branch
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
if [ "$BRANCH" = "main" ]; then
+
penify docgen -gf /path/to/git/repository -t your_api_token
+
fi
+

Documenting Specific Files/Folders:

+
#!/bin/sh
+
# Only document Python files in the src directory
+
penify docgen -l src/ -gf /path/to/git/repository -t your_api_token
+

+Hook Uninstallation

+

+Standard Uninstallation

+

To remove a hook from the current repository:

+
penify docgen uninstall-hook
+

+Specific Repository Uninstallation

+

To remove a hook from a specific repository:

+
penify docgen uninstall-hook -l /path/to/repo
+

+Manual Hook Removal

+

If needed, you can manually remove the hook:

+
rm .git/hooks/post-commit
+

+Verifying Uninstallation

+

Check that the hook was successfully removed:

+
ls -la .git/hooks/post-commit # Should return "No such file or directory"
+

+Advanced Use Cases

+

+Continuous Integration

+

Run documentation generation in CI pipelines:

+
# In your CI script
+
export PENIFY_API_TOKEN=your_api_token
+
penify docgen -l src/
+

+Batch Documentation

+

Generate documentation for multiple repositories:

+
# Bash script for batch documentation
+
for repo in repo1 repo2 repo3; do
+
cd /path/to/$repo
+
penify docgen -l .
+
done
+

+Custom Git Hook Integration

+

Integrate with other Git hooks:

+
# In .git/hooks/pre-push
+
penify docgen -l src/
+

+Documenting Release Tags

+

Generate documentation when creating a release tag:

+
# Document everything when creating a tag
+
git tag -a v1.0.0
+
penify docgen -l . # Document entire codebase
+
git commit --amend -m "Release v1.0.0 with updated documentation"
+

+Troubleshooting

+

+Common Issues

+
    +
  1. "Authentication required"
      +
    • Run penify login before using documentation features
    • +
    • Check your API token with cat ~/.penify
    • +
    +
  2. +
  3. "Permission denied when installing hook"
      +
    • Check Git repository permissions
    • +
    • Try running with sudo (if appropriate for your environment)
    • +
    • Ensure the .git/hooks directory exists
    • +
    +
  4. +
  5. "Hook installed but not running"
      +
    • Check if the hook is executable: ls -la .git/hooks/post-commit
    • +
    • Make it executable if needed: chmod +x .git/hooks/post-commit
    • +
    • Check for syntax errors in the hook script
    • +
    +
  6. +
  7. "File or directory not found"
      +
    • Verify the path provided to the -l option
    • +
    • Ensure you're running the command from the correct directory
    • +
    +
  8. +
  9. "Hook uninstallation failed"
      +
    • Check permissions on the .git/hooks directory
    • +
    • Try manual removal: rm .git/hooks/post-commit
    • +
    +
  10. +
+

+Debugging

+

For detailed output when running documentation commands:

+
export PENIFY_DEBUG=1
+
penify docgen -l src/
+

+Getting Help

+

For command-specific help:

+
penify docgen --help
+
penify docgen install-hook --help
+
penify docgen uninstall-hook --help
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html new file mode 100644 index 0000000..8f6ab09 --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Penify CLI Example Workflows + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Penify CLI Example Workflows
+
+
+

+

This document demonstrates how to use Penify CLI in real-world development workflows to improve your productivity.

+

+Workflow 1: Efficient Git Commits with AI

+

+Setup

+

First, configure your local LLM for offline operation:

+
penify config llm
+

Configure your JIRA integration for enhanced commit messages:

+
penify config jira
+

+Daily Workflow

+
    +
  1. Make your code changes as usual
  2. +
  3. When ready to commit, use Penify to generate a smart commit message:
  4. +
+
penify commit
+
    +
  1. Review and confirm the generated commit message
  2. +
  3. Git commit and push as usual
  4. +
+

+Benefits

+
    +
  • Consistent and descriptive commit messages
  • +
  • Automatic inclusion of relevant JIRA ticket information
  • +
  • Time saved from writing detailed commit messages
  • +
+

+Workflow 2: Documentation Generation Pipeline

+

+Setup

+

Login to Penify to access advanced documentation features:

+
penify login
+

Install the Git hook for automatic documentation generation:

+
penify docgen install-hook
+

+Daily Workflow

+
    +
  1. Make your code changes as usual
  2. +
  3. Commit your changes
  4. +
  5. Documentation is automatically generated for changed files
  6. +
  7. Review the generated documentation
  8. +
+

+Manual Documentation

+

For specific files or folders:

+
penify docgen -l src/components/authentication
+

+Benefits

+
    +
  • Always up-to-date documentation
  • +
  • Consistent documentation style
  • +
  • Time saved from writing detailed documentation
  • +
+

+Workflow 3: Code Review Enhancement

+

+Setup

+

Ensure you're logged into Penify:

+
penify login
+

+Workflow

+
    +
  1. Before submitting a PR, generate documentation for changed files:
  2. +
+
penify docgen
+
    +
  1. Include the generated documentation in your PR
  2. +
  3. Reviewers can better understand your changes with the AI-generated explanations
  4. +
+

+Benefits

+
    +
  • Improved PR quality
  • +
  • Faster code reviews
  • +
  • Better team understanding of code changes
  • +
+

+Workflow 4: Onboarding New Team Members

+

+For Team Leads

+

Generate comprehensive documentation for the entire codebase:

+
penify docgen -l .
+

+For New Team Members

+

Generate focused documentation for components you're working on:

+
penify docgen -l src/components/my-feature
+

+Benefits

+
    +
  • Faster onboarding
  • +
  • Better understanding of code structure
  • +
  • Reduced questions to senior team members
  • +
+

+Workflow 5: Legacy Code Understanding

+

When working with unfamiliar legacy code:

+
# Document a specific complex file
+
penify docgen -l src/legacy/complex_module.py
+
+
# Document an entire legacy component
+
penify docgen -l src/legacy/old_component
+

+Benefits

+
    +
  • Quickly understand complex legacy systems
  • +
  • Reduce time spent deciphering undocumented code
  • +
  • Make safer changes to legacy systems
  • +
+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html new file mode 100644 index 0000000..01c94d4 --- /dev/null +++ b/docs-test-3rd-techno/html/md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify-cli-documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
penify-cli +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
penify-cli-documentation
+
+
+

+autotoc_md123

+

layout: doc title: Streamline Git Commits and Code Documentation with Penify-CLI's Automated Generation description: Discover how Penify-CLI automates both Git commit messages and code documentation, with Jira integration and flexible options. Save time, improve repository clarity, and boost productivity with this detailed guide to usage and best practices. keywords: Penify-CLI, Git commit messages, code documentation, Jira integration, automated documentation, version control, repository management, developer productivity

+

+author: Suman Sauarbh

+

+Penify CLI Documentation

+

Penify CLI is a powerful tool for enhancing your development workflow with AI-powered features like commit message generation, code documentation, and JIRA integration.

+

+Installation

+
pip install penify
+

+Getting Started

+

After installation, you can check the version of Penify CLI:

+
penify --version
+

+Commands Overview

+
    +
  • commit: Generate smart commit messages using local-LLM
  • +
  • config: Configure local-LLM and JIRA settings
  • +
  • login: Log in to Penify to use advanced features
  • +
  • docgen: Generate code documentation for Git diffs, files, or folders
  • +
+

+Detailed Command Documentation

+

+Commit Command

+

The commit command generates intelligent commit messages using local LLM models or Penify services.

+

+Usage:

+
penify commit [options]
+

+Options:

+
    +
  • -m, --message TEXT: Provide context for the commit message generation
  • +
  • -e, --terminal: Open an editor to modify the generated commit message before applying it
  • +
  • -d, --description: Generate a detailed commit message with both title and description
  • +
+

+Examples:

+

Basic usage:

penify commit
+

Provide context for better results:

penify commit -m "Fixed the login button"
+

Generate a detailed commit message and open editor:

penify commit -e -d
+

+Requirements:

+
    +
  • Either a local LLM configuration (via penify config llm) or Penify login
  • +
  • For JIRA integration, configure JIRA settings (via penify config jira)
  • +
+
+

+Config Command

+

The config command helps you configure local LLM settings and JIRA integration for enhanced commit messages.

+

+Usage:

+
penify config [subcommand]
+

+Subcommands:

+
    +
  • llm: Configure local Large Language Model settings
  • +
  • jira: Configure JIRA integration settings
  • +
+

+Examples:

+

Configure local LLM:

penify config llm
+

This opens a web interface to configure:

+

Configure JIRA integration:

penify config jira
+

This opens a web interface to configure:

+
+

+Login Command

+

The login command authenticates you with Penify for advanced features like code documentation generation.

+

+Usage:

+
penify login
+

+What happens:

+
    +
  1. A browser window opens to the Penify login page
  2. +
  3. After successful login, your API key is automatically saved
  4. +
  5. The tool is now authorized to use Penify's advanced features
  6. +
+

+Example:

+
penify login
+

+

+Docgen Command

+

The docgen command generates documentation for your code using Penify's AI services.

+

+Usage:

+
penify docgen [options] [subcommand]
+

+Options:

+
    +
  • -l, --location PATH: Path to a specific file or folder to document (default: current working directory)
  • +
+

+Subcommands:

+
    +
  • install-hook: Install a Git post-commit hook to automatically generate documentation
  • +
  • uninstall-hook: Remove the Git post-commit hook
  • +
+

+Examples:

+

Document current Git diff:

penify docgen
+

Document a specific file:

penify docgen -l src/main.py
+

Document an entire folder:

penify docgen -l src/components
+

Install the Git hook for automatic documentation:

penify docgen install-hook
+

Uninstall the Git hook:

penify docgen uninstall-hook
+

+Requirements:

+
    +
  • Requires login to Penify (penify login)
  • +
+

+Configuration Files

+

Penify CLI stores configuration in the following locations:

+
    +
  • Global configuration: ~/.penify
  • +
  • Project-specific configuration: .penify in your Git repository root
  • +
+

+Environment Variables

+
    +
  • PENIFY_API_TOKEN: Can be used to provide the API token instead of logging in
  • +
+

+Troubleshooting

+

If you encounter issues:

+
    +
  1. Check your configuration with cat ~/.penify
  2. +
  3. Verify network connectivity to API endpoints
  4. +
  5. Ensure your API keys and tokens are valid
  6. +
  7. For JIRA integration issues, verify your JIRA credentials
  8. +
+

+Additional Resources

+

For more information, visit the Penify Documentation.

+
+
+
+ + + + + diff --git a/docs-test-3rd-techno/html/menu.js b/docs-test-3rd-techno/html/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/docs-test-3rd-techno/html/menu.js @@ -0,0 +1,134 @@ +/* + @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,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs-test-3rd-techno/html/menudata.js b/docs-test-3rd-techno/html/menudata.js new file mode 100644 index 0000000..314c51a --- /dev/null +++ b/docs-test-3rd-techno/html/menudata.js @@ -0,0 +1,117 @@ +/* + @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"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"h",url:"namespacemembers.html#index_h"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"j",url:"namespacemembers.html#index_j"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}, +{text:"u",url:"namespacemembers.html#index_u"}, +{text:"v",url:"namespacemembers.html#index_v"}, +{text:"w",url:"namespacemembers.html#index_w"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"h",url:"namespacemembers_func.html#index_h"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"m",url:"namespacemembers_func.html#index_m"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}, +{text:"u",url:"namespacemembers_func.html#index_u"}]}, +{text:"Variables",url:"namespacemembers_vars.html",children:[ +{text:"a",url:"namespacemembers_vars.html#index_a"}, +{text:"c",url:"namespacemembers_vars.html#index_c"}, +{text:"d",url:"namespacemembers_vars.html#index_d"}, +{text:"e",url:"namespacemembers_vars.html#index_e"}, +{text:"h",url:"namespacemembers_vars.html#index_h"}, +{text:"i",url:"namespacemembers_vars.html#index_i"}, +{text:"j",url:"namespacemembers_vars.html#index_j"}, +{text:"l",url:"namespacemembers_vars.html#index_l"}, +{text:"n",url:"namespacemembers_vars.html#index_n"}, +{text:"p",url:"namespacemembers_vars.html#index_p"}, +{text:"s",url:"namespacemembers_vars.html#index_s"}, +{text:"u",url:"namespacemembers_vars.html#index_u"}, +{text:"v",url:"namespacemembers_vars.html#index_v"}, +{text:"w",url:"namespacemembers_vars.html#index_w"}]}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"_",url:"functions_func.html#index__5F"}, +{text:"a",url:"functions_func.html#index_a"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/docs-test-3rd-techno/html/minus.svg b/docs-test-3rd-techno/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs-test-3rd-techno/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs-test-3rd-techno/html/minusd.svg b/docs-test-3rd-techno/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs-test-3rd-techno/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacemembers.html b/docs-test-3rd-techno/html/namespacemembers.html new file mode 100644 index 0000000..c2198a5 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacemembers.html @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    + +

    - a -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacemembers_func.html b/docs-test-3rd-techno/html/namespacemembers_func.html new file mode 100644 index 0000000..991903b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacemembers_func.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace functions with links to the namespace documentation for each function:
    + +

    - c -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacemembers_vars.html b/docs-test-3rd-techno/html/namespacemembers_vars.html new file mode 100644 index 0000000..0d82f10 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacemembers_vars.html @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace Members + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace variables with links to the namespace documentation for each variable:
    + +

    - a -

    + + +

    - c -

      +
    • classifiers : setup
    • +
    + + +

    - d -

    + + +

    - e -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - l -

    + + +

    - n -

    + + +

    - p -

    + + +

    - s -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook.html b/docs-test-3rd-techno/html/namespacepenify__hook.html new file mode 100644 index 0000000..e0a9c9d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Namespaces

    namespace  api_client
     
    namespace  base_analyzer
     
    namespace  commands
     
    namespace  commit_analyzer
     
    namespace  config_command
     
    namespace  constants
     
    namespace  file_analyzer
     
    namespace  folder_analyzer
     
    namespace  git_analyzer
     
    namespace  jira_client
     
    namespace  llm_client
     
    namespace  login_command
     
    namespace  main
     
    namespace  ui_utils
     
    namespace  utils
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook.js b/docs-test-3rd-techno/html/namespacepenify__hook.js new file mode 100644 index 0000000..d2d0a36 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook.js @@ -0,0 +1,56 @@ +var namespacepenify__hook = +[ + [ "api_client", "namespacepenify__hook_1_1api__client.html", "namespacepenify__hook_1_1api__client" ], + [ "base_analyzer", "namespacepenify__hook_1_1base__analyzer.html", "namespacepenify__hook_1_1base__analyzer" ], + [ "commands", "namespacepenify__hook_1_1commands.html", "namespacepenify__hook_1_1commands" ], + [ "commit_analyzer", "namespacepenify__hook_1_1commit__analyzer.html", "namespacepenify__hook_1_1commit__analyzer" ], + [ "config_command", "namespacepenify__hook_1_1config__command.html", [ + [ "handle_config", "namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5", null ], + [ "setup_config_parser", "namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba", null ] + ] ], + [ "constants", "namespacepenify__hook_1_1constants.html", [ + [ "API_URL", "namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34", null ], + [ "DASHBOARD_URL", "namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8", null ] + ] ], + [ "file_analyzer", "namespacepenify__hook_1_1file__analyzer.html", "namespacepenify__hook_1_1file__analyzer" ], + [ "folder_analyzer", "namespacepenify__hook_1_1folder__analyzer.html", "namespacepenify__hook_1_1folder__analyzer" ], + [ "git_analyzer", "namespacepenify__hook_1_1git__analyzer.html", "namespacepenify__hook_1_1git__analyzer" ], + [ "jira_client", "namespacepenify__hook_1_1jira__client.html", "namespacepenify__hook_1_1jira__client" ], + [ "llm_client", "namespacepenify__hook_1_1llm__client.html", "namespacepenify__hook_1_1llm__client" ], + [ "login_command", "namespacepenify__hook_1_1login__command.html", [ + [ "handle_login", "namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411", null ], + [ "setup_login_parser", "namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235", null ] + ] ], + [ "main", "namespacepenify__hook_1_1main.html", [ + [ "main", "namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb", null ] + ] ], + [ "ui_utils", "namespacepenify__hook_1_1ui__utils.html", [ + [ "create_progress_bar", "namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5", null ], + [ "create_stage_progress_bar", "namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405", null ], + [ "format_error", "namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca", null ], + [ "format_file_path", "namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41", null ], + [ "format_highlight", "namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7", null ], + [ "format_info", "namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2", null ], + [ "format_success", "namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e", null ], + [ "format_warning", "namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797", null ], + [ "print_error", "namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598", null ], + [ "print_info", "namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c", null ], + [ "print_processing", "namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb", null ], + [ "print_status", "namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7", null ], + [ "print_success", "namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b", null ], + [ "print_warning", "namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45", null ], + [ "update_stage", "namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd", null ], + [ "autoreset", "namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71", null ], + [ "ERROR_COLOR", "namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe", null ], + [ "ERROR_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432", null ], + [ "HIGHLIGHT_COLOR", "namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc", null ], + [ "INFO_COLOR", "namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c", null ], + [ "NEUTRAL_COLOR", "namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5", null ], + [ "PROCESSING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155", null ], + [ "SUCCESS_COLOR", "namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4", null ], + [ "SUCCESS_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3", null ], + [ "WARNING_COLOR", "namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff", null ], + [ "WARNING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8", null ] + ] ], + [ "utils", "namespacepenify__hook_1_1utils.html", "namespacepenify__hook_1_1utils" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.html new file mode 100644 index 0000000..d3851ab --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.api_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.api_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  APIClient
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.js new file mode 100644 index 0000000..fb9b017 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1api__client.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1api__client = +[ + [ "APIClient", "classpenify__hook_1_1api__client_1_1APIClient.html", "classpenify__hook_1_1api__client_1_1APIClient" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.html new file mode 100644 index 0000000..c4cd77a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.base_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.base_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  BaseAnalyzer
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.js new file mode 100644 index 0000000..6701f69 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1base__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1base__analyzer = +[ + [ "BaseAnalyzer", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html", "classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.html new file mode 100644 index 0000000..4cebbd8 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands Namespace Reference
    +
    +
    + + + + + + + + + + + + +

    +Namespaces

    namespace  auth_commands
     
    namespace  commit_commands
     
    namespace  config_commands
     
    namespace  doc_commands
     
    namespace  hook_commands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.js new file mode 100644 index 0000000..7050064 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands.js @@ -0,0 +1,38 @@ +var namespacepenify__hook_1_1commands = +[ + [ "auth_commands", "namespacepenify__hook_1_1commands_1_1auth__commands.html", [ + [ "login", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6", null ], + [ "save_credentials", "namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b", null ] + ] ], + [ "commit_commands", "namespacepenify__hook_1_1commands_1_1commit__commands.html", [ + [ "commit_code", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6", null ], + [ "handle_commit", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076", null ], + [ "setup_commit_parser", "namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1", null ] + ] ], + [ "config_commands", "namespacepenify__hook_1_1commands_1_1config__commands.html", [ + [ "config_jira_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13", null ], + [ "config_llm_web", "namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62", null ], + [ "get_env_var_or_default", "namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87", null ], + [ "get_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2", null ], + [ "get_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0", null ], + [ "get_penify_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20", null ], + [ "get_token", "namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812", null ], + [ "load_env_files", "namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae", null ], + [ "save_jira_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374", null ], + [ "save_llm_config", "namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4", null ], + [ "DOTENV_AVAILABLE", "namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67", null ], + [ "path", "namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2", null ] + ] ], + [ "doc_commands", "namespacepenify__hook_1_1commands_1_1doc__commands.html", [ + [ "generate_doc", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7", null ], + [ "handle_docgen", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc", null ], + [ "setup_docgen_parser", "namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6", null ], + [ "docgen_description", "namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588", null ] + ] ], + [ "hook_commands", "namespacepenify__hook_1_1commands_1_1hook__commands.html", [ + [ "install_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135", null ], + [ "uninstall_git_hook", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443", null ], + [ "HOOK_FILENAME", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c", null ], + [ "HOOK_TEMPLATE", "namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b", null ] + ] ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands.html new file mode 100644 index 0000000..7cb8295 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.auth_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.auth_commands Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     save_credentials (api_key)
     
     login (api_url, dashboard_url)
     
    +

    Function Documentation

    + +

    ◆ login()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.commands.auth_commands.login ( api_url,
    dashboard_url )
    +
    +
    Open the login page in a web browser and capture the token via redirect.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_credentials()

    + +
    +
    + + + + + + + +
    penify_hook.commands.auth_commands.save_credentials ( api_key)
    +
    +
    Save the API key in a priority-based manner.
    +
    +This function attempts to save the API key in two locations, based on priority:
    +1. In a `.env` file located in the root of the Git repository if one is found.
    +2. In a global `.penify` file located in the user's home directory as a
    +fallback.  The function first tries to locate the Git repository using
    +`recursive_search_git_folder`. If a Git repository is found, it reads the
    +existing `.env` file (if present), updates or adds the API key under the key
    +`PENIFY_API_TOKEN`, and writes the updated content back. If any error occurs
    +during this process, it falls back to saving the credentials in the global
    +`.penify` file. The function handles exceptions and prints appropriate error
    +messages.
    +
    +Args:
    +    api_key (str): The API key to save.
    +
    +Returns:
    +    bool: True if the API key is saved successfully, False otherwise.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map new file mode 100644 index 0000000..bc1917f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 new file mode 100644 index 0000000..b8a526f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.md5 @@ -0,0 +1 @@ +df121ab8f8f1f8c9b8beb1b8f46035c9 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg new file mode 100644 index 0000000..ee497a1 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.auth_commands.login + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg new file mode 100644 index 0000000..cdb13f9 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a1eb69ebcc475060011476a65cbffd7f6_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.auth_commands.login + + +Node1 + + +penify_hook.commands.auth +_commands.login + + + + + +Node2 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map new file mode 100644 index 0000000..05977aa --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 new file mode 100644 index 0000000..bec8676 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.md5 @@ -0,0 +1 @@ +0c95eca14e69906c865588ce720ae68c \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg new file mode 100644 index 0000000..50d22ec --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.auth_commands.save_credentials + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg new file mode 100644 index 0000000..45dba64 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1auth__commands_a68a2119363481a0001ad6190329c863b_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.auth_commands.save_credentials + + +Node1 + + +penify_hook.commands.auth +_commands.save_credentials + + + + + +Node2 + + +penify_hook.commands.auth +_commands.login + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands.html new file mode 100644 index 0000000..a549262 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands.html @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.commit_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.commit_commands Namespace Reference
    +
    +
    + + + + + + + + +

    +Functions

     commit_code (api_url, token, message, open_terminal, generate_description, llm_model=None, llm_api_base=None, llm_api_key=None, jira_url=None, jira_user=None, jira_api_token=None)
     
     setup_commit_parser (parser)
     
     handle_commit (args)
     
    +

    Function Documentation

    + +

    ◆ commit_code()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    penify_hook.commands.commit_commands.commit_code ( api_url,
    token,
    message,
    open_terminal,
    generate_description,
    llm_model = None,
    llm_api_base = None,
    llm_api_key = None,
    jira_url = None,
    jira_user = None,
    jira_api_token = None )
    +
    +
    Enhance Git commits with AI-powered commit messages.
    +
    +This function allows for the generation of enhanced commit messages using
    +natural language processing models and optionally integrates with JIRA for
    +additional context. It processes the current Git folder to find relevant files
    +and generates a detailed commit message based on the provided parameters.
    +
    +Args:
    +    api_url (str): URL of the API endpoint.
    +    token (str): Authentication token for the API.
    +    message (str): Initial commit message provided by the user.
    +    open_terminal (bool): Whether to open the terminal after committing.
    +    generate_description (bool): Whether to generate a detailed description in the commit message.
    +    llm_model (str?): The language model to use for generating the commit message. Defaults to None.
    +    llm_api_base (str?): Base URL of the LLM API. Defaults to None.
    +    llm_api_key (str?): API key for accessing the LLM service. Defaults to None.
    +    jira_url (str?): URL of the JIRA instance. Defaults to None.
    +    jira_user (str?): Username for authenticating with JIRA. Defaults to None.
    +    jira_api_token (str?): API token for accessing JIRA. Defaults to None.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ handle_commit()

    + +
    +
    + + + + + + + +
    penify_hook.commands.commit_commands.handle_commit ( args)
    +
    +
    Handle commit functionality by processing arguments and invoking the
    +appropriate commands.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setup_commit_parser()

    + +
    +
    + + + + + + + +
    penify_hook.commands.commit_commands.setup_commit_parser ( parser)
    +
    +
    Sets up an argument parser for generating smart commit messages.
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map new file mode 100644 index 0000000..ffe9a57 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 new file mode 100644 index 0000000..b2168e4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.md5 @@ -0,0 +1 @@ +a87fe683676275b5b9b302cacf7113c9 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg new file mode 100644 index 0000000..1d06beb --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.commit_commands.commit_code + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg new file mode 100644 index 0000000..388d136 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a4360ebdd6821c714f9db99f8d447c1b6_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.commit_commands.commit_code + + +Node1 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node2 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map new file mode 100644 index 0000000..03cd05a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 new file mode 100644 index 0000000..f54ff3c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.md5 @@ -0,0 +1 @@ +1a444c8182e2ab10bd621bcdd7a97129 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg new file mode 100644 index 0000000..eb0dcc4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.commit_commands.handle_commit + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg new file mode 100644 index 0000000..7737e2f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1commit__commands_a7a856c3961f5f8914e58485644572076_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.commit_commands.handle_commit + + +Node1 + + +penify_hook.commands.commit +_commands.handle_commit + + + + + +Node2 + + +penify_hook.commands.commit +_commands.commit_code + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands.html new file mode 100644 index 0000000..2135477 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands.html @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.config_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.config_commands Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    None load_env_files ()
     
    Path get_penify_config ()
     
    Any get_env_var_or_default (str env_var, Any default=None)
     
     save_llm_config (model, api_base, api_key)
     
     save_jira_config (url, username, api_token)
     
    Dict[str, str] get_llm_config ()
     
    Dict[str, str] get_jira_config ()
     
     config_llm_web ()
     
     config_jira_web ()
     
    Optional[str] get_token ()
     
    + + + + + +

    +Variables

    bool DOTENV_AVAILABLE = True
     
    str path = "/":
     
    +

    Function Documentation

    + +

    ◆ config_jira_web()

    + +
    +
    + + + + + + + +
    penify_hook.commands.config_commands.config_jira_web ()
    +
    +
    Starts a web server for configuring JIRA settings.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ config_llm_web()

    + +
    +
    + + + + + + + +
    penify_hook.commands.config_commands.config_llm_web ()
    +
    +
    Starts an HTTP server for configuring LLM settings via a web interface.
    +
    +
    + +

    ◆ get_env_var_or_default()

    + +
    +
    + + + + + + + + + + + +
    Any penify_hook.commands.config_commands.get_env_var_or_default (str env_var,
    Any default = None )
    +
    +
    Get environment variable or return default value.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_jira_config()

    + +
    +
    + + + + + + + +
    Dict[str, str] penify_hook.commands.config_commands.get_jira_config ()
    +
    +
    Retrieve JIRA configuration from environment variables.
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_llm_config()

    + +
    +
    + + + + + + + +
    Dict[str, str] penify_hook.commands.config_commands.get_llm_config ()
    +
    +
    Retrieve LLM configuration from environment variables.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_penify_config()

    + +
    +
    + + + + + + + +
    Path penify_hook.commands.config_commands.get_penify_config ()
    +
    +
    Returns the path to the `config.json` file within the `.penify` directory,
    +creating it if necessary.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ get_token()

    + +
    +
    + + + + + + + +
    Optional[str] penify_hook.commands.config_commands.get_token ()
    +
    +
    Retrieves an API token using a prioritized method.
    +
    +This function first attempts to load environment variables from all `.env`
    +files and checks if the `PENIFY_API_TOKEN` environment variable is set. If
    +found, it returns the token. If not, it looks for the API key in a
    +configuration file named 'api_keys'. If both methods fail, it returns None.
    +
    +Returns:
    +    str or None: The API token if found, otherwise None.
    +
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ load_env_files()

    + +
    +
    + + + + + + + +
    None penify_hook.commands.config_commands.load_env_files ()
    +
    +
    Load environment variables from .env files in various locations with proper
    +priority.
    +
    +This function loads environment variables from .env files located in different
    +directories, prioritizing the current directory over the Git repo root and the
    +user home directory. The loading process ensures that later files override
    +earlier ones.
    +
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_jira_config()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.config_commands.save_jira_config ( url,
    username,
    api_token )
    +
    +
    Save JIRA configuration settings to a .env file.
    +
    +This function saves JIRA configuration following these steps: 1. Determine the
    +target .env file location based on whether the current directory is inside a
    +Git repository. 2. If inside a Git repo, use the Git repo root's .env file;
    +otherwise, use the user home directory's .env file. 3. Read the existing
    +content of the .env file (if it exists) to preserve other settings. 4. Update
    +the .env content with the new JIRA configuration. 5. Write the updated content
    +back to the .env file. 6. Optionally, reload environment variables to make
    +changes immediately available.
    +
    +Args:
    +    url (str): The JIRA URL to be saved in the .env file.
    +    username (str): The JIRA username to be saved in the .env file.
    +    api_token (str): The JIRA API token to be saved in the .env file.
    +
    +Returns:
    +    bool: True if the configuration was successfully saved, False otherwise.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ save_llm_config()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.config_commands.save_llm_config ( model,
    api_base,
    api_key )
    +
    +
    Save LLM configuration settings to an .env file.
    +
    +This function saves the LLM configuration following a specific priority: 1. Git
    +repo root .env (if inside a git repo) 2. User home directory .env  It handles
    +the detection of the Git repo root, reads the existing .env content, updates it
    +with the new LLM configuration, and writes it back to the file. It also reloads
    +the environment variables to make changes immediately available.
    +
    +Args:
    +    model (str): The name of the language model.
    +    api_base (str): The base URL for the API.
    +    api_key (str): The API key for authentication.
    +
    +Returns:
    +    bool: True if the configuration is saved successfully, False otherwise.
    +
    +
    +
    +

    Variable Documentation

    + +

    ◆ DOTENV_AVAILABLE

    + +
    +
    + + + + +
    bool penify_hook.commands.config_commands.DOTENV_AVAILABLE = True
    +
    + +
    +
    + +

    ◆ path

    + +
    +
    + + + + +
    str penify_hook.commands.config_commands.path = "/":
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map new file mode 100644 index 0000000..4bb2bfd --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 new file mode 100644 index 0000000..6283b41 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.md5 @@ -0,0 +1 @@ +9bae164ffcfdbd7d2561af59ebd200f4 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg new file mode 100644 index 0000000..b03ff99 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.save_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg new file mode 100644 index 0000000..f22e981 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a0459710e44183890121dc3013cb6f374_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.save_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map new file mode 100644 index 0000000..debb1c6 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 new file mode 100644 index 0000000..5da8c0b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.md5 @@ -0,0 +1 @@ +7fdb615e9f5308ecd3e5fa498551935b \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg new file mode 100644 index 0000000..051697d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg new file mode 100644 index 0000000..83113ab --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_cgraph_org.svg @@ -0,0 +1,70 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map new file mode 100644 index 0000000..2f2fb21 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 new file mode 100644 index 0000000..eeb199e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.md5 @@ -0,0 +1 @@ +ea0a5e6f435c6a7671d7bfc3bf0650ab \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg new file mode 100644 index 0000000..8c23edf --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg new file mode 100644 index 0000000..bdb538e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a15bf3685c4dcb5c15ba6a4055e484cf2_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.get_jira_config + + +Node1 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map new file mode 100644 index 0000000..bc13337 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 new file mode 100644 index 0000000..95b75fa --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.md5 @@ -0,0 +1 @@ +9d37c64efeb0e64618f9f0dd5ab88ea7 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg new file mode 100644 index 0000000..543911e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.get_env_var_or_default + + +Node1 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg new file mode 100644 index 0000000..e64712b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a3caf2b062dd33b1f1d7ddc7224f0ff87_icgraph_org.svg @@ -0,0 +1,99 @@ + + + + + + +penify_hook.commands.config_commands.get_env_var_or_default + + +Node1 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map new file mode 100644 index 0000000..a45a2e3 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 new file mode 100644 index 0000000..dc6ebb4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.md5 @@ -0,0 +1 @@ +62a8d5fb002f1fe17ac8f4fcc3136681 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg new file mode 100644 index 0000000..2463268 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_token + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg new file mode 100644 index 0000000..ca576fa --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a5503d51c905e2f1b299b12d2a73bd812_cgraph_org.svg @@ -0,0 +1,89 @@ + + + + + + +penify_hook.commands.config_commands.get_token + + +Node1 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map new file mode 100644 index 0000000..d607a9f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 new file mode 100644 index 0000000..09d6307 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.md5 @@ -0,0 +1 @@ +be40687575d18b019d656fb483e65768 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg new file mode 100644 index 0000000..4e6ac15 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_llm_config + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg new file mode 100644 index 0000000..fc4febe --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6492bc8e7df6e38bb06ad05e572d4cc0_cgraph_org.svg @@ -0,0 +1,70 @@ + + + + + + +penify_hook.commands.config_commands.get_llm_config + + +Node1 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map new file mode 100644 index 0000000..b9bb19c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 new file mode 100644 index 0000000..0cd2655 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.md5 @@ -0,0 +1 @@ +df0b168a9e4b36e7d852b9c65e80709e \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg new file mode 100644 index 0000000..aab8334 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.get_penify_config + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg new file mode 100644 index 0000000..b59f434 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_a6559a82d0bf727703d550d1003d3ed20_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.config_commands.get_penify_config + + +Node1 + + +penify_hook.commands.config +_commands.get_penify_config + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map new file mode 100644 index 0000000..f86c5a0 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 new file mode 100644 index 0000000..7bf3519 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.md5 @@ -0,0 +1 @@ +8c645913e8cff12571c79649a78d06bd \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg new file mode 100644 index 0000000..6e9d5b9 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg new file mode 100644 index 0000000..b75919f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map new file mode 100644 index 0000000..fa3ee3a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 new file mode 100644 index 0000000..f2b4329 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.md5 @@ -0,0 +1 @@ +e99355e8e4f7aa3a3c39859f2c6c54cd \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg new file mode 100644 index 0000000..e5396a3 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg new file mode 100644 index 0000000..af0bbf7 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_aabe277132ce0bc0aacef951cf1dee2ae_icgraph_org.svg @@ -0,0 +1,107 @@ + + + + + + +penify_hook.commands.config_commands.load_env_files + + +Node1 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.get_llm_config + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.get_token + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2->Node3 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map new file mode 100644 index 0000000..69d3fb5 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 new file mode 100644 index 0000000..f524413 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.md5 @@ -0,0 +1 @@ +6d91ab0a314de630848fab3f24910dc1 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg new file mode 100644 index 0000000..1dc4493 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +penify_hook.commands.config_commands.config_jira_web + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg new file mode 100644 index 0000000..961450e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1config__commands_ad64a80de6cfdbed6d5d2fe582902bf13_cgraph_org.svg @@ -0,0 +1,108 @@ + + + + + + +penify_hook.commands.config_commands.config_jira_web + + +Node1 + + +penify_hook.commands.config +_commands.config_jira_web + + + + + +Node2 + + +penify_hook.commands.config +_commands.get_jira_config + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +penify_hook.commands.config +_commands.save_jira_config + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +penify_hook.commands.config +_commands.get_env_var_or +_default + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +penify_hook.commands.config +_commands.load_env_files + + + + + +Node2->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands.html new file mode 100644 index 0000000..1eb6aa4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.doc_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.doc_commands Namespace Reference
    +
    +
    + + + + + + + + +

    +Functions

     generate_doc (api_url, token, location=None)
     
     setup_docgen_parser (parser)
     
     handle_docgen (args)
     
    + + + +

    +Variables

    str docgen_description
     
    +

    Function Documentation

    + +

    ◆ generate_doc()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.commands.doc_commands.generate_doc ( api_url,
    token,
    location = None )
    +
    +
    Generates documentation based on the given parameters.
    +
    +This function initializes an API client using the provided API URL and token.
    +It then generates documentation by analyzing the specified location, which can
    +be a folder, a file, or the current working directory if no location is
    +provided. The function handles different types of analysis based on the input
    +location and reports any errors encountered during the process.
    +
    +Args:
    +    api_url (str): The URL of the API to connect to for documentation generation.
    +    token (str): The authentication token for accessing the API.
    +    location (str?): The path to a specific file or folder to analyze. If not provided,
    +        the current working directory is used.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ handle_docgen()

    + +
    +
    + + + + + + + +
    penify_hook.commands.doc_commands.handle_docgen ( args)
    +
    +
    Handle document generation and hook management based on subcommands.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setup_docgen_parser()

    + +
    +
    + + + + + + + +
    penify_hook.commands.doc_commands.setup_docgen_parser ( parser)
    +
    +
    Configure a parser for generating documentation using Git commands.
    +
    +
    +

    Variable Documentation

    + +

    ◆ docgen_description

    + +
    +
    + + + + +
    str penify_hook.commands.doc_commands.docgen_description
    +
    +Initial value:
    1= """Generate code documentation using Penify.
    +
    2
    +
    3This command requires you to be logged in to your Penify account.
    +
    4You can generate documentation for:
    +
    5- Current Git diff (default)
    +
    6- Specific file
    +
    7- Specific folder
    +
    8"""
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map new file mode 100644 index 0000000..76b237e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 new file mode 100644 index 0000000..52e920a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.md5 @@ -0,0 +1 @@ +9deb41e37ce70184ff07fb37d0aeeac4 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg new file mode 100644 index 0000000..91be21e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.doc_commands.generate_doc + + +Node1 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg new file mode 100644 index 0000000..5f5636a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a0db2cb8c0446d85dc4e7d34b3929dad7_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.doc_commands.generate_doc + + +Node1 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node2 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map new file mode 100644 index 0000000..13879b6 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 new file mode 100644 index 0000000..2c8b8ee --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.md5 @@ -0,0 +1 @@ +77112aad7e68837a8925bfc05a598e2b \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg new file mode 100644 index 0000000..faebae1 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg new file mode 100644 index 0000000..cf7deef --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1doc__commands_a41d631e51b0533b7d8dc780eea52e1cc_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.commands.doc_commands.handle_docgen + + +Node1 + + +penify_hook.commands.doc +_commands.handle_docgen + + + + + +Node2 + + +penify_hook.commands.doc +_commands.generate_doc + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1hook__commands.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1hook__commands.html new file mode 100644 index 0000000..69dfb5c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commands_1_1hook__commands.html @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commands.hook_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commands.hook_commands Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     install_git_hook (location, token)
     
     uninstall_git_hook (location)
     
    + + + + + +

    +Variables

    str HOOK_FILENAME = "post-commit"
     
    str HOOK_TEMPLATE
     
    +

    Function Documentation

    + +

    ◆ install_git_hook()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.commands.hook_commands.install_git_hook ( location,
    token )
    +
    +
    Install a post-commit Git hook that generates documentation for changed files.
    +
    +
    + +

    ◆ uninstall_git_hook()

    + +
    +
    + + + + + + + +
    penify_hook.commands.hook_commands.uninstall_git_hook ( location)
    +
    +
    Uninstalls the post-commit hook from the specified location.
    +
    +
    +

    Variable Documentation

    + +

    ◆ HOOK_FILENAME

    + +
    +
    + + + + +
    str penify_hook.commands.hook_commands.HOOK_FILENAME = "post-commit"
    +
    + +
    +
    + +

    ◆ HOOK_TEMPLATE

    + +
    +
    + + + + +
    str penify_hook.commands.hook_commands.HOOK_TEMPLATE
    +
    +Initial value:
    1= """#!/bin/sh
    +
    2# This is a post-commit hook generated by penify.
    +
    3# Automatically generates documentation for changed files after each commit.
    +
    4
    +
    5penify docgen -gf {git_folder_path} -t {token}
    +
    6"""
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.html new file mode 100644 index 0000000..df58cec --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.commit_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.commit_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  CommitDocGenHook
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.js new file mode 100644 index 0000000..da2cbba --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1commit__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1commit__analyzer = +[ + [ "CommitDocGenHook", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html", "classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1config__command.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1config__command.html new file mode 100644 index 0000000..054c176 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1config__command.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.config_command Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.config_command Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     setup_config_parser (parent_parser)
     
     handle_config (args)
     
    +

    Function Documentation

    + +

    ◆ handle_config()

    + +
    +
    + + + + + + + +
    penify_hook.config_command.handle_config ( args)
    +
    +
    Handle configuration settings based on the specified config type.
    +
    +This function processes different types of configurations such as LLM (Language
    +Model) and JIRA. It saves configurations, sets up web-based configurations, and
    +verifies JIRA connections. Depending on the `args.config_type`, it imports
    +necessary modules, handles configuration saving or setup, and optionally
    +verifies JIRA connectivity.
    +
    +Args:
    +    args (argparse.Namespace): Command-line arguments containing the type of configuration to handle.
    +
    +
    +
    + +

    ◆ setup_config_parser()

    + +
    +
    + + + + + + + +
    penify_hook.config_command.setup_config_parser ( parent_parser)
    +
    +
    Set up configuration parsers with subcommands for LLM and JIRA settings.
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1constants.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1constants.html new file mode 100644 index 0000000..c29fca9 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1constants.html @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.constants Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.constants Namespace Reference
    +
    +
    + + + + + + +

    +Variables

    str API_URL = 'http://localhost:8000/api'
     
    str DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
     
    +

    Variable Documentation

    + +

    ◆ API_URL

    + +
    +
    + + + + +
    str penify_hook.constants.API_URL = 'http://localhost:8000/api'
    +
    + +
    +
    + +

    ◆ DASHBOARD_URL

    + +
    +
    + + + + +
    str penify_hook.constants.DASHBOARD_URL = "https://dashboard.penify.dev/auth/localhost/login"
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.html new file mode 100644 index 0000000..f2aba2f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.file_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.file_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  FileAnalyzerGenHook
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.file_analyzer.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.js new file mode 100644 index 0000000..2fd7c22 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1file__analyzer.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1file__analyzer = +[ + [ "FileAnalyzerGenHook", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html", "classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook" ], + [ "logger", "namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.html new file mode 100644 index 0000000..d38f35c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.folder_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.folder_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  FolderAnalyzerGenHook
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.js new file mode 100644 index 0000000..01d86ca --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1folder__analyzer.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1folder__analyzer = +[ + [ "FolderAnalyzerGenHook", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html", "classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.html new file mode 100644 index 0000000..55a6655 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.git_analyzer Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.git_analyzer Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  GitDocGenHook
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.git_analyzer.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.js new file mode 100644 index 0000000..d89c507 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1git__analyzer.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1git__analyzer = +[ + [ "GitDocGenHook", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html", "classpenify__hook_1_1git__analyzer_1_1GitDocGenHook" ], + [ "logger", "namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.html new file mode 100644 index 0000000..d84b50d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.jira_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.jira_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  JiraClient
     
    + + + +

    +Variables

    bool JIRA_AVAILABLE = True
     
    +

    Variable Documentation

    + +

    ◆ JIRA_AVAILABLE

    + +
    +
    + + + + +
    bool penify_hook.jira_client.JIRA_AVAILABLE = True
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.js new file mode 100644 index 0000000..824018c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1jira__client.js @@ -0,0 +1,5 @@ +var namespacepenify__hook_1_1jira__client = +[ + [ "JiraClient", "classpenify__hook_1_1jira__client_1_1JiraClient.html", "classpenify__hook_1_1jira__client_1_1JiraClient" ], + [ "JIRA_AVAILABLE", "namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.html new file mode 100644 index 0000000..8d1a9c8 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.llm_client Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.llm_client Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  LLMClient
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.js new file mode 100644 index 0000000..9f99a1e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1llm__client.js @@ -0,0 +1,4 @@ +var namespacepenify__hook_1_1llm__client = +[ + [ "LLMClient", "classpenify__hook_1_1llm__client_1_1LLMClient.html", "classpenify__hook_1_1llm__client_1_1LLMClient" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1login__command.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1login__command.html new file mode 100644 index 0000000..3e9aba9 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1login__command.html @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.login_command Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.login_command Namespace Reference
    +
    +
    + + + + + + +

    +Functions

     setup_login_parser (parser)
     
     handle_login (args)
     
    +

    Function Documentation

    + +

    ◆ handle_login()

    + +
    +
    + + + + + + + +
    penify_hook.login_command.handle_login ( args)
    +
    +
    Initiates a user login process using predefined constants and the `login`
    +function.
    +
    +
    + +

    ◆ setup_login_parser()

    + +
    +
    + + + + + + + +
    penify_hook.login_command.setup_login_parser ( parser)
    +
    +
    Set up command-line arguments for login.
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main.html new file mode 100644 index 0000000..a46e9a1 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.main Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.main Namespace Reference
    +
    +
    + + + + +

    +Functions

     main ()
     
    +

    Function Documentation

    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    penify_hook.main.main ()
    +
    +
    Main function to handle command-line interface (CLI) interactions with Penify
    +services.
    +
    +This tool provides a command-line interface for generating smart commit
    +messages, configuring local-LLM and JIRA, and generating code documentation. It
    +supports basic commands that do not require login and advanced commands that
    +require user authentication. The `--version` flag can be used to display the
    +version information.
    +
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map new file mode 100644 index 0000000..442158b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 new file mode 100644 index 0000000..e85ed31 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.md5 @@ -0,0 +1 @@ +a4f96dd63f317a83c69771f984b80132 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg new file mode 100644 index 0000000..f67ffbe --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg new file mode 100644 index 0000000..7e1139c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_cgraph_org.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map new file mode 100644 index 0000000..fcb431b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 new file mode 100644 index 0000000..e5dd16d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.md5 @@ -0,0 +1 @@ +29c740851881b222377ae665d281c00f \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg new file mode 100644 index 0000000..681c657 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg new file mode 100644 index 0000000..26cf71b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1main_a245db84b8309d570226b2e147e18b5eb_icgraph_org.svg @@ -0,0 +1,30 @@ + + + + + + +penify_hook.main.main + + +Node1 + + +penify_hook.main.main + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils.html new file mode 100644 index 0000000..87e706f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils.html @@ -0,0 +1,703 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.ui_utils Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.ui_utils Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     format_info (message)
     
     format_success (message)
     
     format_warning (message)
     
     format_error (message)
     
     format_highlight (message)
     
     format_file_path (file_path)
     
     print_info (message)
     
     print_success (message)
     
     print_warning (message)
     
     print_error (message)
     
     print_processing (file_path)
     
     print_status (status, message)
     
     create_progress_bar (total, desc="Processing", unit="item")
     
     create_stage_progress_bar (stages, desc="Processing")
     
     update_stage (pbar, stage_name)
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     autoreset
     
     INFO_COLOR = Fore.CYAN
     
     SUCCESS_COLOR = Fore.GREEN
     
     WARNING_COLOR = Fore.YELLOW
     
     ERROR_COLOR = Fore.RED
     
     HIGHLIGHT_COLOR = Fore.BLUE
     
     NEUTRAL_COLOR = Fore.WHITE
     
    str SUCCESS_SYMBOL = "✓"
     
    str WARNING_SYMBOL = "○"
     
    str ERROR_SYMBOL = "✗"
     
    str PROCESSING_SYMBOL = "⟳"
     
    +

    Detailed Description

    +
    UI utilities for Penify CLI.
    +
    +This module provides utility functions for consistent UI formatting,
    +colored output, and progress indicators across the Penify CLI application.
    +

    Function Documentation

    + +

    ◆ create_progress_bar()

    + +
    +
    + + + + + + + + + + + + + + + + +
    penify_hook.ui_utils.create_progress_bar ( total,
    desc = "Processing",
    unit = "item" )
    +
    +
    Create a tqdm progress bar with consistent styling.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ create_stage_progress_bar()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.create_stage_progress_bar ( stages,
    desc = "Processing" )
    +
    +
    Create a tqdm progress bar for processing stages with consistent styling.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_error()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_error ( message)
    +
    +
    Format an error message with the specified error color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_file_path()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_file_path ( file_path)
    +
    +
    Format a file path with a warning color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_highlight()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_highlight ( message)
    +
    +
    Format a highlighted message with appropriate color.
    +
    +
    + +

    ◆ format_info()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_info ( message)
    +
    +
    Format an informational message with appropriate color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_success()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_success ( message)
    +
    +
    Formats a success message with green color and reset style.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ format_warning()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.format_warning ( message)
    +
    +
    Format a warning message with appropriate color.
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_error()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_error ( message)
    +
    +
    Print an error message with appropriate formatting.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_info()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_info ( message)
    +
    +
    Prints an informational message with formatting.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_processing()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_processing ( file_path)
    +
    +
    Print a processing message for a specified file.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_status()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.print_status ( status,
    message )
    +
    +
    Print a status message with an appropriate symbol.
    +
    +
    + +

    ◆ print_success()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_success ( message)
    +
    +
    Prints a formatted success message.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ print_warning()

    + +
    +
    + + + + + + + +
    penify_hook.ui_utils.print_warning ( message)
    +
    +
    Prints a warning message with formatted output.
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ update_stage()

    + +
    +
    + + + + + + + + + + + +
    penify_hook.ui_utils.update_stage ( pbar,
    stage_name )
    +
    +
    Update the progress bar with a new stage name.
    +
    +
    +

    Variable Documentation

    + +

    ◆ autoreset

    + +
    +
    + + + + +
    penify_hook.ui_utils.autoreset
    +
    + +
    +
    + +

    ◆ ERROR_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.ERROR_COLOR = Fore.RED
    +
    + +
    +
    + +

    ◆ ERROR_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.ERROR_SYMBOL = "✗"
    +
    + +
    +
    + +

    ◆ HIGHLIGHT_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE
    +
    + +
    +
    + +

    ◆ INFO_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.INFO_COLOR = Fore.CYAN
    +
    + +
    +
    + +

    ◆ NEUTRAL_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE
    +
    + +
    +
    + +

    ◆ PROCESSING_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳"
    +
    + +
    +
    + +

    ◆ SUCCESS_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN
    +
    + +
    +
    + +

    ◆ SUCCESS_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.SUCCESS_SYMBOL = "✓"
    +
    + +
    +
    + +

    ◆ WARNING_COLOR

    + +
    +
    + + + + +
    penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW
    +
    + +
    +
    + +

    ◆ WARNING_SYMBOL

    + +
    +
    + + + + +
    str penify_hook.ui_utils.WARNING_SYMBOL = "○"
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map new file mode 100644 index 0000000..c3c3e95 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 new file mode 100644 index 0000000..e761ea5 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.md5 @@ -0,0 +1 @@ +3c38bcd27919dc8de91ac54f38458e66 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg new file mode 100644 index 0000000..4ec0e0e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_error + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.ui_utils.format +_error + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg new file mode 100644 index 0000000..ad1d744 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a35b79a7837fd654ad8f0cdb4e6e87598_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_error + + +Node1 + + +penify_hook.ui_utils.print +_error + + + + + +Node2 + + +penify_hook.ui_utils.format +_error + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map new file mode 100644 index 0000000..c08f35c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 new file mode 100644 index 0000000..8ba8f00 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.md5 @@ -0,0 +1 @@ +a173588dc3c74cb84d6500d69570dae9 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg new file mode 100644 index 0000000..d133232 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_info + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg new file mode 100644 index 0000000..01e761e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a3cee29e999fa3c812725cb98f24aae4c_cgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +penify_hook.ui_utils.print_info + + +Node1 + + +penify_hook.ui_utils.print_info + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map new file mode 100644 index 0000000..ccf59bb --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 new file mode 100644 index 0000000..9885692 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.md5 @@ -0,0 +1 @@ +a6edbcf33d875fc9e8ec2114278fdbe7 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg new file mode 100644 index 0000000..1d590a5 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_success + + +Node1 + + +penify_hook.ui_utils.format +_success + + + + + +Node2 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg new file mode 100644 index 0000000..5516d4a --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a56ca95113c53214d848659a52a099f5e_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_success + + +Node1 + + +penify_hook.ui_utils.format +_success + + + + + +Node2 + + +penify_hook.ui_utils.print +_success + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map new file mode 100644 index 0000000..543f29f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 new file mode 100644 index 0000000..cd71f48 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.md5 @@ -0,0 +1 @@ +3fe8e64656feb94d8d766a06e0eeffa6 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg new file mode 100644 index 0000000..6312e92 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg new file mode 100644 index 0000000..e6c1519 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a583e3b1ec7b75f08653a9f6cfb897405_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.ui_utils.create_stage_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map new file mode 100644 index 0000000..91f8d4f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 new file mode 100644 index 0000000..a2351bb --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.md5 @@ -0,0 +1 @@ +19018aa36c614d275a0b9fa78d6c4a06 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg new file mode 100644 index 0000000..ecee302 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_warning + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.ui_utils.format +_warning + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg new file mode 100644 index 0000000..be1fc4d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a73f112b02d36b74c88a3ce3ed1458b45_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_warning + + +Node1 + + +penify_hook.ui_utils.print +_warning + + + + + +Node2 + + +penify_hook.ui_utils.format +_warning + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map new file mode 100644 index 0000000..099c7ce --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 new file mode 100644 index 0000000..4c46648 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.md5 @@ -0,0 +1 @@ +2a1ef2958c91d656bda941549590f8cd \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg new file mode 100644 index 0000000..7707f74 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_warning + + +Node1 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg new file mode 100644 index 0000000..4b752da --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a81190fd240641e2c83f6a047490e7797_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_warning + + +Node1 + + +penify_hook.ui_utils.format +_warning + + + + + +Node2 + + +penify_hook.ui_utils.print +_warning + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map new file mode 100644 index 0000000..fdbf33d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 new file mode 100644 index 0000000..e665eeb --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.md5 @@ -0,0 +1 @@ +377e2e611961eae29e6e68fec93ccea8 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg new file mode 100644 index 0000000..5cdfd3f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_success + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.ui_utils.format +_success + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg new file mode 100644 index 0000000..3ae0228 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9bff909b9e155a344597f69a0530754b_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_success + + +Node1 + + +penify_hook.ui_utils.print +_success + + + + + +Node2 + + +penify_hook.ui_utils.format +_success + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map new file mode 100644 index 0000000..e4ee6c8 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 new file mode 100644 index 0000000..aee70ff --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.md5 @@ -0,0 +1 @@ +51b93c94dd1dd7360725bd9ecdcd049a \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg new file mode 100644 index 0000000..45c4ff2 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_file_path + + +Node1 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node2 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg new file mode 100644 index 0000000..2192485 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_a9de53cca2e23a993884797e523337e41_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_file_path + + +Node1 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node2 + + +penify_hook.ui_utils.print +_processing + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map new file mode 100644 index 0000000..04fbb0d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 new file mode 100644 index 0000000..0d61e2e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.md5 @@ -0,0 +1 @@ +9da14a7b18d0c9bbc2b0ae0b579a4359 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg new file mode 100644 index 0000000..6f610ce --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_info + + +Node1 + + +penify_hook.ui_utils.format_info + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg new file mode 100644 index 0000000..909152f --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aa0c6826668b45c778d864f5ae741e1b2_icgraph_org.svg @@ -0,0 +1,77 @@ + + + + + + +penify_hook.ui_utils.format_info + + +Node1 + + +penify_hook.ui_utils.format_info + + + + + +Node2 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +penify_hook.ui_utils.create +_stage_progress_bar + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +penify_hook.ui_utils.print_info + + + + + +Node1->Node4 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map new file mode 100644 index 0000000..6ddca67 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 new file mode 100644 index 0000000..7d116e5 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.md5 @@ -0,0 +1 @@ +bf2e3a9ea057ecb4eef1c7637a63ec2d \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg new file mode 100644 index 0000000..1a28fe1 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + +penify_hook.ui_utils.create_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg new file mode 100644 index 0000000..fd2e0d6 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_aae4493a3c0c62d3d3cec0e4c96f4fca5_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +penify_hook.ui_utils.create_progress_bar + + +Node1 + + +penify_hook.ui_utils.create +_progress_bar + + + + + +Node2 + + +penify_hook.ui_utils.format_info + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map new file mode 100644 index 0000000..acc2a8e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 new file mode 100644 index 0000000..1310349 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.md5 @@ -0,0 +1 @@ +e2867090c80f81524dcd514523e0702a \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg new file mode 100644 index 0000000..f5afa3e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.format_error + + +Node1 + + +penify_hook.ui_utils.format +_error + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg new file mode 100644 index 0000000..6759115 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_acee226ee36d43076ed54dade970dc0ca_icgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.format_error + + +Node1 + + +penify_hook.ui_utils.format +_error + + + + + +Node2 + + +penify_hook.ui_utils.print +_error + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map new file mode 100644 index 0000000..33581a9 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 new file mode 100644 index 0000000..0da04ec --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.md5 @@ -0,0 +1 @@ +ce180e2a90aa2b105fddd6414529bb27 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg new file mode 100644 index 0000000..2c10782 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + +penify_hook.ui_utils.print_processing + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg new file mode 100644 index 0000000..983dc7d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1ui__utils_ad4f7cab36c3b1f09507654b119d45bfb_cgraph_org.svg @@ -0,0 +1,41 @@ + + + + + + +penify_hook.ui_utils.print_processing + + +Node1 + + +penify_hook.ui_utils.print +_processing + + + + + +Node2 + + +penify_hook.ui_utils.format +_file_path + + + + + +Node1->Node2 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.html b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.html new file mode 100644 index 0000000..c113f9b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.html @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + +penify-cli: penify_hook.utils Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    penify_hook.utils Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  GitRepoNotFoundError
     
    + + + + + + + +

    +Functions

     get_repo_details (Repo repo)
     
     recursive_search_git_folder (folder_path)
     
     find_git_parent (path)
     
    + + + +

    +Variables

     logger = logging.getLogger(__name__)
     
    +

    Function Documentation

    + +

    ◆ find_git_parent()

    + +
    +
    + + + + + + + +
    penify_hook.utils.find_git_parent ( path)
    +
    +
    Traverse up from the given path to find the nearest directory containing a .git
    +subdirectory.
    +
    +
    + +

    ◆ get_repo_details()

    + +
    +
    + + + + + + + +
    penify_hook.utils.get_repo_details (Repo repo)
    +
    +
    Determine the details of a repository including its remote URL, hosting
    +service, organization name, and repository name.
    +
    +This function extracts the remote URL from the given Git repository object and
    +determines the hosting service (e.g., GitHub, Azure DevOps, Bitbucket, GitLab).
    +It then parses the URL to extract the organization name and repository name. If
    +the URL does not match any known hosting service pattern, it sets the hosting
    +service as "Unknown". The function handles exceptions that may occur during
    +this process and logs an error message if needed.
    +
    +Args:
    +    repo (Repo): A GitPython Repo object representing the local git repository.
    +
    +Returns:
    +    dict: A dictionary containing the organization name, repository name, and hosting
    +        service.
    +
    +
    +
    + +

    ◆ recursive_search_git_folder()

    + +
    +
    + + + + + + + +
    penify_hook.utils.recursive_search_git_folder ( folder_path)
    +
    +
    Recursively searches for a .git folder starting from the given directory.
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ logger

    + +
    +
    + + + + +
    penify_hook.utils.logger = logging.getLogger(__name__)
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.js b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.js new file mode 100644 index 0000000..5435ff4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils.js @@ -0,0 +1,8 @@ +var namespacepenify__hook_1_1utils = +[ + [ "GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ], + [ "find_git_parent", "namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2", null ], + [ "get_repo_details", "namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19", null ], + [ "recursive_search_git_folder", "namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a", null ], + [ "logger", "namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map new file mode 100644 index 0000000..8c6de3d --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 new file mode 100644 index 0000000..eb13324 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.md5 @@ -0,0 +1 @@ +a61951c5b4fd274f26e71bcbe190a8cc \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg new file mode 100644 index 0000000..0a9ceb7 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg new file mode 100644 index 0000000..41437ef --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_cgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map new file mode 100644 index 0000000..6bc41f4 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 new file mode 100644 index 0000000..ff9ef84 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.md5 @@ -0,0 +1 @@ +4503fbb4dc37d2af2eaeea5d61541a37 \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg new file mode 100644 index 0000000..315ad23 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg new file mode 100644 index 0000000..c72f8f6 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacepenify__hook_1_1utils_a9d723ca510c90ac0390819dcae3a800a_icgraph_org.svg @@ -0,0 +1,31 @@ + + + + + + +penify_hook.utils.recursive_search_git_folder + + +Node1 + + +penify_hook.utils.recursive +_search_git_folder + + + + + +Node1->Node1 + + + + + + + + diff --git a/docs-test-3rd-techno/html/namespaces.html b/docs-test-3rd-techno/html/namespaces.html new file mode 100644 index 0000000..ca001a7 --- /dev/null +++ b/docs-test-3rd-techno/html/namespaces.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + +penify-cli: Namespace List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespaces_dup.js b/docs-test-3rd-techno/html/namespaces_dup.js new file mode 100644 index 0000000..7fcb39b --- /dev/null +++ b/docs-test-3rd-techno/html/namespaces_dup.js @@ -0,0 +1,20 @@ +var namespaces_dup = +[ + [ "penify_hook", "namespacepenify__hook.html", "namespacepenify__hook" ], + [ "setup", "namespacesetup.html", [ + [ "author", "namespacesetup.html#a3a57a4772d418a06835249cbade0d86a", null ], + [ "author_email", "namespacesetup.html#a5b08034343aa2be607722a8b315f3625", null ], + [ "classifiers", "namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785", null ], + [ "description", "namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0", null ], + [ "entry_points", "namespacesetup.html#ada7058afc98897f073d3f3b8b9157059", null ], + [ "install_requires", "namespacesetup.html#abead4f26b530856f858f0d44c7cf2588", null ], + [ "long_description", "namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde", null ], + [ "long_description_content_type", "namespacesetup.html#a3796ea10c998699d07d391414ff5d720", null ], + [ "name", "namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f", null ], + [ "packages", "namespacesetup.html#aff2375a361fd5865c77bd9aa093be747", null ], + [ "python_requires", "namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf", null ], + [ "url", "namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb", null ], + [ "version", "namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c", null ] + ] ], + [ "tests", "namespacetests.html", "namespacetests" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacesetup.html b/docs-test-3rd-techno/html/namespacesetup.html new file mode 100644 index 0000000..9d85bcf --- /dev/null +++ b/docs-test-3rd-techno/html/namespacesetup.html @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + +penify-cli: setup Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    setup Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     name
     
     version
     
     packages
     
     install_requires
     
     entry_points
     
     author
     
     author_email
     
     description
     
     long_description
     
     long_description_content_type
     
     url
     
     classifiers
     
     python_requires
     
    +

    Variable Documentation

    + +

    ◆ author

    + +
    +
    + + + + +
    setup.author
    +
    + +
    +
    + +

    ◆ author_email

    + +
    +
    + + + + +
    setup.author_email
    +
    + +
    +
    + +

    ◆ classifiers

    + +
    +
    + + + + +
    setup.classifiers
    +
    + +
    +
    + +

    ◆ description

    + +
    +
    + + + + +
    setup.description
    +
    + +
    +
    + +

    ◆ entry_points

    + +
    +
    + + + + +
    setup.entry_points
    +
    + +
    +
    + +

    ◆ install_requires

    + +
    +
    + + + + +
    setup.install_requires
    +
    + +
    +
    + +

    ◆ long_description

    + +
    +
    + + + + +
    setup.long_description
    +
    + +
    +
    + +

    ◆ long_description_content_type

    + +
    +
    + + + + +
    setup.long_description_content_type
    +
    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    setup.name
    +
    + +
    +
    + +

    ◆ packages

    + +
    +
    + + + + +
    setup.packages
    +
    + +
    +
    + +

    ◆ python_requires

    + +
    +
    + + + + +
    setup.python_requires
    +
    + +
    +
    + +

    ◆ url

    + +
    +
    + + + + +
    setup.url
    +
    + +
    +
    + +

    ◆ version

    + +
    +
    + + + + +
    setup.version
    +
    + +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests.html b/docs-test-3rd-techno/html/namespacetests.html new file mode 100644 index 0000000..f25c37e --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests Namespace Reference
    +
    +
    + + + + + + + + + + + + +

    +Namespaces

    namespace  conftest
     
    namespace  test_commit_commands
     
    namespace  test_config_commands
     
    namespace  test_doc_commands
     
    namespace  test_web_config
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests.js b/docs-test-3rd-techno/html/namespacetests.js new file mode 100644 index 0000000..30e7f6c --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests.js @@ -0,0 +1,20 @@ +var namespacetests = +[ + [ "conftest", "namespacetests_1_1conftest.html", null ], + [ "test_commit_commands", "namespacetests_1_1test__commit__commands.html", "namespacetests_1_1test__commit__commands" ], + [ "test_config_commands", "namespacetests_1_1test__config__commands.html", "namespacetests_1_1test__config__commands" ], + [ "test_doc_commands", "namespacetests_1_1test__doc__commands.html", [ + [ "test_generate_doc_error_handling", "namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6", null ], + [ "test_generate_doc_file_location", "namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16", null ], + [ "test_generate_doc_folder_location", "namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d", null ], + [ "test_generate_doc_no_location", "namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b", null ], + [ "test_generate_doc_with_file_exception", "namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68", null ], + [ "test_generate_doc_with_folder_exception", "namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee", null ], + [ "test_handle_docgen_generate", "namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5", null ], + [ "test_handle_docgen_install_hook", "namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9", null ], + [ "test_handle_docgen_no_token", "namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c", null ], + [ "test_handle_docgen_uninstall_hook", "namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b", null ], + [ "test_setup_docgen_parser", "namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042", null ] + ] ], + [ "test_web_config", "namespacetests_1_1test__web__config.html", "namespacetests_1_1test__web__config" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacetests_1_1conftest.html b/docs-test-3rd-techno/html/namespacetests_1_1conftest.html new file mode 100644 index 0000000..10ec4f0 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1conftest.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.conftest Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    tests.conftest Namespace Reference
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.html b/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.html new file mode 100644 index 0000000..025f3c0 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_commit_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_commit_commands Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestCommitCommands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.js b/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.js new file mode 100644 index 0000000..03fd373 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__commit__commands.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__commit__commands = +[ + [ "TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.html b/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.html new file mode 100644 index 0000000..ed1cf6b --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_config_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_config_commands Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestConfigCommands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.js b/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.js new file mode 100644 index 0000000..ae998ee --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__config__commands.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__config__commands = +[ + [ "TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__doc__commands.html b/docs-test-3rd-techno/html/namespacetests_1_1test__doc__commands.html new file mode 100644 index 0000000..9a2fa54 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__doc__commands.html @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_doc_commands Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_doc_commands Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit)
     
     test_setup_docgen_parser ()
     
     test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     test_handle_docgen_no_token (mock_exit, mock_get_token)
     
     test_generate_doc_with_file_exception (mock_api_client, mock_getcwd)
     
     test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd)
     
    +

    Function Documentation

    + +

    ◆ test_generate_doc_error_handling()

    + +
    +
    + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_error_handling ( mock_api_client,
    mock_git_analyzer,
    mock_exit )
    +
    +
    Generate a documentation string for the provided code snippet using
    +Google Docstring style.
    +
    +Short one line description: Test function to ensure proper error
    +handling during API calls with GitAnalyzer.  Multiline long description:
    +This test function is designed to verify that the generate_doc function
    +handles exceptions correctly when an error occurs during API interaction
    +with GitAnalyzer. It sets up a mock API client and a mock Git analyzer,
    +causing the analyzer to raise an exception to simulate a failure
    +condition. The function then asserts that the exit code is set to 1 when
    +the error handling mechanism is invoked.
    +
    +Args:
    +    mock_api_client (MagicMock): A mock object simulating the API client.
    +    mock_git_analyzer (MagicMock): A mock object simulating the Git analyzer, configured to raise an
    +        exception.
    +    mock_exit (MagicMock): A mock object representing the exit function, which should be called
    +        with an error code.
    +
    +
    +
    + +

    ◆ test_generate_doc_file_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_file_location ( mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test generating a documentation file location.
    +
    +This function tests the process of generating a documentation file
    +location using mock objects for API client, folder analyzer, file
    +analyzer, and Git analyzer. It sets up the necessary mocks, calls the
    +`generate_doc` function with specified parameters, and asserts that the
    +appropriate methods on the mock objects are called as expected.
    +
    +Args:
    +    mock_api_client (MagicMock): Mock object for the API client.
    +    mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.
    +    mock_file_analyzer (MagicMock): Mock object for the file analyzer.
    +    mock_git_analyzer (MagicMock): Mock object for the Git analyzer.
    +
    +
    +
    + +

    ◆ test_generate_doc_folder_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_folder_location ( mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test the function to generate documentation for a folder location.
    +
    +It sets up mock objects for API client, folder analyzer, file analyzer,
    +and Git analyzer, then calls the `generate_doc` function with specified
    +parameters. Finally, it asserts that the correct methods on the mock
    +objects were called as expected.
    +
    +Args:
    +    mock_api_client (MagicMock): Mock object for the API client.
    +    mock_folder_analyzer (MagicMock): Mock object for the folder analyzer.
    +    mock_file_analyzer (MagicMock): Mock object for the file analyzer.
    +    mock_git_analyzer (MagicMock): Mock object for the Git analyzer.
    +
    +
    +
    + +

    ◆ test_generate_doc_no_location()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_no_location ( mock_getcwd,
    mock_api_client,
    mock_folder_analyzer,
    mock_file_analyzer,
    mock_git_analyzer )
    +
    +
    Test function to generate documentation without location information.
    +
    +This function sets up mocks for the API client, current working
    +directory, and Git analyzer. It then calls the `generate_doc` function
    +with a fake API URL and token. The function is expected to initialize
    +the API client, configure the Git analyzer, and run it without any
    +location information.
    +
    +Args:
    +    mock_getcwd (MagicMock): Mock for os.getcwd().
    +    mock_api_client (MagicMock): Mock for creating an API client.
    +    mock_folder_analyzer (MagicMock): Mock for folder analysis.
    +    mock_file_analyzer (MagicMock): Mock for file analysis.
    +    mock_git_analyzer (MagicMock): Mock for Git analyzer setup.
    +
    +
    +
    + +

    ◆ test_generate_doc_with_file_exception()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_with_file_exception ( mock_api_client,
    mock_getcwd )
    +
    +
    Generate documentation from a Python source file.
    +
    +This function reads a Python file and generates a docstring based on its
    +content. It uses mock objects to simulate API calls and directory
    +operations during testing.
    +
    +Args:
    +    mock_api_client (unittest.mock.MagicMock): A mock object for simulating API client behavior.
    +    mock_getcwd (unittest.mock.MagicMock): A mock object for simulating the current working directory function.
    +
    +
    +
    + +

    ◆ test_generate_doc_with_folder_exception()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_generate_doc_with_folder_exception ( mock_api_client,
    mock_getcwd )
    +
    +
    Generate documentation from a given API endpoint and save it to a
    +folder.
    +
    +This function fetches data from the specified API endpoint, processes
    +it, and saves the generated documentation in the provided folder. If an
    +error occurs during the fetching process, a SystemExit exception is
    +raised with an appropriate message.
    +
    +Args:
    +    api_url (str): The URL of the API endpoint from which data will be fetched.
    +    token (str): The authentication token required to access the API.
    +    folder_path (str): The path to the folder where the documentation will be saved.
    +
    +
    +
    + +

    ◆ test_handle_docgen_generate()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_generate ( mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the direct documentation generation functionality.
    +
    +This function tests the `handle_docgen` function when no subcommand is
    +provided. It verifies that the document generation hook is called and
    +the uninstall and install hooks are not called.
    +
    +Args:
    +    mock_get_token (MagicMock): Mocked function to get authentication token.
    +    mock_generate_doc (MagicMock): Mocked function for generating documentation.
    +    mock_uninstall_hook (MagicMock): Mocked function for uninstalling the document generation hook.
    +    mock_install_hook (MagicMock): Mocked function for installing the document generation hook.
    +
    +
    +
    + +

    ◆ test_handle_docgen_install_hook()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_install_hook ( mock_exit,
    mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the handling of the 'install-hook' subcommand.
    +
    +This function sets up a mock environment where it simulates the
    +execution of the 'install-hook' subcommand. It verifies that the
    +`mock_install_hook` is called with the correct arguments, while
    +`mock_generate_doc` and `mock_uninstall_hook` are not called.
    +
    +Args:
    +    mock_exit (MagicMock): Mock object for sys.exit.
    +    mock_get_token (MagicMock): Mock object to simulate fetching a token.
    +    mock_generate_doc (MagicMock): Mock object to simulate generating documentation.
    +    mock_uninstall_hook (MagicMock): Mock object to simulate uninstalling a hook.
    +    mock_install_hook (MagicMock): Mock object to simulate installing a hook.
    +
    +
    +
    + +

    ◆ test_handle_docgen_no_token()

    + +
    +
    + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_no_token ( mock_exit,
    mock_get_token )
    +
    +
    Test the behavior of the `handle_docgen` function when no token is
    +provided.
    +
    +This function asserts that if no token is returned by `mock_get_token`,
    +the `handle_docgen` function will call `mock_exit` with a status code of
    +1.
    +
    +Args:
    +    mock_exit (MagicMock): A MagicMock object simulating the `exit` function.
    +    mock_get_token (MagicMock): A MagicMock object simulating the `get_token` function.
    +
    +
    +
    + +

    ◆ test_handle_docgen_uninstall_hook()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    tests.test_doc_commands.test_handle_docgen_uninstall_hook ( mock_exit,
    mock_get_token,
    mock_generate_doc,
    mock_uninstall_hook,
    mock_install_hook )
    +
    +
    Test the uninstall-hook subcommand of the handle_docgen function.
    +This test case sets up a mock environment and verifies that the
    +uninstall-hook is called with the correct location, while generate_doc
    +and install_hook are not called.
    +
    +Args:
    +    mock_exit (MagicMock): A mock for the exit function.
    +    mock_get_token (MagicMock): A mock for the get_token function.
    +    mock_generate_doc (MagicMock): A mock for the generate_doc function.
    +    mock_uninstall_hook (MagicMock): A mock for the uninstall_hook function.
    +    mock_install_hook (MagicMock): A mock for the install_hook function.
    +
    +
    +
    + +

    ◆ test_setup_docgen_parser()

    + +
    +
    + + + + + + + +
    tests.test_doc_commands.test_setup_docgen_parser ()
    +
    +
    Test the setup_docgen_parser function to ensure it properly configures
    +the ArgumentParser for docgen options.
    +
    +It verifies that the parser correctly sets up docgen options and handles
    +different subcommands like 'install-hook' and 'uninstall-hook'.
    +
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.html b/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.html new file mode 100644 index 0000000..b502ee1 --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: tests.test_web_config Namespace Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    tests.test_web_config Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  TestWebConfig
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.js b/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.js new file mode 100644 index 0000000..9c444bb --- /dev/null +++ b/docs-test-3rd-techno/html/namespacetests_1_1test__web__config.js @@ -0,0 +1,4 @@ +var namespacetests_1_1test__web__config = +[ + [ "TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/nav_f.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/nav_fd.png b/docs-test-3rd-techno/html/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/nav_g.png b/docs-test-3rd-techno/html/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@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/navtree.css b/docs-test-3rd-techno/html/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/docs-test-3rd-techno/html/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs-test-3rd-techno/html/navtree.js b/docs-test-3rd-techno/html/navtree.js new file mode 100644 index 0000000..2d4fa84 --- /dev/null +++ b/docs-test-3rd-techno/html/navtree.js @@ -0,0 +1,483 @@ +/* + @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 initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + + + + + + + + + + +penify-cli: Related Pages + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    + +
    + + + + + diff --git a/docs-test-3rd-techno/html/penify-cli-documentation_8md.html b/docs-test-3rd-techno/html/penify-cli-documentation_8md.html new file mode 100644 index 0000000..aa94618 --- /dev/null +++ b/docs-test-3rd-techno/html/penify-cli-documentation_8md.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/docs/penify-cli-documentation.md File Reference
    +
    +
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/penify__hook_2____init_____8py.html b/docs-test-3rd-techno/html/penify__hook_2____init_____8py.html new file mode 100644 index 0000000..068e690 --- /dev/null +++ b/docs-test-3rd-techno/html/penify__hook_2____init_____8py.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  penify_hook
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/penify__hook_2commands_2____init_____8py.html b/docs-test-3rd-techno/html/penify__hook_2commands_2____init_____8py.html new file mode 100644 index 0000000..1137551 --- /dev/null +++ b/docs-test-3rd-techno/html/penify__hook_2commands_2____init_____8py.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/commands/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.commands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/plus.svg b/docs-test-3rd-techno/html/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/docs-test-3rd-techno/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/plusd.svg b/docs-test-3rd-techno/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs-test-3rd-techno/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/resize.js b/docs-test-3rd-techno/html/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/docs-test-3rd-techno/html/resize.js @@ -0,0 +1,147 @@ +/* + @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 initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs-test-3rd-techno/html/search/all_0.js b/docs-test-3rd-techno/html/search/all_0.js new file mode 100644 index 0000000..49cf098 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_3a_20efficient_20git_20commits_20with_20ai_0',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_1.js b/docs-test-3rd-techno/html/search/all_1.js new file mode 100644 index 0000000..6b01f09 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_3a_20documentation_20generation_20pipeline_0',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_10.js b/docs-test-3rd-techno/html/search/all_10.js new file mode 100644 index 0000000..b183232 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_10.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['l_20location_20tt_0',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['leads_1',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['legacy_20code_20understanding_2',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['license_3',['License',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md172',1,'']]], + ['line_20configuration_4',['Command-Line Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'']]], + ['list_5fall_5ffiles_5fin_5fdir_5',['list_all_files_in_dir',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['litellm_6',['litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24',1,'penify_hook::llm_client::LLMClient']]], + ['llm_7',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['llm_20and_20jira_20integration_8',['LLM and JIRA Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'']]], + ['llm_20configuration_9',['LLM Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md23',1,'LLM Configuration'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md168',1,'Local LLM Configuration']]], + ['llm_5fclient_10',['llm_client',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ad93360e31f2ec58a0d7c9f08b219028a',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['llm_5fclient_2epy_11',['llm_client.py',['../llm__client_8py.html',1,'']]], + ['llmclient_12',['LLMClient',['../classpenify__hook_1_1llm__client_1_1LLMClient.html',1,'penify_hook::llm_client']]], + ['llms_13',['Supported LLMs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md25',1,'']]], + ['load_5fenv_5ffiles_14',['load_env_files',['../namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae',1,'penify_hook::commands::config_commands']]], + ['local_15',['Ollama (Local)',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md28',1,'']]], + ['local_20llm_16',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['local_20llm_20configuration_17',['Local LLM Configuration',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md168',1,'']]], + ['location_18',['Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'Custom Hook Location'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md83',1,'Installation Location']]], + ['location_20tt_19',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['locations_20',['Configuration Locations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md35',1,'']]], + ['logger_21',['logger',['../namespacepenify__hook_1_1file__analyzer.html#af419a4965f079d58cac5a5281ddb1828',1,'penify_hook.file_analyzer.logger'],['../namespacepenify__hook_1_1git__analyzer.html#ac4ce143fdca789a79c66852c37d7363a',1,'penify_hook.git_analyzer.logger'],['../namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01',1,'penify_hook.utils.logger']]], + ['login_22',['Login',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md164',1,'']]], + ['login_23',['login',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6',1,'penify_hook::commands::auth_commands']]], + ['login_20command_24',['Login Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md141',1,'']]], + ['login_20process_25',['Login Process',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md44',1,'']]], + ['login_20required_26',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md163',1,'']]], + ['login_20required_27',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md160',1,'']]], + ['login_5fcommand_2epy_28',['login_command.py',['../login__command_8py.html',1,'']]], + ['logs_29',['Logs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md61',1,'']]], + ['long_5fdescription_30',['long_description',['../namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde',1,'setup']]], + ['long_5fdescription_5fcontent_5ftype_31',['long_description_content_type',['../namespacesetup.html#a3796ea10c998699d07d391414ff5d720',1,'setup']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_11.js b/docs-test-3rd-techno/html/search/all_11.js new file mode 100644 index 0000000..9e8f6cd --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_11.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['m_20message_20tt_0',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['main_1',['main',['../namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb',1,'penify_hook::main']]], + ['main_2epy_2',['main.py',['../main_8py.html',1,'']]], + ['management_3',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md166',1,'']]], + ['manual_20documentation_4',['Manual Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md111',1,'']]], + ['manual_20hook_20removal_5',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['members_6',['Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['message_7',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['message_20generation_8',['Commit Message Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'']]], + ['message_20tt_9',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['mock_5fapi_5fclient_10',['mock_api_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fcommit_5fdoc_5fgen_11',['mock_commit_doc_gen',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fgit_5ffolder_5fsearch_12',['mock_git_folder_search',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fjira_5fclient_13',['mock_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fllm_5fclient_14',['mock_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fprint_5ffunctions_15',['mock_print_functions',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab',1,'tests::test_commit_commands::TestCommitCommands']]], + ['model_16',['model',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#abc2cb6b1d6d9b5dc16401ca078ec8c10',1,'penify_hook::llm_client::LLMClient']]], + ['modifying_20hook_20behavior_17',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_12.js b/docs-test-3rd-techno/html/search/all_12.js new file mode 100644 index 0000000..a84c677 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['name_0',['name',['../namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f',1,'setup']]], + ['neutral_5fcolor_1',['NEUTRAL_COLOR',['../namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5',1,'penify_hook::ui_utils']]], + ['new_20team_20members_2',['New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['no_20login_20required_3',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md160',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_13.js b/docs-test-3rd-techno/html/search/all_13.js new file mode 100644 index 0000000..8b9455d --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_13.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['of_20contents_0',['of Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['ollama_20local_1',['Ollama (Local)',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md28',1,'']]], + ['onboarding_20new_20team_20members_2',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]], + ['only_20with_20context_3',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['openai_4',['OpenAI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md29',1,'Azure OpenAI'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md26',1,'OpenAI']]], + ['option_20combinations_5',['Option Combinations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md6',1,'Option Combinations'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md71',1,'Option Combinations']]], + ['options_6',['Options',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md2',1,'Command Options'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md66',1,'Command Options']]], + ['options_3a_7',['Options:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md132',1,'Options:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md148',1,'Options:']]], + ['overview_8',['Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md47',1,'Command Overview'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md128',1,'Commands Overview'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md21',1,'Configuration Overview']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_14.js b/docs-test-3rd-techno/html/search/all_14.js new file mode 100644 index 0000000..d0acd98 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_14.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['packages_0',['packages',['../namespacesetup.html#aff2375a361fd5865c77bd9aa093be747',1,'setup']]], + ['path_1',['path',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a79fceaf7882b9bcf1075a24262c5d7e2',1,'penify_hook::commands::config_commands']]], + ['penify_20cli_20commit_20commands_2',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['penify_20cli_20configuration_20commands_3',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]], + ['penify_20cli_20detailed_20usage_20guide_4',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['penify_20cli_20documentation_5',['Penify CLI Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'']]], + ['penify_20cli_20documentation_6',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['penify_20cli_20documentation_20generation_20commands_7',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['penify_20cli_20example_20workflows_8',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['penify_2dcli_2ddocumentation_2emd_9',['penify-cli-documentation.md',['../penify-cli-documentation_8md.html',1,'']]], + ['penify_5fhook_10',['penify_hook',['../namespacepenify__hook.html',1,'']]], + ['penify_5fhook_3a_3aapi_5fclient_11',['api_client',['../namespacepenify__hook_1_1api__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3abase_5fanalyzer_12',['base_analyzer',['../namespacepenify__hook_1_1base__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_13',['commands',['../namespacepenify__hook_1_1commands.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3a_3aauth_5fcommands_14',['auth_commands',['../namespacepenify__hook_1_1commands_1_1auth__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3acommit_5fcommands_15',['commit_commands',['../namespacepenify__hook_1_1commands_1_1commit__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3aconfig_5fcommands_16',['config_commands',['../namespacepenify__hook_1_1commands_1_1config__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3adoc_5fcommands_17',['doc_commands',['../namespacepenify__hook_1_1commands_1_1doc__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3ahook_5fcommands_18',['hook_commands',['../namespacepenify__hook_1_1commands_1_1hook__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommit_5fanalyzer_19',['commit_analyzer',['../namespacepenify__hook_1_1commit__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconfig_5fcommand_20',['config_command',['../namespacepenify__hook_1_1config__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconstants_21',['constants',['../namespacepenify__hook_1_1constants.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afile_5fanalyzer_22',['file_analyzer',['../namespacepenify__hook_1_1file__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afolder_5fanalyzer_23',['folder_analyzer',['../namespacepenify__hook_1_1folder__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3agit_5fanalyzer_24',['git_analyzer',['../namespacepenify__hook_1_1git__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3ajira_5fclient_25',['jira_client',['../namespacepenify__hook_1_1jira__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3allm_5fclient_26',['llm_client',['../namespacepenify__hook_1_1llm__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3alogin_5fcommand_27',['login_command',['../namespacepenify__hook_1_1login__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3amain_28',['main',['../namespacepenify__hook_1_1main.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aui_5futils_29',['ui_utils',['../namespacepenify__hook_1_1ui__utils.html',1,'penify_hook']]], + ['penify_5fhook_3a_3autils_30',['utils',['../namespacepenify__hook_1_1utils.html',1,'penify_hook']]], + ['pipeline_31',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['post_20commit_20hook_32',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['precedence_33',['Token Precedence',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md46',1,'']]], + ['print_5ferror_34',['print_error',['../namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598',1,'penify_hook::ui_utils']]], + ['print_5finfo_35',['print_info',['../namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c',1,'penify_hook::ui_utils']]], + ['print_5fprocessing_36',['print_processing',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing()'],['../namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb',1,'penify_hook.ui_utils.print_processing(file_path)']]], + ['print_5fstatus_37',['print_status',['../namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7',1,'penify_hook::ui_utils']]], + ['print_5fsuccess_38',['print_success',['../namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b',1,'penify_hook::ui_utils']]], + ['print_5fwarning_39',['print_warning',['../namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45',1,'penify_hook::ui_utils']]], + ['process_40',['Login Process',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md44',1,'']]], + ['process_5ffile_41',['process_file',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.process_file()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81',1,'penify_hook.git_analyzer.GitDocGenHook.process_file()']]], + ['process_5fjira_5fintegration_42',['process_jira_integration',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['processing_5fsymbol_43',['PROCESSING_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155',1,'penify_hook::ui_utils']]], + ['provide_20context_44',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['python_5frequires_45',['python_requires',['../namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf',1,'setup']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_15.js b/docs-test-3rd-techno/html/search/all_15.js new file mode 100644 index 0000000..4a0006c --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_15.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../README_8md.html',1,'']]], + ['recursive_5fsearch_5fgit_5ffolder_1',['recursive_search_git_folder',['../namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a',1,'penify_hook::utils']]], + ['relative_5ffile_5fpath_2',['relative_file_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#ab702c0c3ba81d159d7c3bcd7ea2abba4',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['release_20tags_3',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['remote_20repository_20documentation_4',['Remote Repository Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'']]], + ['removal_5',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['repo_6',['repo',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a3a9ddfa1dfba81fe21214fe486389369',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['repo_5fdetails_7',['repo_details',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a9cca3465b0cc00d78324b0a9eac1d7f5',1,'penify_hook.base_analyzer.BaseAnalyzer.repo_details'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook.commit_analyzer.CommitDocGenHook.repo_details']]], + ['repo_5fpath_8',['repo_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a957e81a1ab561f6cecfbe999e7b85499',1,'penify_hook.base_analyzer.BaseAnalyzer.repo_path'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook.commit_analyzer.CommitDocGenHook.repo_path']]], + ['repository_9',['Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'Install Hook in Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'Install Hook in Specific Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'Uninstall Hook from Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'Uninstall Hook from Specific Repository']]], + ['repository_20documentation_10',['Remote Repository Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'']]], + ['repository_20uninstallation_11',['Specific Repository Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'']]], + ['required_12',['required',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md163',1,'Advanced Commands (Login required)'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md160',1,'Basic Commands (No login required)']]], + ['requirement_13',['Authentication Requirement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md51',1,'']]], + ['requirements_14',['Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md14',1,'Configuration Requirements'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md84',1,'Installation Requirements']]], + ['requirements_3a_15',['Requirements:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md134',1,'Requirements:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md151',1,'Requirements:']]], + ['resources_16',['Additional Resources',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md155',1,'']]], + ['review_20enhancement_17',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['run_18',['run',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03',1,'penify_hook.commit_analyzer.CommitDocGenHook.run()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.run()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.run()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633',1,'penify_hook.git_analyzer.GitDocGenHook.run()']]], + ['running_20tests_19',['Running Tests',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md171',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_16.js b/docs-test-3rd-techno/html/search/all_16.js new file mode 100644 index 0000000..c5ed3ee --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_16.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['sauarbh_0',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['save_5fcredentials_1',['save_credentials',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b',1,'penify_hook::commands::auth_commands']]], + ['save_5fjira_5fconfig_2',['save_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374',1,'penify_hook::commands::config_commands']]], + ['save_5fllm_5fconfig_3',['save_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4',1,'penify_hook::commands::config_commands']]], + ['scenarios_4',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['script_20content_5',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['send_5ffile_5ffor_5fdocstring_5fgeneration_6',['send_file_for_docstring_generation',['../classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd',1,'penify_hook::api_client::APIClient']]], + ['settings_7',['Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'Basic Commit with Default Settings'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md52',1,'Configuration Settings']]], + ['setup_8',['Setup',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md105',1,'Setup'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md109',1,'Setup'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md114',1,'Setup']]], + ['setup_9',['setup',['../namespacesetup.html',1,'']]], + ['setup_2epy_10',['setup.py',['../setup_8py.html',1,'']]], + ['setup_5fcommit_5fparser_11',['setup_commit_parser',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1',1,'penify_hook::commands::commit_commands']]], + ['setup_5fconfig_5fparser_12',['setup_config_parser',['../namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba',1,'penify_hook::config_command']]], + ['setup_5fdocgen_5fparser_13',['setup_docgen_parser',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6',1,'penify_hook::commands::doc_commands']]], + ['setup_5flogin_5fparser_14',['setup_login_parser',['../namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235',1,'penify_hook::login_command']]], + ['sharing_20configuration_15',['Sharing Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md38',1,'']]], + ['specific_20file_16',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['specific_20repository_17',['Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'Install Hook in Specific Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'Uninstall Hook from Specific Repository']]], + ['specific_20repository_20uninstallation_18',['Specific Repository Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'']]], + ['standard_20uninstallation_19',['Standard Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md90',1,'']]], + ['started_20',['Getting Started',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md127',1,'']]], + ['storage_21',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['structure_22',['Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['subcommands_23',['Subcommands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md68',1,'']]], + ['subcommands_3a_24',['Subcommands:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md138',1,'Subcommands:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md149',1,'Subcommands:']]], + ['success_5fcolor_25',['SUCCESS_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4',1,'penify_hook::ui_utils']]], + ['success_5fsymbol_26',['SUCCESS_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3',1,'penify_hook::ui_utils']]], + ['suman_20sauarbh_27',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['support_28',['Support',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md62',1,'Support'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md176',1,'Support']]], + ['supported_20llms_29',['Supported LLMs',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md25',1,'']]], + ['supported_5ffile_5ftypes_30',['supported_file_types',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a0cac0310ec635aa64a34857cf30ce1eb',1,'penify_hook.base_analyzer.BaseAnalyzer.supported_file_types'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.supported_file_types'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook.git_analyzer.GitDocGenHook.supported_file_types']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_17.js b/docs-test-3rd-techno/html/search/all_17.js new file mode 100644 index 0000000..870b4bb --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_17.js @@ -0,0 +1,66 @@ +var searchData= +[ + ['table_20of_20contents_0',['Table of Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['tags_1',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['team_20leads_2',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['team_20members_3',['Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'For New Team Members'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'Workflow 4: Onboarding New Team Members']]], + ['terminal_20tt_4',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['test_5fcommit_5fcode_5ferror_5fhandling_5',['test_commit_code_error_handling',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fclient_6',['test_commit_code_with_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fconnection_5ffailure_7',['test_commit_code_with_jira_connection_failure',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fllm_5fclient_8',['test_commit_code_with_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcommands_2epy_9',['test_commit_commands.py',['../test__commit__commands_8py.html',1,'']]], + ['test_5fconfig_5fcommands_2epy_10',['test_config_commands.py',['../test__config__commands_8py.html',1,'']]], + ['test_5fconfig_5fjira_5fweb_5fserver_5fsetup_11',['test_config_jira_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fconfig_5fllm_5fweb_5fserver_5fsetup_12',['test_config_llm_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fdoc_5fcommands_2epy_13',['test_doc_commands.py',['../test__doc__commands_8py.html',1,'']]], + ['test_5fgenerate_5fdoc_5ferror_5fhandling_14',['test_generate_doc_error_handling',['../namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffile_5flocation_15',['test_generate_doc_file_location',['../namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffolder_5flocation_16',['test_generate_doc_folder_location',['../namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fno_5flocation_17',['test_generate_doc_no_location',['../namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffile_5fexception_18',['test_generate_doc_with_file_exception',['../namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffolder_5fexception_19',['test_generate_doc_with_folder_exception',['../namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee',1,'tests::test_doc_commands']]], + ['test_5fget_5fjira_5fconfig_5fexists_20',['test_get_jira_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fempty_21',['test_get_llm_config_empty',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fexists_22',['test_get_llm_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5finvalid_5fjson_23',['test_get_llm_config_invalid_json',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fexisting_5fdir_24',['test_get_penify_config_existing_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fnew_5fdir_25',['test_get_penify_config_new_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fconfig_26',['test_get_token_from_config',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fenv_27',['test_get_token_from_env',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5fnot_5ffound_28',['test_get_token_not_found',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fhandle_5fcommit_29',['test_handle_commit',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fhandle_5fdocgen_5fgenerate_30',['test_handle_docgen_generate',['../namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5finstall_5fhook_31',['test_handle_docgen_install_hook',['../namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5fno_5ftoken_32',['test_handle_docgen_no_token',['../namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5funinstall_5fhook_33',['test_handle_docgen_uninstall_hook',['../namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b',1,'tests::test_doc_commands']]], + ['test_5fsave_5fjira_5fconfig_5fsuccess_34',['test_save_jira_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5ffailure_35',['test_save_llm_config_failure',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5fsuccess_36',['test_save_llm_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsetup_5fcommit_5fparser_37',['test_setup_commit_parser',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fsetup_5fdocgen_5fparser_38',['test_setup_docgen_parser',['../namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042',1,'tests::test_doc_commands']]], + ['test_5fweb_5fconfig_2epy_39',['test_web_config.py',['../test__web__config_8py.html',1,'']]], + ['testcommitcommands_40',['TestCommitCommands',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html',1,'tests::test_commit_commands']]], + ['testconfigcommands_41',['TestConfigCommands',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html',1,'tests::test_config_commands']]], + ['tests_42',['Running Tests',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md171',1,'']]], + ['tests_43',['tests',['../namespacetests.html',1,'']]], + ['tests_3a_3aconftest_44',['conftest',['../namespacetests_1_1conftest.html',1,'tests']]], + ['tests_3a_3atest_5fcommit_5fcommands_45',['test_commit_commands',['../namespacetests_1_1test__commit__commands.html',1,'tests']]], + ['tests_3a_3atest_5fconfig_5fcommands_46',['test_config_commands',['../namespacetests_1_1test__config__commands.html',1,'tests']]], + ['tests_3a_3atest_5fdoc_5fcommands_47',['test_doc_commands',['../namespacetests_1_1test__doc__commands.html',1,'tests']]], + ['tests_3a_3atest_5fweb_5fconfig_48',['test_web_config',['../namespacetests_1_1test__web__config.html',1,'tests']]], + ['testwebconfig_49',['TestWebConfig',['../classtests_1_1test__web__config_1_1TestWebConfig.html',1,'tests::test_web_config']]], + ['title_20and_20description_20with_20context_50',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['title_20only_20with_20context_51',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['token_52',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['token_20precedence_53',['Token Precedence',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md46',1,'']]], + ['token_20storage_54',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['troubleshooting_55',['Troubleshooting',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md18',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md39',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md59',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md99',1,'Troubleshooting'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md154',1,'Troubleshooting']]], + ['tt_56',['tt',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'<tt>-d, --description</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'<tt>-e, --terminal</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'<tt>-l, --location</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'<tt>-m, --message</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'<tt>install-hook</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'<tt>uninstall-hook</tt>']]], + ['tt_20d_20description_20tt_57',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['tt_20e_20terminal_20tt_58',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['tt_20install_20hook_20tt_59',['<tt>install-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'']]], + ['tt_20l_20location_20tt_60',['<tt>-l, --location</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md67',1,'']]], + ['tt_20m_20message_20tt_61',['<tt>-m, --message</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md3',1,'']]], + ['tt_20uninstall_20hook_20tt_62',['<tt>uninstall-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_18.js b/docs-test-3rd-techno/html/search/all_18.js new file mode 100644 index 0000000..0c2129f --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_18.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['ui_5futils_2epy_0',['ui_utils.py',['../ui__utils_8py.html',1,'']]], + ['understanding_1',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['uninstall_20hook_20from_20current_20repository_2',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['uninstall_20hook_20from_20specific_20repository_3',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['uninstall_20hook_20tt_4',['<tt>uninstall-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'']]], + ['uninstall_5fgit_5fhook_5',['uninstall_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443',1,'penify_hook::commands::hook_commands']]], + ['uninstallation_6',['Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md89',1,'Hook Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md91',1,'Specific Repository Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md90',1,'Standard Uninstallation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md93',1,'Verifying Uninstallation']]], + ['update_5fissue_5fstatus_7',['update_issue_status',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826',1,'penify_hook::jira_client::JiraClient']]], + ['update_5fstage_8',['update_stage',['../namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd',1,'penify_hook::ui_utils']]], + ['url_9',['url',['../namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb',1,'setup']]], + ['usage_10',['Usage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md1',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md22',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md65',1,'Basic Usage'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md159',1,'Usage']]], + ['usage_20guide_11',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['usage_3a_12',['Usage:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md131',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md137',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md142',1,'Usage:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md147',1,'Usage:']]], + ['use_20cases_13',['Use Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md50',1,'Use Cases']]], + ['using_20local_20llm_14',['Using Local LLM',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md12',1,'']]], + ['utils_2epy_15',['utils.py',['../utils_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_19.js b/docs-test-3rd-techno/html/search/all_19.js new file mode 100644 index 0000000..287d9da --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_19.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['variables_0',['Variables',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md36',1,'Environment Variables'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md153',1,'Environment Variables']]], + ['verifying_20installation_1',['Verifying Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md85',1,'']]], + ['verifying_20uninstallation_2',['Verifying Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md93',1,'']]], + ['version_3',['version',['../namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c',1,'setup']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_1a.js b/docs-test-3rd-techno/html/search/all_1a.js new file mode 100644 index 0000000..1e439a4 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_1a.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['warning_5fcolor_0',['WARNING_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff',1,'penify_hook::ui_utils']]], + ['warning_5fsymbol_1',['WARNING_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8',1,'penify_hook::ui_utils']]], + ['web_20interface_2',['Web Interface',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md24',1,'Web Interface'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md32',1,'Web Interface']]], + ['what_20happens_3a_3',['What happens:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md143',1,'']]], + ['with_20ai_4',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['with_20all_20features_5',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['with_20context_6',['with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'Generate Title and Description with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'Generate Title Only with Context']]], + ['with_20default_20settings_7',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['work_8',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]], + ['workflow_9',['Workflow',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md106',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md110',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md115',1,'Workflow']]], + ['workflow_201_3a_20efficient_20git_20commits_20with_20ai_10',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['workflow_202_3a_20documentation_20generation_20pipeline_11',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['workflow_203_3a_20code_20review_20enhancement_12',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['workflow_204_3a_20onboarding_20new_20team_20members_13',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]], + ['workflow_205_3a_20legacy_20code_20understanding_14',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['workflow_20with_20all_20features_15',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['workflows_16',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_2.js b/docs-test-3rd-techno/html/search/all_2.js new file mode 100644 index 0000000..9289e63 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_3a_20code_20review_20enhancement_0',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_3.js b/docs-test-3rd-techno/html/search/all_3.js new file mode 100644 index 0000000..bcb0ac2 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_3a_20onboarding_20new_20team_20members_0',['Workflow 4: Onboarding New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md117',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_4.js b/docs-test-3rd-techno/html/search/all_4.js new file mode 100644 index 0000000..28bc011 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_3a_20legacy_20code_20understanding_0',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_5.js b/docs-test-3rd-techno/html/search/all_5.js new file mode 100644 index 0000000..11fbbe3 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_0',['__init__',['../classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37',1,'penify_hook.api_client.APIClient.__init__()'],['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5',1,'penify_hook.base_analyzer.BaseAnalyzer.__init__()'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778',1,'penify_hook.commit_analyzer.CommitDocGenHook.__init__()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24',1,'penify_hook.git_analyzer.GitDocGenHook.__init__()'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355',1,'penify_hook.jira_client.JiraClient.__init__()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b',1,'penify_hook.llm_client.LLMClient.__init__()']]], + ['_5f_5finit_5f_5f_2epy_1',['__init__.py',['../penify__hook_2____init_____8py.html',1,'(Global Namespace)'],['../penify__hook_2commands_2____init_____8py.html',1,'(Global Namespace)'],['../tests_2____init_____8py.html',1,'(Global Namespace)']]], + ['_5famend_5fcommit_2',['_amend_commit',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['_5flitellm_3',['_litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a76c2e9805f805624ab9c55a9f1f8d362',1,'penify_hook::llm_client::LLMClient']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_6.js b/docs-test-3rd-techno/html/search/all_6.js new file mode 100644 index 0000000..dd60224 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_6.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['a_20folder_0',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['a_20jira_20api_20token_1',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['a_20specific_20file_2',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['add_5fcomment_3',['add_comment',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1',1,'penify_hook::jira_client::JiraClient']]], + ['additional_20resources_4',['Additional Resources',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md155',1,'']]], + ['advanced_20commands_20login_20required_5',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md163',1,'']]], + ['advanced_20hook_20scenarios_6',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['advanced_20use_20cases_7',['Advanced Use Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases']]], + ['ai_8',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['all_20features_9',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]], + ['and_20description_20with_20context_10',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['and_20edit_20full_20commit_20message_11',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['and_20jira_20integration_12',['LLM and JIRA Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'']]], + ['and_20provide_20context_13',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['anthropic_14',['Anthropic',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md27',1,'']]], + ['api_20token_15',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['api_20token_20storage_16',['API Token Storage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md45',1,'']]], + ['api_5fclient_17',['api_client',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#a81e9c55709205aaf4ebbe2b41683baf2',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['api_5fclient_2epy_18',['api_client.py',['../api__client_8py.html',1,'']]], + ['api_5furl_19',['API_URL',['../namespacepenify__hook_1_1constants.html#a846767f047a1319005bc95395330ab34',1,'penify_hook::constants']]], + ['api_5furl_20',['api_url',['../classpenify__hook_1_1api__client_1_1APIClient.html#a130cf688ed35dc0e8cbd8320b6b2d872',1,'penify_hook::api_client::APIClient']]], + ['apiclient_21',['APIClient',['../classpenify__hook_1_1api__client_1_1APIClient.html',1,'penify_hook::api_client']]], + ['auth_5fcommands_2epy_22',['auth_commands.py',['../auth__commands_8py.html',1,'']]], + ['auth_5ftoken_23',['AUTH_TOKEN',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5bb502603717946ad710b49ad9d95237',1,'penify_hook::api_client::APIClient']]], + ['authentication_24',['Authentication',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md43',1,'Authentication'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md167',1,'Authentication']]], + ['authentication_20requirement_25',['Authentication Requirement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md51',1,'']]], + ['author_26',['Author',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md173',1,'']]], + ['author_27',['author',['../namespacesetup.html#a3a57a4772d418a06835249cbade0d86a',1,'setup']]], + ['author_3a_20suman_20sauarbh_28',['author: Suman Sauarbh',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md124',1,'']]], + ['author_5femail_29',['author_email',['../namespacesetup.html#a5b08034343aa2be607722a8b315f3625',1,'setup']]], + ['autoreset_30',['autoreset',['../namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71',1,'penify_hook::ui_utils']]], + ['azure_20openai_31',['Azure OpenAI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md29',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_7.js b/docs-test-3rd-techno/html/search/all_7.js new file mode 100644 index 0000000..6002a70 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_7.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['base_5fanalyzer_2epy_0',['base_analyzer.py',['../base__analyzer_8py.html',1,'']]], + ['baseanalyzer_1',['BaseAnalyzer',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html',1,'penify_hook::base_analyzer']]], + ['basic_20commands_20no_20login_20required_2',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md160',1,'']]], + ['basic_20commit_20with_20default_20settings_3',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['basic_20usage_4',['Basic Usage',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md1',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md22',1,'Basic Usage'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md65',1,'Basic Usage']]], + ['batch_20documentation_5',['Batch Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md96',1,'']]], + ['bearer_5ftoken_6',['BEARER_TOKEN',['../classpenify__hook_1_1api__client_1_1APIClient.html#a7d7e2cf42c54eb4f25adee96a09ee7b0',1,'penify_hook::api_client::APIClient']]], + ['behavior_7',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]], + ['benefits_8',['Benefits',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md107',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md112',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md116',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md120',1,'Benefits'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md122',1,'Benefits']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_8.js b/docs-test-3rd-techno/html/search/all_8.js new file mode 100644 index 0000000..2603a26 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_8.js @@ -0,0 +1,71 @@ +var searchData= +[ + ['cases_0',['Cases',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md56',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md94',1,'Advanced Use Cases'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md50',1,'Use Cases']]], + ['cd_20integration_1',['CI/CD Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'']]], + ['ci_20cd_20integration_2',['CI/CD Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'']]], + ['classifiers_3',['classifiers',['../namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785',1,'setup']]], + ['cli_20commit_20commands_4',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['cli_20configuration_20commands_5',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]], + ['cli_20detailed_20usage_20guide_6',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['cli_20documentation_7',['Penify CLI Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'']]], + ['cli_20documentation_8',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['cli_20documentation_20generation_20commands_9',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['cli_20example_20workflows_10',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['code_20documentation_20generation_11',['Code Documentation Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'']]], + ['code_20review_20enhancement_12',['Workflow 3: Code Review Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'']]], + ['code_20understanding_13',['Workflow 5: Legacy Code Understanding',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md121',1,'']]], + ['combinations_14',['Combinations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md6',1,'Option Combinations'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md71',1,'Option Combinations']]], + ['command_15',['Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md130',1,'Commit Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md136',1,'Config Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md146',1,'Docgen Command'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md141',1,'Login Command']]], + ['command_20documentation_16',['Detailed Command Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'']]], + ['command_20line_20configuration_17',['Command-Line Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'']]], + ['command_20options_18',['Command Options',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md2',1,'Command Options'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md66',1,'Command Options']]], + ['command_20overview_19',['Command Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md47',1,'']]], + ['commands_20',['Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'Git Hook Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'Penify CLI - Commit Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'Penify CLI - Configuration Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'Penify CLI - Documentation Generation Commands']]], + ['commands_20login_20required_21',['Advanced Commands (Login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md163',1,'']]], + ['commands_20no_20login_20required_22',['Basic Commands (No login required)',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md160',1,'']]], + ['commands_20overview_23',['Commands Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md128',1,'']]], + ['commit_24',['Commit',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md161',1,'']]], + ['commit_20command_25',['Commit Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md130',1,'']]], + ['commit_20commands_26',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['commit_20hook_27',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['commit_20message_28',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['commit_20message_20generation_29',['Commit Message Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'']]], + ['commit_20with_20default_20settings_30',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['commit_2dcommands_2emd_31',['commit-commands.md',['../commit-commands_8md.html',1,'']]], + ['commit_5fanalyzer_2epy_32',['commit_analyzer.py',['../commit__analyzer_8py.html',1,'']]], + ['commit_5fcode_33',['commit_code',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6',1,'penify_hook::commands::commit_commands']]], + ['commit_5fcommands_2epy_34',['commit_commands.py',['../commit__commands_8py.html',1,'']]], + ['commitdocgenhook_35',['CommitDocGenHook',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook::commit_analyzer']]], + ['commits_20with_20ai_36',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['common_20issues_37',['Common Issues',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md19',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md40',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md60',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md100',1,'Common Issues']]], + ['config_38',['Config',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md162',1,'']]], + ['config_20command_39',['Config Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md136',1,'']]], + ['config_2dcommands_2emd_40',['config-commands.md',['../config-commands_8md.html',1,'']]], + ['config_5fcommand_2epy_41',['config_command.py',['../config__command_8py.html',1,'']]], + ['config_5fcommands_2epy_42',['config_commands.py',['../config__commands_8py.html',1,'']]], + ['config_5fjira_5fweb_43',['config_jira_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13',1,'penify_hook::commands::config_commands']]], + ['config_5fllm_5fweb_44',['config_llm_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62',1,'penify_hook::commands::config_commands']]], + ['configuration_45',['Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md37',1,'Command-Line Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md31',1,'JIRA Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md23',1,'LLM Configuration'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md168',1,'Local LLM Configuration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md38',1,'Sharing Configuration']]], + ['configuration_20commands_46',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]], + ['configuration_20file_20structure_47',['Configuration File Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['configuration_20files_48',['Configuration Files',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md152',1,'']]], + ['configuration_20locations_49',['Configuration Locations',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md35',1,'']]], + ['configuration_20overview_50',['Configuration Overview',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md21',1,'']]], + ['configuration_20requirements_51',['Configuration Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md14',1,'']]], + ['configuration_20settings_52',['Configuration Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md52',1,'']]], + ['conftest_2epy_53',['conftest.py',['../conftest_8py.html',1,'']]], + ['constants_2epy_54',['constants.py',['../constants_8py.html',1,'']]], + ['content_55',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['contents_56',['Contents',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md42',1,'Table of Contents'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md64',1,'Table of Contents']]], + ['context_57',['Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'Generate Title and Description with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'Generate Title Only with Context'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'Generate, Edit, and Provide Context']]], + ['continuous_20integration_58',['Continuous Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md95',1,'']]], + ['contributing_59',['Contributing',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md174',1,'']]], + ['create_5fprogress_5fbar_60',['create_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5',1,'penify_hook::ui_utils']]], + ['create_5fstage_5fprogress_5fbar_61',['create_stage_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405',1,'penify_hook::ui_utils']]], + ['creating_20a_20jira_20api_20token_62',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['current_20git_20diff_63',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['current_20repository_64',['Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'Install Hook in Current Repository'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'Uninstall Hook from Current Repository']]], + ['custom_20git_20hook_20integration_65',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['custom_20hook_20location_66',['Custom Hook Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'']]], + ['customization_67',['Hook Customization',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md86',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_9.js b/docs-test-3rd-techno/html/search/all_9.js new file mode 100644 index 0000000..2327e6f --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_9.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['d_20description_20tt_0',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['daily_20workflow_1',['Daily Workflow',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md106',1,'Daily Workflow'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md110',1,'Daily Workflow']]], + ['dashboard_5furl_2',['DASHBOARD_URL',['../namespacepenify__hook_1_1constants.html#ae4a03ab3b19d60436c72484b313079c8',1,'penify_hook::constants']]], + ['debugging_3',['Debugging',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md101',1,'']]], + ['default_20settings_4',['Basic Commit with Default Settings',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md16',1,'']]], + ['description_5',['description',['../namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0',1,'setup']]], + ['description_20tt_6',['<tt>-d, --description</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md5',1,'']]], + ['description_20with_20context_7',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['detailed_20command_20documentation_8',['Detailed Command Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'']]], + ['detailed_20usage_20guide_9',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['detailed_2dusage_2emd_10',['detailed-usage.md',['../detailed-usage_8md.html',1,'']]], + ['development_11',['Development',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md170',1,'']]], + ['diff_12',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['dir_5fpath_13',['dir_path',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53f73d69cc0f00763ee4830e4f0f7393',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['doc_5fcommands_2emd_14',['doc_commands.md',['../doc__commands_8md.html',1,'']]], + ['doc_5fcommands_2epy_15',['doc_commands.py',['../doc__commands_8py.html',1,'']]], + ['docgen_20command_16',['Docgen Command',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md146',1,'']]], + ['docgen_5fdescription_17',['docgen_description',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a6dd45546559198f9f79caccd030d3588',1,'penify_hook::commands::doc_commands']]], + ['documentation_18',['Documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md96',1,'Batch Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md129',1,'Detailed Command Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md111',1,'Manual Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md125',1,'Penify CLI Documentation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md58',1,'Remote Repository Documentation']]], + ['documentation_19',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['documentation_20for_20a_20folder_20',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['documentation_20for_20a_20specific_20file_21',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['documentation_20for_20current_20git_20diff_22',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['documentation_20generation_23',['Documentation Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'Code Documentation Generation'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md165',1,'Documentation Generation']]], + ['documentation_20generation_20commands_24',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['documentation_20generation_20pipeline_25',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['documenting_20release_20tags_26',['Documenting Release Tags',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md98',1,'']]], + ['dotenv_5favailable_27',['DOTENV_AVAILABLE',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a152642ab83cf6219b604bda6122aba67',1,'penify_hook::commands::config_commands']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_a.js b/docs-test-3rd-techno/html/search/all_a.js new file mode 100644 index 0000000..76ece79 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_a.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['e_20terminal_20tt_0',['<tt>-e, --terminal</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md4',1,'']]], + ['edit_20and_20provide_20context_1',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['edit_20full_20commit_20message_2',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['efficient_20git_20commits_20with_20ai_3',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['enhance_5fcommit_5fmessage_4',['enhance_commit_message',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760',1,'penify_hook::jira_client::JiraClient']]], + ['enhancement_5',['Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md13',1,'JIRA Enhancement'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md113',1,'Workflow 3: Code Review Enhancement']]], + ['entry_5fpoints_6',['entry_points',['../namespacesetup.html#ada7058afc98897f073d3f3b8b9157059',1,'setup']]], + ['environment_20variables_7',['Environment Variables',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md36',1,'Environment Variables'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md153',1,'Environment Variables']]], + ['error_5fcolor_8',['ERROR_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe',1,'penify_hook::ui_utils']]], + ['error_5fsymbol_9',['ERROR_SYMBOL',['../namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432',1,'penify_hook::ui_utils']]], + ['example_20workflows_10',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['example_2dworkflows_2emd_11',['example-workflows.md',['../example-workflows_8md.html',1,'']]], + ['example_3a_12',['Example:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md144',1,'']]], + ['examples_13',['Examples',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md15',1,'']]], + ['examples_3a_14',['Examples:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md133',1,'Examples:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md139',1,'Examples:'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md150',1,'Examples:']]], + ['exception_15',['Exception',['../classException.html',1,'']]], + ['extract_5fissue_5fkeys_16',['extract_issue_keys',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_5ffrom_5fbranch_17',['extract_issue_keys_from_branch',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_b.js b/docs-test-3rd-techno/html/search/all_b.js new file mode 100644 index 0000000..5946bc2 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_b.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['features_0',['Features',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md157',1,'Features'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'Full Workflow with All Features']]], + ['file_1',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['file_20structure_2',['File Structure',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md30',1,'Configuration File Structure'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md34',1,'Configuration File Structure']]], + ['file_5fanalyzer_2epy_3',['file_analyzer.py',['../file__analyzer_8py.html',1,'']]], + ['file_5fpath_4',['file_path',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a9b03b88a9ce1b9af945279375048dc32',1,'penify_hook::file_analyzer::FileAnalyzerGenHook']]], + ['fileanalyzergenhook_5',['FileAnalyzerGenHook',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook::file_analyzer']]], + ['files_6',['Configuration Files',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md152',1,'']]], + ['find_5fgit_5fparent_7',['find_git_parent',['../namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2',1,'penify_hook::utils']]], + ['folder_8',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['folder_5fanalyzer_2epy_9',['folder_analyzer.py',['../folder__analyzer_8py.html',1,'']]], + ['folder_5fpath_10',['folder_path',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa67c06dd12b1bafaeaee81c41dcb7e25',1,'penify_hook::base_analyzer::BaseAnalyzer']]], + ['folderanalyzergenhook_11',['FolderAnalyzerGenHook',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html',1,'penify_hook::folder_analyzer']]], + ['for_20a_20folder_12',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['for_20a_20specific_20file_13',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['for_20current_20git_20diff_14',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['for_20new_20team_20members_15',['For New Team Members',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md119',1,'']]], + ['for_20team_20leads_16',['For Team Leads',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md118',1,'']]], + ['format_5fcommit_5fmessage_5fwith_5fjira_5finfo_17',['format_commit_message_with_jira_info',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23',1,'penify_hook::jira_client::JiraClient']]], + ['format_5ferror_18',['format_error',['../namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca',1,'penify_hook::ui_utils']]], + ['format_5ffile_5fpath_19',['format_file_path',['../namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41',1,'penify_hook::ui_utils']]], + ['format_5fhighlight_20',['format_highlight',['../namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7',1,'penify_hook::ui_utils']]], + ['format_5finfo_21',['format_info',['../namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2',1,'penify_hook::ui_utils']]], + ['format_5fsuccess_22',['format_success',['../namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e',1,'penify_hook::ui_utils']]], + ['format_5fwarning_23',['format_warning',['../namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797',1,'penify_hook::ui_utils']]], + ['from_20current_20repository_24',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['from_20specific_20repository_25',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['full_20commit_20message_26',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['full_20workflow_20with_20all_20features_27',['Full Workflow with All Features',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md17',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_c.js b/docs-test-3rd-techno/html/search/all_c.js new file mode 100644 index 0000000..c4397c4 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_c.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['generate_20and_20edit_20full_20commit_20message_0',['Generate and Edit Full Commit Message',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md9',1,'']]], + ['generate_20documentation_20for_20a_20folder_1',['Generate Documentation for a Folder',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md74',1,'']]], + ['generate_20documentation_20for_20a_20specific_20file_2',['Generate Documentation for a Specific File',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md73',1,'']]], + ['generate_20documentation_20for_20current_20git_20diff_3',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['generate_20edit_20and_20provide_20context_4',['Generate, Edit, and Provide Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md10',1,'']]], + ['generate_20title_20and_20description_20with_20context_5',['Generate Title and Description with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md8',1,'']]], + ['generate_20title_20only_20with_20context_6',['Generate Title Only with Context',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md7',1,'']]], + ['generate_5fcommit_5fsummary_7',['generate_commit_summary',['../classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd',1,'penify_hook.api_client.APIClient.generate_commit_summary()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a15bdb0eab18f46b9f78e38f07b5e899e',1,'penify_hook.llm_client.LLMClient.generate_commit_summary()']]], + ['generate_5fcommit_5fsummary_5fwith_5fllm_8',['generate_commit_summary_with_llm',['../classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286',1,'penify_hook::api_client::APIClient']]], + ['generate_5fdoc_9',['generate_doc',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7',1,'penify_hook::commands::doc_commands']]], + ['generation_10',['Generation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md49',1,'Code Documentation Generation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md48',1,'Commit Message Generation'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md165',1,'Documentation Generation']]], + ['generation_20commands_11',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['generation_20pipeline_12',['Workflow 2: Documentation Generation Pipeline',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md108',1,'']]], + ['get_5fapi_5fkey_13',['get_api_key',['../classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b',1,'penify_hook::api_client::APIClient']]], + ['get_5fcommit_5fcontext_5ffrom_5fissues_14',['get_commit_context_from_issues',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fdetailed_5fissue_5fcontext_15',['get_detailed_issue_context',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fenv_5fvar_5for_5fdefault_16',['get_env_var_or_default',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87',1,'penify_hook::commands::config_commands']]], + ['get_5fissue_5fdetails_17',['get_issue_details',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fjira_5fconfig_18',['get_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2',1,'penify_hook::commands::config_commands']]], + ['get_5fllm_5fconfig_19',['get_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0',1,'penify_hook::commands::config_commands']]], + ['get_5fmodified_5ffiles_5fin_5flast_5fcommit_20',['get_modified_files_in_last_commit',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fmodified_5flines_21',['get_modified_lines',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fpenify_5fconfig_22',['get_penify_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20',1,'penify_hook::commands::config_commands']]], + ['get_5frepo_5fdetails_23',['get_repo_details',['../namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19',1,'penify_hook::utils']]], + ['get_5fsummary_24',['get_summary',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['get_5fsupported_5ffile_5ftypes_25',['get_supported_file_types',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402',1,'penify_hook::api_client::APIClient']]], + ['get_5ftoken_26',['get_token',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812',1,'penify_hook::commands::config_commands']]], + ['getting_20help_27',['Getting Help',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md102',1,'']]], + ['getting_20started_28',['Getting Started',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md127',1,'']]], + ['git_20commits_20with_20ai_29',['Workflow 1: Efficient Git Commits with AI',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html#autotoc_md104',1,'']]], + ['git_20diff_30',['Generate Documentation for Current Git Diff',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md72',1,'']]], + ['git_20hook_20commands_31',['Git Hook Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'']]], + ['git_20hook_20integration_32',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['git_20hook_20management_33',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md166',1,'']]], + ['git_20hooks_34',['Git Hooks',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md53',1,'']]], + ['git_5fanalyzer_2epy_35',['git_analyzer.py',['../git__analyzer_8py.html',1,'']]], + ['gitdocgenhook_36',['GitDocGenHook',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook::git_analyzer']]], + ['gitreponotfounderror_37',['GitRepoNotFoundError',['../classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html',1,'penify_hook::utils']]], + ['guide_38',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_d.js b/docs-test-3rd-techno/html/search/all_d.js new file mode 100644 index 0000000..2ec9c52 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_d.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['handle_5fcommit_0',['handle_commit',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076',1,'penify_hook::commands::commit_commands']]], + ['handle_5fconfig_1',['handle_config',['../namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5',1,'penify_hook::config_command']]], + ['handle_5fdocgen_2',['handle_docgen',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc',1,'penify_hook::commands::doc_commands']]], + ['handle_5flogin_3',['handle_login',['../namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411',1,'penify_hook::login_command']]], + ['happens_3a_4',['What happens:',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md143',1,'']]], + ['help_5',['Getting Help',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md102',1,'']]], + ['highlight_5fcolor_6',['HIGHLIGHT_COLOR',['../namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc',1,'penify_hook::ui_utils']]], + ['hook_7',['Post-Commit Hook',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md54',1,'']]], + ['hook_20behavior_8',['Modifying Hook Behavior',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md87',1,'']]], + ['hook_20commands_9',['Git Hook Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md79',1,'']]], + ['hook_20customization_10',['Hook Customization',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md86',1,'']]], + ['hook_20from_20current_20repository_11',['Uninstall Hook from Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md77',1,'']]], + ['hook_20from_20specific_20repository_12',['Uninstall Hook from Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md78',1,'']]], + ['hook_20in_20current_20repository_13',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['hook_20in_20specific_20repository_14',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['hook_20installation_15',['Hook Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md80',1,'']]], + ['hook_20integration_16',['Custom Git Hook Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'']]], + ['hook_20location_17',['Custom Hook Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md55',1,'']]], + ['hook_20management_18',['Git Hook Management',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md166',1,'']]], + ['hook_20removal_19',['Manual Hook Removal',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md92',1,'']]], + ['hook_20scenarios_20',['Advanced Hook Scenarios',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md88',1,'']]], + ['hook_20script_20content_21',['Hook Script Content',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md82',1,'']]], + ['hook_20tt_22',['hook tt',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'<tt>install-hook</tt>'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md70',1,'<tt>uninstall-hook</tt>']]], + ['hook_20uninstallation_23',['Hook Uninstallation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md89',1,'']]], + ['hook_5fcommands_2epy_24',['hook_commands.py',['../hook__commands_8py.html',1,'']]], + ['hook_5ffilename_25',['HOOK_FILENAME',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a978b976442fbf28c29c8d0f889bfae9c',1,'penify_hook::commands::hook_commands']]], + ['hook_5ftemplate_26',['HOOK_TEMPLATE',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a51fc390518d967f2a1e21280d7ea781b',1,'penify_hook::commands::hook_commands']]], + ['hooks_27',['Git Hooks',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md53',1,'']]], + ['hooks_20work_28',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]], + ['how_20hooks_20work_29',['How Hooks Work',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md81',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_e.js b/docs-test-3rd-techno/html/search/all_e.js new file mode 100644 index 0000000..876b379 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_e.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['in_20current_20repository_0',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['in_20specific_20repository_1',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['info_5fcolor_2',['INFO_COLOR',['../namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c',1,'penify_hook::ui_utils']]], + ['install_20hook_20in_20current_20repository_3',['Install Hook in Current Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md75',1,'']]], + ['install_20hook_20in_20specific_20repository_4',['Install Hook in Specific Repository',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md76',1,'']]], + ['install_20hook_20tt_5',['<tt>install-hook</tt>',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md69',1,'']]], + ['install_5fgit_5fhook_6',['install_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135',1,'penify_hook::commands::hook_commands']]], + ['install_5frequires_7',['install_requires',['../namespacesetup.html#abead4f26b530856f858f0d44c7cf2588',1,'setup']]], + ['installation_8',['Installation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md80',1,'Hook Installation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html#autotoc_md126',1,'Installation'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md158',1,'Installation'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md85',1,'Verifying Installation']]], + ['installation_20location_9',['Installation Location',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md83',1,'']]], + ['installation_20requirements_10',['Installation Requirements',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md84',1,'']]], + ['integration_11',['Integration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md57',1,'CI/CD Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md95',1,'Continuous Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md97',1,'Custom Git Hook Integration'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md169',1,'JIRA Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'LLM and JIRA Integration']]], + ['interface_12',['Interface',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md24',1,'Web Interface'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md32',1,'Web Interface']]], + ['is_5fconnected_13',['is_connected',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8',1,'penify_hook::jira_client::JiraClient']]], + ['issues_14',['Issues',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md19',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md40',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html#autotoc_md60',1,'Common Issues'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html#autotoc_md100',1,'Common Issues'],['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md175',1,'Issues']]] +]; diff --git a/docs-test-3rd-techno/html/search/all_f.js b/docs-test-3rd-techno/html/search/all_f.js new file mode 100644 index 0000000..5a37108 --- /dev/null +++ b/docs-test-3rd-techno/html/search/all_f.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['jira_20api_20token_0',['Creating a JIRA API Token',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md33',1,'']]], + ['jira_20configuration_1',['JIRA Configuration',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html#autotoc_md31',1,'']]], + ['jira_20enhancement_2',['JIRA Enhancement',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md13',1,'']]], + ['jira_20integration_3',['JIRA Integration',['..//app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/README.md#autotoc_md169',1,'JIRA Integration'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html#autotoc_md11',1,'LLM and JIRA Integration']]], + ['jira_5fapi_5ftoken_4',['jira_api_token',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afc5c90e53b702f9fc27e2ee7d3f991b9',1,'penify_hook::jira_client::JiraClient']]], + ['jira_5favailable_5',['JIRA_AVAILABLE',['../namespacepenify__hook_1_1jira__client.html#a5593ea3415081eca1eea92e4c1ad1aa2',1,'penify_hook::jira_client']]], + ['jira_5fclient_6',['jira_client',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#ab03214b60248a10bca32597098b0a107',1,'penify_hook.commit_analyzer.CommitDocGenHook.jira_client'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aefb3f96c79358cf3a95d96d3747235b6',1,'penify_hook.jira_client.JiraClient.jira_client']]], + ['jira_5fclient_2epy_7',['jira_client.py',['../jira__client_8py.html',1,'']]], + ['jira_5furl_8',['jira_url',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3c0cfecff02a75cb7001509a595b8197',1,'penify_hook::jira_client::JiraClient']]], + ['jira_5fuser_9',['jira_user',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ae56104d5aa7bda7bb26d169c4b46038c',1,'penify_hook::jira_client::JiraClient']]], + ['jiraclient_10',['JiraClient',['../classpenify__hook_1_1jira__client_1_1JiraClient.html',1,'penify_hook::jira_client']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_0.js b/docs-test-3rd-techno/html/search/classes_0.js new file mode 100644 index 0000000..d470783 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['apiclient_0',['APIClient',['../classpenify__hook_1_1api__client_1_1APIClient.html',1,'penify_hook::api_client']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_1.js b/docs-test-3rd-techno/html/search/classes_1.js new file mode 100644 index 0000000..740b36f --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['baseanalyzer_0',['BaseAnalyzer',['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html',1,'penify_hook::base_analyzer']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_2.js b/docs-test-3rd-techno/html/search/classes_2.js new file mode 100644 index 0000000..8bdd859 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['commitdocgenhook_0',['CommitDocGenHook',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html',1,'penify_hook::commit_analyzer']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_3.js b/docs-test-3rd-techno/html/search/classes_3.js new file mode 100644 index 0000000..0ed9487 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['exception_0',['Exception',['../classException.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_4.js b/docs-test-3rd-techno/html/search/classes_4.js new file mode 100644 index 0000000..e90ffee --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fileanalyzergenhook_0',['FileAnalyzerGenHook',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html',1,'penify_hook::file_analyzer']]], + ['folderanalyzergenhook_1',['FolderAnalyzerGenHook',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html',1,'penify_hook::folder_analyzer']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_5.js b/docs-test-3rd-techno/html/search/classes_5.js new file mode 100644 index 0000000..a6b1740 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gitdocgenhook_0',['GitDocGenHook',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html',1,'penify_hook::git_analyzer']]], + ['gitreponotfounderror_1',['GitRepoNotFoundError',['../classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html',1,'penify_hook::utils']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_6.js b/docs-test-3rd-techno/html/search/classes_6.js new file mode 100644 index 0000000..6f010a9 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jiraclient_0',['JiraClient',['../classpenify__hook_1_1jira__client_1_1JiraClient.html',1,'penify_hook::jira_client']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_7.js b/docs-test-3rd-techno/html/search/classes_7.js new file mode 100644 index 0000000..bd37889 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['llmclient_0',['LLMClient',['../classpenify__hook_1_1llm__client_1_1LLMClient.html',1,'penify_hook::llm_client']]] +]; diff --git a/docs-test-3rd-techno/html/search/classes_8.js b/docs-test-3rd-techno/html/search/classes_8.js new file mode 100644 index 0000000..ca590a4 --- /dev/null +++ b/docs-test-3rd-techno/html/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['testcommitcommands_0',['TestCommitCommands',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html',1,'tests::test_commit_commands']]], + ['testconfigcommands_1',['TestConfigCommands',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html',1,'tests::test_config_commands']]], + ['testwebconfig_2',['TestWebConfig',['../classtests_1_1test__web__config_1_1TestWebConfig.html',1,'tests::test_web_config']]] +]; diff --git a/docs-test-3rd-techno/html/search/close.svg b/docs-test-3rd-techno/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs-test-3rd-techno/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs-test-3rd-techno/html/search/files_0.js b/docs-test-3rd-techno/html/search/files_0.js new file mode 100644 index 0000000..7b3d690 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_2epy_0',['__init__.py',['../penify__hook_2____init_____8py.html',1,'(Global Namespace)'],['../penify__hook_2commands_2____init_____8py.html',1,'(Global Namespace)'],['../tests_2____init_____8py.html',1,'(Global Namespace)']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_1.js b/docs-test-3rd-techno/html/search/files_1.js new file mode 100644 index 0000000..6d2b14e --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['api_5fclient_2epy_0',['api_client.py',['../api__client_8py.html',1,'']]], + ['auth_5fcommands_2epy_1',['auth_commands.py',['../auth__commands_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_10.js b/docs-test-3rd-techno/html/search/files_10.js new file mode 100644 index 0000000..b759a00 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ui_5futils_2epy_0',['ui_utils.py',['../ui__utils_8py.html',1,'']]], + ['utils_2epy_1',['utils.py',['../utils_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_2.js b/docs-test-3rd-techno/html/search/files_2.js new file mode 100644 index 0000000..ba3909d --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['base_5fanalyzer_2epy_0',['base_analyzer.py',['../base__analyzer_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_3.js b/docs-test-3rd-techno/html/search/files_3.js new file mode 100644 index 0000000..bb00fd4 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_3.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['commit_2dcommands_2emd_0',['commit-commands.md',['../commit-commands_8md.html',1,'']]], + ['commit_5fanalyzer_2epy_1',['commit_analyzer.py',['../commit__analyzer_8py.html',1,'']]], + ['commit_5fcommands_2epy_2',['commit_commands.py',['../commit__commands_8py.html',1,'']]], + ['config_2dcommands_2emd_3',['config-commands.md',['../config-commands_8md.html',1,'']]], + ['config_5fcommand_2epy_4',['config_command.py',['../config__command_8py.html',1,'']]], + ['config_5fcommands_2epy_5',['config_commands.py',['../config__commands_8py.html',1,'']]], + ['conftest_2epy_6',['conftest.py',['../conftest_8py.html',1,'']]], + ['constants_2epy_7',['constants.py',['../constants_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_4.js b/docs-test-3rd-techno/html/search/files_4.js new file mode 100644 index 0000000..e7bf2b2 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['detailed_2dusage_2emd_0',['detailed-usage.md',['../detailed-usage_8md.html',1,'']]], + ['doc_5fcommands_2emd_1',['doc_commands.md',['../doc__commands_8md.html',1,'']]], + ['doc_5fcommands_2epy_2',['doc_commands.py',['../doc__commands_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_5.js b/docs-test-3rd-techno/html/search/files_5.js new file mode 100644 index 0000000..29d814a --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['example_2dworkflows_2emd_0',['example-workflows.md',['../example-workflows_8md.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_6.js b/docs-test-3rd-techno/html/search/files_6.js new file mode 100644 index 0000000..3d76b9d --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['file_5fanalyzer_2epy_0',['file_analyzer.py',['../file__analyzer_8py.html',1,'']]], + ['folder_5fanalyzer_2epy_1',['folder_analyzer.py',['../folder__analyzer_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_7.js b/docs-test-3rd-techno/html/search/files_7.js new file mode 100644 index 0000000..4c89ef8 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['git_5fanalyzer_2epy_0',['git_analyzer.py',['../git__analyzer_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_8.js b/docs-test-3rd-techno/html/search/files_8.js new file mode 100644 index 0000000..3d83c4a --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hook_5fcommands_2epy_0',['hook_commands.py',['../hook__commands_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_9.js b/docs-test-3rd-techno/html/search/files_9.js new file mode 100644 index 0000000..fcddd7a --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['jira_5fclient_2epy_0',['jira_client.py',['../jira__client_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_a.js b/docs-test-3rd-techno/html/search/files_a.js new file mode 100644 index 0000000..876ef0d --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['llm_5fclient_2epy_0',['llm_client.py',['../llm__client_8py.html',1,'']]], + ['login_5fcommand_2epy_1',['login_command.py',['../login__command_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_b.js b/docs-test-3rd-techno/html/search/files_b.js new file mode 100644 index 0000000..01a0bf7 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2epy_0',['main.py',['../main_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_c.js b/docs-test-3rd-techno/html/search/files_c.js new file mode 100644 index 0000000..6f265cb --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['penify_2dcli_2ddocumentation_2emd_0',['penify-cli-documentation.md',['../penify-cli-documentation_8md.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_d.js b/docs-test-3rd-techno/html/search/files_d.js new file mode 100644 index 0000000..9847676 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd_0',['README.md',['../README_8md.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_e.js b/docs-test-3rd-techno/html/search/files_e.js new file mode 100644 index 0000000..d0dfcff --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['setup_2epy_0',['setup.py',['../setup_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/files_f.js b/docs-test-3rd-techno/html/search/files_f.js new file mode 100644 index 0000000..133fd11 --- /dev/null +++ b/docs-test-3rd-techno/html/search/files_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['test_5fcommit_5fcommands_2epy_0',['test_commit_commands.py',['../test__commit__commands_8py.html',1,'']]], + ['test_5fconfig_5fcommands_2epy_1',['test_config_commands.py',['../test__config__commands_8py.html',1,'']]], + ['test_5fdoc_5fcommands_2epy_2',['test_doc_commands.py',['../test__doc__commands_8py.html',1,'']]], + ['test_5fweb_5fconfig_2epy_3',['test_web_config.py',['../test__web__config_8py.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_0.js b/docs-test-3rd-techno/html/search/functions_0.js new file mode 100644 index 0000000..3ed0715 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_5f_5finit_5f_5f_0',['__init__',['../classpenify__hook_1_1api__client_1_1APIClient.html#a8edae83711be6de381c6ec71c7aa2e37',1,'penify_hook.api_client.APIClient.__init__()'],['../classpenify__hook_1_1base__analyzer_1_1BaseAnalyzer.html#aa5d7b59e2118c6b229ab59f3ef3b95b5',1,'penify_hook.base_analyzer.BaseAnalyzer.__init__()'],['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a1fa29d890af3f3770743197e15776778',1,'penify_hook.commit_analyzer.CommitDocGenHook.__init__()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#ad0e39446078e1aeeb5325f3af02de2fb',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a8f7a55b16cab4711eb3a3c3d9eb99344',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.__init__()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a6f94663c0330ae7e6cbb7a8748177c24',1,'penify_hook.git_analyzer.GitDocGenHook.__init__()'],['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a3a6914654fd59e0cef96159143a52355',1,'penify_hook.jira_client.JiraClient.__init__()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a699a5be4411f5847fcb0a170281ab14b',1,'penify_hook.llm_client.LLMClient.__init__()']]], + ['_5famend_5fcommit_1',['_amend_commit',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a011812b68bf904e3beb051e585eff111',1,'penify_hook::commit_analyzer::CommitDocGenHook']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_1.js b/docs-test-3rd-techno/html/search/functions_1.js new file mode 100644 index 0000000..6c71456 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['add_5fcomment_0',['add_comment',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa1f374116c64cd5f1492ec7f7e40f9c1',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_2.js b/docs-test-3rd-techno/html/search/functions_2.js new file mode 100644 index 0000000..1ba8685 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['commit_5fcode_0',['commit_code',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a4360ebdd6821c714f9db99f8d447c1b6',1,'penify_hook::commands::commit_commands']]], + ['config_5fjira_5fweb_1',['config_jira_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ad64a80de6cfdbed6d5d2fe582902bf13',1,'penify_hook::commands::config_commands']]], + ['config_5fllm_5fweb_2',['config_llm_web',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a1fc3edef1f016d4cfd3b116602ceda62',1,'penify_hook::commands::config_commands']]], + ['create_5fprogress_5fbar_3',['create_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5',1,'penify_hook::ui_utils']]], + ['create_5fstage_5fprogress_5fbar_4',['create_stage_progress_bar',['../namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405',1,'penify_hook::ui_utils']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_3.js b/docs-test-3rd-techno/html/search/functions_3.js new file mode 100644 index 0000000..79bed7c --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['enhance_5fcommit_5fmessage_0',['enhance_commit_message',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a70d2c5a6432aa6f238da0ff65d49a760',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_1',['extract_issue_keys',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#ad2823ad1d3baaedd38039913c3a97fd7',1,'penify_hook::jira_client::JiraClient']]], + ['extract_5fissue_5fkeys_5ffrom_5fbranch_2',['extract_issue_keys_from_branch',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a093d6456fe053ef7a7862d5d6851910c',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_4.js b/docs-test-3rd-techno/html/search/functions_4.js new file mode 100644 index 0000000..b54d0d5 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['find_5fgit_5fparent_0',['find_git_parent',['../namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2',1,'penify_hook::utils']]], + ['format_5fcommit_5fmessage_5fwith_5fjira_5finfo_1',['format_commit_message_with_jira_info',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a49ea1149758f7f5212149d357b13cc23',1,'penify_hook::jira_client::JiraClient']]], + ['format_5ferror_2',['format_error',['../namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca',1,'penify_hook::ui_utils']]], + ['format_5ffile_5fpath_3',['format_file_path',['../namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41',1,'penify_hook::ui_utils']]], + ['format_5fhighlight_4',['format_highlight',['../namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7',1,'penify_hook::ui_utils']]], + ['format_5finfo_5',['format_info',['../namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2',1,'penify_hook::ui_utils']]], + ['format_5fsuccess_6',['format_success',['../namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e',1,'penify_hook::ui_utils']]], + ['format_5fwarning_7',['format_warning',['../namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797',1,'penify_hook::ui_utils']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_5.js b/docs-test-3rd-techno/html/search/functions_5.js new file mode 100644 index 0000000..1e0d907 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_5.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['generate_5fcommit_5fsummary_0',['generate_commit_summary',['../classpenify__hook_1_1api__client_1_1APIClient.html#af0c2fac38629fed60e8440203a1197dd',1,'penify_hook.api_client.APIClient.generate_commit_summary()'],['../classpenify__hook_1_1llm__client_1_1LLMClient.html#a15bdb0eab18f46b9f78e38f07b5e899e',1,'penify_hook.llm_client.LLMClient.generate_commit_summary()']]], + ['generate_5fcommit_5fsummary_5fwith_5fllm_1',['generate_commit_summary_with_llm',['../classpenify__hook_1_1api__client_1_1APIClient.html#a07bc97b2af31662029a24169f285c286',1,'penify_hook::api_client::APIClient']]], + ['generate_5fdoc_2',['generate_doc',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a0db2cb8c0446d85dc4e7d34b3929dad7',1,'penify_hook::commands::doc_commands']]], + ['get_5fapi_5fkey_3',['get_api_key',['../classpenify__hook_1_1api__client_1_1APIClient.html#a57a96d5c14128dd8021347f7e72fe12b',1,'penify_hook::api_client::APIClient']]], + ['get_5fcommit_5fcontext_5ffrom_5fissues_4',['get_commit_context_from_issues',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#afb41ce6f13c30b1265d439ddf04bf2cd',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fdetailed_5fissue_5fcontext_5',['get_detailed_issue_context',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aa967169a4b7970c67c0947b9ac56f746',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fenv_5fvar_5for_5fdefault_6',['get_env_var_or_default',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a3caf2b062dd33b1f1d7ddc7224f0ff87',1,'penify_hook::commands::config_commands']]], + ['get_5fissue_5fdetails_7',['get_issue_details',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a65f6924819084b7c8d268956a784804a',1,'penify_hook::jira_client::JiraClient']]], + ['get_5fjira_5fconfig_8',['get_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a15bf3685c4dcb5c15ba6a4055e484cf2',1,'penify_hook::commands::config_commands']]], + ['get_5fllm_5fconfig_9',['get_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6492bc8e7df6e38bb06ad05e572d4cc0',1,'penify_hook::commands::config_commands']]], + ['get_5fmodified_5ffiles_5fin_5flast_5fcommit_10',['get_modified_files_in_last_commit',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a7070449b5dc058808eb13013db3d8eab',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fmodified_5flines_11',['get_modified_lines',['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a74e36507adc1b1955cc6cc303f3f5328',1,'penify_hook::git_analyzer::GitDocGenHook']]], + ['get_5fpenify_5fconfig_12',['get_penify_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a6559a82d0bf727703d550d1003d3ed20',1,'penify_hook::commands::config_commands']]], + ['get_5frepo_5fdetails_13',['get_repo_details',['../namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19',1,'penify_hook::utils']]], + ['get_5fsummary_14',['get_summary',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a8496194276441fa2eb2fa014eaab9a37',1,'penify_hook::commit_analyzer::CommitDocGenHook']]], + ['get_5fsupported_5ffile_5ftypes_15',['get_supported_file_types',['../classpenify__hook_1_1api__client_1_1APIClient.html#a5d2b4a26b24352d951ea79ecc4ff3402',1,'penify_hook::api_client::APIClient']]], + ['get_5ftoken_16',['get_token',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a5503d51c905e2f1b299b12d2a73bd812',1,'penify_hook::commands::config_commands']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_6.js b/docs-test-3rd-techno/html/search/functions_6.js new file mode 100644 index 0000000..7ca9744 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['handle_5fcommit_0',['handle_commit',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a7a856c3961f5f8914e58485644572076',1,'penify_hook::commands::commit_commands']]], + ['handle_5fconfig_1',['handle_config',['../namespacepenify__hook_1_1config__command.html#aed769bb2e478b09003696b616edd04c5',1,'penify_hook::config_command']]], + ['handle_5fdocgen_2',['handle_docgen',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#a41d631e51b0533b7d8dc780eea52e1cc',1,'penify_hook::commands::doc_commands']]], + ['handle_5flogin_3',['handle_login',['../namespacepenify__hook_1_1login__command.html#a13cdb8c8488b958ce536660a27521411',1,'penify_hook::login_command']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_7.js b/docs-test-3rd-techno/html/search/functions_7.js new file mode 100644 index 0000000..bc56fed --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['install_5fgit_5fhook_0',['install_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a093a68d1ec1b0da8ba8ab12a447fd135',1,'penify_hook::commands::hook_commands']]], + ['is_5fconnected_1',['is_connected',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#a00d0f9ae006313a21576362d26ac5ec8',1,'penify_hook::jira_client::JiraClient']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_8.js b/docs-test-3rd-techno/html/search/functions_8.js new file mode 100644 index 0000000..aefe8a8 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['list_5fall_5ffiles_5fin_5fdir_0',['list_all_files_in_dir',['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a050554646cbc07aef1fbaa748ee4c0fc',1,'penify_hook::folder_analyzer::FolderAnalyzerGenHook']]], + ['litellm_1',['litellm',['../classpenify__hook_1_1llm__client_1_1LLMClient.html#aa646fddc43ecd633d2c358d58dd4df24',1,'penify_hook::llm_client::LLMClient']]], + ['load_5fenv_5ffiles_2',['load_env_files',['../namespacepenify__hook_1_1commands_1_1config__commands.html#aabe277132ce0bc0aacef951cf1dee2ae',1,'penify_hook::commands::config_commands']]], + ['login_3',['login',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a1eb69ebcc475060011476a65cbffd7f6',1,'penify_hook::commands::auth_commands']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_9.js b/docs-test-3rd-techno/html/search/functions_9.js new file mode 100644 index 0000000..14007e2 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['main_0',['main',['../namespacepenify__hook_1_1main.html#a245db84b8309d570226b2e147e18b5eb',1,'penify_hook::main']]], + ['mock_5fapi_5fclient_1',['mock_api_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a7f9beb5fdd122ed9a39dd0751934d661',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fcommit_5fdoc_5fgen_2',['mock_commit_doc_gen',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a4e7b42caad38d0f9162c7b490720a3b7',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fgit_5ffolder_5fsearch_3',['mock_git_folder_search',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a71bfa48c9a521febb5c279cff113fbf5',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fjira_5fclient_4',['mock_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a43b8dd6adb507ef30604cd790940b881',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fllm_5fclient_5',['mock_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#af8f0277ac27f0e9d0a0e4bc6fcd77107',1,'tests::test_commit_commands::TestCommitCommands']]], + ['mock_5fprint_5ffunctions_6',['mock_print_functions',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a65132bfab05d287af9eb380b73d332ab',1,'tests::test_commit_commands::TestCommitCommands']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_a.js b/docs-test-3rd-techno/html/search/functions_a.js new file mode 100644 index 0000000..5235d1b --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['print_5ferror_0',['print_error',['../namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598',1,'penify_hook::ui_utils']]], + ['print_5finfo_1',['print_info',['../namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c',1,'penify_hook::ui_utils']]], + ['print_5fprocessing_2',['print_processing',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a1b371f1ba909b4fd351c542815f18747',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.print_processing()'],['../namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb',1,'penify_hook.ui_utils.print_processing(file_path)']]], + ['print_5fstatus_3',['print_status',['../namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7',1,'penify_hook::ui_utils']]], + ['print_5fsuccess_4',['print_success',['../namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b',1,'penify_hook::ui_utils']]], + ['print_5fwarning_5',['print_warning',['../namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45',1,'penify_hook::ui_utils']]], + ['process_5ffile_6',['process_file',['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#aeb3be324ba517855d6e5cdb684a6efda',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.process_file()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a0fcec06966a3a5ef1df21529a6a3db81',1,'penify_hook.git_analyzer.GitDocGenHook.process_file()']]], + ['process_5fjira_5fintegration_7',['process_jira_integration',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#adda13cc121d96342476ccf72b63a007f',1,'penify_hook::commit_analyzer::CommitDocGenHook']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_b.js b/docs-test-3rd-techno/html/search/functions_b.js new file mode 100644 index 0000000..e479d59 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['recursive_5fsearch_5fgit_5ffolder_0',['recursive_search_git_folder',['../namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a',1,'penify_hook::utils']]], + ['run_1',['run',['../classpenify__hook_1_1commit__analyzer_1_1CommitDocGenHook.html#a2d0bb9eba04614915fa33a1d7b0b8f03',1,'penify_hook.commit_analyzer.CommitDocGenHook.run()'],['../classpenify__hook_1_1file__analyzer_1_1FileAnalyzerGenHook.html#a503c97b07cb2db1df0d881094dd6bb49',1,'penify_hook.file_analyzer.FileAnalyzerGenHook.run()'],['../classpenify__hook_1_1folder__analyzer_1_1FolderAnalyzerGenHook.html#a53c61ef41d39dd9bb1c8020a94f1dd8d',1,'penify_hook.folder_analyzer.FolderAnalyzerGenHook.run()'],['../classpenify__hook_1_1git__analyzer_1_1GitDocGenHook.html#a38fe1e50fc9448d995851d933283b633',1,'penify_hook.git_analyzer.GitDocGenHook.run()']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_c.js b/docs-test-3rd-techno/html/search/functions_c.js new file mode 100644 index 0000000..5eaaf97 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['save_5fcredentials_0',['save_credentials',['../namespacepenify__hook_1_1commands_1_1auth__commands.html#a68a2119363481a0001ad6190329c863b',1,'penify_hook::commands::auth_commands']]], + ['save_5fjira_5fconfig_1',['save_jira_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#a0459710e44183890121dc3013cb6f374',1,'penify_hook::commands::config_commands']]], + ['save_5fllm_5fconfig_2',['save_llm_config',['../namespacepenify__hook_1_1commands_1_1config__commands.html#ab24827423ec7e9a71a03639fb16e4cd4',1,'penify_hook::commands::config_commands']]], + ['send_5ffile_5ffor_5fdocstring_5fgeneration_3',['send_file_for_docstring_generation',['../classpenify__hook_1_1api__client_1_1APIClient.html#ad6392c5f8e8b5e3394a74979278835bd',1,'penify_hook::api_client::APIClient']]], + ['setup_5fcommit_5fparser_4',['setup_commit_parser',['../namespacepenify__hook_1_1commands_1_1commit__commands.html#a80d37e58f2dc4356ed99a54ac75b1db1',1,'penify_hook::commands::commit_commands']]], + ['setup_5fconfig_5fparser_5',['setup_config_parser',['../namespacepenify__hook_1_1config__command.html#ad711074006b3c5d4a1cc73ef38dcf0ba',1,'penify_hook::config_command']]], + ['setup_5fdocgen_5fparser_6',['setup_docgen_parser',['../namespacepenify__hook_1_1commands_1_1doc__commands.html#abf64cb941e49af02798f5ff1b56139c6',1,'penify_hook::commands::doc_commands']]], + ['setup_5flogin_5fparser_7',['setup_login_parser',['../namespacepenify__hook_1_1login__command.html#ae787794b007f320b4480aff0b9767235',1,'penify_hook::login_command']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_d.js b/docs-test-3rd-techno/html/search/functions_d.js new file mode 100644 index 0000000..5087b19 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_d.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['test_5fcommit_5fcode_5ferror_5fhandling_0',['test_commit_code_error_handling',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a8288fd5a830273e48732231df0421658',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fclient_1',['test_commit_code_with_jira_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a02319d7a366df3950c8c151dd7821a93',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fjira_5fconnection_5ffailure_2',['test_commit_code_with_jira_connection_failure',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#ae8066d6f07122a6be89b05ddbb5bb07b',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fcommit_5fcode_5fwith_5fllm_5fclient_3',['test_commit_code_with_llm_client',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a70225e655e0ca64868d71e3c9389a218',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fconfig_5fjira_5fweb_5fserver_5fsetup_4',['test_config_jira_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a63789aa9bfafe1a16b1f462174c53f6b',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fconfig_5fllm_5fweb_5fserver_5fsetup_5',['test_config_llm_web_server_setup',['../classtests_1_1test__web__config_1_1TestWebConfig.html#a881cb29c7d44f302fb961f496a20776d',1,'tests::test_web_config::TestWebConfig']]], + ['test_5fgenerate_5fdoc_5ferror_5fhandling_6',['test_generate_doc_error_handling',['../namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffile_5flocation_7',['test_generate_doc_file_location',['../namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5ffolder_5flocation_8',['test_generate_doc_folder_location',['../namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fno_5flocation_9',['test_generate_doc_no_location',['../namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffile_5fexception_10',['test_generate_doc_with_file_exception',['../namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68',1,'tests::test_doc_commands']]], + ['test_5fgenerate_5fdoc_5fwith_5ffolder_5fexception_11',['test_generate_doc_with_folder_exception',['../namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee',1,'tests::test_doc_commands']]], + ['test_5fget_5fjira_5fconfig_5fexists_12',['test_get_jira_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a153e6f218be2f42581be6895a14a4e85',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fempty_13',['test_get_llm_config_empty',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a29cdcf995761e77c9ff8c93e49eff541',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5fexists_14',['test_get_llm_config_exists',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#acd6ebd022b24b111df7cabdab4e1b6db',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fllm_5fconfig_5finvalid_5fjson_15',['test_get_llm_config_invalid_json',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a06d58f1b9188f2486f7e424aea40d0bd',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fexisting_5fdir_16',['test_get_penify_config_existing_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ae9c0ef56734f17892b7ac115e488bac4',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5fpenify_5fconfig_5fnew_5fdir_17',['test_get_penify_config_new_dir',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a335a57c003a8d797a5457c4d1c60420e',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fconfig_18',['test_get_token_from_config',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#ac2890b010d859d53629d9bea6a72b9c0',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5ffrom_5fenv_19',['test_get_token_from_env',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#af30db6b96dcf9e6143d6a8f5241f5be1',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fget_5ftoken_5fnot_5ffound_20',['test_get_token_not_found',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a1548cea068b4305d5a1d3ad5fb1bc25a',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fhandle_5fcommit_21',['test_handle_commit',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#adc5d95c15793c4bc698a62147aab2f7a',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fhandle_5fdocgen_5fgenerate_22',['test_handle_docgen_generate',['../namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5finstall_5fhook_23',['test_handle_docgen_install_hook',['../namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5fno_5ftoken_24',['test_handle_docgen_no_token',['../namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c',1,'tests::test_doc_commands']]], + ['test_5fhandle_5fdocgen_5funinstall_5fhook_25',['test_handle_docgen_uninstall_hook',['../namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b',1,'tests::test_doc_commands']]], + ['test_5fsave_5fjira_5fconfig_5fsuccess_26',['test_save_jira_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a060996b8323f4cfd629c77b4e2605f50',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5ffailure_27',['test_save_llm_config_failure',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2ccb8ee5c161fcf49a04404a1658100b',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsave_5fllm_5fconfig_5fsuccess_28',['test_save_llm_config_success',['../classtests_1_1test__config__commands_1_1TestConfigCommands.html#a2411d025a057beb8a2f2a6431559e64f',1,'tests::test_config_commands::TestConfigCommands']]], + ['test_5fsetup_5fcommit_5fparser_29',['test_setup_commit_parser',['../classtests_1_1test__commit__commands_1_1TestCommitCommands.html#a820f1f6ac060eb4b33903e1e8a3318fe',1,'tests::test_commit_commands::TestCommitCommands']]], + ['test_5fsetup_5fdocgen_5fparser_30',['test_setup_docgen_parser',['../namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042',1,'tests::test_doc_commands']]] +]; diff --git a/docs-test-3rd-techno/html/search/functions_e.js b/docs-test-3rd-techno/html/search/functions_e.js new file mode 100644 index 0000000..eb360f1 --- /dev/null +++ b/docs-test-3rd-techno/html/search/functions_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['uninstall_5fgit_5fhook_0',['uninstall_git_hook',['../namespacepenify__hook_1_1commands_1_1hook__commands.html#a1b2b3ffff51d19300a0b7ea785678443',1,'penify_hook::commands::hook_commands']]], + ['update_5fissue_5fstatus_1',['update_issue_status',['../classpenify__hook_1_1jira__client_1_1JiraClient.html#aca8837552d37bfd611de23441a240826',1,'penify_hook::jira_client::JiraClient']]], + ['update_5fstage_2',['update_stage',['../namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd',1,'penify_hook::ui_utils']]] +]; diff --git a/docs-test-3rd-techno/html/search/mag.svg b/docs-test-3rd-techno/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs-test-3rd-techno/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/search/mag_d.svg b/docs-test-3rd-techno/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs-test-3rd-techno/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs-test-3rd-techno/html/search/mag_sel.svg b/docs-test-3rd-techno/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs-test-3rd-techno/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/search/mag_seld.svg b/docs-test-3rd-techno/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs-test-3rd-techno/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs-test-3rd-techno/html/search/namespaces_0.js b/docs-test-3rd-techno/html/search/namespaces_0.js new file mode 100644 index 0000000..22d8699 --- /dev/null +++ b/docs-test-3rd-techno/html/search/namespaces_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['penify_5fhook_0',['penify_hook',['../namespacepenify__hook.html',1,'']]], + ['penify_5fhook_3a_3aapi_5fclient_1',['api_client',['../namespacepenify__hook_1_1api__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3abase_5fanalyzer_2',['base_analyzer',['../namespacepenify__hook_1_1base__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3',['commands',['../namespacepenify__hook_1_1commands.html',1,'penify_hook']]], + ['penify_5fhook_3a_3acommands_3a_3aauth_5fcommands_4',['auth_commands',['../namespacepenify__hook_1_1commands_1_1auth__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3acommit_5fcommands_5',['commit_commands',['../namespacepenify__hook_1_1commands_1_1commit__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3aconfig_5fcommands_6',['config_commands',['../namespacepenify__hook_1_1commands_1_1config__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3adoc_5fcommands_7',['doc_commands',['../namespacepenify__hook_1_1commands_1_1doc__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommands_3a_3ahook_5fcommands_8',['hook_commands',['../namespacepenify__hook_1_1commands_1_1hook__commands.html',1,'penify_hook::commands']]], + ['penify_5fhook_3a_3acommit_5fanalyzer_9',['commit_analyzer',['../namespacepenify__hook_1_1commit__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconfig_5fcommand_10',['config_command',['../namespacepenify__hook_1_1config__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aconstants_11',['constants',['../namespacepenify__hook_1_1constants.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afile_5fanalyzer_12',['file_analyzer',['../namespacepenify__hook_1_1file__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3afolder_5fanalyzer_13',['folder_analyzer',['../namespacepenify__hook_1_1folder__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3agit_5fanalyzer_14',['git_analyzer',['../namespacepenify__hook_1_1git__analyzer.html',1,'penify_hook']]], + ['penify_5fhook_3a_3ajira_5fclient_15',['jira_client',['../namespacepenify__hook_1_1jira__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3allm_5fclient_16',['llm_client',['../namespacepenify__hook_1_1llm__client.html',1,'penify_hook']]], + ['penify_5fhook_3a_3alogin_5fcommand_17',['login_command',['../namespacepenify__hook_1_1login__command.html',1,'penify_hook']]], + ['penify_5fhook_3a_3amain_18',['main',['../namespacepenify__hook_1_1main.html',1,'penify_hook']]], + ['penify_5fhook_3a_3aui_5futils_19',['ui_utils',['../namespacepenify__hook_1_1ui__utils.html',1,'penify_hook']]], + ['penify_5fhook_3a_3autils_20',['utils',['../namespacepenify__hook_1_1utils.html',1,'penify_hook']]] +]; diff --git a/docs-test-3rd-techno/html/search/namespaces_1.js b/docs-test-3rd-techno/html/search/namespaces_1.js new file mode 100644 index 0000000..fdca1a8 --- /dev/null +++ b/docs-test-3rd-techno/html/search/namespaces_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['setup_0',['setup',['../namespacesetup.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/namespaces_2.js b/docs-test-3rd-techno/html/search/namespaces_2.js new file mode 100644 index 0000000..3095caf --- /dev/null +++ b/docs-test-3rd-techno/html/search/namespaces_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['tests_0',['tests',['../namespacetests.html',1,'']]], + ['tests_3a_3aconftest_1',['conftest',['../namespacetests_1_1conftest.html',1,'tests']]], + ['tests_3a_3atest_5fcommit_5fcommands_2',['test_commit_commands',['../namespacetests_1_1test__commit__commands.html',1,'tests']]], + ['tests_3a_3atest_5fconfig_5fcommands_3',['test_config_commands',['../namespacetests_1_1test__config__commands.html',1,'tests']]], + ['tests_3a_3atest_5fdoc_5fcommands_4',['test_doc_commands',['../namespacetests_1_1test__doc__commands.html',1,'tests']]], + ['tests_3a_3atest_5fweb_5fconfig_5',['test_web_config',['../namespacetests_1_1test__web__config.html',1,'tests']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_0.js b/docs-test-3rd-techno/html/search/pages_0.js new file mode 100644 index 0000000..f702d1f --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cli_20commit_20commands_0',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['cli_20configuration_20commands_1',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]], + ['cli_20detailed_20usage_20guide_2',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['cli_20documentation_3',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['cli_20documentation_20generation_20commands_4',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['cli_20example_20workflows_5',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]], + ['commands_6',['Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'Penify CLI - Commit Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'Penify CLI - Configuration Commands'],['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'Penify CLI - Documentation Generation Commands']]], + ['commit_20commands_7',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['configuration_20commands_8',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_1.js b/docs-test-3rd-techno/html/search/pages_1.js new file mode 100644 index 0000000..0f2bd2f --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['detailed_20usage_20guide_0',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['documentation_1',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['documentation_20generation_20commands_2',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_2.js b/docs-test-3rd-techno/html/search/pages_2.js new file mode 100644 index 0000000..cac79d3 --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['example_20workflows_0',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_3.js b/docs-test-3rd-techno/html/search/pages_3.js new file mode 100644 index 0000000..e1c7f91 --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['generation_20commands_0',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['guide_1',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_4.js b/docs-test-3rd-techno/html/search/pages_4.js new file mode 100644 index 0000000..1fc9b22 --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['penify_20cli_20commit_20commands_0',['Penify CLI - Commit Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2commit-commands.html',1,'']]], + ['penify_20cli_20configuration_20commands_1',['Penify CLI - Configuration Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2config-commands.html',1,'']]], + ['penify_20cli_20detailed_20usage_20guide_2',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]], + ['penify_20cli_20documentation_3',['penify-cli-documentation',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2penify-cli-documentation.html',1,'']]], + ['penify_20cli_20documentation_20generation_20commands_4',['Penify CLI - Documentation Generation Commands',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2doc__commands.html',1,'']]], + ['penify_20cli_20example_20workflows_5',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_5.js b/docs-test-3rd-techno/html/search/pages_5.js new file mode 100644 index 0000000..9920964 --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['usage_20guide_0',['Penify CLI - Detailed Usage Guide',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2detailed-usage.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/pages_6.js b/docs-test-3rd-techno/html/search/pages_6.js new file mode 100644 index 0000000..4b1b834 --- /dev/null +++ b/docs-test-3rd-techno/html/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['workflows_0',['Penify CLI Example Workflows',['../md__2app_2doc__state_2github__reposRepoArchDocGenContext_2Penify-dev_2penify-cli_2docs_2example-workflows.html',1,'']]] +]; diff --git a/docs-test-3rd-techno/html/search/search.css b/docs-test-3rd-techno/html/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/docs-test-3rd-techno/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#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 box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + 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; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 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 { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- 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: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + 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 black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.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; + font-size: 8pt; + 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 */ + +.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/docs-test-3rd-techno/html/search/search.js b/docs-test-3rd-techno/html/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs-test-3rd-techno/html/search/search.js @@ -0,0 +1,694 @@ +/* + @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 + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const 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) { + e.stopPropagation(); + 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 + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- 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'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let 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) { + const 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); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let 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) { + let focusItem; + for (;;) { + const 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) { + let focusItem; + for (;;) { + const 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) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // 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 + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const 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 + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const 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) { + const 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 + const newIndex = childIndex+1; + let 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 + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + 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); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/setup.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    setup.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  setup
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     setup.name
     
     setup.version
     
     setup.packages
     
     setup.install_requires
     
     setup.entry_points
     
     setup.author
     
     setup.author_email
     
     setup.description
     
     setup.long_description
     
     setup.long_description_content_type
     
     setup.url
     
     setup.classifiers
     
     setup.python_requires
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/setup_8py.js b/docs-test-3rd-techno/html/setup_8py.js new file mode 100644 index 0000000..ff1aead --- /dev/null +++ b/docs-test-3rd-techno/html/setup_8py.js @@ -0,0 +1,16 @@ +var setup_8py = +[ + [ "setup.author", "namespacesetup.html#a3a57a4772d418a06835249cbade0d86a", null ], + [ "setup.author_email", "namespacesetup.html#a5b08034343aa2be607722a8b315f3625", null ], + [ "setup.classifiers", "namespacesetup.html#abe96a9c38c1c61f9f0fdb002c482f785", null ], + [ "setup.description", "namespacesetup.html#aedf461ec52a946bda975938ba0b93ec0", null ], + [ "setup.entry_points", "namespacesetup.html#ada7058afc98897f073d3f3b8b9157059", null ], + [ "setup.install_requires", "namespacesetup.html#abead4f26b530856f858f0d44c7cf2588", null ], + [ "setup.long_description", "namespacesetup.html#a4cda9dbfb952875376a0749fe08a5bde", null ], + [ "setup.long_description_content_type", "namespacesetup.html#a3796ea10c998699d07d391414ff5d720", null ], + [ "setup.name", "namespacesetup.html#ab3a7a0638d76a01367c5bc3cc699447f", null ], + [ "setup.packages", "namespacesetup.html#aff2375a361fd5865c77bd9aa093be747", null ], + [ "setup.python_requires", "namespacesetup.html#aa7ca7bc9391b217e81efeb03689d8dbf", null ], + [ "setup.url", "namespacesetup.html#afc13124aa5c0124e84e1d965e3f4b0fb", null ], + [ "setup.version", "namespacesetup.html#a2aa722b36a933088812b50ea79b97a5c", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/splitbar.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/splitbard.png b/docs-test-3rd-techno/html/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/svg.min.js b/docs-test-3rd-techno/html/svg.min.js new file mode 100644 index 0000000..916732f --- /dev/null +++ b/docs-test-3rd-techno/html/svg.min.js @@ -0,0 +1,46 @@ +/*! +* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG. +* @version 3.1.2 +* https://svgjs.dev/ +* +* @copyright Wout Fierens +* @license MIT +* +* BUILT: Wed Jan 26 2022 23:19:07 GMT+0100 (Mitteleuropäische Normalzeit) +*/var SVG=function(){"use strict";const methods$1={};const names=[];function registerMethods(name,m){if(Array.isArray(name)){for(const _name of name){registerMethods(_name,m)}return}if(typeof name==="object"){for(const _name in name){registerMethods(_name,name[_name])}return}addMethodNames(Object.getOwnPropertyNames(m));methods$1[name]=Object.assign(methods$1[name]||{},m)}function getMethodsFor(name){return methods$1[name]||{}}function getMethodNames(){return[...new Set(names)]}function addMethodNames(_names){names.push(..._names)}function map(array,block){let i;const il=array.length;const result=[];for(i=0;i=0;i--){assignNewId(node.children[i])}if(node.id){node.id=eid(node.nodeName);return node}return node}function extend(modules,methods){let key,i;modules=Array.isArray(modules)?modules:[modules];for(i=modules.length-1;i>=0;i--){for(key in methods){modules[i].prototype[key]=methods[key]}}}function wrapWithAttrCheck(fn){return function(...args){const o=args[args.length-1];if(o&&o.constructor===Object&&!(o instanceof Array)){return fn.apply(this,args.slice(0,-1)).attr(o)}else{return fn.apply(this,args)}}}function siblings(){return this.parent().children()}function position(){return this.parent().index(this)}function next(){return this.siblings()[this.position()+1]}function prev(){return this.siblings()[this.position()-1]}function forward(){const i=this.position();const p=this.parent();p.add(this.remove(),i+1);return this}function backward(){const i=this.position();const p=this.parent();p.add(this.remove(),i?i-1:0);return this}function front(){const p=this.parent();p.add(this.remove());return this}function back(){const p=this.parent();p.add(this.remove(),0);return this}function before(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i);return this}function after(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i+1);return this}function insertBefore(element){element=makeInstance(element);element.before(this);return this}function insertAfter(element){element=makeInstance(element);element.after(this);return this}registerMethods("Dom",{siblings:siblings,position:position,next:next,prev:prev,forward:forward,backward:backward,front:front,back:back,before:before,after:after,insertBefore:insertBefore,insertAfter:insertAfter});const numberAndUnit=/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i;const hex=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;const rgb=/rgb\((\d+),(\d+),(\d+)\)/;const reference=/(#[a-z_][a-z0-9\-_]*)/i;const transforms=/\)\s*,?\s*/;const whitespace=/\s/g;const isHex=/^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;const isRgb=/^rgb\(/;const isBlank=/^(\s+)?$/;const isNumber=/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;const isImage=/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i;const delimiter=/[\s,]+/;const isPathLetter=/[MLHVCSQTAZ]/i;var regex={__proto__:null,numberAndUnit:numberAndUnit,hex:hex,rgb:rgb,reference:reference,transforms:transforms,whitespace:whitespace,isHex:isHex,isRgb:isRgb,isBlank:isBlank,isNumber:isNumber,isImage:isImage,delimiter:delimiter,isPathLetter:isPathLetter};function classes(){const attr=this.attr("class");return attr==null?[]:attr.trim().split(delimiter)}function hasClass(name){return this.classes().indexOf(name)!==-1}function addClass(name){if(!this.hasClass(name)){const array=this.classes();array.push(name);this.attr("class",array.join(" "))}return this}function removeClass(name){if(this.hasClass(name)){this.attr("class",this.classes().filter(function(c){return c!==name}).join(" "))}return this}function toggleClass(name){return this.hasClass(name)?this.removeClass(name):this.addClass(name)}registerMethods("Dom",{classes:classes,hasClass:hasClass,addClass:addClass,removeClass:removeClass,toggleClass:toggleClass});function css(style,val){const ret={};if(arguments.length===0){this.node.style.cssText.split(/\s*;\s*/).filter(function(el){return!!el.length}).forEach(function(el){const t=el.split(/\s*:\s*/);ret[t[0]]=t[1]});return ret}if(arguments.length<2){if(Array.isArray(style)){for(const name of style){const cased=camelCase(name);ret[name]=this.node.style[cased]}return ret}if(typeof style==="string"){return this.node.style[camelCase(style)]}if(typeof style==="object"){for(const name in style){this.node.style[camelCase(name)]=style[name]==null||isBlank.test(style[name])?"":style[name]}}}if(arguments.length===2){this.node.style[camelCase(style)]=val==null||isBlank.test(val)?"":val}return this}function show(){return this.css("display","")}function hide(){return this.css("display","none")}function visible(){return this.css("display")!=="none"}registerMethods("Dom",{css:css,show:show,hide:hide,visible:visible});function data(a,v,r){if(a==null){return this.data(map(filter(this.node.attributes,el=>el.nodeName.indexOf("data-")===0),el=>el.nodeName.slice(5)))}else if(a instanceof Array){const data={};for(const key of a){data[key]=this.data(key)}return data}else if(typeof a==="object"){for(v in a){this.data(v,a[v])}}else if(arguments.length<2){try{return JSON.parse(this.attr("data-"+a))}catch(e){return this.attr("data-"+a)}}else{this.attr("data-"+a,v===null?null:r===true||typeof v==="string"||typeof v==="number"?v:JSON.stringify(v))}return this}registerMethods("Dom",{data:data});function remember(k,v){if(typeof arguments[0]==="object"){for(const key in k){this.remember(key,k[key])}}else if(arguments.length===1){return this.memory()[k]}else{this.memory()[k]=v}return this}function forget(){if(arguments.length===0){this._memory={}}else{for(let i=arguments.length-1;i>=0;i--){delete this.memory()[arguments[i]]}}return this}function memory(){return this._memory=this._memory||{}}registerMethods("Dom",{remember:remember,forget:forget,memory:memory});function sixDigitHex(hex){return hex.length===4?["#",hex.substring(1,2),hex.substring(1,2),hex.substring(2,3),hex.substring(2,3),hex.substring(3,4),hex.substring(3,4)].join(""):hex}function componentHex(component){const integer=Math.round(component);const bounded=Math.max(0,Math.min(255,integer));const hex=bounded.toString(16);return hex.length===1?"0"+hex:hex}function is(object,space){for(let i=space.length;i--;){if(object[space[i]]==null){return false}}return true}function getParameters(a,b){const params=is(a,"rgb")?{_a:a.r,_b:a.g,_c:a.b,_d:0,space:"rgb"}:is(a,"xyz")?{_a:a.x,_b:a.y,_c:a.z,_d:0,space:"xyz"}:is(a,"hsl")?{_a:a.h,_b:a.s,_c:a.l,_d:0,space:"hsl"}:is(a,"lab")?{_a:a.l,_b:a.a,_c:a.b,_d:0,space:"lab"}:is(a,"lch")?{_a:a.l,_b:a.c,_c:a.h,_d:0,space:"lch"}:is(a,"cmyk")?{_a:a.c,_b:a.m,_c:a.y,_d:a.k,space:"cmyk"}:{_a:0,_b:0,_c:0,space:"rgb"};params.space=b||params.space;return params}function cieSpace(space){if(space==="lab"||space==="xyz"||space==="lch"){return true}else{return false}}function hueToRgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p}class Color{constructor(...inputs){this.init(...inputs)}static isColor(color){return color&&(color instanceof Color||this.isRgb(color)||this.test(color))}static isRgb(color){return color&&typeof color.r==="number"&&typeof color.g==="number"&&typeof color.b==="number"}static random(mode="vibrant",t,u){const{random,round,sin,PI:pi}=Math;if(mode==="vibrant"){const l=(81-57)*random()+57;const c=(83-45)*random()+45;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="sine"){t=t==null?random():t;const r=round(80*sin(2*pi*t/.5+.01)+150);const g=round(50*sin(2*pi*t/.5+4.6)+200);const b=round(100*sin(2*pi*t/.5+2.3)+150);const color=new Color(r,g,b);return color}else if(mode==="pastel"){const l=(94-86)*random()+86;const c=(26-9)*random()+9;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="dark"){const l=10+10*random();const c=(125-75)*random()+86;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="rgb"){const r=255*random();const g=255*random();const b=255*random();const color=new Color(r,g,b);return color}else if(mode==="lab"){const l=100*random();const a=256*random()-128;const b=256*random()-128;const color=new Color(l,a,b,"lab");return color}else if(mode==="grey"){const grey=255*random();const color=new Color(grey,grey,grey);return color}else{throw new Error("Unsupported random color mode")}}static test(color){return typeof color==="string"&&(isHex.test(color)||isRgb.test(color))}cmyk(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const k=Math.min(1-r,1-g,1-b);if(k===1){return new Color(0,0,0,1,"cmyk")}const c=(1-r-k)/(1-k);const m=(1-g-k)/(1-k);const y=(1-b-k)/(1-k);const color=new Color(c,m,y,k,"cmyk");return color}hsl(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;const isGrey=max===min;const delta=max-min;const s=isGrey?0:l>.5?delta/(2-max-min):delta/(max+min);const h=isGrey?0:max===r?((g-b)/delta+(gparseInt(v));Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else if(isHex.test(a)){const hexParse=v=>parseInt(v,16);const[,_a,_b,_c]=hex.exec(sixDigitHex(a)).map(hexParse);Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else throw Error("Unsupported string format, can't construct Color")}const{_a,_b,_c,_d}=this;const components=this.space==="rgb"?{r:_a,g:_b,b:_c}:this.space==="xyz"?{x:_a,y:_b,z:_c}:this.space==="hsl"?{h:_a,s:_b,l:_c}:this.space==="lab"?{l:_a,a:_b,b:_c}:this.space==="lch"?{l:_a,c:_b,h:_c}:this.space==="cmyk"?{c:_a,m:_b,y:_c,k:_d}:{};Object.assign(this,components)}lab(){const{x,y,z}=this.xyz();const l=116*y-16;const a=500*(x-y);const b=200*(y-z);const color=new Color(l,a,b,"lab");return color}lch(){const{l,a,b}=this.lab();const c=Math.sqrt(a**2+b**2);let h=180*Math.atan2(b,a)/Math.PI;if(h<0){h*=-1;h=360-h}const color=new Color(l,c,h,"lch");return color}rgb(){if(this.space==="rgb"){return this}else if(cieSpace(this.space)){let{x,y,z}=this;if(this.space==="lab"||this.space==="lch"){let{l,a,b}=this;if(this.space==="lch"){const{c,h}=this;const dToR=Math.PI/180;a=c*Math.cos(dToR*h);b=c*Math.sin(dToR*h)}const yL=(l+16)/116;const xL=a/500+yL;const zL=yL-b/200;const ct=16/116;const mx=.008856;const nm=7.787;x=.95047*(xL**3>mx?xL**3:(xL-ct)/nm);y=1*(yL**3>mx?yL**3:(yL-ct)/nm);z=1.08883*(zL**3>mx?zL**3:(zL-ct)/nm)}const rU=x*3.2406+y*-1.5372+z*-.4986;const gU=x*-.9689+y*1.8758+z*.0415;const bU=x*.0557+y*-.204+z*1.057;const pow=Math.pow;const bd=.0031308;const r=rU>bd?1.055*pow(rU,1/2.4)-.055:12.92*rU;const g=gU>bd?1.055*pow(gU,1/2.4)-.055:12.92*gU;const b=bU>bd?1.055*pow(bU,1/2.4)-.055:12.92*bU;const color=new Color(255*r,255*g,255*b);return color}else if(this.space==="hsl"){let{h,s,l}=this;h/=360;s/=100;l/=100;if(s===0){l*=255;const color=new Color(l,l,l);return color}const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;const r=255*hueToRgb(p,q,h+1/3);const g=255*hueToRgb(p,q,h);const b=255*hueToRgb(p,q,h-1/3);const color=new Color(r,g,b);return color}else if(this.space==="cmyk"){const{c,m,y,k}=this;const r=255*(1-Math.min(1,c*(1-k)+k));const g=255*(1-Math.min(1,m*(1-k)+k));const b=255*(1-Math.min(1,y*(1-k)+k));const color=new Color(r,g,b);return color}else{return this}}toArray(){const{_a,_b,_c,_d,space}=this;return[_a,_b,_c,_d,space]}toHex(){const[r,g,b]=this._clamped().map(componentHex);return`#${r}${g}${b}`}toRgb(){const[rV,gV,bV]=this._clamped();const string=`rgb(${rV},${gV},${bV})`;return string}toString(){return this.toHex()}xyz(){const{_a:r255,_b:g255,_c:b255}=this.rgb();const[r,g,b]=[r255,g255,b255].map(v=>v/255);const rL=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92;const gL=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92;const bL=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92;const xU=(rL*.4124+gL*.3576+bL*.1805)/.95047;const yU=(rL*.2126+gL*.7152+bL*.0722)/1;const zU=(rL*.0193+gL*.1192+bL*.9505)/1.08883;const x=xU>.008856?Math.pow(xU,1/3):7.787*xU+16/116;const y=yU>.008856?Math.pow(yU,1/3):7.787*yU+16/116;const z=zU>.008856?Math.pow(zU,1/3):7.787*zU+16/116;const color=new Color(x,y,z,"xyz");return color}_clamped(){const{_a,_b,_c}=this.rgb();const{max,min,round}=Math;const format=v=>max(0,min(round(v),255));return[_a,_b,_c].map(format)}}class Point{constructor(...args){this.init(...args)}clone(){return new Point(this)}init(x,y){const base={x:0,y:0};const source=Array.isArray(x)?{x:x[0],y:x[1]}:typeof x==="object"?{x:x.x,y:x.y}:{x:x,y:y};this.x=source.x==null?base.x:source.x;this.y=source.y==null?base.y:source.y;return this}toArray(){return[this.x,this.y]}transform(m){return this.clone().transformO(m)}transformO(m){if(!Matrix.isMatrixLike(m)){m=new Matrix(m)}const{x,y}=this;this.x=m.a*x+m.c*y+m.e;this.y=m.b*x+m.d*y+m.f;return this}}function point(x,y){return new Point(x,y).transform(this.screenCTM().inverse())}function closeEnough(a,b,threshold){return Math.abs(b-a)<(threshold||1e-6)}class Matrix{constructor(...args){this.init(...args)}static formatTransforms(o){const flipBoth=o.flip==="both"||o.flip===true;const flipX=o.flip&&(flipBoth||o.flip==="x")?-1:1;const flipY=o.flip&&(flipBoth||o.flip==="y")?-1:1;const skewX=o.skew&&o.skew.length?o.skew[0]:isFinite(o.skew)?o.skew:isFinite(o.skewX)?o.skewX:0;const skewY=o.skew&&o.skew.length?o.skew[1]:isFinite(o.skew)?o.skew:isFinite(o.skewY)?o.skewY:0;const scaleX=o.scale&&o.scale.length?o.scale[0]*flipX:isFinite(o.scale)?o.scale*flipX:isFinite(o.scaleX)?o.scaleX*flipX:flipX;const scaleY=o.scale&&o.scale.length?o.scale[1]*flipY:isFinite(o.scale)?o.scale*flipY:isFinite(o.scaleY)?o.scaleY*flipY:flipY;const shear=o.shear||0;const theta=o.rotate||o.theta||0;const origin=new Point(o.origin||o.around||o.ox||o.originX,o.oy||o.originY);const ox=origin.x;const oy=origin.y;const position=new Point(o.position||o.px||o.positionX||NaN,o.py||o.positionY||NaN);const px=position.x;const py=position.y;const translate=new Point(o.translate||o.tx||o.translateX,o.ty||o.translateY);const tx=translate.x;const ty=translate.y;const relative=new Point(o.relative||o.rx||o.relativeX,o.ry||o.relativeY);const rx=relative.x;const ry=relative.y;return{scaleX:scaleX,scaleY:scaleY,skewX:skewX,skewY:skewY,shear:shear,theta:theta,rx:rx,ry:ry,tx:tx,ty:ty,ox:ox,oy:oy,px:px,py:py}}static fromArray(a){return{a:a[0],b:a[1],c:a[2],d:a[3],e:a[4],f:a[5]}}static isMatrixLike(o){return o.a!=null||o.b!=null||o.c!=null||o.d!=null||o.e!=null||o.f!=null}static matrixMultiply(l,r,o){const a=l.a*r.a+l.c*r.b;const b=l.b*r.a+l.d*r.b;const c=l.a*r.c+l.c*r.d;const d=l.b*r.c+l.d*r.d;const e=l.e+l.a*r.e+l.c*r.f;const f=l.f+l.b*r.e+l.d*r.f;o.a=a;o.b=b;o.c=c;o.d=d;o.e=e;o.f=f;return o}around(cx,cy,matrix){return this.clone().aroundO(cx,cy,matrix)}aroundO(cx,cy,matrix){const dx=cx||0;const dy=cy||0;return this.translateO(-dx,-dy).lmultiplyO(matrix).translateO(dx,dy)}clone(){return new Matrix(this)}decompose(cx=0,cy=0){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const determinant=a*d-b*c;const ccw=determinant>0?1:-1;const sx=ccw*Math.sqrt(a*a+b*b);const thetaRad=Math.atan2(ccw*b,ccw*a);const theta=180/Math.PI*thetaRad;const ct=Math.cos(thetaRad);const st=Math.sin(thetaRad);const lam=(a*c+b*d)/determinant;const sy=c*sx/(lam*a-b)||d*sx/(lam*b+a);const tx=e-cx+cx*ct*sx+cy*(lam*ct*sx-st*sy);const ty=f-cy+cx*st*sx+cy*(lam*st*sx+ct*sy);return{scaleX:sx,scaleY:sy,shear:lam,rotate:theta,translateX:tx,translateY:ty,originX:cx,originY:cy,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}equals(other){if(other===this)return true;const comp=new Matrix(other);return closeEnough(this.a,comp.a)&&closeEnough(this.b,comp.b)&&closeEnough(this.c,comp.c)&&closeEnough(this.d,comp.d)&&closeEnough(this.e,comp.e)&&closeEnough(this.f,comp.f)}flip(axis,around){return this.clone().flipO(axis,around)}flipO(axis,around){return axis==="x"?this.scaleO(-1,1,around,0):axis==="y"?this.scaleO(1,-1,0,around):this.scaleO(-1,-1,axis,around||axis)}init(source){const base=Matrix.fromArray([1,0,0,1,0,0]);source=source instanceof Element?source.matrixify():typeof source==="string"?Matrix.fromArray(source.split(delimiter).map(parseFloat)):Array.isArray(source)?Matrix.fromArray(source):typeof source==="object"&&Matrix.isMatrixLike(source)?source:typeof source==="object"?(new Matrix).transform(source):arguments.length===6?Matrix.fromArray([].slice.call(arguments)):base;this.a=source.a!=null?source.a:base.a;this.b=source.b!=null?source.b:base.b;this.c=source.c!=null?source.c:base.c;this.d=source.d!=null?source.d:base.d;this.e=source.e!=null?source.e:base.e;this.f=source.f!=null?source.f:base.f;return this}inverse(){return this.clone().inverseO()}inverseO(){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const det=a*d-b*c;if(!det)throw new Error("Cannot invert "+this);const na=d/det;const nb=-b/det;const nc=-c/det;const nd=a/det;const ne=-(na*e+nc*f);const nf=-(nb*e+nd*f);this.a=na;this.b=nb;this.c=nc;this.d=nd;this.e=ne;this.f=nf;return this}lmultiply(matrix){return this.clone().lmultiplyO(matrix)}lmultiplyO(matrix){const r=this;const l=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}multiply(matrix){return this.clone().multiplyO(matrix)}multiplyO(matrix){const l=this;const r=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}rotate(r,cx,cy){return this.clone().rotateO(r,cx,cy)}rotateO(r,cx=0,cy=0){r=radians(r);const cos=Math.cos(r);const sin=Math.sin(r);const{a,b,c,d,e,f}=this;this.a=a*cos-b*sin;this.b=b*cos+a*sin;this.c=c*cos-d*sin;this.d=d*cos+c*sin;this.e=e*cos-f*sin+cy*sin-cx*cos+cx;this.f=f*cos+e*sin-cx*sin-cy*cos+cy;return this}scale(x,y,cx,cy){return this.clone().scaleO(...arguments)}scaleO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}const{a,b,c,d,e,f}=this;this.a=a*x;this.b=b*y;this.c=c*x;this.d=d*y;this.e=e*x-cx*x+cx;this.f=f*y-cy*y+cy;return this}shear(a,cx,cy){return this.clone().shearO(a,cx,cy)}shearO(lx,cx=0,cy=0){const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.c=c+d*lx;this.e=e+f*lx-cy*lx;return this}skew(x,y,cx,cy){return this.clone().skewO(...arguments)}skewO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}x=radians(x);y=radians(y);const lx=Math.tan(x);const ly=Math.tan(y);const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.b=b+a*ly;this.c=c+d*lx;this.d=d+c*ly;this.e=e+f*lx-cy*lx;this.f=f+e*ly-cx*ly;return this}skewX(x,cx,cy){return this.skew(x,0,cx,cy)}skewY(y,cx,cy){return this.skew(0,y,cx,cy)}toArray(){return[this.a,this.b,this.c,this.d,this.e,this.f]}toString(){return"matrix("+this.a+","+this.b+","+this.c+","+this.d+","+this.e+","+this.f+")"}transform(o){if(Matrix.isMatrixLike(o)){const matrix=new Matrix(o);return matrix.multiplyO(this)}const t=Matrix.formatTransforms(o);const current=this;const{x:ox,y:oy}=new Point(t.ox,t.oy).transform(current);const transformer=(new Matrix).translateO(t.rx,t.ry).lmultiplyO(current).translateO(-ox,-oy).scaleO(t.scaleX,t.scaleY).skewO(t.skewX,t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox,oy);if(isFinite(t.px)||isFinite(t.py)){const origin=new Point(ox,oy).transform(transformer);const dx=isFinite(t.px)?t.px-origin.x:0;const dy=isFinite(t.py)?t.py-origin.y:0;transformer.translateO(dx,dy)}transformer.translateO(t.tx,t.ty);return transformer}translate(x,y){return this.clone().translateO(x,y)}translateO(x,y){this.e+=x||0;this.f+=y||0;return this}valueOf(){return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}}function ctm(){return new Matrix(this.node.getCTM())}function screenCTM(){if(typeof this.isRoot==="function"&&!this.isRoot()){const rect=this.rect(1,1);const m=rect.node.getScreenCTM();rect.remove();return new Matrix(m)}return new Matrix(this.node.getScreenCTM())}register(Matrix,"Matrix");function parser(){if(!parser.nodes){const svg=makeInstance().size(2,0);svg.node.style.cssText=["opacity: 0","position: absolute","left: -100%","top: -100%","overflow: hidden"].join(";");svg.attr("focusable","false");svg.attr("aria-hidden","true");const path=svg.path().node;parser.nodes={svg:svg,path:path}}if(!parser.nodes.svg.node.parentNode){const b=globals.document.body||globals.document.documentElement;parser.nodes.svg.addTo(b)}return parser.nodes}function isNulledBox(box){return!box.width&&!box.height&&!box.x&&!box.y}function domContains(node){return node===globals.document||(globals.document.documentElement.contains||function(node){while(node.parentNode){node=node.parentNode}return node===globals.document}).call(globals.document.documentElement,node)}class Box{constructor(...args){this.init(...args)}addOffset(){this.x+=globals.window.pageXOffset;this.y+=globals.window.pageYOffset;return new Box(this)}init(source){const base=[0,0,0,0];source=typeof source==="string"?source.split(delimiter).map(parseFloat):Array.isArray(source)?source:typeof source==="object"?[source.left!=null?source.left:source.x,source.top!=null?source.top:source.y,source.width,source.height]:arguments.length===4?[].slice.call(arguments):base;this.x=source[0]||0;this.y=source[1]||0;this.width=this.w=source[2]||0;this.height=this.h=source[3]||0;this.x2=this.x+this.w;this.y2=this.y+this.h;this.cx=this.x+this.w/2;this.cy=this.y+this.h/2;return this}isNulled(){return isNulledBox(this)}merge(box){const x=Math.min(this.x,box.x);const y=Math.min(this.y,box.y);const width=Math.max(this.x+this.width,box.x+box.width)-x;const height=Math.max(this.y+this.height,box.y+box.height)-y;return new Box(x,y,width,height)}toArray(){return[this.x,this.y,this.width,this.height]}toString(){return this.x+" "+this.y+" "+this.width+" "+this.height}transform(m){if(!(m instanceof Matrix)){m=new Matrix(m)}let xMin=Infinity;let xMax=-Infinity;let yMin=Infinity;let yMax=-Infinity;const pts=[new Point(this.x,this.y),new Point(this.x2,this.y),new Point(this.x,this.y2),new Point(this.x2,this.y2)];pts.forEach(function(p){p=p.transform(m);xMin=Math.min(xMin,p.x);xMax=Math.max(xMax,p.x);yMin=Math.min(yMin,p.y);yMax=Math.max(yMax,p.y)});return new Box(xMin,yMin,xMax-xMin,yMax-yMin)}}function getBox(el,getBBoxFn,retry){let box;try{box=getBBoxFn(el.node);if(isNulledBox(box)&&!domContains(el.node)){throw new Error("Element not in the dom")}}catch(e){box=retry(el)}return box}function bbox(){const getBBox=node=>node.getBBox();const retry=el=>{try{const clone=el.clone().addTo(parser().svg).show();const box=clone.node.getBBox();clone.remove();return box}catch(e){throw new Error(`Getting bbox of element "${el.node.nodeName}" is not possible: ${e.toString()}`)}};const box=getBox(this,getBBox,retry);const bbox=new Box(box);return bbox}function rbox(el){const getRBox=node=>node.getBoundingClientRect();const retry=el=>{throw new Error(`Getting rbox of element "${el.node.nodeName}" is not possible`)};const box=getBox(this,getRBox,retry);const rbox=new Box(box);if(el){return rbox.transform(el.screenCTM().inverseO())}return rbox.addOffset()}function inside(x,y){const box=this.bbox();return x>box.x&&y>box.y&&x{return fnOrMethodName.call(el,el,i,arr)})}else{return this.map(el=>{return el[fnOrMethodName](...args)})}},toArray(){return Array.prototype.concat.apply([],this)}});const reserved=["toArray","constructor","each"];List.extend=function(methods){methods=methods.reduce((obj,name)=>{if(reserved.includes(name))return obj;if(name[0]==="_")return obj;obj[name]=function(...attrs){return this.each(name,...attrs)};return obj},{});extend([List],methods)};function baseFind(query,parent){return new List(map((parent||globals.document).querySelectorAll(query),function(node){return adopt(node)}))}function find(query){return baseFind(query,this.node)}function findOne(query){return adopt(this.node.querySelector(query))}let listenerId=0;const windowEvents={};function getEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(!n.events)n.events={};return n.events}function getEventTarget(instance){return instance.getEventTarget()}function clearEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(n.events)n.events={}}function on(node,events,listener,binding,options){const l=listener.bind(binding||node);const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);events=Array.isArray(events)?events:events.split(delimiter);if(!listener._svgjsListenerId){listener._svgjsListenerId=++listenerId}events.forEach(function(event){const ev=event.split(".")[0];const ns=event.split(".")[1]||"*";bag[ev]=bag[ev]||{};bag[ev][ns]=bag[ev][ns]||{};bag[ev][ns][listener._svgjsListenerId]=l;n.addEventListener(ev,l,options||false)})}function off(node,events,listener,options){const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);if(typeof listener==="function"){listener=listener._svgjsListenerId;if(!listener)return}events=Array.isArray(events)?events:(events||"").split(delimiter);events.forEach(function(event){const ev=event&&event.split(".")[0];const ns=event&&event.split(".")[1];let namespace,l;if(listener){if(bag[ev]&&bag[ev][ns||"*"]){n.removeEventListener(ev,bag[ev][ns||"*"][listener],options||false);delete bag[ev][ns||"*"][listener]}}else if(ev&&ns){if(bag[ev]&&bag[ev][ns]){for(l in bag[ev][ns]){off(n,[ev,ns].join("."),l)}delete bag[ev][ns]}}else if(ns){for(event in bag){for(namespace in bag[event]){if(ns===namespace){off(n,[event,ns].join("."))}}}}else if(ev){if(bag[ev]){for(namespace in bag[ev]){off(n,[ev,namespace].join("."))}delete bag[ev]}}else{for(event in bag){off(n,event)}clearEvents(instance)}})}function dispatch(node,event,data,options){const n=getEventTarget(node);if(event instanceof globals.window.Event){n.dispatchEvent(event)}else{event=new globals.window.CustomEvent(event,{detail:data,cancelable:true,...options});n.dispatchEvent(event)}return event}class EventTarget extends Base{addEventListener(){}dispatch(event,data,options){return dispatch(this,event,data,options)}dispatchEvent(event){const bag=this.getEventHolder().events;if(!bag)return true;const events=bag[event.type];for(const i in events){for(const j in events[i]){events[i][j](event)}}return!event.defaultPrevented}fire(event,data,options){this.dispatch(event,data,options);return this}getEventHolder(){return this}getEventTarget(){return this}off(event,listener,options){off(this,event,listener,options);return this}on(event,listener,binding,options){on(this,event,listener,binding,options);return this}removeEventListener(){}}register(EventTarget,"EventTarget");function noop(){}const timeline={duration:400,ease:">",delay:0};const attrs={"fill-opacity":1,"stroke-opacity":1,"stroke-width":0,"stroke-linejoin":"miter","stroke-linecap":"butt",fill:"#000000",stroke:"#000000",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,"stop-opacity":1,"stop-color":"#000000","text-anchor":"start"};var defaults={__proto__:null,noop:noop,timeline:timeline,attrs:attrs};class SVGArray extends Array{constructor(...args){super(...args);this.init(...args)}clone(){return new this.constructor(this)}init(arr){if(typeof arr==="number")return this;this.length=0;this.push(...this.parse(arr));return this}parse(array=[]){if(array instanceof Array)return array;return array.trim().split(delimiter).map(parseFloat)}toArray(){return Array.prototype.concat.apply([],this)}toSet(){return new Set(this)}toString(){return this.join(" ")}valueOf(){const ret=[];ret.push(...this);return ret}}class SVGNumber{constructor(...args){this.init(...args)}convert(unit){return new SVGNumber(this.value,unit)}divide(number){number=new SVGNumber(number);return new SVGNumber(this/number,this.unit||number.unit)}init(value,unit){unit=Array.isArray(value)?value[1]:unit;value=Array.isArray(value)?value[0]:value;this.value=0;this.unit=unit||"";if(typeof value==="number"){this.value=isNaN(value)?0:!isFinite(value)?value<0?-34e37:+34e37:value}else if(typeof value==="string"){unit=value.match(numberAndUnit);if(unit){this.value=parseFloat(unit[1]);if(unit[5]==="%"){this.value/=100}else if(unit[5]==="s"){this.value*=1e3}this.unit=unit[5]}}else{if(value instanceof SVGNumber){this.value=value.valueOf();this.unit=value.unit}}return this}minus(number){number=new SVGNumber(number);return new SVGNumber(this-number,this.unit||number.unit)}plus(number){number=new SVGNumber(number);return new SVGNumber(this+number,this.unit||number.unit)}times(number){number=new SVGNumber(number);return new SVGNumber(this*number,this.unit||number.unit)}toArray(){return[this.value,this.unit]}toJSON(){return this.toString()}toString(){return(this.unit==="%"?~~(this.value*1e8)/1e6:this.unit==="s"?this.value/1e3:this.value)+this.unit}valueOf(){return this.value}}const hooks=[];function registerAttrHook(fn){hooks.push(fn)}function attr(attr,val,ns){if(attr==null){attr={};val=this.node.attributes;for(const node of val){attr[node.nodeName]=isNumber.test(node.nodeValue)?parseFloat(node.nodeValue):node.nodeValue}return attr}else if(attr instanceof Array){return attr.reduce((last,curr)=>{last[curr]=this.attr(curr);return last},{})}else if(typeof attr==="object"&&attr.constructor===Object){for(val in attr)this.attr(val,attr[val])}else if(val===null){this.node.removeAttribute(attr)}else if(val==null){val=this.node.getAttribute(attr);return val==null?attrs[attr]:isNumber.test(val)?parseFloat(val):val}else{val=hooks.reduce((_val,hook)=>{return hook(attr,_val,this)},val);if(typeof val==="number"){val=new SVGNumber(val)}else if(Color.isColor(val)){val=new Color(val)}else if(val.constructor===Array){val=new SVGArray(val)}if(attr==="leading"){if(this.leading){this.leading(val)}}else{typeof ns==="string"?this.node.setAttributeNS(ns,attr,val.toString()):this.node.setAttribute(attr,val.toString())}if(this.rebuild&&(attr==="font-size"||attr==="x")){this.rebuild()}}return this}class Dom extends EventTarget{constructor(node,attrs){super();this.node=node;this.type=node.nodeName;if(attrs&&node!==attrs){this.attr(attrs)}}add(element,i){element=makeInstance(element);if(element.removeNamespace&&this.node instanceof globals.window.SVGElement){element.removeNamespace()}if(i==null){this.node.appendChild(element.node)}else if(element.node!==this.node.childNodes[i]){this.node.insertBefore(element.node,this.node.childNodes[i])}return this}addTo(parent,i){return makeInstance(parent).put(this,i)}children(){return new List(map(this.node.children,function(node){return adopt(node)}))}clear(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.lastChild)}return this}clone(deep=true){this.writeDataToDom();return new this.constructor(assignNewId(this.node.cloneNode(deep)))}each(block,deep){const children=this.children();let i,il;for(i=0,il=children.length;i=0}html(htmlOrFn,outerHTML){return this.xml(htmlOrFn,outerHTML,html)}id(id){if(typeof id==="undefined"&&!this.node.id){this.node.id=eid(this.type)}return this.attr("id",id)}index(element){return[].slice.call(this.node.childNodes).indexOf(element.node)}last(){return adopt(this.node.lastChild)}matches(selector){const el=this.node;const matcher=el.matches||el.matchesSelector||el.msMatchesSelector||el.mozMatchesSelector||el.webkitMatchesSelector||el.oMatchesSelector||null;return matcher&&matcher.call(el,selector)}parent(type){let parent=this;if(!parent.node.parentNode)return null;parent=adopt(parent.node.parentNode);if(!type)return parent;do{if(typeof type==="string"?parent.matches(type):parent instanceof type)return parent}while(parent=adopt(parent.node.parentNode));return parent}put(element,i){element=makeInstance(element);this.add(element,i);return element}putIn(parent,i){return makeInstance(parent).add(this,i)}remove(){if(this.parent()){this.parent().removeElement(this)}return this}removeElement(element){this.node.removeChild(element.node);return this}replace(element){element=makeInstance(element);if(this.node.parentNode){this.node.parentNode.replaceChild(element.node,this.node)}return element}round(precision=2,map=null){const factor=10**precision;const attrs=this.attr(map);for(const i in attrs){if(typeof attrs[i]==="number"){attrs[i]=Math.round(attrs[i]*factor)/factor}}this.attr(attrs);return this}svg(svgOrFn,outerSVG){return this.xml(svgOrFn,outerSVG,svg)}toString(){return this.id()}words(text){this.node.textContent=text;return this}wrap(node){const parent=this.parent();if(!parent){return this.addTo(node)}const position=parent.index(this);return parent.put(node,position).put(this)}writeDataToDom(){this.each(function(){this.writeDataToDom()});return this}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){outerXML=outerXML==null?true:outerXML;this.writeDataToDom();let current=this;if(xmlOrFn!=null){current=adopt(current.node.cloneNode(true));if(outerXML){const result=xmlOrFn(current);current=result||current;if(result===false)return""}current.each(function(){const result=xmlOrFn(this);const _this=result||this;if(result===false){this.remove()}else if(result&&this!==_this){this.replace(_this)}},true)}return outerXML?current.node.outerHTML:current.node.innerHTML}outerXML=outerXML==null?false:outerXML;const well=create("wrapper",ns);const fragment=globals.document.createDocumentFragment();well.innerHTML=xmlOrFn;for(let len=well.children.length;len--;){fragment.appendChild(well.firstElementChild)}const parent=this.parent();return outerXML?this.replace(fragment)&&parent:this.add(fragment)}}extend(Dom,{attr:attr,find:find,findOne:findOne});register(Dom,"Dom");class Element extends Dom{constructor(node,attrs){super(node,attrs);this.dom={};this.node.instance=this;if(node.hasAttribute("svgjs:data")){this.setData(JSON.parse(node.getAttribute("svgjs:data"))||{})}}center(x,y){return this.cx(x).cy(y)}cx(x){return x==null?this.x()+this.width()/2:this.x(x-this.width()/2)}cy(y){return y==null?this.y()+this.height()/2:this.y(y-this.height()/2)}defs(){const root=this.root();return root&&root.defs()}dmove(x,y){return this.dx(x).dy(y)}dx(x=0){return this.x(new SVGNumber(x).plus(this.x()))}dy(y=0){return this.y(new SVGNumber(y).plus(this.y()))}getEventHolder(){return this}height(height){return this.attr("height",height)}move(x,y){return this.x(x).y(y)}parents(until=this.root()){const isSelector=typeof until==="string";if(!isSelector){until=makeInstance(until)}const parents=new List;let parent=this;while((parent=parent.parent())&&parent.node!==globals.document&&parent.nodeName!=="#document-fragment"){parents.push(parent);if(!isSelector&&parent.node===until.node){break}if(isSelector&&parent.matches(until)){break}if(parent.node===this.root().node){return null}}return parents}reference(attr){attr=this.attr(attr);if(!attr)return null;const m=(attr+"").match(reference);return m?makeInstance(m[1]):null}root(){const p=this.parent(getClass(root));return p&&p.root()}setData(o){this.dom=o;return this}size(width,height){const p=proportionalSize(this,width,height);return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height))}width(width){return this.attr("width",width)}writeDataToDom(){this.node.removeAttribute("svgjs:data");if(Object.keys(this.dom).length){this.node.setAttribute("svgjs:data",JSON.stringify(this.dom))}return super.writeDataToDom()}x(x){return this.attr("x",x)}y(y){return this.attr("y",y)}}extend(Element,{bbox:bbox,rbox:rbox,inside:inside,point:point,ctm:ctm,screenCTM:screenCTM});register(Element,"Element");const sugar={stroke:["color","width","opacity","linecap","linejoin","miterlimit","dasharray","dashoffset"],fill:["color","opacity","rule"],prefix:function(t,a){return a==="color"?t:t+"-"+a}};["fill","stroke"].forEach(function(m){const extension={};let i;extension[m]=function(o){if(typeof o==="undefined"){return this.attr(m)}if(typeof o==="string"||o instanceof Color||Color.isRgb(o)||o instanceof Element){this.attr(m,o)}else{for(i=sugar[m].length-1;i>=0;i--){if(o[sugar[m][i]]!=null){this.attr(sugar.prefix(m,sugar[m][i]),o[sugar[m][i]])}}}return this};registerMethods(["Element","Runner"],extension)});registerMethods(["Element","Runner"],{matrix:function(mat,b,c,d,e,f){if(mat==null){return new Matrix(this)}return this.attr("transform",new Matrix(mat,b,c,d,e,f))},rotate:function(angle,cx,cy){return this.transform({rotate:angle,ox:cx,oy:cy},true)},skew:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({skew:x,ox:y,oy:cx},true):this.transform({skew:[x,y],ox:cx,oy:cy},true)},shear:function(lam,cx,cy){return this.transform({shear:lam,ox:cx,oy:cy},true)},scale:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({scale:x,ox:y,oy:cx},true):this.transform({scale:[x,y],ox:cx,oy:cy},true)},translate:function(x,y){return this.transform({translate:[x,y]},true)},relative:function(x,y){return this.transform({relative:[x,y]},true)},flip:function(direction="both",origin="center"){if("xybothtrue".indexOf(direction)===-1){origin=direction;direction="both"}return this.transform({flip:direction,origin:origin},true)},opacity:function(value){return this.attr("opacity",value)}});registerMethods("radius",{radius:function(x,y=x){const type=(this._element||this).type;return type==="radialGradient"?this.attr("r",new SVGNumber(x)):this.rx(x).ry(y)}});registerMethods("Path",{length:function(){return this.node.getTotalLength()},pointAt:function(length){return new Point(this.node.getPointAtLength(length))}});registerMethods(["Element","Runner"],{font:function(a,v){if(typeof a==="object"){for(v in a)this.font(v,a[v]);return this}return a==="leading"?this.leading(v):a==="anchor"?this.attr("text-anchor",v):a==="size"||a==="family"||a==="weight"||a==="stretch"||a==="variant"||a==="style"?this.attr("font-"+a,v):this.attr(a,v)}});const methods=["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","touchstart","touchmove","touchleave","touchend","touchcancel"].reduce(function(last,event){const fn=function(f){if(f===null){this.off(event)}else{this.on(event,f)}return this};last[event]=fn;return last},{});registerMethods("Element",methods);function untransform(){return this.attr("transform",null)}function matrixify(){const matrix=(this.attr("transform")||"").split(transforms).slice(0,-1).map(function(str){const kv=str.trim().split("(");return[kv[0],kv[1].split(delimiter).map(function(str){return parseFloat(str)})]}).reverse().reduce(function(matrix,transform){if(transform[0]==="matrix"){return matrix.lmultiply(Matrix.fromArray(transform[1]))}return matrix[transform[0]].apply(matrix,transform[1])},new Matrix);return matrix}function toParent(parent,i){if(this===parent)return this;const ctm=this.screenCTM();const pCtm=parent.screenCTM().inverse();this.addTo(parent,i).untransform().transform(pCtm.multiply(ctm));return this}function toRoot(i){return this.toParent(this.root(),i)}function transform(o,relative){if(o==null||typeof o==="string"){const decomposed=new Matrix(this).decompose();return o==null?decomposed:decomposed[o]}if(!Matrix.isMatrixLike(o)){o={...o,origin:getOrigin(o,this)}}const cleanRelative=relative===true?this:relative||false;const result=new Matrix(cleanRelative).transform(o);return this.attr("transform",result)}registerMethods("Element",{untransform:untransform,matrixify:matrixify,toParent:toParent,toRoot:toRoot,transform:transform});class Container extends Element{flatten(parent=this,index){this.each(function(){if(this instanceof Container){return this.flatten().ungroup()}});return this}ungroup(parent=this.parent(),index=parent.index(this)){index=index===-1?parent.children().length:index;this.each(function(i,children){return children[children.length-i-1].toParent(parent,index)});return this.remove()}}register(Container,"Container");class Defs extends Container{constructor(node,attrs=node){super(nodeOrNew("defs",node),attrs)}flatten(){return this}ungroup(){return this}}register(Defs,"Defs");class Shape extends Element{}register(Shape,"Shape");function rx(rx){return this.attr("rx",rx)}function ry(ry){return this.attr("ry",ry)}function x$3(x){return x==null?this.cx()-this.rx():this.cx(x+this.rx())}function y$3(y){return y==null?this.cy()-this.ry():this.cy(y+this.ry())}function cx$1(x){return this.attr("cx",x)}function cy$1(y){return this.attr("cy",y)}function width$2(width){return width==null?this.rx()*2:this.rx(new SVGNumber(width).divide(2))}function height$2(height){return height==null?this.ry()*2:this.ry(new SVGNumber(height).divide(2))}var circled={__proto__:null,rx:rx,ry:ry,x:x$3,y:y$3,cx:cx$1,cy:cy$1,width:width$2,height:height$2};class Ellipse extends Shape{constructor(node,attrs=node){super(nodeOrNew("ellipse",node),attrs)}size(width,height){const p=proportionalSize(this,width,height);return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2))}}extend(Ellipse,circled);registerMethods("Container",{ellipse:wrapWithAttrCheck(function(width=0,height=width){return this.put(new Ellipse).size(width,height).move(0,0)})});register(Ellipse,"Ellipse");class Fragment extends Dom{constructor(node=globals.document.createDocumentFragment()){super(node)}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){const wrapper=new Dom(create("wrapper",ns));wrapper.add(this.node.cloneNode(true));return wrapper.xml(false,ns)}return super.xml(xmlOrFn,false,ns)}}register(Fragment,"Fragment");function from(x,y){return(this._element||this).type==="radialGradient"?this.attr({fx:new SVGNumber(x),fy:new SVGNumber(y)}):this.attr({x1:new SVGNumber(x),y1:new SVGNumber(y)})}function to(x,y){return(this._element||this).type==="radialGradient"?this.attr({cx:new SVGNumber(x),cy:new SVGNumber(y)}):this.attr({x2:new SVGNumber(x),y2:new SVGNumber(y)})}var gradiented={__proto__:null,from:from,to:to};class Gradient extends Container{constructor(type,attrs){super(nodeOrNew(type+"Gradient",typeof type==="string"?null:type),attrs)}attr(a,b,c){if(a==="transform")a="gradientTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}extend(Gradient,gradiented);registerMethods({Container:{gradient(...args){return this.defs().gradient(...args)}},Defs:{gradient:wrapWithAttrCheck(function(type,block){return this.put(new Gradient(type)).update(block)})}});register(Gradient,"Gradient");class Pattern extends Container{constructor(node,attrs=node){super(nodeOrNew("pattern",node),attrs)}attr(a,b,c){if(a==="transform")a="patternTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}registerMethods({Container:{pattern(...args){return this.defs().pattern(...args)}},Defs:{pattern:wrapWithAttrCheck(function(width,height,block){return this.put(new Pattern).update(block).attr({x:0,y:0,width:width,height:height,patternUnits:"userSpaceOnUse"})})}});register(Pattern,"Pattern");class Image extends Shape{constructor(node,attrs=node){super(nodeOrNew("image",node),attrs)}load(url,callback){if(!url)return this;const img=new globals.window.Image;on(img,"load",function(e){const p=this.parent(Pattern);if(this.width()===0&&this.height()===0){this.size(img.width,img.height)}if(p instanceof Pattern){if(p.width()===0&&p.height()===0){p.size(this.width(),this.height())}}if(typeof callback==="function"){callback.call(this,e)}},this);on(img,"load error",function(){off(img)});return this.attr("href",img.src=url,xlink)}}registerAttrHook(function(attr,val,_this){if(attr==="fill"||attr==="stroke"){if(isImage.test(val)){val=_this.root().defs().image(val)}}if(val instanceof Image){val=_this.root().defs().pattern(0,0,pattern=>{pattern.add(val)})}return val});registerMethods({Container:{image:wrapWithAttrCheck(function(source,callback){return this.put(new Image).size(0,0).load(source,callback)})}});register(Image,"Image");class PointArray extends SVGArray{bbox(){let maxX=-Infinity;let maxY=-Infinity;let minX=Infinity;let minY=Infinity;this.forEach(function(el){maxX=Math.max(el[0],maxX);maxY=Math.max(el[1],maxY);minX=Math.min(el[0],minX);minY=Math.min(el[1],minY)});return new Box(minX,minY,maxX-minX,maxY-minY)}move(x,y){const box=this.bbox();x-=box.x;y-=box.y;if(!isNaN(x)&&!isNaN(y)){for(let i=this.length-1;i>=0;i--){this[i]=[this[i][0]+x,this[i][1]+y]}}return this}parse(array=[0,0]){const points=[];if(array instanceof Array){array=Array.prototype.concat.apply([],array)}else{array=array.trim().split(delimiter).map(parseFloat)}if(array.length%2!==0)array.pop();for(let i=0,len=array.length;i=0;i--){if(box.width)this[i][0]=(this[i][0]-box.x)*width/box.width+box.x;if(box.height)this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}return this}toLine(){return{x1:this[0][0],y1:this[0][1],x2:this[1][0],y2:this[1][1]}}toString(){const array=[];for(let i=0,il=this.length;i":function(pos){return-Math.cos(pos*Math.PI)/2+.5},">":function(pos){return Math.sin(pos*Math.PI/2)},"<":function(pos){return-Math.cos(pos*Math.PI/2)+1},bezier:function(x1,y1,x2,y2){return function(t){if(t<0){if(x1>0){return y1/x1*t}else if(x2>0){return y2/x2*t}else{return 0}}else if(t>1){if(x2<1){return(1-y2)/(1-x2)*t+(y2-x2)/(1-x2)}else if(x1<1){return(1-y1)/(1-x1)*t+(y1-x1)/(1-x1)}else{return 1}}else{return 3*t*(1-t)**2*y1+3*t**2*(1-t)*y2+t**3}}},steps:function(steps,stepPosition="end"){stepPosition=stepPosition.split("-").reverse()[0];let jumps=steps;if(stepPosition==="none"){--jumps}else if(stepPosition==="both"){++jumps}return(t,beforeFlag=false)=>{let step=Math.floor(t*steps);const jumping=t*step%1===0;if(stepPosition==="start"||stepPosition==="both"){++step}if(beforeFlag&&jumping){--step}if(t>=0&&step<0){step=0}if(t<=1&&step>jumps){step=jumps}return step/jumps}}};class Stepper{done(){return false}}class Ease extends Stepper{constructor(fn=timeline.ease){super();this.ease=easing[fn]||fn}step(from,to,pos){if(typeof from!=="number"){return pos<1?from:to}return from+(to-from)*this.ease(pos)}}class Controller extends Stepper{constructor(fn){super();this.stepper=fn}done(c){return c.done}step(current,target,dt,c){return this.stepper(current,target,dt,c)}}function recalculate(){const duration=(this._duration||500)/1e3;const overshoot=this._overshoot||0;const eps=1e-10;const pi=Math.PI;const os=Math.log(overshoot/100+eps);const zeta=-os/Math.sqrt(pi*pi+os*os);const wn=3.9/(zeta*duration);this.d=2*zeta*wn;this.k=wn*wn}class Spring extends Controller{constructor(duration=500,overshoot=0){super();this.duration(duration).overshoot(overshoot)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;if(dt>100)dt=16;dt/=1e3;const velocity=c.velocity||0;const acceleration=-this.d*velocity-this.k*(current-target);const newPosition=current+velocity*dt+acceleration*dt*dt/2;c.velocity=velocity+acceleration*dt;c.done=Math.abs(target-newPosition)+Math.abs(velocity)<.002;return c.done?target:newPosition}}extend(Spring,{duration:makeSetterGetter("_duration",recalculate),overshoot:makeSetterGetter("_overshoot",recalculate)});class PID extends Controller{constructor(p=.1,i=.01,d=0,windup=1e3){super();this.p(p).i(i).d(d).windup(windup)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;const p=target-current;let i=(c.integral||0)+p*dt;const d=(p-(c.error||0))/dt;const windup=this._windup;if(windup!==false){i=Math.max(-windup,Math.min(i,windup))}c.error=p;c.integral=i;c.done=Math.abs(p)<.001;return c.done?target:current+(this.P*p+this.I*i+this.D*d)}}extend(PID,{windup:makeSetterGetter("_windup"),p:makeSetterGetter("P"),i:makeSetterGetter("I"),d:makeSetterGetter("D")});const segmentParameters={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};const pathHandlers={M:function(c,p,p0){p.x=p0.x=c[0];p.y=p0.y=c[1];return["M",p.x,p.y]},L:function(c,p){p.x=c[0];p.y=c[1];return["L",c[0],c[1]]},H:function(c,p){p.x=c[0];return["H",c[0]]},V:function(c,p){p.y=c[0];return["V",c[0]]},C:function(c,p){p.x=c[4];p.y=c[5];return["C",c[0],c[1],c[2],c[3],c[4],c[5]]},S:function(c,p){p.x=c[2];p.y=c[3];return["S",c[0],c[1],c[2],c[3]]},Q:function(c,p){p.x=c[2];p.y=c[3];return["Q",c[0],c[1],c[2],c[3]]},T:function(c,p){p.x=c[0];p.y=c[1];return["T",c[0],c[1]]},Z:function(c,p,p0){p.x=p0.x;p.y=p0.y;return["Z"]},A:function(c,p){p.x=c[5];p.y=c[6];return["A",c[0],c[1],c[2],c[3],c[4],c[5],c[6]]}};const mlhvqtcsaz="mlhvqtcsaz".split("");for(let i=0,il=mlhvqtcsaz.length;i=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]+=x;this[i][2]+=y}else if(l==="H"){this[i][1]+=x}else if(l==="V"){this[i][1]+=y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]+=x;this[i][2]+=y;this[i][3]+=x;this[i][4]+=y;if(l==="C"){this[i][5]+=x;this[i][6]+=y}}else if(l==="A"){this[i][6]+=x;this[i][7]+=y}}}return this}parse(d="M0 0"){if(Array.isArray(d)){d=Array.prototype.concat.apply([],d).toString()}return pathParser(d)}size(width,height){const box=this.bbox();let i,l;box.width=box.width===0?1:box.width;box.height=box.height===0?1:box.height;for(i=this.length-1;i>=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y}else if(l==="H"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x}else if(l==="V"){this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y;this[i][3]=(this[i][3]-box.x)*width/box.width+box.x;this[i][4]=(this[i][4]-box.y)*height/box.height+box.y;if(l==="C"){this[i][5]=(this[i][5]-box.x)*width/box.width+box.x;this[i][6]=(this[i][6]-box.y)*height/box.height+box.y}}else if(l==="A"){this[i][1]=this[i][1]*width/box.width;this[i][2]=this[i][2]*height/box.height;this[i][6]=(this[i][6]-box.x)*width/box.width+box.x;this[i][7]=(this[i][7]-box.y)*height/box.height+box.y}}return this}toString(){return arrayToString(this)}}const getClassForType=value=>{const type=typeof value;if(type==="number"){return SVGNumber}else if(type==="string"){if(Color.isColor(value)){return Color}else if(delimiter.test(value)){return isPathLetter.test(value)?PathArray:SVGArray}else if(numberAndUnit.test(value)){return SVGNumber}else{return NonMorphable}}else if(morphableTypes.indexOf(value.constructor)>-1){return value.constructor}else if(Array.isArray(value)){return SVGArray}else if(type==="object"){return ObjectBag}else{return NonMorphable}};class Morphable{constructor(stepper){this._stepper=stepper||new Ease("-");this._from=null;this._to=null;this._type=null;this._context=null;this._morphObj=null}at(pos){return this._morphObj.morph(this._from,this._to,pos,this._stepper,this._context)}done(){const complete=this._context.map(this._stepper.done).reduce(function(last,curr){return last&&curr},true);return complete}from(val){if(val==null){return this._from}this._from=this._set(val);return this}stepper(stepper){if(stepper==null)return this._stepper;this._stepper=stepper;return this}to(val){if(val==null){return this._to}this._to=this._set(val);return this}type(type){if(type==null){return this._type}this._type=type;return this}_set(value){if(!this._type){this.type(getClassForType(value))}let result=new this._type(value);if(this._type===Color){result=this._to?result[this._to[4]]():this._from?result[this._from[4]]():result}if(this._type===ObjectBag){result=this._to?result.align(this._to):this._from?result.align(this._from):result}result=result.toConsumable();this._morphObj=this._morphObj||new this._type;this._context=this._context||Array.apply(null,Array(result.length)).map(Object).map(function(o){o.done=true;return o});return result}}class NonMorphable{constructor(...args){this.init(...args)}init(val){val=Array.isArray(val)?val[0]:val;this.value=val;return this}toArray(){return[this.value]}valueOf(){return this.value}}class TransformBag{constructor(...args){this.init(...args)}init(obj){if(Array.isArray(obj)){obj={scaleX:obj[0],scaleY:obj[1],shear:obj[2],rotate:obj[3],translateX:obj[4],translateY:obj[5],originX:obj[6],originY:obj[7]}}Object.assign(this,TransformBag.defaults,obj);return this}toArray(){const v=this;return[v.scaleX,v.scaleY,v.shear,v.rotate,v.translateX,v.translateY,v.originX,v.originY]}}TransformBag.defaults={scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0};const sortByKey=(a,b)=>{return a[0]b[0]?1:0};class ObjectBag{constructor(...args){this.init(...args)}align(other){const values=this.values;for(let i=0,il=values.length;ilast.concat(curr),[]);return this}toArray(){return this.values}valueOf(){const obj={};const arr=this.values;while(arr.length){const key=arr.shift();const Type=arr.shift();const num=arr.shift();const values=arr.splice(0,num);obj[key]=new Type(values)}return obj}}const morphableTypes=[NonMorphable,TransformBag,ObjectBag];function registerMorphableType(type=[]){morphableTypes.push(...[].concat(type))}function makeMorphable(){extend(morphableTypes,{to(val){return(new Morphable).type(this.constructor).from(this.toArray()).to(val)},fromArray(arr){this.init(arr);return this},toConsumable(){return this.toArray()},morph(from,to,pos,stepper,context){const mapper=function(i,index){return stepper.step(i,to[index],pos,context[index],context)};return this.fromArray(from.map(mapper))}})}class Path extends Shape{constructor(node,attrs=node){super(nodeOrNew("path",node),attrs)}array(){return this._array||(this._array=new PathArray(this.attr("d")))}clear(){delete this._array;return this}height(height){return height==null?this.bbox().height:this.size(this.bbox().width,height)}move(x,y){return this.attr("d",this.array().move(x,y))}plot(d){return d==null?this.array():this.clear().attr("d",typeof d==="string"?d:this._array=new PathArray(d))}size(width,height){const p=proportionalSize(this,width,height);return this.attr("d",this.array().size(p.width,p.height))}width(width){return width==null?this.bbox().width:this.size(width,this.bbox().height)}x(x){return x==null?this.bbox().x:this.move(x,this.bbox().y)}y(y){return y==null?this.bbox().y:this.move(this.bbox().x,y)}}Path.prototype.MorphArray=PathArray;registerMethods({Container:{path:wrapWithAttrCheck(function(d){return this.put(new Path).plot(d||new PathArray)})}});register(Path,"Path");function array(){return this._array||(this._array=new PointArray(this.attr("points")))}function clear(){delete this._array;return this}function move$2(x,y){return this.attr("points",this.array().move(x,y))}function plot(p){return p==null?this.array():this.clear().attr("points",typeof p==="string"?p:this._array=new PointArray(p))}function size$1(width,height){const p=proportionalSize(this,width,height);return this.attr("points",this.array().size(p.width,p.height))}var poly={__proto__:null,array:array,clear:clear,move:move$2,plot:plot,size:size$1};class Polygon extends Shape{constructor(node,attrs=node){super(nodeOrNew("polygon",node),attrs)}}registerMethods({Container:{polygon:wrapWithAttrCheck(function(p){return this.put(new Polygon).plot(p||new PointArray)})}});extend(Polygon,pointed);extend(Polygon,poly);register(Polygon,"Polygon");class Polyline extends Shape{constructor(node,attrs=node){super(nodeOrNew("polyline",node),attrs)}}registerMethods({Container:{polyline:wrapWithAttrCheck(function(p){return this.put(new Polyline).plot(p||new PointArray)})}});extend(Polyline,pointed);extend(Polyline,poly);register(Polyline,"Polyline");class Rect extends Shape{constructor(node,attrs=node){super(nodeOrNew("rect",node),attrs)}}extend(Rect,{rx:rx,ry:ry});registerMethods({Container:{rect:wrapWithAttrCheck(function(width,height){return this.put(new Rect).size(width,height)})}});register(Rect,"Rect");class Queue{constructor(){this._first=null;this._last=null}first(){return this._first&&this._first.value}last(){return this._last&&this._last.value}push(value){const item=typeof value.next!=="undefined"?value:{value:value,next:null,prev:null};if(this._last){item.prev=this._last;this._last.next=item;this._last=item}else{this._last=item;this._first=item}return item}remove(item){if(item.prev)item.prev.next=item.next;if(item.next)item.next.prev=item.prev;if(item===this._last)this._last=item.prev;if(item===this._first)this._first=item.next;item.prev=null;item.next=null}shift(){const remove=this._first;if(!remove)return null;this._first=remove.next;if(this._first)this._first.prev=null;this._last=this._first?this._last:null;return remove.value}}const Animator={nextDraw:null,frames:new Queue,timeouts:new Queue,immediates:new Queue,timer:()=>globals.window.performance||globals.window.Date,transforms:[],frame(fn){const node=Animator.frames.push({run:fn});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},timeout(fn,delay){delay=delay||0;const time=Animator.timer().now()+delay;const node=Animator.timeouts.push({run:fn,time:time});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},immediate(fn){const node=Animator.immediates.push(fn);if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},cancelFrame(node){node!=null&&Animator.frames.remove(node)},clearTimeout(node){node!=null&&Animator.timeouts.remove(node)},cancelImmediate(node){node!=null&&Animator.immediates.remove(node)},_draw(now){let nextTimeout=null;const lastTimeout=Animator.timeouts.last();while(nextTimeout=Animator.timeouts.shift()){if(now>=nextTimeout.time){nextTimeout.run()}else{Animator.timeouts.push(nextTimeout)}if(nextTimeout===lastTimeout)break}let nextFrame=null;const lastFrame=Animator.frames.last();while(nextFrame!==lastFrame&&(nextFrame=Animator.frames.shift())){nextFrame.run(now)}let nextImmediate=null;while(nextImmediate=Animator.immediates.shift()){nextImmediate()}Animator.nextDraw=Animator.timeouts.first()||Animator.frames.first()?globals.window.requestAnimationFrame(Animator._draw):null}};const makeSchedule=function(runnerInfo){const start=runnerInfo.start;const duration=runnerInfo.runner.duration();const end=start+duration;return{start:start,duration:duration,end:end,runner:runnerInfo.runner}};const defaultSource=function(){const w=globals.window;return(w.performance||w.Date).now()};class Timeline extends EventTarget{constructor(timeSource=defaultSource){super();this._timeSource=timeSource;this._startTime=0;this._speed=1;this._persist=0;this._nextFrame=null;this._paused=true;this._runners=[];this._runnerIds=[];this._lastRunnerId=-1;this._time=0;this._lastSourceTime=0;this._lastStepTime=0;this._step=this._stepFn.bind(this,false);this._stepImmediate=this._stepFn.bind(this,true)}active(){return!!this._nextFrame}finish(){this.time(this.getEndTimeOfTimeline()+1);return this.pause()}getEndTime(){const lastRunnerInfo=this.getLastRunnerInfo();const lastDuration=lastRunnerInfo?lastRunnerInfo.runner.duration():0;const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;return lastStartTime+lastDuration}getEndTimeOfTimeline(){const endTimes=this._runners.map(i=>i.start+i.runner.duration());return Math.max(0,...endTimes)}getLastRunnerInfo(){return this.getRunnerInfoById(this._lastRunnerId)}getRunnerInfoById(id){return this._runners[this._runnerIds.indexOf(id)]||null}pause(){this._paused=true;return this._continue()}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}play(){this._paused=false;return this.updateTime()._continue()}reverse(yes){const currentSpeed=this.speed();if(yes==null)return this.speed(-currentSpeed);const positive=Math.abs(currentSpeed);return this.speed(yes?-positive:positive)}schedule(runner,delay,when){if(runner==null){return this._runners.map(makeSchedule)}let absoluteStartTime=0;const endTime=this.getEndTime();delay=delay||0;if(when==null||when==="last"||when==="after"){absoluteStartTime=endTime}else if(when==="absolute"||when==="start"){absoluteStartTime=delay;delay=0}else if(when==="now"){absoluteStartTime=this._time}else if(when==="relative"){const runnerInfo=this.getRunnerInfoById(runner.id);if(runnerInfo){absoluteStartTime=runnerInfo.start+delay;delay=0}}else if(when==="with-last"){const lastRunnerInfo=this.getLastRunnerInfo();const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;absoluteStartTime=lastStartTime}else{throw new Error('Invalid value for the "when" parameter')}runner.unschedule();runner.timeline(this);const persist=runner.persist();const runnerInfo={persist:persist===null?this._persist:persist,start:absoluteStartTime+delay,runner:runner};this._lastRunnerId=runner.id;this._runners.push(runnerInfo);this._runners.sort((a,b)=>a.start-b.start);this._runnerIds=this._runners.map(info=>info.runner.id);this.updateTime()._continue();return this}seek(dt){return this.time(this._time+dt)}source(fn){if(fn==null)return this._timeSource;this._timeSource=fn;return this}speed(speed){if(speed==null)return this._speed;this._speed=speed;return this}stop(){this.time(0);return this.pause()}time(time){if(time==null)return this._time;this._time=time;return this._continue(true)}unschedule(runner){const index=this._runnerIds.indexOf(runner.id);if(index<0)return this;this._runners.splice(index,1);this._runnerIds.splice(index,1);runner.timeline(null);return this}updateTime(){if(!this.active()){this._lastSourceTime=this._timeSource()}return this}_continue(immediateStep=false){Animator.cancelFrame(this._nextFrame);this._nextFrame=null;if(immediateStep)return this._stepImmediate();if(this._paused)return this;this._nextFrame=Animator.frame(this._step);return this}_stepFn(immediateStep=false){const time=this._timeSource();let dtSource=time-this._lastSourceTime;if(immediateStep)dtSource=0;const dtTime=this._speed*dtSource+(this._time-this._lastStepTime);this._lastSourceTime=time;if(!immediateStep){this._time+=dtTime;this._time=this._time<0?0:this._time}this._lastStepTime=this._time;this.fire("time",this._time);for(let k=this._runners.length;k--;){const runnerInfo=this._runners[k];const runner=runnerInfo.runner;const dtToStart=this._time-runnerInfo.start;if(dtToStart<=0){runner.reset()}}let runnersLeft=false;for(let i=0,len=this._runners.length;i0){this._continue()}else{this.pause();this.fire("finished")}return this}}registerMethods({Element:{timeline:function(timeline){if(timeline==null){this._timeline=this._timeline||new Timeline;return this._timeline}else{this._timeline=timeline;return this}}}});class Runner extends EventTarget{constructor(options){super();this.id=Runner.id++;options=options==null?timeline.duration:options;options=typeof options==="function"?new Controller(options):options;this._element=null;this._timeline=null;this.done=false;this._queue=[];this._duration=typeof options==="number"&&options;this._isDeclarative=options instanceof Controller;this._stepper=this._isDeclarative?options:new Ease;this._history={};this.enabled=true;this._time=0;this._lastTime=0;this._reseted=true;this.transforms=new Matrix;this.transformId=1;this._haveReversed=false;this._reverse=false;this._loopsDone=0;this._swing=false;this._wait=0;this._times=1;this._frameId=null;this._persist=this._isDeclarative?true:null}static sanitise(duration,delay,when){let times=1;let swing=false;let wait=0;duration=duration||timeline.duration;delay=delay||timeline.delay;when=when||"last";if(typeof duration==="object"&&!(duration instanceof Stepper)){delay=duration.delay||delay;when=duration.when||when;swing=duration.swing||swing;times=duration.times||times;wait=duration.wait||wait;duration=duration.duration||timeline.duration}return{duration:duration,delay:delay,swing:swing,times:times,wait:wait,when:when}}active(enabled){if(enabled==null)return this.enabled;this.enabled=enabled;return this}addTransform(transform,index){this.transforms.lmultiplyO(transform);return this}after(fn){return this.on("finished",fn)}animate(duration,delay,when){const o=Runner.sanitise(duration,delay,when);const runner=new Runner(o.duration);if(this._timeline)runner.timeline(this._timeline);if(this._element)runner.element(this._element);return runner.loop(o).schedule(o.delay,o.when)}clearTransform(){this.transforms=new Matrix;return this}clearTransformsFromQueue(){if(!this.done||!this._timeline||!this._timeline._runnerIds.includes(this.id)){this._queue=this._queue.filter(item=>{return!item.isTransform})}}delay(delay){return this.animate(0,delay)}duration(){return this._times*(this._wait+this._duration)-this._wait}during(fn){return this.queue(null,fn)}ease(fn){this._stepper=new Ease(fn);return this}element(element){if(element==null)return this._element;this._element=element;element._prepareRunner();return this}finish(){return this.step(Infinity)}loop(times,swing,wait){if(typeof times==="object"){swing=times.swing;wait=times.wait;times=times.times}this._times=times||Infinity;this._swing=swing||false;this._wait=wait||0;if(this._times===true){this._times=Infinity}return this}loops(p){const loopDuration=this._duration+this._wait;if(p==null){const loopsDone=Math.floor(this._time/loopDuration);const relativeTime=this._time-loopsDone*loopDuration;const position=relativeTime/this._duration;return Math.min(loopsDone+position,this._times)}const whole=Math.floor(p);const partial=p%1;const time=loopDuration*whole+this._duration*partial;return this.time(time)}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}position(p){const x=this._time;const d=this._duration;const w=this._wait;const t=this._times;const s=this._swing;const r=this._reverse;let position;if(p==null){const f=function(x){const swinging=s*Math.floor(x%(2*(w+d))/(w+d));const backwards=swinging&&!r||!swinging&&r;const uncliped=Math.pow(-1,backwards)*(x%(w+d))/d+backwards;const clipped=Math.max(Math.min(uncliped,1),0);return clipped};const endTime=t*(w+d)-w;position=x<=0?Math.round(f(1e-5)):x=0;this._lastPosition=position;const duration=this.duration();const justStarted=this._lastTime<=0&&this._time>0;const justFinished=this._lastTime=duration;this._lastTime=this._time;if(justStarted){this.fire("start",this)}const declarative=this._isDeclarative;this.done=!declarative&&!justFinished&&this._time>=duration;this._reseted=false;let converged=false;if(running||declarative){this._initialise(running);this.transforms=new Matrix;converged=this._run(declarative?dt:position);this.fire("step",this)}this.done=this.done||converged&&declarative;if(justFinished){this.fire("finished",this)}return this}time(time){if(time==null){return this._time}const dt=time-this._time;this.step(dt);return this}timeline(timeline){if(typeof timeline==="undefined")return this._timeline;this._timeline=timeline;return this}unschedule(){const timeline=this.timeline();timeline&&timeline.unschedule(this);return this}_initialise(running){if(!running&&!this._isDeclarative)return;for(let i=0,len=this._queue.length;ilast.lmultiplyO(curr);const getRunnerTransform=runner=>runner.transforms;function mergeTransforms(){const runners=this._transformationRunners.runners;const netTransform=runners.map(getRunnerTransform).reduce(lmultiply,new Matrix);this.transform(netTransform);this._transformationRunners.merge();if(this._transformationRunners.length()===1){this._frameId=null}}class RunnerArray{constructor(){this.runners=[];this.ids=[]}add(runner){if(this.runners.includes(runner))return;const id=runner.id+1;this.runners.push(runner);this.ids.push(id);return this}clearBefore(id){const deleteCnt=this.ids.indexOf(id+1)||1;this.ids.splice(0,deleteCnt,0);this.runners.splice(0,deleteCnt,new FakeRunner).forEach(r=>r.clearTransformsFromQueue());return this}edit(id,newRunner){const index=this.ids.indexOf(id+1);this.ids.splice(index,1,id+1);this.runners.splice(index,1,newRunner);return this}getByID(id){return this.runners[this.ids.indexOf(id+1)]}length(){return this.ids.length}merge(){let lastRunner=null;for(let i=0;irunner.id<=current.id).map(getRunnerTransform).reduce(lmultiply,new Matrix)},_addRunner(runner){this._transformationRunners.add(runner);Animator.cancelImmediate(this._frameId);this._frameId=Animator.immediate(mergeTransforms.bind(this))},_prepareRunner(){if(this._frameId==null){this._transformationRunners=(new RunnerArray).add(new FakeRunner(new Matrix(this)))}}}});const difference=(a,b)=>a.filter(x=>!b.includes(x));extend(Runner,{attr(a,v){return this.styleAttr("attr",a,v)},css(s,v){return this.styleAttr("css",s,v)},styleAttr(type,nameOrAttrs,val){if(typeof nameOrAttrs==="string"){return this.styleAttr(type,{[nameOrAttrs]:val})}let attrs=nameOrAttrs;if(this._tryRetarget(type,attrs))return this;let morpher=new Morphable(this._stepper).to(attrs);let keys=Object.keys(attrs);this.queue(function(){morpher=morpher.from(this.element()[type](keys))},function(pos){this.element()[type](morpher.at(pos).valueOf());return morpher.done()},function(newToAttrs){const newKeys=Object.keys(newToAttrs);const differences=difference(newKeys,keys);if(differences.length){const addedFromAttrs=this.element()[type](differences);const oldFromAttrs=new ObjectBag(morpher.from()).valueOf();Object.assign(oldFromAttrs,addedFromAttrs);morpher.from(oldFromAttrs)}const oldToAttrs=new ObjectBag(morpher.to()).valueOf();Object.assign(oldToAttrs,newToAttrs);morpher.to(oldToAttrs);keys=newKeys;attrs=newToAttrs});this._rememberMorpher(type,morpher);return this},zoom(level,point){if(this._tryRetarget("zoom",level,point))return this;let morpher=new Morphable(this._stepper).to(new SVGNumber(level));this.queue(function(){morpher=morpher.from(this.element().zoom())},function(pos){this.element().zoom(morpher.at(pos),point);return morpher.done()},function(newLevel,newPoint){point=newPoint;morpher.to(newLevel)});this._rememberMorpher("zoom",morpher);return this},transform(transforms,relative,affine){relative=transforms.relative||relative;if(this._isDeclarative&&!relative&&this._tryRetarget("transform",transforms)){return this}const isMatrix=Matrix.isMatrixLike(transforms);affine=transforms.affine!=null?transforms.affine:affine!=null?affine:!isMatrix;const morpher=new Morphable(this._stepper).type(affine?TransformBag:Matrix);let origin;let element;let current;let currentAngle;let startTransform;function setup(){element=element||this.element();origin=origin||getOrigin(transforms,element);startTransform=new Matrix(relative?undefined:element);element._addRunner(this);if(!relative){element._clearTransformRunnersBefore(this)}}function run(pos){if(!relative)this.clearTransform();const{x,y}=new Point(origin).transform(element._currentTransform(this));let target=new Matrix({...transforms,origin:[x,y]});let start=this._isDeclarative&¤t?current:startTransform;if(affine){target=target.decompose(x,y);start=start.decompose(x,y);const rTarget=target.rotate;const rCurrent=start.rotate;const possibilities=[rTarget-360,rTarget,rTarget+360];const distances=possibilities.map(a=>Math.abs(a-rCurrent));const shortest=Math.min(...distances);const index=distances.indexOf(shortest);target.rotate=possibilities[index]}if(relative){if(!isMatrix){target.rotate=transforms.rotate||0}if(this._isDeclarative&¤tAngle){start.rotate=currentAngle}}morpher.from(start);morpher.to(target);const affineParameters=morpher.at(pos);currentAngle=affineParameters.rotate;current=new Matrix(affineParameters);this.addTransform(current);element._addRunner(this);return morpher.done()}function retarget(newTransforms){if((newTransforms.origin||"center").toString()!==(transforms.origin||"center").toString()){origin=getOrigin(newTransforms,element)}transforms={...newTransforms,origin:origin}}this.queue(setup,run,retarget,true);this._isDeclarative&&this._rememberMorpher("transform",morpher);return this},x(x,relative){return this._queueNumber("x",x)},y(y){return this._queueNumber("y",y)},dx(x=0){return this._queueNumberDelta("x",x)},dy(y=0){return this._queueNumberDelta("y",y)},dmove(x,y){return this.dx(x).dy(y)},_queueNumberDelta(method,to){to=new SVGNumber(to);if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);let from=null;this.queue(function(){from=this.element()[method]();morpher.from(from);morpher.to(from+to)},function(pos){this.element()[method](morpher.at(pos));return morpher.done()},function(newTo){morpher.to(from+new SVGNumber(newTo))});this._rememberMorpher(method,morpher);return this},_queueObject(method,to){if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);this.queue(function(){morpher.from(this.element()[method]())},function(pos){this.element()[method](morpher.at(pos));return morpher.done()});this._rememberMorpher(method,morpher);return this},_queueNumber(method,value){return this._queueObject(method,new SVGNumber(value))},cx(x){return this._queueNumber("cx",x)},cy(y){return this._queueNumber("cy",y)},move(x,y){return this.x(x).y(y)},center(x,y){return this.cx(x).cy(y)},size(width,height){let box;if(!width||!height){box=this._element.bbox()}if(!width){width=box.width/box.height*height}if(!height){height=box.height/box.width*width}return this.width(width).height(height)},width(width){return this._queueNumber("width",width)},height(height){return this._queueNumber("height",height)},plot(a,b,c,d){if(arguments.length===4){return this.plot([a,b,c,d])}if(this._tryRetarget("plot",a))return this;const morpher=new Morphable(this._stepper).type(this._element.MorphArray).to(a);this.queue(function(){morpher.from(this._element.array())},function(pos){this._element.plot(morpher.at(pos));return morpher.done()});this._rememberMorpher("plot",morpher);return this},leading(value){return this._queueNumber("leading",value)},viewbox(x,y,width,height){return this._queueObject("viewbox",new Box(x,y,width,height))},update(o){if(typeof o!=="object"){return this.update({offset:arguments[0],color:arguments[1],opacity:arguments[2]})}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",o.offset);return this}});extend(Runner,{rx:rx,ry:ry,from:from,to:to});register(Runner,"Runner");class Svg extends Container{constructor(node,attrs=node){super(nodeOrNew("svg",node),attrs);this.namespace()}defs(){if(!this.isRoot())return this.root().defs();return adopt(this.node.querySelector("defs"))||this.put(new Defs)}isRoot(){return!this.node.parentNode||!(this.node.parentNode instanceof globals.window.SVGElement)&&this.node.parentNode.nodeName!=="#document-fragment"}namespace(){if(!this.isRoot())return this.root().namespace();return this.attr({xmlns:svg,version:"1.1"}).attr("xmlns:xlink",xlink,xmlns).attr("xmlns:svgjs",svgjs,xmlns)}removeNamespace(){return this.attr({xmlns:null,version:null}).attr("xmlns:xlink",null,xmlns).attr("xmlns:svgjs",null,xmlns)}root(){if(this.isRoot())return this;return super.root()}}registerMethods({Container:{nested:wrapWithAttrCheck(function(){return this.put(new Svg)})}});register(Svg,"Svg",true);class Symbol extends Container{constructor(node,attrs=node){super(nodeOrNew("symbol",node),attrs)}}registerMethods({Container:{symbol:wrapWithAttrCheck(function(){return this.put(new Symbol)})}});register(Symbol,"Symbol");function plain(text){if(this._build===false){this.clear()}this.node.appendChild(globals.document.createTextNode(text));return this}function length(){return this.node.getComputedTextLength()}function x$1(x,box=this.bbox()){if(x==null){return box.x}return this.attr("x",this.attr("x")+x-box.x)}function y$1(y,box=this.bbox()){if(y==null){return box.y}return this.attr("y",this.attr("y")+y-box.y)}function move$1(x,y,box=this.bbox()){return this.x(x,box).y(y,box)}function cx(x,box=this.bbox()){if(x==null){return box.cx}return this.attr("x",this.attr("x")+x-box.cx)}function cy(y,box=this.bbox()){if(y==null){return box.cy}return this.attr("y",this.attr("y")+y-box.cy)}function center(x,y,box=this.bbox()){return this.cx(x,box).cy(y,box)}function ax(x){return this.attr("x",x)}function ay(y){return this.attr("y",y)}function amove(x,y){return this.ax(x).ay(y)}function build(build){this._build=!!build;return this}var textable={__proto__:null,plain:plain,length:length,x:x$1,y:y$1,move:move$1,cx:cx,cy:cy,center:center,ax:ax,ay:ay,amove:amove,build:build};class Text extends Shape{constructor(node,attrs=node){super(nodeOrNew("text",node),attrs);this.dom.leading=new SVGNumber(1.3);this._rebuild=true;this._build=false}leading(value){if(value==null){return this.dom.leading}this.dom.leading=new SVGNumber(value);return this.rebuild()}rebuild(rebuild){if(typeof rebuild==="boolean"){this._rebuild=rebuild}if(this._rebuild){const self=this;let blankLineOffset=0;const leading=this.dom.leading;this.each(function(i){const fontSize=globals.window.getComputedStyle(this.node).getPropertyValue("font-size");const dy=leading*new SVGNumber(fontSize);if(this.dom.newLined){this.attr("x",self.attr("x"));if(this.text()==="\n"){blankLineOffset+=dy}else{this.attr("dy",i?dy+blankLineOffset:0);blankLineOffset=0}}});this.fire("rebuild")}return this}setData(o){this.dom=o;this.dom.leading=new SVGNumber(o.leading||1.3);return this}text(text){if(text===undefined){const children=this.node.childNodes;let firstLine=0;text="";for(let i=0,len=children.length;i{let bbox;try{bbox=child.bbox()}catch(e){return}const m=new Matrix(child);const matrix=m.translate(dx,dy).transform(m.inverse());const p=new Point(bbox.x,bbox.y).transform(matrix);child.move(p.x,p.y)});return this}function dx(dx){return this.dmove(dx,0)}function dy(dy){return this.dmove(0,dy)}function height(height,box=this.bbox()){if(height==null)return box.height;return this.size(box.width,height,box)}function move(x=0,y=0,box=this.bbox()){const dx=x-box.x;const dy=y-box.y;return this.dmove(dx,dy)}function size(width,height,box=this.bbox()){const p=proportionalSize(this,width,height,box);const scaleX=p.width/box.width;const scaleY=p.height/box.height;this.children().forEach((child,i)=>{const o=new Point(box).transform(new Matrix(child).inverse());child.scale(scaleX,scaleY,o.x,o.y)});return this}function width(width,box=this.bbox()){if(width==null)return box.width;return this.size(width,box.height,box)}function x(x,box=this.bbox()){if(x==null)return box.x;return this.move(x,box.y,box)}function y(y,box=this.bbox()){if(y==null)return box.y;return this.move(box.x,y,box)}var containerGeometry={__proto__:null,dmove:dmove,dx:dx,dy:dy,height:height,move:move,size:size,width:width,x:x,y:y};class G extends Container{constructor(node,attrs=node){super(nodeOrNew("g",node),attrs)}}extend(G,containerGeometry);registerMethods({Container:{group:wrapWithAttrCheck(function(){return this.put(new G)})}});register(G,"G");class A extends Container{constructor(node,attrs=node){super(nodeOrNew("a",node),attrs)}target(target){return this.attr("target",target)}to(url){return this.attr("href",url,xlink)}}extend(A,containerGeometry);registerMethods({Container:{link:wrapWithAttrCheck(function(url){return this.put(new A).to(url)})},Element:{unlink(){const link=this.linker();if(!link)return this;const parent=link.parent();if(!parent){return this.remove()}const index=parent.index(link);parent.add(this,index);link.remove();return this},linkTo(url){let link=this.linker();if(!link){link=new A;this.wrap(link)}if(typeof url==="function"){url.call(link,link)}else{link.to(url)}return this},linker(){const link=this.parent();if(link&&link.node.nodeName.toLowerCase()==="a"){return link}return null}}});register(A,"A");class Mask extends Container{constructor(node,attrs=node){super(nodeOrNew("mask",node),attrs)}remove(){this.targets().forEach(function(el){el.unmask()});return super.remove()}targets(){return baseFind('svg [mask*="'+this.id()+'"]')}}registerMethods({Container:{mask:wrapWithAttrCheck(function(){return this.defs().put(new Mask)})},Element:{masker(){return this.reference("mask")},maskWith(element){const masker=element instanceof Mask?element:this.parent().mask().add(element);return this.attr("mask",'url("#'+masker.id()+'")')},unmask(){return this.attr("mask",null)}}});register(Mask,"Mask");class Stop extends Element{constructor(node,attrs=node){super(nodeOrNew("stop",node),attrs)}update(o){if(typeof o==="number"||o instanceof SVGNumber){o={offset:arguments[0],color:arguments[1],opacity:arguments[2]}}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",new SVGNumber(o.offset));return this}}registerMethods({Gradient:{stop:function(offset,color,opacity){return this.put(new Stop).update(offset,color,opacity)}}});register(Stop,"Stop");function cssRule(selector,rule){if(!selector)return"";if(!rule)return selector;let ret=selector+"{";for(const i in rule){ret+=unCamelCase(i)+":"+rule[i]+";"}ret+="}";return ret}class Style extends Element{constructor(node,attrs=node){super(nodeOrNew("style",node),attrs)}addText(w=""){this.node.textContent+=w;return this}font(name,src,params={}){return this.rule("@font-face",{fontFamily:name,src:src,...params})}rule(selector,obj){return this.addText(cssRule(selector,obj))}}registerMethods("Dom",{style(selector,obj){return this.put(new Style).rule(selector,obj)},fontface(name,src,params){return this.put(new Style).font(name,src,params)}});register(Style,"Style");class TextPath extends Text{constructor(node,attrs=node){super(nodeOrNew("textPath",node),attrs)}array(){const track=this.track();return track?track.array():null}plot(d){const track=this.track();let pathArray=null;if(track){pathArray=track.plot(d)}return d==null?pathArray:this}track(){return this.reference("href")}}registerMethods({Container:{textPath:wrapWithAttrCheck(function(text,path){if(!(text instanceof Text)){text=this.text(text)}return text.path(path)})},Text:{path:wrapWithAttrCheck(function(track,importNodes=true){const textPath=new TextPath;if(!(track instanceof Path)){track=this.defs().path(track)}textPath.attr("href","#"+track,xlink);let node;if(importNodes){while(node=this.node.firstChild){textPath.node.appendChild(node)}}return this.put(textPath)}),textPath(){return this.findOne("textPath")}},Path:{text:wrapWithAttrCheck(function(text){if(!(text instanceof Text)){text=(new Text).addTo(this.parent()).text(text)}return text.path(this)}),targets(){return baseFind("svg textPath").filter(node=>{return(node.attr("href")||"").includes(this.id())})}}});TextPath.prototype.MorphArray=PathArray;register(TextPath,"TextPath");class Use extends Shape{constructor(node,attrs=node){super(nodeOrNew("use",node),attrs)}use(element,file){return this.attr("href",(file||"")+"#"+element,xlink)}}registerMethods({Container:{use:wrapWithAttrCheck(function(element,file){return this.put(new Use).use(element,file)})}});register(Use,"Use");const SVG$1=makeInstance;extend([Svg,Symbol,Image,Pattern,Marker],getMethodsFor("viewbox"));extend([Line,Polyline,Polygon,Path],getMethodsFor("marker"));extend(Text,getMethodsFor("Text"));extend(Path,getMethodsFor("Path"));extend(Defs,getMethodsFor("Defs"));extend([Text,Tspan],getMethodsFor("Tspan"));extend([Rect,Ellipse,Gradient,Runner],getMethodsFor("radius"));extend(EventTarget,getMethodsFor("EventTarget"));extend(Dom,getMethodsFor("Dom"));extend(Element,getMethodsFor("Element"));extend(Shape,getMethodsFor("Shape"));extend([Container,Fragment],getMethodsFor("Container"));extend(Gradient,getMethodsFor("Gradient"));extend(Runner,getMethodsFor("Runner"));List.extend(getMethodNames());registerMorphableType([SVGNumber,Color,Box,Matrix,SVGArray,PointArray,PathArray,Point]);makeMorphable();var svgMembers={__proto__:null,Morphable:Morphable,registerMorphableType:registerMorphableType,makeMorphable:makeMorphable,TransformBag:TransformBag,ObjectBag:ObjectBag,NonMorphable:NonMorphable,defaults:defaults,utils:utils,namespaces:namespaces,regex:regex,SVG:SVG$1,parser:parser,find:baseFind,getWindow:getWindow,registerWindow:registerWindow,restoreWindow:restoreWindow,saveWindow:saveWindow,withWindow:withWindow,Animator:Animator,Controller:Controller,Ease:Ease,PID:PID,Spring:Spring,easing:easing,Queue:Queue,Runner:Runner,Timeline:Timeline,Array:SVGArray,Box:Box,Color:Color,EventTarget:EventTarget,Matrix:Matrix,Number:SVGNumber,PathArray:PathArray,Point:Point,PointArray:PointArray,List:List,Circle:Circle,ClipPath:ClipPath,Container:Container,Defs:Defs,Dom:Dom,Element:Element,Ellipse:Ellipse,ForeignObject:ForeignObject,Fragment:Fragment,Gradient:Gradient,G:G,A:A,Image:Image,Line:Line,Marker:Marker,Mask:Mask,Path:Path,Pattern:Pattern,Polygon:Polygon,Polyline:Polyline,Rect:Rect,Shape:Shape,Stop:Stop,Style:Style,Svg:Svg,Symbol:Symbol,Text:Text,TextPath:TextPath,Tspan:Tspan,Use:Use,windowEvents:windowEvents,getEvents:getEvents,getEventTarget:getEventTarget,clearEvents:clearEvents,on:on,off:off,dispatch:dispatch,root:root,create:create,makeInstance:makeInstance,nodeOrNew:nodeOrNew,adopt:adopt,mockAdopt:mockAdopt,register:register,getClass:getClass,eid:eid,assignNewId:assignNewId,extend:extend,wrapWithAttrCheck:wrapWithAttrCheck};function SVG(element,isHTML){return makeInstance(element,isHTML)}Object.assign(SVG,svgMembers);return SVG}(); +/*! + @licstart The following is the entire license notice for the JavaScript code in this file. + The code below is based on SVGPan Library 1.2 and was modified for doxygen + to support both zooming and panning via the mouse and via embedded buttons. + + This code is licensed under the following BSD license: + + Copyright 2009-2010 Andrea Leofreddi . All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are those of the + authors and should not be interpreted as representing official policies, either expressed + or implied, of Andrea Leofreddi. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var root=document.documentElement;var state="none";var stateOrigin;var stateTf=root.createSVGMatrix();var cursorGrab=' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';var zoomSteps=10;var zoomInFactor;var zoomOutFactor;var windowWidth;var windowHeight;var svgDoc;var minZoom;var maxZoom;if(!window)window=this;function show(){if(window.innerHeight){windowWidth=window.innerWidth;windowHeight=window.innerHeight}else if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}if(!windowWidth||!windowHeight){windowWidth=800;windowHeight=600}minZoom=Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);maxZoom=minZoom+1.5;zoomInFactor=Math.pow(maxZoom/minZoom,1/zoomSteps);zoomOutFactor=1/zoomInFactor;var g=svgDoc.getElementById("viewport");try{var bb=g.getBBox();var tx=(windowWidth-viewWidth*minZoom+8)/(2*minZoom);var ty=viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);var a="scale("+minZoom+") rotate(0) translate("+tx+" "+ty+")";g.setAttribute("transform",a)}catch(e){}}function init(evt){svgDoc=evt.target.ownerDocument;try{if(top.window&&top.window.registerShow){top.window.registerShow(sectionId,show)}}catch(e){}show();setAttributes(root,{onmousedown:"handleMouseDown(evt)",onmousemove:"handleMouseMove(evt)",onmouseup:"handleMouseUp(evt)"});if(window.addEventListener){if(navigator.userAgent.toLowerCase().indexOf("webkit")>=0||navigator.userAgent.toLowerCase().indexOf("opera")>=0||navigator.appVersion.indexOf("MSIE")!=-1){window.addEventListener("mousewheel",handleMouseWheel,false)}else{window.addEventListener("DOMMouseScroll",handleMouseWheel,false)}}}window.onresize=function(){if(svgDoc){show()}};function getEventPoint(evt){var p=root.createSVGPoint();p.x=evt.clientX;p.y=evt.clientY;return p}function setCTM(element,matrix){var s="matrix("+matrix.a+","+matrix.b+","+matrix.c+","+matrix.d+","+matrix.e+","+matrix.f+")";element.setAttribute("transform",s)}function setAttributes(element,attributes){for(i in attributes)element.setAttributeNS(null,i,attributes[i])}function doZoom(g,point,zoomFactor){var p=point.matrixTransform(g.getCTM().inverse());var k=root.createSVGMatrix().translate(p.x,p.y).scale(zoomFactor).translate(-p.x,-p.y);var n=g.getCTM().multiply(k);var s=Math.max(n.a,n.d);if(s>maxZoom)n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);else if(s');d.write("Print SVG");d.write('');d.write('
    '+xs+"
    ");d.write("");d.write("");d.close()}catch(e){alert("Failed to open popup window needed for printing!\n"+e.message)}}function highlightEdges(){var elems=document.getElementsByTagName("g");if(elems){for(var i=0;i g");function findEnclosingG(domEl){let curEl=domEl;while(curEl.nodeName!="g"||curEl.id.substr(0,4)!="Node"){curEl=curEl.parentElement}return curEl}function onMouseOverElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>{if(SVG(e)!=s)SVG(e).attr("data-mouse-over-selected","false")});walk(e,e=>SVG(e).attr("data-mouse-over-selected","true"));let{nodes,edges}=getEdgesAndDistance1Nodes(SVG(e),s);for(let node of nodes){walk(node,e=>SVG(e).attr("data-mouse-over-selected","true"))}for(let edge of edges){walk(edge,e=>SVG(e).attr("data-mouse-over-selected","true"))}}function onMouseOutElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>e.attr("data-mouse-over-selected",null))}let gs=s.find("g[id^=Node]");for(let g of gs){g.on("mouseover",onMouseOverElem);g.on("mouseout",onMouseOutElem)}} diff --git a/docs-test-3rd-techno/html/sync_off.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/sync_on.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/tab_a.png b/docs-test-3rd-techno/html/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/docs-test-3rd-techno/html/tab_ad.png b/docs-test-3rd-techno/html/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/tab_s.png b/docs-test-3rd-techno/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=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/docs-test-3rd-techno/html/tab_sd.png b/docs-test-3rd-techno/html/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/docs-test-3rd-techno/html/tabs.css b/docs-test-3rd-techno/html/tabs.css new file mode 100644 index 0000000..edbb424 --- /dev/null +++ b/docs-test-3rd-techno/html/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:#364D7C;-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:0px 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:0px 1px 1px rgba(0, 0, 0, 1.0)}.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:white}.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:0px 1px 1px rgba(0, 0, 0, 1.0)}.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 white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-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 #555555;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:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.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:white;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 #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 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:white}} diff --git a/docs-test-3rd-techno/html/test__commit__commands_8py.html b/docs-test-3rd-techno/html/test__commit__commands_8py.html new file mode 100644 index 0000000..207147c --- /dev/null +++ b/docs-test-3rd-techno/html/test__commit__commands_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_commit_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_commit_commands.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_commit_commands.TestCommitCommands
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_commit_commands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/test__commit__commands_8py.js b/docs-test-3rd-techno/html/test__commit__commands_8py.js new file mode 100644 index 0000000..1aa1dc7 --- /dev/null +++ b/docs-test-3rd-techno/html/test__commit__commands_8py.js @@ -0,0 +1,4 @@ +var test__commit__commands_8py = +[ + [ "tests.test_commit_commands.TestCommitCommands", "classtests_1_1test__commit__commands_1_1TestCommitCommands.html", "classtests_1_1test__commit__commands_1_1TestCommitCommands" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/test__config__commands_8py.html b/docs-test-3rd-techno/html/test__config__commands_8py.html new file mode 100644 index 0000000..6e28aa1 --- /dev/null +++ b/docs-test-3rd-techno/html/test__config__commands_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_config_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_config_commands.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_config_commands.TestConfigCommands
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_config_commands
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/test__config__commands_8py.js b/docs-test-3rd-techno/html/test__config__commands_8py.js new file mode 100644 index 0000000..2eebb0e --- /dev/null +++ b/docs-test-3rd-techno/html/test__config__commands_8py.js @@ -0,0 +1,4 @@ +var test__config__commands_8py = +[ + [ "tests.test_config_commands.TestConfigCommands", "classtests_1_1test__config__commands_1_1TestConfigCommands.html", "classtests_1_1test__config__commands_1_1TestConfigCommands" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/test__doc__commands_8py.html b/docs-test-3rd-techno/html/test__doc__commands_8py.html new file mode 100644 index 0000000..db75240 --- /dev/null +++ b/docs-test-3rd-techno/html/test__doc__commands_8py.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_doc_commands.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_doc_commands.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_doc_commands
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     tests.test_doc_commands.test_generate_doc_no_location (mock_getcwd, mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_file_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_folder_location (mock_api_client, mock_folder_analyzer, mock_file_analyzer, mock_git_analyzer)
     
     tests.test_doc_commands.test_generate_doc_error_handling (mock_api_client, mock_git_analyzer, mock_exit)
     
     tests.test_doc_commands.test_setup_docgen_parser ()
     
     tests.test_doc_commands.test_handle_docgen_install_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_uninstall_hook (mock_exit, mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_generate (mock_get_token, mock_generate_doc, mock_uninstall_hook, mock_install_hook)
     
     tests.test_doc_commands.test_handle_docgen_no_token (mock_exit, mock_get_token)
     
     tests.test_doc_commands.test_generate_doc_with_file_exception (mock_api_client, mock_getcwd)
     
     tests.test_doc_commands.test_generate_doc_with_folder_exception (mock_api_client, mock_getcwd)
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/test__doc__commands_8py.js b/docs-test-3rd-techno/html/test__doc__commands_8py.js new file mode 100644 index 0000000..c68cfaf --- /dev/null +++ b/docs-test-3rd-techno/html/test__doc__commands_8py.js @@ -0,0 +1,14 @@ +var test__doc__commands_8py = +[ + [ "tests.test_doc_commands.test_generate_doc_error_handling", "namespacetests_1_1test__doc__commands.html#a5fe1bfd9eacf8775c20f9a883fcc10a6", null ], + [ "tests.test_doc_commands.test_generate_doc_file_location", "namespacetests_1_1test__doc__commands.html#ac12eb3d9839af7f9cfc2da5150ac8a16", null ], + [ "tests.test_doc_commands.test_generate_doc_folder_location", "namespacetests_1_1test__doc__commands.html#a161b89af34978ec9f4a59a37f374125d", null ], + [ "tests.test_doc_commands.test_generate_doc_no_location", "namespacetests_1_1test__doc__commands.html#a709237fc294b8309acdaddd29369f15b", null ], + [ "tests.test_doc_commands.test_generate_doc_with_file_exception", "namespacetests_1_1test__doc__commands.html#a28ffc568a6338124fce4eff50a839f68", null ], + [ "tests.test_doc_commands.test_generate_doc_with_folder_exception", "namespacetests_1_1test__doc__commands.html#a8f073a1ebba4bf58fa0875f01b372fee", null ], + [ "tests.test_doc_commands.test_handle_docgen_generate", "namespacetests_1_1test__doc__commands.html#a8adc7be503bd092e118f9454fffbd0d5", null ], + [ "tests.test_doc_commands.test_handle_docgen_install_hook", "namespacetests_1_1test__doc__commands.html#a278af7079be277ff3eab96e7e8c038b9", null ], + [ "tests.test_doc_commands.test_handle_docgen_no_token", "namespacetests_1_1test__doc__commands.html#a27e497ab63419dcd4ce066864882aa0c", null ], + [ "tests.test_doc_commands.test_handle_docgen_uninstall_hook", "namespacetests_1_1test__doc__commands.html#abe2161b459ab5d033d6ba997323c218b", null ], + [ "tests.test_doc_commands.test_setup_docgen_parser", "namespacetests_1_1test__doc__commands.html#a15204cf3fb17527d46e54316576f2042", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/test__web__config_8py.html b/docs-test-3rd-techno/html/test__web__config_8py.html new file mode 100644 index 0000000..39b3272 --- /dev/null +++ b/docs-test-3rd-techno/html/test__web__config_8py.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/test_web_config.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    test_web_config.py File Reference
    +
    +
    + + + + +

    +Classes

    class  tests.test_web_config.TestWebConfig
     
    + + + + + +

    +Namespaces

    namespace  tests
     
    namespace  tests.test_web_config
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/test__web__config_8py.js b/docs-test-3rd-techno/html/test__web__config_8py.js new file mode 100644 index 0000000..d691683 --- /dev/null +++ b/docs-test-3rd-techno/html/test__web__config_8py.js @@ -0,0 +1,4 @@ +var test__web__config_8py = +[ + [ "tests.test_web_config.TestWebConfig", "classtests_1_1test__web__config_1_1TestWebConfig.html", "classtests_1_1test__web__config_1_1TestWebConfig" ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/tests_2____init_____8py.html b/docs-test-3rd-techno/html/tests_2____init_____8py.html new file mode 100644 index 0000000..f3f6366 --- /dev/null +++ b/docs-test-3rd-techno/html/tests_2____init_____8py.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/tests/__init__.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    __init__.py File Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  tests
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/toggle-alternative-theme.js b/docs-test-3rd-techno/html/toggle-alternative-theme.js new file mode 100644 index 0000000..dc822e1 --- /dev/null +++ b/docs-test-3rd-techno/html/toggle-alternative-theme.js @@ -0,0 +1,11 @@ +let original_theme_active = true; + +function toggle_alternative_theme() { + if(original_theme_active) { + document.documentElement.classList.add("alternative") + original_theme_active = false; + } else { + document.documentElement.classList.remove("alternative") + original_theme_active = true; + } +} \ No newline at end of file diff --git a/docs-test-3rd-techno/html/ui__utils_8py.html b/docs-test-3rd-techno/html/ui__utils_8py.html new file mode 100644 index 0000000..2cea9ce --- /dev/null +++ b/docs-test-3rd-techno/html/ui__utils_8py.html @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/ui_utils.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ui_utils.py File Reference
    +
    +
    + + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.ui_utils
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

     penify_hook.ui_utils.format_info (message)
     
     penify_hook.ui_utils.format_success (message)
     
     penify_hook.ui_utils.format_warning (message)
     
     penify_hook.ui_utils.format_error (message)
     
     penify_hook.ui_utils.format_highlight (message)
     
     penify_hook.ui_utils.format_file_path (file_path)
     
     penify_hook.ui_utils.print_info (message)
     
     penify_hook.ui_utils.print_success (message)
     
     penify_hook.ui_utils.print_warning (message)
     
     penify_hook.ui_utils.print_error (message)
     
     penify_hook.ui_utils.print_processing (file_path)
     
     penify_hook.ui_utils.print_status (status, message)
     
     penify_hook.ui_utils.create_progress_bar (total, desc="Processing", unit="item")
     
     penify_hook.ui_utils.create_stage_progress_bar (stages, desc="Processing")
     
     penify_hook.ui_utils.update_stage (pbar, stage_name)
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

     penify_hook.ui_utils.autoreset
     
     penify_hook.ui_utils.INFO_COLOR = Fore.CYAN
     
     penify_hook.ui_utils.SUCCESS_COLOR = Fore.GREEN
     
     penify_hook.ui_utils.WARNING_COLOR = Fore.YELLOW
     
     penify_hook.ui_utils.ERROR_COLOR = Fore.RED
     
     penify_hook.ui_utils.HIGHLIGHT_COLOR = Fore.BLUE
     
     penify_hook.ui_utils.NEUTRAL_COLOR = Fore.WHITE
     
    str penify_hook.ui_utils.SUCCESS_SYMBOL = "✓"
     
    str penify_hook.ui_utils.WARNING_SYMBOL = "○"
     
    str penify_hook.ui_utils.ERROR_SYMBOL = "✗"
     
    str penify_hook.ui_utils.PROCESSING_SYMBOL = "⟳"
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/ui__utils_8py.js b/docs-test-3rd-techno/html/ui__utils_8py.js new file mode 100644 index 0000000..12b6017 --- /dev/null +++ b/docs-test-3rd-techno/html/ui__utils_8py.js @@ -0,0 +1,29 @@ +var ui__utils_8py = +[ + [ "penify_hook.ui_utils.create_progress_bar", "namespacepenify__hook_1_1ui__utils.html#aae4493a3c0c62d3d3cec0e4c96f4fca5", null ], + [ "penify_hook.ui_utils.create_stage_progress_bar", "namespacepenify__hook_1_1ui__utils.html#a583e3b1ec7b75f08653a9f6cfb897405", null ], + [ "penify_hook.ui_utils.format_error", "namespacepenify__hook_1_1ui__utils.html#acee226ee36d43076ed54dade970dc0ca", null ], + [ "penify_hook.ui_utils.format_file_path", "namespacepenify__hook_1_1ui__utils.html#a9de53cca2e23a993884797e523337e41", null ], + [ "penify_hook.ui_utils.format_highlight", "namespacepenify__hook_1_1ui__utils.html#a60f4c14003953f6e4b51ce5512c728d7", null ], + [ "penify_hook.ui_utils.format_info", "namespacepenify__hook_1_1ui__utils.html#aa0c6826668b45c778d864f5ae741e1b2", null ], + [ "penify_hook.ui_utils.format_success", "namespacepenify__hook_1_1ui__utils.html#a56ca95113c53214d848659a52a099f5e", null ], + [ "penify_hook.ui_utils.format_warning", "namespacepenify__hook_1_1ui__utils.html#a81190fd240641e2c83f6a047490e7797", null ], + [ "penify_hook.ui_utils.print_error", "namespacepenify__hook_1_1ui__utils.html#a35b79a7837fd654ad8f0cdb4e6e87598", null ], + [ "penify_hook.ui_utils.print_info", "namespacepenify__hook_1_1ui__utils.html#a3cee29e999fa3c812725cb98f24aae4c", null ], + [ "penify_hook.ui_utils.print_processing", "namespacepenify__hook_1_1ui__utils.html#ad4f7cab36c3b1f09507654b119d45bfb", null ], + [ "penify_hook.ui_utils.print_status", "namespacepenify__hook_1_1ui__utils.html#a65594c876dabfceb83d9b0ce9d0d65e7", null ], + [ "penify_hook.ui_utils.print_success", "namespacepenify__hook_1_1ui__utils.html#a9bff909b9e155a344597f69a0530754b", null ], + [ "penify_hook.ui_utils.print_warning", "namespacepenify__hook_1_1ui__utils.html#a73f112b02d36b74c88a3ce3ed1458b45", null ], + [ "penify_hook.ui_utils.update_stage", "namespacepenify__hook_1_1ui__utils.html#ad8be9c5a2708c211a651e2b3dfb54bcd", null ], + [ "penify_hook.ui_utils.autoreset", "namespacepenify__hook_1_1ui__utils.html#ab560cfade398ac1e0bd47befb52d9f71", null ], + [ "penify_hook.ui_utils.ERROR_COLOR", "namespacepenify__hook_1_1ui__utils.html#a4ab4e61dfab7973c87bef59c6e1977fe", null ], + [ "penify_hook.ui_utils.ERROR_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ae941d124e4d3aa294314d73fb47c6432", null ], + [ "penify_hook.ui_utils.HIGHLIGHT_COLOR", "namespacepenify__hook_1_1ui__utils.html#aba01b8259f0d66cdc2b4a1b58f9736fc", null ], + [ "penify_hook.ui_utils.INFO_COLOR", "namespacepenify__hook_1_1ui__utils.html#a9fdcb180915696f5d217032a62c3857c", null ], + [ "penify_hook.ui_utils.NEUTRAL_COLOR", "namespacepenify__hook_1_1ui__utils.html#aca0fcee81606857497520ae4290bc9f5", null ], + [ "penify_hook.ui_utils.PROCESSING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#ad7cc8eaf7a660ff195f4366d792ab155", null ], + [ "penify_hook.ui_utils.SUCCESS_COLOR", "namespacepenify__hook_1_1ui__utils.html#a22c450c5e2b5394618ecf9b636560df4", null ], + [ "penify_hook.ui_utils.SUCCESS_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a7d3cc992aaeb0a01c536c9a48e801ff3", null ], + [ "penify_hook.ui_utils.WARNING_COLOR", "namespacepenify__hook_1_1ui__utils.html#a177bc9b44157844c999e0c1c2c6936ff", null ], + [ "penify_hook.ui_utils.WARNING_SYMBOL", "namespacepenify__hook_1_1ui__utils.html#a9ee7a42eeca5b12429cb97bf89007be8", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/html/utils_8py.html b/docs-test-3rd-techno/html/utils_8py.html new file mode 100644 index 0000000..7148c26 --- /dev/null +++ b/docs-test-3rd-techno/html/utils_8py.html @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + +penify-cli: /app/doc_state/github_reposRepoArchDocGenContext/Penify-dev/penify-cli/penify_hook/utils.py File Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    penify-cli +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    utils.py File Reference
    +
    +
    + + + + +

    +Classes

    class  penify_hook.utils.GitRepoNotFoundError
     
    + + + + + +

    +Namespaces

    namespace  penify_hook
     
    namespace  penify_hook.utils
     
    + + + + + + + +

    +Functions

     penify_hook.utils.get_repo_details (Repo repo)
     
     penify_hook.utils.recursive_search_git_folder (folder_path)
     
     penify_hook.utils.find_git_parent (path)
     
    + + + +

    +Variables

     penify_hook.utils.logger = logging.getLogger(__name__)
     
    +
    +
    + + + + + diff --git a/docs-test-3rd-techno/html/utils_8py.js b/docs-test-3rd-techno/html/utils_8py.js new file mode 100644 index 0000000..dd69e0e --- /dev/null +++ b/docs-test-3rd-techno/html/utils_8py.js @@ -0,0 +1,8 @@ +var utils_8py = +[ + [ "penify_hook.utils.GitRepoNotFoundError", "classpenify__hook_1_1utils_1_1GitRepoNotFoundError.html", null ], + [ "penify_hook.utils.find_git_parent", "namespacepenify__hook_1_1utils.html#a1c80f8c46a793d58ee6fd8674d1de1a2", null ], + [ "penify_hook.utils.get_repo_details", "namespacepenify__hook_1_1utils.html#ab8d9a41a4016850afe6ff086021aaf19", null ], + [ "penify_hook.utils.recursive_search_git_folder", "namespacepenify__hook_1_1utils.html#a9d723ca510c90ac0390819dcae3a800a", null ], + [ "penify_hook.utils.logger", "namespacepenify__hook_1_1utils.html#a0c0c1ed6b197038085c94a90ceedfb01", null ] +]; \ No newline at end of file diff --git a/docs-test-3rd-techno/penify-cli-Penify-dev-g.tar.gz b/docs-test-3rd-techno/penify-cli-Penify-dev-g.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5bf745872ef054a023d43b303816a9f92ad67ce2 GIT binary patch literal 436390 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

    2*m4(u5v-L|$Y6S-?#c$4-57k@Y7PCVni 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 &jvy=6>>qWG|KMg@o&M8JEMkX1 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%0ALX2`$>W-g6gT)w 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

    lTr9P&&H#j%Hv< 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�SJ$KrhvNs4@mz2P^34J2#F8ulZk*5 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 Une#lF&Jlr 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