├── DevelopersGuide.pdf ├── Infor_WidgetSDK_3.36.1.zip ├── LICENSE ├── Licenses ├── Angular-LICENSE.TXT ├── D3-LICENSE.TXT ├── RxJS-LICENSE.TXT ├── SohoXi-LICENSE.txt ├── SystemJS-LICENSE.TXT ├── TSLIB-LICENSE.TXT ├── core-js-LICENSE.TXT └── jQuery-LICENSE.TXT ├── README.md ├── docs ├── .bundle │ └── config ├── .gitignore ├── .vscode │ └── tasks.json ├── Gemfile ├── Gemfile.lock ├── _config.yml ├── _sass │ └── color_schemes │ │ └── light-theme.scss ├── assets │ ├── fonts │ │ ├── SourceSansPro-Light.ttf │ │ └── SourceSansPro-Regular.ttf │ └── images │ │ ├── blog │ │ ├── screenshot-helloworld-serve.png │ │ ├── screenshot-serve-success.png │ │ ├── screenshot-todo-basic.png │ │ └── screenshot-todo-serve.png │ │ ├── homepages-screenshot.png │ │ ├── homepages-screenshot2.png │ │ ├── homepages_dark-theme.png │ │ ├── homepages_widget-sizes.png │ │ ├── ids-screenshot.png │ │ ├── infor-go_screenshot.png │ │ ├── logo.svg │ │ └── widget-catalog_screenshots-example.png ├── best-practices.md ├── blog │ ├── 2020 │ │ ├── 2020-10-19-new-release.md │ │ ├── 2020-11-25-developing-a-widget.md │ │ └── index.md │ ├── 2021 │ │ ├── 2021-02-05-new-release.md │ │ └── index.md │ └── index.md ├── getting-started.md ├── index.md ├── resources.md └── support-faq.md └── lime-zipv.zip /DevelopersGuide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/DevelopersGuide.pdf -------------------------------------------------------------------------------- /Infor_WidgetSDK_3.36.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/Infor_WidgetSDK_3.36.1.zip -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | /*************************************************************** 2 | * * 3 | * NOTICE * 4 | * * 5 | * THIS SOFTWARE IS THE PROPERTY OF AND CONTAINS * 6 | * CONFIDENTIAL INFORMATION OF INFOR AND/OR ITS AFFILIATES * 7 | * OR SUBSIDIARIES AND SHALL NOT BE DISCLOSED WITHOUT PRIOR * 8 | * WRITTEN PERMISSION. LICENSED CUSTOMERS MAY COPY AND * 9 | * ADAPT THIS SOFTWARE FOR THEIR OWN USE IN ACCORDANCE WITH * 10 | * THE TERMS OF THEIR SOFTWARE LICENSE AGREEMENT. * 11 | * ALL OTHER RIGHTS RESERVED. * 12 | * * 13 | * (c) COPYRIGHT 2018 INFOR. ALL RIGHTS RESERVED. * 14 | * THE WORD AND DESIGN MARKS SET FORTH HEREIN ARE * 15 | * TRADEMARKS AND/OR REGISTERED TRADEMARKS OF INFOR * 16 | * AND/OR ITS AFFILIATES AND SUBSIDIARIES. ALL RIGHTS * 17 | * RESERVED. ALL OTHER TRADEMARKS LISTED HEREIN ARE * 18 | * THE PROPERTY OF THEIR RESPECTIVE OWNERS. * 19 | * * 20 | ***************************************************************/ -------------------------------------------------------------------------------- /Licenses/Angular-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2010-2014 Google, Inc. http://angularjs.org 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Licenses/D3-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | Copyright 2010-2017 Mike Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of the author nor the names of contributors may be used to 15 | endorse or promote products derived from this software without specific prior 16 | written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /Licenses/RxJS-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /Licenses/SohoXi-LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/Licenses/SohoXi-LICENSE.txt -------------------------------------------------------------------------------- /Licenses/SystemJS-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | MIT License 2 | ----------- 3 | 4 | Copyright (C) 2013-2016 Guy Bedford 5 | 6 | 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: 7 | 8 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 9 | 10 | 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. 11 | -------------------------------------------------------------------------------- /Licenses/TSLIB-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | Apache License 2 | 3 | Version 2.0, January 2004 4 | 5 | http://www.apache.org/licenses/ 6 | 7 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 8 | 9 | 1. Definitions. 10 | 11 | "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. 16 | 17 | "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. 18 | 19 | "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. 20 | 21 | "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. 22 | 23 | "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). 24 | 25 | "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. 26 | 27 | "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." 28 | 29 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 30 | 31 | 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 32 | 33 | 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 34 | 35 | 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: 36 | 37 | You must give any other recipients of the Work or Derivative Works a copy of this License; and 38 | 39 | You must cause any modified files to carry prominent notices stating that You changed the files; and 40 | 41 | You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and 42 | 43 | If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 44 | 45 | 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 46 | 47 | 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 48 | 49 | 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 50 | 51 | 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 52 | 53 | 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. 54 | 55 | END OF TERMS AND CONDITIONS 56 | -------------------------------------------------------------------------------- /Licenses/core-js-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright © 2017 Denis Pushkarev 3 | 4 | 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: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | 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. -------------------------------------------------------------------------------- /Licenses/jQuery-LICENSE.TXT: -------------------------------------------------------------------------------- 1 | Copyright 2005, 2014 jQuery Foundation and other contributors, 2 | https://jquery.org/ 3 | 4 | This software consists of voluntary contributions made by many 5 | individuals. For exact contribution history, see the revision history 6 | available at https://github.com/jquery/jquery 7 | 8 | The following license applies to all parts of this software except as 9 | documented below: 10 | 11 | ==== 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining 14 | a copy of this software and associated documentation files (the 15 | "Software"), to deal in the Software without restriction, including 16 | without limitation the rights to use, copy, modify, merge, publish, 17 | distribute, sublicense, and/or sell copies of the Software, and to 18 | permit persons to whom the Software is furnished to do so, subject to 19 | the following conditions: 20 | 21 | The above copyright notice and this permission notice shall be 22 | included in all copies or substantial portions of the Software. 23 | 24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 | 32 | ==== 33 | 34 | All files located in the node_modules and external directories are 35 | externally maintained libraries used by this software which have their 36 | own licenses; we recommend you read them, as their terms may differ from 37 | the terms above. 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Infor Widget SDK 2 | This file contains a brief introduction to the Infor Widget SDK. 3 | Refer to the Developers Guide PDF file in the Documentation directory for more details. 4 | 5 | ## Prerequisites 6 | To use all parts of the Widget SDK you will need Node.js, a TypeScript compiler and an Integrated development environment (IDE) or a Text Editor. Some of the possible alternatives are listed below. 7 | 8 | * Node.js 9 | * https://nodejs.org/en/ 10 | * TypeScript 11 | * http://www.typescriptlang.org/ 12 | * npm install -g typescript 13 | * Visual Studio Code (free) 14 | * https://code.visualstudio.com/ 15 | * Visual Studio Community (free) 16 | * https://www.visualstudio.com/vs/community/ 17 | * Visual Studio 2017 (license) 18 | * https://www.visualstudio.com/vs/ 19 | 20 | 21 | ## Node.js dependencies 22 | If you want to use any of the following parts of the SDK you need to install the Node.js dependencies. If you don't plan to use any of these you can just skip this step. 23 | 24 | * Angular 25 | * Angular source code and typings matching the version used for Homepages. 26 | * Web server 27 | * A simple development web server. 28 | * ION API Proxy 29 | * A developmemt proxy for widgets that use the Infor ION API. 30 | * Homepages script 31 | * Minify and pack widget into a production zip. 32 | 33 | ### Install with npm 34 | Run the following command in the Samples directory to install the Node.js dependencies. 35 | ``` 36 | npm install 37 | ``` 38 | ### Install with Windows command file 39 | Run the Install.cmd command file in the Samples directory to install the Node.js dependencies. 40 | ``` 41 | Install.cmd 42 | ``` 43 | 44 | ## Widget sample code 45 | To get an overview of the widget sample code you can open it in your development environment. 46 | 47 | ### Visual Studio Code 48 | Start Visual Studio Code and use File > Open Folder and navigate to Samples/Widgets. 49 | 50 | ## Web server 51 | The SDK includes a Node.js development web server that be used for viewing sample widgets and developing widgets. The web server is optional if you have another alternative such as the web server in Visual Studio. The web server will run on http://localhost:8080 by default and serve files from the "./Widgets" directory. 52 | 53 | ### Start web server in Visual Studio Code 54 | Start the web server in Visual Studio Code by running the build task "Start Server" (ctrl+shift+b). 55 | 56 | ### Start web server with Windows command file 57 | Use the StartServer.cmd command file to start the web server. Edit the command file to change the default port and path. 58 | ``` 59 | StartServer.cmd 60 | ``` 61 | 62 | ### Start web server with npm 63 | Use one of the following npm commands to start the web server. The port and path can be changed in the configuration section of the package.json file, see server_port and server_path. 64 | ``` 65 | npm start 66 | ``` 67 | ``` 68 | npm run server 69 | ``` 70 | 71 | **NOTE**: You can use the [`npm config`](https://docs.npmjs.com/misc/config) command to set configuration properties without modifying `package.json`. This will set and persist the property regardless of what is declared in the file.: 72 | ```sh 73 | # Set the 'server_port', without modifying package.json 74 | npm config set InforHomepagesWidgetSDK:server_port 8888 75 | 76 | # The server will now bind to port 8888 77 | npm run server 78 | 79 | # Undo the above configuration 80 | npm config rm InforHomepagesWidgetSDK:server_port 81 | ``` 82 | 83 | ### Start web server with node 84 | Use one of the following node commands to start the web server. The port and path can be provided as parameters. If no parameters are specified the default port 8080 and the default path "./Widgets" will be used 85 | ``` 86 | node server 87 | ``` 88 | ``` 89 | node server 8080 "./Widgets" 90 | ``` 91 | 92 | ## Compile widgets 93 | Compile all the widgets in Visual Studio Code by running the build task "Typescript Watch" (ctrl+shift+b). The files are watched, and will be recompiled automatically when saved. Refresh your browser to see the changes. 94 | 95 | ## Run widget 96 | Once the widgets have been compiled and the web server is running, you can run the selected widget by launching the run & debug configuration "Launch Chrome against localhost" or by manually navigating to http://localhost:8080/index.html 97 | 98 | ## ION API Proxy 99 | When developing widget that use ION API you can use the included proxy. See the ION API samples in the Samples/Widgets directory for more information. You need to know the hostname and port of the ION API server to be able to configure the proxy. 100 | 101 | ### Start proxy with Windows command file 102 | Start the proxy using the StartIonApiProxy.cmd command file. Make sure to edit the command and provide correct values for the local port, remote host and port. 103 | ``` 104 | StartIonApiProxy.cmd 105 | ``` 106 | 107 | ### Start proxy with npm 108 | Use the following npm command to start the proxy. The local port, remote host and remote port can be changed in the configuration section of the package.json file, see proxy_local_port, proxy_remote_host and proxy_remote_port. 109 | ``` 110 | npm run proxy 111 | ``` 112 | 113 | **NOTE**: You can use the [`npm config`](https://docs.npmjs.com/misc/config) command to set configuration properties without modifying `package.json`. This will set and persist the property regardless of what is declared in the file.: 114 | ```sh 115 | # Set the 'proxy_remote_host', without modifying package.json 116 | npm config set InforHomepagesWidgetSDK:proxy_remote_host example.com 117 | 118 | # The proxy will forward requests to 'example.com' 119 | npm run proxy 120 | 121 | # Undo the above configuration 122 | npm config rm InforHomepagesWidgetSDK:proxy_remote_host 123 | ``` 124 | 125 | ### Start proxy with node 126 | Use the following node command to start the proxy. The local port, remote host and remote port and should be provided as parameters. 127 | ``` 128 | node proxy 8083 "domain.server.com" 443 129 | ``` 130 | 131 | ## Homepages command script 132 | The homepages command script performs different commands. For the help documentation use: 133 | ``` 134 | node homepages help 135 | ``` 136 | ### Package 137 | Widgets have to be bundled (if consisting of multiple .ts files) and minified before delivery. The package command can be used to build, minify and package a widget or a list of widgets. 138 | ``` 139 | node homepages pack "infor.sample.helloworld" 140 | ``` 141 | 142 | -------------------------------------------------------------------------------- /docs/.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_PATH: "vendor/bundle" 3 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .jekyll-cache 2 | vendor 3 | _site 4 | -------------------------------------------------------------------------------- /docs/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "Serve Github Pages", 6 | "type": "shell", 7 | "command": "bundle exec jekyll serve --livereload", 8 | "group": "build", 9 | "problemMatcher": [] 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | 5 | git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } 6 | 7 | # gem "rails" 8 | gem 'github-pages', group: :jekyll_plugins 9 | # gem "jekyll", "~> 4.1" 10 | -------------------------------------------------------------------------------- /docs/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (6.0.3.4) 5 | concurrent-ruby (~> 1.0, >= 1.0.2) 6 | i18n (>= 0.7, < 2) 7 | minitest (~> 5.1) 8 | tzinfo (~> 1.1) 9 | zeitwerk (~> 2.2, >= 2.2.2) 10 | addressable (2.8.0) 11 | public_suffix (>= 2.0.2, < 5.0) 12 | coffee-script (2.4.1) 13 | coffee-script-source 14 | execjs 15 | coffee-script-source (1.11.1) 16 | colorator (1.1.0) 17 | commonmarker (0.17.13) 18 | ruby-enum (~> 0.5) 19 | concurrent-ruby (1.1.7) 20 | dnsruby (1.61.5) 21 | simpleidn (~> 0.1) 22 | em-websocket (0.5.2) 23 | eventmachine (>= 0.12.9) 24 | http_parser.rb (~> 0.6.0) 25 | ethon (0.12.0) 26 | ffi (>= 1.3.0) 27 | eventmachine (1.2.7) 28 | execjs (2.7.0) 29 | faraday (1.1.0) 30 | multipart-post (>= 1.2, < 3) 31 | ruby2_keywords 32 | ffi (1.13.1) 33 | forwardable-extended (2.6.0) 34 | gemoji (3.0.1) 35 | github-pages (209) 36 | github-pages-health-check (= 1.16.1) 37 | jekyll (= 3.9.0) 38 | jekyll-avatar (= 0.7.0) 39 | jekyll-coffeescript (= 1.1.1) 40 | jekyll-commonmark-ghpages (= 0.1.6) 41 | jekyll-default-layout (= 0.1.4) 42 | jekyll-feed (= 0.15.1) 43 | jekyll-gist (= 1.5.0) 44 | jekyll-github-metadata (= 2.13.0) 45 | jekyll-mentions (= 1.6.0) 46 | jekyll-optional-front-matter (= 0.3.2) 47 | jekyll-paginate (= 1.1.0) 48 | jekyll-readme-index (= 0.3.0) 49 | jekyll-redirect-from (= 0.16.0) 50 | jekyll-relative-links (= 0.6.1) 51 | jekyll-remote-theme (= 0.4.2) 52 | jekyll-sass-converter (= 1.5.2) 53 | jekyll-seo-tag (= 2.6.1) 54 | jekyll-sitemap (= 1.4.0) 55 | jekyll-swiss (= 1.0.0) 56 | jekyll-theme-architect (= 0.1.1) 57 | jekyll-theme-cayman (= 0.1.1) 58 | jekyll-theme-dinky (= 0.1.1) 59 | jekyll-theme-hacker (= 0.1.2) 60 | jekyll-theme-leap-day (= 0.1.1) 61 | jekyll-theme-merlot (= 0.1.1) 62 | jekyll-theme-midnight (= 0.1.1) 63 | jekyll-theme-minimal (= 0.1.1) 64 | jekyll-theme-modernist (= 0.1.1) 65 | jekyll-theme-primer (= 0.5.4) 66 | jekyll-theme-slate (= 0.1.1) 67 | jekyll-theme-tactile (= 0.1.1) 68 | jekyll-theme-time-machine (= 0.1.1) 69 | jekyll-titles-from-headings (= 0.5.3) 70 | jemoji (= 0.12.0) 71 | kramdown (= 2.3.0) 72 | kramdown-parser-gfm (= 1.1.0) 73 | liquid (= 4.0.3) 74 | mercenary (~> 0.3) 75 | minima (= 2.5.1) 76 | nokogiri (>= 1.10.4, < 2.0) 77 | rouge (= 3.23.0) 78 | terminal-table (~> 1.4) 79 | github-pages-health-check (1.16.1) 80 | addressable (~> 2.3) 81 | dnsruby (~> 1.60) 82 | octokit (~> 4.0) 83 | public_suffix (~> 3.0) 84 | typhoeus (~> 1.3) 85 | html-pipeline (2.14.0) 86 | activesupport (>= 2) 87 | nokogiri (>= 1.4) 88 | http_parser.rb (0.6.0) 89 | i18n (0.9.5) 90 | concurrent-ruby (~> 1.0) 91 | jekyll (3.9.0) 92 | addressable (~> 2.4) 93 | colorator (~> 1.0) 94 | em-websocket (~> 0.5) 95 | i18n (~> 0.7) 96 | jekyll-sass-converter (~> 1.0) 97 | jekyll-watch (~> 2.0) 98 | kramdown (>= 1.17, < 3) 99 | liquid (~> 4.0) 100 | mercenary (~> 0.3.3) 101 | pathutil (~> 0.9) 102 | rouge (>= 1.7, < 4) 103 | safe_yaml (~> 1.0) 104 | jekyll-avatar (0.7.0) 105 | jekyll (>= 3.0, < 5.0) 106 | jekyll-coffeescript (1.1.1) 107 | coffee-script (~> 2.2) 108 | coffee-script-source (~> 1.11.1) 109 | jekyll-commonmark (1.3.1) 110 | commonmarker (~> 0.14) 111 | jekyll (>= 3.7, < 5.0) 112 | jekyll-commonmark-ghpages (0.1.6) 113 | commonmarker (~> 0.17.6) 114 | jekyll-commonmark (~> 1.2) 115 | rouge (>= 2.0, < 4.0) 116 | jekyll-default-layout (0.1.4) 117 | jekyll (~> 3.0) 118 | jekyll-feed (0.15.1) 119 | jekyll (>= 3.7, < 5.0) 120 | jekyll-gist (1.5.0) 121 | octokit (~> 4.2) 122 | jekyll-github-metadata (2.13.0) 123 | jekyll (>= 3.4, < 5.0) 124 | octokit (~> 4.0, != 4.4.0) 125 | jekyll-mentions (1.6.0) 126 | html-pipeline (~> 2.3) 127 | jekyll (>= 3.7, < 5.0) 128 | jekyll-optional-front-matter (0.3.2) 129 | jekyll (>= 3.0, < 5.0) 130 | jekyll-paginate (1.1.0) 131 | jekyll-readme-index (0.3.0) 132 | jekyll (>= 3.0, < 5.0) 133 | jekyll-redirect-from (0.16.0) 134 | jekyll (>= 3.3, < 5.0) 135 | jekyll-relative-links (0.6.1) 136 | jekyll (>= 3.3, < 5.0) 137 | jekyll-remote-theme (0.4.2) 138 | addressable (~> 2.0) 139 | jekyll (>= 3.5, < 5.0) 140 | jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) 141 | rubyzip (>= 1.3.0, < 3.0) 142 | jekyll-sass-converter (1.5.2) 143 | sass (~> 3.4) 144 | jekyll-seo-tag (2.6.1) 145 | jekyll (>= 3.3, < 5.0) 146 | jekyll-sitemap (1.4.0) 147 | jekyll (>= 3.7, < 5.0) 148 | jekyll-swiss (1.0.0) 149 | jekyll-theme-architect (0.1.1) 150 | jekyll (~> 3.5) 151 | jekyll-seo-tag (~> 2.0) 152 | jekyll-theme-cayman (0.1.1) 153 | jekyll (~> 3.5) 154 | jekyll-seo-tag (~> 2.0) 155 | jekyll-theme-dinky (0.1.1) 156 | jekyll (~> 3.5) 157 | jekyll-seo-tag (~> 2.0) 158 | jekyll-theme-hacker (0.1.2) 159 | jekyll (> 3.5, < 5.0) 160 | jekyll-seo-tag (~> 2.0) 161 | jekyll-theme-leap-day (0.1.1) 162 | jekyll (~> 3.5) 163 | jekyll-seo-tag (~> 2.0) 164 | jekyll-theme-merlot (0.1.1) 165 | jekyll (~> 3.5) 166 | jekyll-seo-tag (~> 2.0) 167 | jekyll-theme-midnight (0.1.1) 168 | jekyll (~> 3.5) 169 | jekyll-seo-tag (~> 2.0) 170 | jekyll-theme-minimal (0.1.1) 171 | jekyll (~> 3.5) 172 | jekyll-seo-tag (~> 2.0) 173 | jekyll-theme-modernist (0.1.1) 174 | jekyll (~> 3.5) 175 | jekyll-seo-tag (~> 2.0) 176 | jekyll-theme-primer (0.5.4) 177 | jekyll (> 3.5, < 5.0) 178 | jekyll-github-metadata (~> 2.9) 179 | jekyll-seo-tag (~> 2.0) 180 | jekyll-theme-slate (0.1.1) 181 | jekyll (~> 3.5) 182 | jekyll-seo-tag (~> 2.0) 183 | jekyll-theme-tactile (0.1.1) 184 | jekyll (~> 3.5) 185 | jekyll-seo-tag (~> 2.0) 186 | jekyll-theme-time-machine (0.1.1) 187 | jekyll (~> 3.5) 188 | jekyll-seo-tag (~> 2.0) 189 | jekyll-titles-from-headings (0.5.3) 190 | jekyll (>= 3.3, < 5.0) 191 | jekyll-watch (2.2.1) 192 | listen (~> 3.0) 193 | jemoji (0.12.0) 194 | gemoji (~> 3.0) 195 | html-pipeline (~> 2.2) 196 | jekyll (>= 3.0, < 5.0) 197 | kramdown (2.3.0) 198 | rexml 199 | kramdown-parser-gfm (1.1.0) 200 | kramdown (~> 2.0) 201 | liquid (4.0.3) 202 | listen (3.3.1) 203 | rb-fsevent (~> 0.10, >= 0.10.3) 204 | rb-inotify (~> 0.9, >= 0.9.10) 205 | mercenary (0.3.6) 206 | mini_portile2 (2.6.1) 207 | minima (2.5.1) 208 | jekyll (>= 3.5, < 5.0) 209 | jekyll-feed (~> 0.9) 210 | jekyll-seo-tag (~> 2.1) 211 | minitest (5.14.2) 212 | multipart-post (2.1.1) 213 | nokogiri (1.12.5) 214 | mini_portile2 (~> 2.6.1) 215 | racc (~> 1.4) 216 | octokit (4.19.0) 217 | faraday (>= 0.9) 218 | sawyer (~> 0.8.0, >= 0.5.3) 219 | pathutil (0.16.2) 220 | forwardable-extended (~> 2.6) 221 | public_suffix (3.1.1) 222 | racc (1.5.2) 223 | rb-fsevent (0.10.4) 224 | rb-inotify (0.10.1) 225 | ffi (~> 1.0) 226 | rexml (3.2.5) 227 | rouge (3.23.0) 228 | ruby-enum (0.8.0) 229 | i18n 230 | ruby2_keywords (0.0.2) 231 | rubyzip (2.3.0) 232 | safe_yaml (1.0.5) 233 | sass (3.7.4) 234 | sass-listen (~> 4.0.0) 235 | sass-listen (4.0.0) 236 | rb-fsevent (~> 0.9, >= 0.9.4) 237 | rb-inotify (~> 0.9, >= 0.9.7) 238 | sawyer (0.8.2) 239 | addressable (>= 2.3.5) 240 | faraday (> 0.8, < 2.0) 241 | simpleidn (0.1.1) 242 | unf (~> 0.1.4) 243 | terminal-table (1.8.0) 244 | unicode-display_width (~> 1.1, >= 1.1.1) 245 | thread_safe (0.3.6) 246 | typhoeus (1.4.0) 247 | ethon (>= 0.9.0) 248 | tzinfo (1.2.8) 249 | thread_safe (~> 0.1) 250 | unf (0.1.4) 251 | unf_ext 252 | unf_ext (0.0.7.7) 253 | unicode-display_width (1.7.0) 254 | zeitwerk (2.4.1) 255 | 256 | PLATFORMS 257 | ruby 258 | 259 | DEPENDENCIES 260 | github-pages 261 | 262 | BUNDLED WITH 263 | 1.17.2 264 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | 2 | # Basic config 3 | title: Widget SDK 4 | description: Widget SDK documentation. 5 | remote_theme: pmarsceill/just-the-docs 6 | color_scheme: light-theme 7 | 8 | # Set a path/url to a logo that will be displayed instead of the title 9 | logo: "/assets/images/logo.svg" 10 | 11 | # Aux links for the upper right navigation 12 | aux_links: 13 | "Widget SDK on GitHub": 14 | - "//github.com/infor-cloud/widget-sdk" 15 | 16 | # Enable search 17 | search_enabled: true 18 | 19 | # Enable or disable the search button that appears in the bottom right corner of every page 20 | # Supports true or false (default) 21 | search.button: true 22 | 23 | # Footer content 24 | # appears at the bottom of every page's main content 25 | footer_content: "Copyright © 2020 Infor." 26 | 27 | # Footer last edited timestamp 28 | last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter 29 | last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html 30 | 31 | # Footer "Edit this page on GitHub" link text 32 | gh_edit_link: true # show or hide edit this page link 33 | gh_edit_link_text: "Edit this page on GitHub." 34 | gh_edit_repository: "https://github.com/infor-cloud/widget-sdk" # the github URL for your repo -------------------------------------------------------------------------------- /docs/_sass/color_schemes/light-theme.scss: -------------------------------------------------------------------------------- 1 | 2 | /* FONTS */ 3 | 4 | @font-face { 5 | font-family: 'Source Sans Pro Regular'; 6 | src: url('../../assets/fonts/SourceSansPro-Regular.ttf') format('truetype'); 7 | } 8 | 9 | @font-face { 10 | font-family: 'Source Sans Pro Light'; 11 | src: url('../../assets/fonts/SourceSansPro-Light.ttf') format('truetype'); 12 | } 13 | 14 | 15 | /* Font variables */ 16 | 17 | $body-font-family: 'Source Sans Pro Regular', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 18 | Roboto, 'Helvetica Neue', Arial, sans-serif; 19 | 20 | $font-regular: 'Source Sans Pro Regular', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 21 | Roboto, 'Helvetica Neue', Arial, sans-serif; 22 | 23 | $font-light: 'Source Sans Pro Light', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 24 | Roboto, 'Helvetica Neue', Arial, sans-serif; 25 | 26 | /* Font Classes */ 27 | 28 | .font-regular { 29 | font-family: $font-regular !important; 30 | } 31 | 32 | .font-light { 33 | font-family: $font-light !important; 34 | } 35 | 36 | /* COLORS */ 37 | 38 | $azure-04: #55A3F3; 39 | $azure-06: #0072ED; 40 | $azure-05: #1C86EF; 41 | $azure-07: #0066D4; 42 | 43 | $sidebar-nav-hover: #e1f3fe; 44 | 45 | .bg-azure-06 { 46 | background-color: $azure-06 !important; 47 | background-image: linear-gradient($azure-04, $azure-06) !important; 48 | } 49 | 50 | .bg-azure-06:hover { 51 | background-color: $azure-07 !important; 52 | background-image: linear-gradient($azure-05, $azure-07) !important; 53 | } 54 | 55 | /* HYPERLINKS */ 56 | 57 | $link-color: $azure-06; 58 | 59 | /* BUTTONS */ 60 | 61 | .btn { 62 | border-radius: 2px !important; 63 | padding: 6px 30px !important; 64 | -webkit-transition: all 300ms ease-out; 65 | -moz-transition: all 300ms ease-out; 66 | -o-transition: all 300ms ease-out; 67 | transition: all 300ms ease-out; 68 | font-family: $font-regular !important; 69 | } 70 | 71 | /* TYPOGRAPHY */ 72 | 73 | h1, p, ul, ol { 74 | font-family: $font-light !important; 75 | } 76 | 77 | /* SIDEBAR MENU */ 78 | 79 | // Increase padding and font size 80 | .nav-list .nav-list-item .nav-list-link { 81 | padding-top: 0.5em !important; 82 | padding-bottom: 0.5em !important; 83 | font-size: 1.1em !important; 84 | background-image: none !important; 85 | color: #252429 !important; 86 | } 87 | 88 | // Change hover color 89 | .nav-list .nav-list-item .nav-list-link:hover { 90 | background-image: none !important; 91 | background-color: $sidebar-nav-hover !important; 92 | } 93 | 94 | .nav-list .nav-list-item .nav-list-link.active { 95 | background-image: none !important; 96 | background-color: none !important; 97 | border-left: 1px solid #0075e9 !important; 98 | color: $azure-06 !important; 99 | } -------------------------------------------------------------------------------- /docs/assets/fonts/SourceSansPro-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/fonts/SourceSansPro-Light.ttf -------------------------------------------------------------------------------- /docs/assets/fonts/SourceSansPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/fonts/SourceSansPro-Regular.ttf -------------------------------------------------------------------------------- /docs/assets/images/blog/screenshot-helloworld-serve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/blog/screenshot-helloworld-serve.png -------------------------------------------------------------------------------- /docs/assets/images/blog/screenshot-serve-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/blog/screenshot-serve-success.png -------------------------------------------------------------------------------- /docs/assets/images/blog/screenshot-todo-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/blog/screenshot-todo-basic.png -------------------------------------------------------------------------------- /docs/assets/images/blog/screenshot-todo-serve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/blog/screenshot-todo-serve.png -------------------------------------------------------------------------------- /docs/assets/images/homepages-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/homepages-screenshot.png -------------------------------------------------------------------------------- /docs/assets/images/homepages-screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/homepages-screenshot2.png -------------------------------------------------------------------------------- /docs/assets/images/homepages_dark-theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/homepages_dark-theme.png -------------------------------------------------------------------------------- /docs/assets/images/homepages_widget-sizes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/homepages_widget-sizes.png -------------------------------------------------------------------------------- /docs/assets/images/ids-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/ids-screenshot.png -------------------------------------------------------------------------------- /docs/assets/images/infor-go_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/infor-go_screenshot.png -------------------------------------------------------------------------------- /docs/assets/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Infor_TMLogo_RGB_080512 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/assets/images/widget-catalog_screenshots-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/docs/assets/images/widget-catalog_screenshots-example.png -------------------------------------------------------------------------------- /docs/best-practices.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Best Practices 3 | has_children: false 4 | nav_order: 3 5 | --- 6 | 7 | # Best Practices 8 | {: .no_toc } 9 | 10 | Here are some best practices to consider when building your widgets. For further reading, please refer to the [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf). 11 | 12 | ## Table of contents 13 | {: .no_toc .text-delta } 14 | 15 | 1. TOC 16 | {:toc} 17 | 18 | ## Use ION APIs to communicate with the backend 19 | 20 | The widget should exclusively use ION APIs to communicate with the backend. For example when retrieving data, or creating / updating / deleting data. 21 | 22 | ### Further reading 23 | {: .no_toc } 24 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 10: ION API) 25 | * [Youtube playlist for ION and ION API Gateway](https://www.youtube.com/watch?v=up5ZLczEQ4c&list=PL84oLmtdP0NPmO0bLcls3E3qTf9w05_r6) 26 | * [ION API Admin guide](https://docs.infor.com/ionapi/12.0.x/en-us/ionapiag/default.html) 27 | * [ION API Github](https://github.com/infor-cloud/ion-api-sdk/blob/master/README.md) 28 | 29 | ## Focus on speed and performance 30 | 31 | The widget should be developed with focus on speed and performance. High performant APIs with short response times, minimizing the number of requests as well as data size and the number of items retrieved to a set of 10-15 items with a max limit of 100. (Purpose built APIs for charts as client side calculations on data sets does not deliver high performance) 32 | 33 | ### Further reading 34 | {: .no_toc } 35 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 10: ION API) 36 | 37 | ## Use IDS Enterprise component library 38 | When designing your widget, we strongly recommend using the [IDS Enterprise Components](https://github.com/infor-design/enterprise) for the UI. 39 | 40 | ![Screenshot of a IDS homepage](assets/images/ids-screenshot.png) 41 | 42 | The IDS Enterprise Components is a framework-independent UI component library built in js and css that is pattern-focused, template-driven, touch-enabled, responsive, accessible, and themable. 43 | 44 | Complex custom components should always be avoided. If custom styling or components has been used, they must follow the IDS guidelines for look & feel, theming, mobile and accessibility support. 45 | 46 | ### Further reading 47 | {: .no_toc } 48 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 2: Overview > **Enterprise Components for Infor Design System**) 49 | * [Infor Design System (IDS)](https://design.infor.com/) 50 | * [IDS Enterprise Components](https://github.com/infor-design/enterprise) 51 | 52 | ## Theme Support 53 | Widgets should support the three theme variants of the IDS Subtle Theme; Light, Dark and High Contrast. 54 | 55 | ![Screenshot of a homepage in Dark Theme](assets/images/homepages_dark-theme.png) 56 | 57 | The IDS Enterprise components automatically supports all theme variants. 58 | 59 | If custom styling or components has been used, those must align with the IDS look & feel for each theme variant. 60 | 61 | ### Further reading 62 | {: .no_toc } 63 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > **Theme Support**) 64 | 65 | ## Translate your widgets 66 | We recommend that you translate your widgets so that they support the same languages as supported by Infor OS. For a current list of supported languages, see [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf). 67 | 68 | Add translations using the `localization` property in the widget manifest. 69 | 70 | ### Example 71 | {: .no_toc } 72 | ``` 73 | "localization": { 74 | "en-US": { 75 | "widgetTitle": "Announcements", 76 | "widgetDescription": "Displays the latest announcements that require your 77 | attention. You can use the widget options to control how long each 78 | announcement is displayed and to animate the content when the announcements 79 | are switched. A maximum of 15 announcements can be displayed in the widget. 80 | \r\n\r\nA user with the role HOMEPAGES-ContentAdministrator manages the 81 | priority, layout, content, schedule, and audience for each announcement in 82 | the Homepages administration pages." 83 | } 84 | } 85 | ``` 86 | ### Further reading 87 | {: .no_toc } 88 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > Widget manifest > Optional manifest properties > **Localization**, Chapter 7: Localization) 89 | 90 | ## Formulating widgetTitle and widgetDescription 91 | It is important to follow certain guidelines of the IDS team and other limitations when writing a widget description or widget title. 92 | 93 | ### widgetTitle 94 | 95 | A widget title should be short, direct and give an idea of the widgets purpose. 96 | 97 | Must not contain more than 40 character, this is even after translations so be wary if you reach close to 40 characters and plan to translate the title. 98 | 99 | In most cases, do not add a prefix to the widget title such as the product names etc. This should instead be added in the widgets description. 100 | ### widgetDescription 101 | Do not write "This widget" or variants of it like "This app". 102 | 103 | Must not contain more than 1024 characters, note that even if a description can have 1024 characters, there is still a limit to how much text that can be displayed in the widget catalog thumbnail. (Widget details in catalog will always show full description). 104 | 105 | ## Design for all widget sizes 106 | A widget can be used on a page in 8 different sizes (1x1, 1x2, 1x3, 1x4, 2x1, 2x2, 2x3 and 2x4). Your widget should be runnable in all of these, meaning that all components should be visible and usable. 107 | 108 | ![Screenshot of a homepage with widgets](assets/images/homepages_widget-sizes.png) 109 | 110 | Consider optimizing your widget for all widget sizes, by for example showing additional content when the widget is larger than 1x1, or adjusting margins, paddings and/or graphic elements when the widget is smaller to make your widget more efficient. 111 | 112 | ## Add widget screenshots 113 | You can add up to three PNG image files that will be shown when viewing the widget in the Widget Catalog. The screenshots helps communicate the widget's features and visual experience for your end users. 114 | 115 | ![Screenshot of Widget Catalog](assets/images/widget-catalog_screenshots-example.png) 116 | 117 | Configure your screenshots by adding up to three PNG image files in the widget ZIP. 118 | 119 | The screenshots must be named `screenshot1.png` `screenshot2.png` etc. The image will be displayed in a 200x200px container, and if the image is clicked the image is shown in its original size. 120 | 121 | Reference the images using the `screenshots` property in the widget manifest. The value should reflect the number of screenshots. 122 | 123 | ### Example 124 | {: .no_toc } 125 | ``` 126 | "screenshots": "2" 127 | ``` 128 | 129 | ### Further reading 130 | {: .no_toc } 131 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > Widget manifest > Optional manifest properties > **Screenshots for the widget catalog**) 132 | 133 | ## Enable your widgets for Infor Go 134 | Allow your users to access your widget from the Infor Go mobile application for [Android](https://play.google.com/store/apps/details?id=com.infor.go&hl=en) and [IOS](https://apps.apple.com/bs/app/infor-go/id1446388736). When running on a mobile device the widget can access native device features like GPS information and camera. 135 | 136 | ![Screenshot of widget in Infor Go](assets/images/infor-go_screenshot.png) 137 | 138 | Enable your widget for Infor Go by setting the `target` property in the widget manifest to `mobile`. 139 | 140 | ### Example 141 | {: .no_toc } 142 | ``` 143 | "target": "mobile" 144 | ``` 145 | 146 | ### Further reading 147 | {: .no_toc } 148 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > **Mobile Widget**) 149 | 150 | ## Build your widgets for the banner area 151 | A Banner widget is a widget that can be added to the banner container. The banner container is located at the top of the page directly below the page header, and always spans the entire first row. It holds between one and four banner widgets and has a background color based on the color of the page. 152 | 153 | ![Screenshot of a homepage with widgets](assets/images/homepages-screenshot.png) 154 | 155 | Enable your widget for the banner area by setting the `target` property in the widget manifest to `banner`. 156 | 157 | ### Example 158 | {: .no_toc } 159 | ``` 160 | "target": "banner" 161 | ``` 162 | 163 | ### Further reading 164 | {: .no_toc } 165 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > **Banner Widget**) 166 | 167 | ## Configure a Help URL 168 | Give your users some help along the way by providing a link to documentation for your widget. The link will be displayed for end users in the About dialog. 169 | 170 | Configure the link by adding the `helpUrl` property in the widget manifest. 171 | 172 | ### Examples 173 | {: .no_toc } 174 | ``` 175 | "helpUrl": "http://www.example.com/" 176 | "helpUrl": "{Scheme}://{Hostname}:{Port}/{TenantId}/MyApp/Help" 177 | "helpUrl": https://docs.infor.com/mingle/12.0.x/{Language|lower}/minceolh/default.html?helpcontent=jho1449259087119.html 178 | 179 | ``` 180 | The last example would equate to the following url when english is set as the language: 181 | ``` 182 | https://docs.infor.com/mingle/12.0.x/en-us/minceolh/default.html?helpcontent=jho1449259087119.html 183 | ``` 184 | 185 | ### Further reading 186 | {: .no_toc } 187 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) (Chapter 3: Widgets > Widget manifest > Optional manifest properties > **Help URL**) 188 | -------------------------------------------------------------------------------- /docs/blog/2020/2020-10-19-new-release.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: v3.1.0 released 3 | parent: 2020 4 | grand_parent: Blog 5 | nav_order: 3 6 | --- 7 | 8 | # v3.1.0 released 9 | 10 | by Johan Åslund on October 19, 2020 11 | {: .fs-3 .text-grey-dk-000 } 12 | 13 | Welcome to the new Widget SDK blog! 14 | 15 | We plan to update the blog on a monthly basis, and with this first post, we're announcing the release of Widget SDK v3.1.0, which you'll find [here](https://github.com/infor-cloud/homepages-widget-sdk/releases/tag/v3.1.0). Changes in this version include: 16 | 17 | * Added getVersionInfo function to IWidgetContext which provides access to the Homepages version, displayVersion and frameworkVersion. 18 | * The IDS locale is set automatically based on which language file is loaded in index.html (e.g scripts/lime/resources/en-US.js), or the value of the devLanguage attribute on lm-app. 19 | * Updated to IDS Enterprise 4.31.2. 20 | * Updated to IDS Enterprise NG 7.5.3. 21 | -------------------------------------------------------------------------------- /docs/blog/2020/2020-11-25-developing-a-widget.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Developing a Widget 3 | parent: 2020 4 | grand_parent: Blog 5 | nav_order: 3 6 | --- 7 | 8 | # Developing a Widget 9 | 10 | by Andreas Hallberg on November 25, 2020 11 | {: .fs-3 .text-grey-dk-000 } 12 | 13 | There are already a couple of different guides on how to get started with the Widget SDK, such as the [Developers Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) and the [README](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/ReadMe.md). Those should be the most up-to-date 14 | resources on the topic. However, for this month's blog post I thought I'd give a more practical introduction and go through the steps of downloading the SDK, and developing a very basic widget. 15 | 16 | Note that the following should be considered *an example of how I do things* rather than *a list of steps that you must follow*. With that said, let's begin. 17 | 18 | ## Prerequisites 19 | First, I'll prepare my machine by installing the necessary software, as [described in the README](https://github.com/infor-cloud/homepages-widget-sdk#prerequisites). 20 | 21 | ### Node.js 22 | I work on many different projects, some of which require a specific version of Node. To make switching between versions easier, I use [nvm](https://github.com/nvm-sh/nvm). Right now I'll use the latest LTS version of Node: 23 | ```bash 24 | $ nvm use --lts 25 | Now using node v14.15.0 (npm v6.14.8) 26 | ``` 27 | 28 | ### Visual Studio Code 29 | [VSCode](https://code.visualstudio.com) is my editor of choice for the moment, and it is the one recommended (*but not required!*) for widget developers. It is fast, configurable, and it has language support for pretty much every programming language and framework I'm working with. 30 | 31 | ### Git 32 | [Git](https://git-scm.com) is a fundamental part of my development workflow, whether I'm collaborating with others on shared repositories, or if I am working on personal projects offline. If nothing else, it is just nice to always be able to keep track of changes and easily revert them. 33 | 34 | ## Preparing the SDK 35 | 36 | First, I'm going to download the .zip for the latest SDK release from the [releases page](https://github.com/infor-cloud/homepages-widget-sdk/releases). At the time I'm writing this, the latest version is [3.2.0-rc.1](https://github.com/infor-cloud/homepages-widget-sdk/releases/tag/v3.2.0-rc.1). Once the .zip has been downloaded, I extract it to a directory where I usually store code i.e `~/code/Infor_HomepagesWidgetSDK`. 37 | 38 | ### Adding Git 39 | Next, I'll initiate Git: 40 | ```bash 41 | $ cd ~/code/Infor_HomepagesWidgetSDK 42 | $ git init 43 | Initialized empty Git repository in ~/code/Infor_HomepagesWidgetSDK/.git/ 44 | ``` 45 | I create a `.gitignore` file with the following: 46 | ``` 47 | node_modules 48 | .DS_Store 49 | Samples/Builds 50 | Samples/Widgets/**/*.js 51 | Samples/Widgets/**/*.js.map 52 | !Samples/Widgets/scripts/** 53 | ``` 54 | This will make sure that I don't track the changes in build artifacts, but I still track files included in the SDK. One could also skip the last line and ignore the `Samples/Widgets/scripts` directory since we will probably never make changes there. But since that directory is included with the SDK, I like to keep it in order to see changes when I update the SDK in the future. 55 | 56 | Finally, I'll stage and commit everything: 57 | ```bash 58 | $ git add . 59 | $ git commit -m "initial commit" 60 | ``` 61 | 62 | ### Installing Node dependencies 63 | I go into the `Samples/` directory and run: 64 | ``` 65 | $ npm install 66 | ``` 67 | This will install the packages necessary for building the widgets and running a development server. 68 | 69 | ### Preparing the editor 70 | I open the `Widgets` directory (`Infor_HomepagesWidgetSDK/Samples/Widgets`) in VSCode: 71 | ```bash 72 | code ./Widgets 73 | ``` 74 | I get a popup telling me to install the recommended extensions: 75 | - *Angular.ng-template* - The Angular Language Service 76 | - *ms-vscode.vscode-typescript-tslint-plugin* - TSLint 77 | - *msjsdiag.debugger-for-chrome* - Chrome Debugger 78 | 79 | The SDK is prepared with some VSCode tasks that helps with building and running the dev server. I start them with `Cmd+Shift+B` (`Ctrl+Shift+B` on Windows). There are no errors in the Terminal, so everything appears to be working: 80 | ![Screenshot Dev Server Started]({{site.baseurl}}/assets/images/blog/screenshot-serve-success.png). 81 | 82 | ## Coding 83 | Now all the preparations are done, we are ready for some coding. 84 | 85 | I create 4 files in a new directory: 86 | ``` 87 | sample.todo/ 88 | widget.manifest 89 | widget.ts 90 | todo.module.ts 91 | todo.component.ts 92 | ``` 93 | Here, I am structuring my files according to the [Angular Styleguide - Rule of One](https://angular.io/guide/styleguide#style-01-01), where each component, module, service, class etc. is located in its own file. This style is not enforced for widget developers, but I think that it's an easy way to keep things neat. 94 | 95 | I populate the files with the following: 96 | 97 | **todo.component.ts**: 98 | ```typescript 99 | import { Component } from "@angular/core"; 100 | 101 | @Component({ 102 | template: ` 103 |

TodoComponent works!

104 | `, 105 | }) 106 | export class TodoComponent { 107 | } 108 | ``` 109 | 110 | **todo.module.ts**: 111 | ```typescript 112 | import { NgModule } from "@angular/core"; 113 | import { TodoComponent } from "./todo.component"; 114 | 115 | @NgModule({ 116 | declarations: [ 117 | TodoComponent, 118 | ], 119 | }) 120 | export class TodoModule { } 121 | ``` 122 | 123 | **widget.manifest**: 124 | ```json 125 | { 126 | "widgetId": "sample.todo", 127 | "version": "1.0", 128 | "type": "inline", 129 | "framework": "angular", 130 | "name": "Todo", 131 | "title": "Todo", 132 | "description": "A todo list" 133 | } 134 | ``` 135 | 136 | **widget.ts**: 137 | ```typescript 138 | import { IWidgetContext, IWidgetInstance } from "lime"; 139 | import { TodoComponent } from "./todo.component"; 140 | import { TodoModule } from "./todo.module"; 141 | 142 | export const widgetFactory = (context: IWidgetContext): IWidgetInstance => { 143 | return { 144 | angularConfig: { 145 | moduleType: TodoModule, 146 | componentType: TodoComponent, 147 | }, 148 | }; 149 | }; 150 | ``` 151 | 152 | ### See if it works 153 | Now, my widget should be ready for a first test. The development server and compiler is already running, and since neither of them report any errors I should be able to see my widget if I start the debugger. I start it up using F5, and... 154 | ![Screenshot serving Hello World]({{site.baseurl}}/assets/images/blog/screenshot-helloworld-serve.png) 155 | 156 | That doesn't look right. I can see Homepages with the "Hello World" sample widget, but not my "Todo" widget. The issue here is that I haven't told Homepages to show my widget. The way to do that is by making a final change in `index.html`: 157 | ```html 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | ... 167 | 168 | ``` 169 | Now, if I go back to the browser window: 170 | ![Screenshot serving Todo]({{site.baseurl}}/assets/images/blog/screenshot-todo-serve.png) 171 | It works! Time to commit the changes: 172 | ```bash 173 | $ git add ./sample.todo 174 | $ git commit -m "Add Todo Widget" 175 | ``` 176 | 177 | ### Adding some content 178 | Now that I know that everything works, I can add some content to the widget. This widget should display a Todo-list using some [IDS Components](https://github.com/infor-design/enterprise-ng), so first I'll add some imports to **todo.module.ts**: 179 | ```typescript 180 | import { CommonModule } from "@angular/common"; 181 | import { NgModule } from "@angular/core"; 182 | import { FormsModule } from "@angular/forms"; 183 | import { SohoComponentsModule } from "@infor/sohoxi-angular"; 184 | import { TodoComponent } from "./todo.component"; 185 | 186 | @NgModule({ 187 | imports: [ 188 | CommonModule, // <----- 189 | FormsModule, // <----- 190 | SohoComponentsModule, // <----- 191 | ], 192 | declarations: [ 193 | TodoComponent, 194 | ], 195 | }) 196 | export class TodoModule { } 197 | ``` 198 | 199 | Then I create a new class which will contain the model for a Task in a new file **task.ts**: 200 | ```typescript 201 | export class Task { 202 | done: boolean; 203 | readonly description: string; 204 | readonly id: number; 205 | 206 | constructor(description: string) { 207 | this.description = description; 208 | this.done = false; 209 | this.id = this.generateId(); 210 | } 211 | 212 | private generateId(): number { 213 | return 1_000_000_000 + Math.floor(Math.random() * 1_000_000_000); 214 | } 215 | } 216 | ``` 217 | 218 | Finally, I add a template to my `TodoComponent` as well as some placeholder tasks in **todo.component.ts**: 219 | ```typescript 220 | import { Component } from "@angular/core"; 221 | import { Task } from "./task"; 222 | 223 | @Component({ 224 | template: ` 225 |
226 |
227 | 228 | 229 |
230 |
231 | `, 232 | }) 233 | export class TodoComponent { 234 | tasks: Task[] = [ 235 | new Task("Buy groceries"), 236 | new Task("Feed dog"), 237 | new Task("Pick up spouse"), 238 | new Task("Call friend"), 239 | new Task("Sleep"), 240 | ]; 241 | } 242 | ``` 243 | 244 | And here's the result: 245 | ![Screenshot serving Todo UI]({{site.baseurl}}/assets/images/blog/screenshot-todo-basic.png) 246 | 247 | Everything looks okay, and there are no compiler- or linting errors. Time to commit: 248 | ```bash 249 | $ git add ./sample.todo 250 | $ git commit -m "Visualise tasks in Todo Widget" 251 | ``` 252 | 253 | There are lots of things we can do to improve this widget. But I'll leave it as it is for now and move on. 254 | 255 | ## Packing 256 | So now I have a basic widget working. It may not be very useful yet, but I'd still want to try it out outside of my development environment (or perhaps send it off to review). 257 | 258 | To do this, I need to pack the widget using the `homepages.js` script: 259 | ```bash 260 | $ node ../homepages pack sample.todo 261 | Homepages SDK 262 | ============= 263 | Command: pack 264 | 265 | Begin: Resolve widget directory... 266 | .... 267 | Widget package file location: 268 | ~/code/Infor_HomepagesWidgetSDK/Samples/Builds/sample.todo-1.0.20201125-151201.zip 269 | ``` 270 | 271 | And there we go! A zip file that is ready to be uploaded to Homepages in your environment of choice. 272 | 273 | *Note: The process for uploading the widget to a cloud environment involves a few extra steps like packing it as a Tenant Widget. More on that in another post.* 274 | -------------------------------------------------------------------------------- /docs/blog/2020/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2020 3 | parent: Blog 4 | has_children: true 5 | nav_order: 2 6 | --- 7 | 8 | # 2020 9 | -------------------------------------------------------------------------------- /docs/blog/2021/2021-02-05-new-release.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: v3.3.0-rc.2 released 3 | parent: 2021 4 | grand_parent: Blog 5 | nav_order: 3 6 | --- 7 | 8 | # v3.3.0-rc.2 released 9 | 10 | by Johan Åslund on February 5, 2021 11 | {: .fs-3 .text-grey-dk-000 } 12 | 13 | Widget SDK v3.3.0-rc.2 has now been released. It's built from Homepages v12.0.46, which is the release for Infor OS 2021-03. Changes in this version include: 14 | 15 | * Added support for lower and upper pipe in URL templates. Example for helpUrl with variable Language needed in lowercase. 16 | * Added support in the homepages pack script to pack a standard widget as a tenant widget, using the --asTenant flag. 17 | * Updated to Angular 11.0.7. 18 | * Updated to IDS Enterprise 4.36.1. 19 | * Updated to IDS Enterprise NG 9.1.1. 20 | 21 | You'll find the release details and the downloadable zip [here](https://github.com/infor-cloud/homepages-widget-sdk/releases/tag/v3.3.0-rc.2) 22 | 23 | The new pack script update will help you deploy & test a widget in an Infor OS Cloud environment a lot easier than before, since it can be packed as a tenant widget without having to modify the actual source code. 24 | 25 | If you want to read more about new features & bug fixes included in these versions of the IDS Enterprise controls & components, check out their changelogs: 26 | * [IDS Enterprise](https://github.com/infor-design/enterprise/blob/master/docs/CHANGELOG.md#v4361) 27 | * [IDS Enterprise NG](https://github.com/infor-design/enterprise-ng/blob/master/docs/CHANGELOG.md#v911) 28 | -------------------------------------------------------------------------------- /docs/blog/2021/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2021 3 | parent: Blog 4 | has_children: true 5 | nav_order: 2 6 | --- 7 | 8 | # 2021 9 | -------------------------------------------------------------------------------- /docs/blog/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blog 3 | has_children: true 4 | nav_order: 4 5 | --- 6 | 7 | # Blog 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/getting-started.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting Started 3 | has_children: false 4 | nav_order: 2 5 | --- 6 | 7 | # Getting Started 8 | {: .no_toc } 9 | 10 | This page gives a brief overview to getting started with the Widget SDK. For detailed instructions, please refer to the [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf). 11 | 12 | 13 | ## Table of contents 14 | {: .no_toc .text-delta } 15 | 16 | 1. TOC 17 | {:toc} 18 | 19 | ## The Who and the What 20 | 21 | The Widget SDK is used to build widgets for [Infor Homepages](https://www.youtube.com/watch?v=PP7f6T442JY). The SDK is aimed at web developers who have knowledge about: 22 | * [JavaScript](https://www.javascript.com/) 23 | * [HTML](https://www.w3schools.com/html/) 24 | * [CSS](https://www.w3schools.com/css/default.asp) 25 | * [TypeScript](https://www.typescriptlang.org/) 26 | * [Angular](https://angular.io/) 27 | 28 | ## What is a widget? 29 | A widget can be defined as a small, single-purpose application that provides quick, at-a-glance information or quick access to simple interactive functions. Widgets are simpler and faster to access than full applications (apps) that may provide more functionality. 30 | 31 | ![Screenshot of a homepage with widgets](assets/images/homepages-screenshot2.png) 32 | 33 | Homepages may contain one or many pages and each page may contain one or many widgets. Widgets can be added to a page from the Widget Catalog. 34 | 35 | ### Tenant Widgets 36 | {: .no_toc } 37 | 38 | A tenant widget is a widget developed by a partner or customer of Infor. Tenant widgets can be uploaded and installed in an cloud environment via the Homepages Administration Tool. 39 | 40 | For instructions on how to install a Tenant Widget, please see [Support & FAQ](support-faq). 41 | 42 | ## Download the Widget SDK 43 | 44 | The latest Widget SDK deliverable can be found on the [Widget SDK GitHub page](https://github.com/infor-cloud/widget-sdk). 45 | 46 | ### What's Included 47 | {: .no_toc } 48 | 49 | The Widget SDK zip file includes documentation (Developer's Guide and a Framework API reference), source code, Widget samples project and a simple NodeJS server to run the samples on if not using the included Visual Studio solution. 50 | 51 | ### Dependencies 52 | {: .no_toc } 53 | 54 | To use all parts of the Widget SDK you will need [Node.js](https://nodejs.org/en/), a [TypeScript compiler](http://www.typescriptlang.org/) and an [Integrated development environment or a Text Editor](https://code.visualstudio.com/). 55 | 56 | ## Install Node.js dependencies 57 | 58 | If you want to use any of the following parts of the SDK you need to install the Node.js dependencies. If you don't plan to use any of these you can just skip this step. 59 | 60 | * Angular - Angular source code and typings matching the version used for Homepages. 61 | * Web server - A simple development web server. 62 | * ION API Proxy - A developmemt proxy for widgets that use the Infor ION API. 63 | * Homepages script - Minify and pack widget into a production zip. 64 | 65 | #### Install with npm 66 | {: .no_toc } 67 | 68 | Run the following command in the Samples directory to install the Node.js dependencies. 69 | ``` 70 | npm install 71 | ``` 72 | #### Install with Windows command file 73 | {: .no_toc } 74 | 75 | Run the `Install.cmd` command file in the Samples directory to install the Node.js dependencies. 76 | ``` 77 | Install.cmd 78 | ``` 79 | ## Widget sample code 80 | 81 | To get an overview of the widget sample code you can open it in your development environment. 82 | 83 | ### Visual Studio Code 84 | {: .no_toc } 85 | 86 | Start Visual Studio Code and use `File > Open Folder` and navigate to Samples/Widgets. 87 | 88 | ## Configure Web server 89 | 90 | The SDK includes a Node.js development web server that be used for viewing sample widgets and developing widgets. The web server is optional if you have another alternative such as the web server in Visual Studio. The web server will run on `http://localhost:8080` by default and serve files from the `./Widgets` directory. 91 | 92 | ### Start web server in Visual Studio Code 93 | {: .no_toc } 94 | 95 | Start the web server in Visual Studio Code by running the build task `Start Server` (CTRL+SHIFT+B). 96 | 97 | ### Start web server with Windows command file 98 | {: .no_toc } 99 | 100 | Use the `StartServer.cmd` command file to start the web server. Edit the command file to change the default port and path. 101 | ``` 102 | StartServer.cmd 103 | ``` 104 | 105 | ### Start web server with npm 106 | {: .no_toc } 107 | 108 | Use one of the following npm commands to start the web server. The port and path can be changed in the configuration section of the package.json file, see server_port and server_path. 109 | ``` 110 | npm start 111 | ``` 112 | ``` 113 | npm run server 114 | ``` 115 | 116 | ### Start web server with node 117 | {: .no_toc } 118 | 119 | Use one of the following node commands to start the web server. The port and path can be provided as parameters. If no parameters are specified the default port 8080 and the default path `./Widgets` will be used 120 | ``` 121 | node server 122 | ``` 123 | ``` 124 | node server 8080 "./Widgets" 125 | ``` 126 | 127 | ## View samples 128 | 129 | Once the web server is running you can view the default sample by navigating a browser to `http://localhost:8080/index.html`. 130 | 131 | ### View samples with Windows command file 132 | {: .no_toc } 133 | 134 | Use the `OpenSamples.cmd` command file to open the default sample in the default browser on Windows. 135 | ``` 136 | OpenSamples.cmd 137 | ``` 138 | 139 | ## Compile samples 140 | 141 | Compile all the TypeScript samples in Visual Studio Code by running the build task `Typescript Watch` (CTRL+SHIFT+B). The files are watched, and will be recompiled automatically when saved. Refresh your browser to see the changes. 142 | 143 | ## ION API Proxy 144 | 145 | When developing widget that use ION API you can use the included proxy. See the ION API samples in the Samples/Widgets directory for more information. You need to know the hostname and port of the ION API server to be able to configure the proxy. 146 | 147 | ### Start proxy with Windows command file 148 | {: .no_toc } 149 | 150 | Start the proxy using the `StartIonApiProxy.cmd` command file. Make sure to edit the command and provide correct values for the local port, remote host and port. 151 | ``` 152 | StartIonApiProxy.cmd 153 | ``` 154 | 155 | ### Start proxy with npm 156 | {: .no_toc } 157 | 158 | Use the following npm command to start the proxy. The local port, remote host and remote port can be changed in the configuration section of the package.json file, see proxy_local_port, proxy_remote_host and proxy_remote_port. 159 | ``` 160 | npm run proxy 161 | ``` 162 | 163 | ### Start proxy with node 164 | {: .no_toc } 165 | 166 | Use the following node command to start the proxy. The local port, remote host and remote port and should be provided as parameters. 167 | ``` 168 | node proxy 8083 "domain.server.com" 443 169 | ``` 170 | 171 | ## Homepages command script 172 | 173 | The homepages command script performs different commands. For the help documentation use: 174 | ``` 175 | node homepages help 176 | ``` 177 | ### Package 178 | {: .no_toc } 179 | 180 | Widgets have to be bundled (if consisting of multiple .ts files) and minified before delivery. The package command can be used to build, minify and package a widget or a list of widgets. 181 | ``` 182 | node homepages pack "infor.sample.helloworld" 183 | ``` 184 | 185 | ## Further reading 186 | 187 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) 188 | * [Best Practices](best-practices) 189 | * [Resources](resources) 190 | * [Support & FAQ](support-faq) 191 | 192 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Home 4 | nav_order: 1 5 | description: "Just the Docs is a responsive Jekyll theme with built-in search that is easily customizable and hosted on GitHub Pages." 6 | permalink: / 7 | --- 8 | 9 | # Widget SDK 10 | {: .fs-9 } 11 | 12 | The Widget SDK is used to develop widgets for Infor Homepages. 13 | {: .fs-6 .fw-300 } 14 | 15 | [Get started now](getting-started){: .bg-azure-06 .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/infor-cloud/homepages-widget-sdk){: .btn .fs-5 .mb-4 .mb-md-0 } 16 | 17 | --- 18 | 19 | ## About Widget SDK 20 | 21 | The Widget SDK is used to develop widgets for Infor Homepages. A widget is a small, single-purpose application that provides quick, at-a-glance information or quick access to simple interactive functions. 22 | 23 | ![Screenshot of a homepage with widgets](/assets/images/homepages-screenshot.png) 24 | 25 | The Widget SDK includes the Framework API, which lets you communicate with the Widget framework. The ION API support enables communication with other Infor applications. The SDK is aimed at web developers and includes multiple sample widgets to explore and learn from. 26 | 27 | ## Getting Started 28 | 29 | Head over to [Getting Started](getting-started) for instructions how to start developing widgets. 30 | 31 | --- 32 | 33 | ## About this project 34 | 35 | ### About Infor Homepages 36 | Infor Homepages is part of the cloud-based collaboration platform Infor OS. Infor Homepages provide role-based home pages with widgets containing information from multiple ERP systems in one place. Homepages are designed to give you insights, call exceptions to your attention, and provide direct links to the areas within applications where you do your daily work. 37 | 38 | #### Thank you to the contributors! 39 | 40 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /docs/resources.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Resources 3 | has_children: false 4 | nav_order: 5 5 | --- 6 | 7 | # Resources 8 | 9 | ## Web development 10 | 11 | ### Tutorials 12 | * [JavaScript](https://www.javascript.com/) 13 | * [HTML](https://www.w3schools.com/html/) 14 | * [CSS](https://www.w3schools.com/css/default.asp) 15 | * [TypeScript](https://www.typescriptlang.org/) 16 | * [jQuery](https://www.w3schools.com/jquery/) 17 | 18 | ### Editors 19 | * [Visual Studio Code (free)](https://code.visualstudio.com/) 20 | 21 | ### Angular 22 | * [Angular](https://angular.io/) 23 | * [Angular JS support](https://angular.io/guide/upgrade) 24 | * [AOT compiler](https://angular.io/guide/upgrade) 25 | * [AOT pitfalls](https://github.com/rangle/angular-2-aot-sandbox#aot-dos-and-donts) 26 | * [Template syntax](https://angular.io/guide/template-syntax) 27 | 28 | ## Getting Started 29 | 30 | ### Download the Widget SDK 31 | * [Widget SDK on GitHub](https://github.com/infor-cloud/homepages-widget-sdk/) 32 | 33 | ### Dependencies 34 | * [TypeScript](https://design.infor.com/) 35 | * [Angular](https://angular.io/) 36 | * [Node.js](http://nodejs.org/) 37 | 38 | ### Documentation 39 | * [Developer's Guide](https://github.com/infor-cloud/homepages-widget-sdk/blob/master/DevelopersGuide.pdf) 40 | * [Homepages User's Guide](https://docs.infor.com/mingle/12.0.x/en-us/minceolh/default.html?helpcontent=jho1449097143969.html) 41 | * [Homepages Admin Guide](https://docs.infor.com/mingle/12.0.x/en-us/minceolh/default.html?helpcontent=jho1449265710335.html) 42 | * [Infor OS documentation](https://docs.infor.com/inforos/12.0.x/en-us/inforoscebom/index.html) 43 | 44 | ### Videos 45 | * [Working with Homepages](https://www.youtube.com/watch?v=PP7f6T442JY) 46 | * [Working with Homepages Administration](https://www.youtube.com/watch?v=gQTiLc-oBNA) 47 | 48 | ## Widget Development 49 | 50 | ### UI 51 | * [Infor Design System (IDS)](https://design.infor.com/) 52 | * [IDS Enterprise Components](https://github.com/infor-design/enterprise) 53 | * [IDS Enterprise NG](https://github.com/infor-design/enterprise-ng) 54 | * [Widget Design Guidelines](https://design.infor.com/resources/mingle-homepage-widget-guidelines) 55 | * [Workspace](https://design.infor.com/guidelines/patterns/workspaces) 56 | 57 | ### ION API 58 | * [Youtube playlist for ION and ION API Gateway](https://www.youtube.com/watch?v=up5ZLczEQ4c&list=PL84oLmtdP0NPmO0bLcls3E3qTf9w05_r6) 59 | * [ION API Admin guide](https://docs.infor.com/ionapi/12.0.x/en-us/ionapiag/default.html) 60 | * [ION API Github](https://github.com/infor-cloud/ion-api-sdk/blob/master/README.md) 61 | 62 | ### Other 63 | * [Semantic versioning](https://semver.org/) 64 | 65 | ## Infor Go 66 | 67 | ### Download Infor Go 68 | * [Infor Go on Google Play](https://play.google.com/store/apps/details?id=com.infor.go) 69 | * [Infor Go on App Store](https://apps.apple.com/bs/app/infor-go/id1446388736) 70 | 71 | 72 | ### Documentation 73 | * [Infor Go User Guide (Android)](https://www.inforxtreme.com/esknowbase/root/DLPublic/62076/inforgouga.pdf) 74 | * [Infor Go User Guide (iOS)](https://www.inforxtreme.com/esknowbase/root/DLPublic/62075/inforgougios.pdf) 75 | 76 | 77 | -------------------------------------------------------------------------------- /docs/support-faq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Support & FAQ 3 | has_children: false 4 | nav_order: 6 5 | --- 6 | 7 | # Support & FAQ 8 | 9 | ## Contacting Infor Support 10 | Lorem ipsum... 11 | 12 | ## Deploy your Widget 13 | 14 | ### Multitenant environment 15 | To deploy a Tenant Widget in Homepages, please follow these steps: 16 | 1. Log a Support Incident to Infor Operating service / Infor Ming.le to enable installation of unsigned widgets. Include the full URL of the tenant(s) you wish to deploy your widget in. Please enable all your tenants with a single request. See [KB-article](https://support.infor.com/espublic/EN/AnswerLinkDotNet/SoHo/Solutions/SoHoViewSolution.aspx?SolutionID=2133985&kb_accessed_from=KBViews) 17 | 2. Enable the Tenant Widgets Feature in the Settings area in the Homepages Administration tool to see a new section called Tenant Widgets under the Widgets section. 18 | 3. Import your widget in the Tenant Widget area. 19 | 20 | ### On-prem environment 21 | To deploy a widget in Homepages please follow these steps: 22 | 1. Open the Standard Widget area under the Widgets section in the Homepages Administration tool. 23 | 2. Import your widget in the Standard Widget Area. 24 | 25 | -------------------------------------------------------------------------------- /lime-zipv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/infor-cloud/widget-sdk/3b298441fc11357ae28a1fe7da8224089581500f/lime-zipv.zip --------------------------------------------------------------------------------