From d9a4e99adb32bd6954ab27bbd11dc32547e2a079 Mon Sep 17 00:00:00 2001 From: Yan Zhyharau Date: Wed, 7 Feb 2024 14:20:15 +0100 Subject: [PATCH] Pull request with the WZ cards small changes in yaml files --- .../sample-cards/wz-clock-card/package.json | 18 + .../wz-clock-card/sap-it-wz-cards-clock.zip | Bin 0 -> 20333 bytes .../wz-clock-card/src/Component.js | 23 ++ .../wz-clock-card/src/control/Frame.js | 350 ++++++++++++++++++ .../src/controller/Card.controller.js | 149 ++++++++ .../wz-clock-card/src/dt/configuration.js | 192 ++++++++++ .../wz-clock-card/src/manifest.json | 95 +++++ .../src/test-resources/manual/index.html | 73 ++++ .../wz-clock-card/src/view/Card.view.xml | 8 + .../sample-cards/wz-clock-card/ui5.yaml | 16 + .../wz-countdown-card/package.json | 19 + .../sap-it-wz-cards-countdown.zip | Bin 0 -> 18991 bytes .../wz-countdown-card/src/Component.js | 23 ++ .../wz-countdown-card/src/control/Frame.js | 350 ++++++++++++++++++ .../src/controller/Card.controller.js | 38 ++ .../wz-countdown-card/src/dt/Configuration.js | 199 ++++++++++ .../wz-countdown-card/src/manifest.json | 123 ++++++ .../src/test-resources/manual/index.html | 73 ++++ .../wz-countdown-card/src/view/Card.view.xml | 6 + .../sample-cards/wz-countdown-card/ui5.yaml | 16 + .../wz-flip-card-card/package.json | 18 + .../sap-it-wz-cards-flip_card.zip | Bin 0 -> 21365 bytes .../wz-flip-card-card/src/Component.js | 23 ++ .../wz-flip-card-card/src/control/Frame.js | 350 ++++++++++++++++++ .../src/controller/Card.controller.js | 213 +++++++++++ .../wz-flip-card-card/src/dt/configuration.js | 195 ++++++++++ .../wz-flip-card-card/src/manifest.json | 126 +++++++ .../src/test-resources/manual/index.html | 73 ++++ .../wz-flip-card-card/src/view/Card.view.xml | 6 + .../sample-cards/wz-flip-card-card/ui5.yaml | 16 + .../wz-stackoverflow-card/package.json | 19 + .../sap-it-wz-cards-stackoverflow.zip | Bin 0 -> 10649 bytes .../src/dt/Configuration.js | 150 ++++++++ .../src/ext/DataFormatter.js | 129 +++++++ .../wz-stackoverflow-card/src/manifest.json | 113 ++++++ .../src/test-resources/manual/index.html | 73 ++++ .../wz-stackoverflow-card/ui5.yaml | 16 + .../sample-cards/wz-twitter-card/package.json | 18 + .../sap-it-wz-cards-twitter.zip | Bin 0 -> 21398 bytes .../wz-twitter-card/src/Component.js | 23 ++ .../wz-twitter-card/src/control/Frame.js | 350 ++++++++++++++++++ .../src/controller/Card.controller.js | 127 +++++++ .../wz-twitter-card/src/dt/configuration.js | 192 ++++++++++ .../wz-twitter-card/src/manifest.json | 108 ++++++ .../src/test-resources/manual/index.html | 73 ++++ .../wz-twitter-card/src/view/Card.view.xml | 6 + .../sample-cards/wz-twitter-card/ui5.yaml | 16 + 47 files changed, 4204 insertions(+) create mode 100644 advanced/wizard/sample-cards/wz-clock-card/package.json create mode 100644 advanced/wizard/sample-cards/wz-clock-card/sap-it-wz-cards-clock.zip create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/Component.js create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/control/Frame.js create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/controller/Card.controller.js create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/dt/configuration.js create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/manifest.json create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/test-resources/manual/index.html create mode 100644 advanced/wizard/sample-cards/wz-clock-card/src/view/Card.view.xml create mode 100644 advanced/wizard/sample-cards/wz-clock-card/ui5.yaml create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/package.json create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/sap-it-wz-cards-countdown.zip create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/Component.js create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/control/Frame.js create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/controller/Card.controller.js create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/dt/Configuration.js create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/manifest.json create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/test-resources/manual/index.html create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/src/view/Card.view.xml create mode 100644 advanced/wizard/sample-cards/wz-countdown-card/ui5.yaml create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/package.json create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/sap-it-wz-cards-flip_card.zip create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/Component.js create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/control/Frame.js create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/controller/Card.controller.js create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/dt/configuration.js create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/manifest.json create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/test-resources/manual/index.html create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/src/view/Card.view.xml create mode 100644 advanced/wizard/sample-cards/wz-flip-card-card/ui5.yaml create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/package.json create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/sap-it-wz-cards-stackoverflow.zip create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/src/dt/Configuration.js create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/src/ext/DataFormatter.js create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/src/manifest.json create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/src/test-resources/manual/index.html create mode 100644 advanced/wizard/sample-cards/wz-stackoverflow-card/ui5.yaml create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/package.json create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/sap-it-wz-cards-twitter.zip create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/Component.js create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/control/Frame.js create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/controller/Card.controller.js create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/dt/configuration.js create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/manifest.json create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/test-resources/manual/index.html create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/src/view/Card.view.xml create mode 100644 advanced/wizard/sample-cards/wz-twitter-card/ui5.yaml diff --git a/advanced/wizard/sample-cards/wz-clock-card/package.json b/advanced/wizard/sample-cards/wz-clock-card/package.json new file mode 100644 index 0000000..d83920f --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/package.json @@ -0,0 +1,18 @@ +{ + "name": "sap-it-wz-cards-clock", + "version": "1.28.0", + "description": "", + "private": true, + "scripts": { + "start": "ui5 serve --o /test-resources/manual/index.html", + "eslint": "eslint src", + "build": "rimraf dist && ui5 build && zip sap-it-wz-cards-clock.zip -r ./dist" + }, + "devDependencies": { + "@openui5/sap.ui.core": "1.77.2", + "@openui5/sap.ui.integration": "1.77.2", + "@ui5/cli": "2.2.3", + "eslint": "5.16.0", + "rimraf": "2.6.2" + } +} diff --git a/advanced/wizard/sample-cards/wz-clock-card/sap-it-wz-cards-clock.zip b/advanced/wizard/sample-cards/wz-clock-card/sap-it-wz-cards-clock.zip new file mode 100644 index 0000000000000000000000000000000000000000..21cde9bddfe5e2d241a4636f9f313df36cef0519 GIT binary patch literal 20333 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

@)5iG z&aJ;>Z-u1&vDXe3U7@<@sd<1mBa<96_CYjO;ARjA5MX%g2x37`&S8a|oP#mu3Ni{Y zh>v=14#X(nm_EajMthi1h#`ICQ*?+k9(Csw%%vdX=Kv4u0lO4w9~C|`vHP9_#rOAt z{sNl`-dKarG(-TPZmU5K07X%RX~32m+9n&~Oh;W6k8Jt@NgSrb2QKm1fIT$$Q9?se z9%=*fB2j#XA_4_dFITdzNZJ?Sbc0a8H6bV^L@2k&S(z4K)^R zjvk-6*dvw;C1NM*LCu9uq~bFV5v8cpsL1ZTj$$6#q$+WSqfTTZ8@@>&J#0zHotP72 z5Th9wKqd8FL#WZOf zMY<)DD3*8_qk98o$_k(H*i#=bO6q$KGalCU1_wOW)8!BW4?3O>b;1cbjp&&`T?{i4 qb@~bDVj_%39Uee7{=OYH -1) { + return; + } + this._elements.push(oDomElement); + this._sizes.push(""); + this._handlers.push(fnHandler); + this.check(VisibleRectObserver._instance._sizes.length - 1); + }; + + //deregisters a dom element from observation + VisibleRectObserver.prototype.deregister = function (oDomElement) { + var iIndex = this._elements.indexOf(oDomElement); + if (iIndex === -1) { + return; + } + this._elements.splice(iIndex, 1); + this._sizes.splice(iIndex, 1); + this._handlers.splice(iIndex, 1); + }; + + + var Frame = Control.extend("sap.it.wz.cards.twitter.control.Frame", { + metadata: { + properties: { + src: { + type: "string" + }, + preview: { + type: "object", + defaultValue: null + } + } + }, + renderer: function (oRm, oControl) { + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.addStyle("box-sizing", "border-box"); + oRm.writeStyles(); + oRm.writeElementData(oControl); + oRm.openEnd(); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-before"); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-content"); + oRm.writeStyles(); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-after"); + oRm.openEnd(); + oRm.close("div"); + + oRm.close("div"); + + } + }); + + Frame.prototype.setSrc = function (vValue) { + if (vValue === this.getSrc()) { + return this; + } + //avoid re-rendering + this.setProperty("src", vValue, true); + + this._sRealSource = vValue; + + if (this._oFrameDomRef) { + this._oFrameDomRef.src = this._sRealSource; + } + return this; + }; + + Frame.prototype.init = function () { + this._oVisibleRectObserver = new VisibleRectObserver(); + }; + + Frame.prototype.onBeforeRendering = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + this._hideFrame(); + }; + + Frame.prototype.onAfterRendering = function () { + if (this._sRealSource && this._sRealSource.length < 5) { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + this._sRealSource = ""; + return this; + } + if (false && this._sRealSource.indexOf("http:") === 0) { + this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEHTTPERROR")); + this._sRealSource = ""; + return this; + } + if (this._sRealSource && this._sRealSource.indexOf("https://") !== 0) { + //this._sRealSource = "https://" + this._sRealSource; + } + if (this._sRealSource) { + this._iErrorTimer = window.setTimeout(this._handleError.bind(this), 1000 * 20); + if (!this._oFrameDomRef) { + this._initFrame(); + } + } else { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + } + }; + + Frame.prototype.exit = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + return this; + }; + + Frame.prototype.destroy = function () { + if (this._oFrameDomRef) { + this._oFrameDomRef.parentNode.removeChild(this._oFrameDomRef); + this._oFrameDomRef.src = ""; + } + if (this._oFrameBlockerDomRef) { + this._oFrameBlockerDomRef.parentNode.removeChild(this._oFrameBlockerDomRef); + this._oFrameBlockerDomRef.src = ""; + } + return Control.prototype.destroy.apply(this, arguments); + }; + + Frame.prototype._hideFrame = function () { + //hide the frame until it is loaded + if (!this._oFrameDomRef) { + return; + } + this._oFrameDomRef.style.top = "-10000px"; + this._oFrameDomRef.style.left = "50px"; + }; + + Frame.prototype._initFrame = function () { + var oFrame = document.getElementById("id", this.getId() + "-frame"); + if (oFrame) { + this._oFrameDomRef = oFrame; + return; + } + var iTab = this.getPreview() ? -1 : 0; + this._oFrameDomRef = this._createFrame(this.getId() + "-frame", this._sRealSource, iTab); + oStaticArea.insertBefore(this._oFrameDomRef, oStaticArea.firstChild); + if (this.getPreview()) { + this._oFrameBlockerDomRef = this._createFrame(this.getId() + "-frameblocker", "", iTab); + oStaticArea.insertBefore(this._oFrameBlockerDomRef, oStaticArea.firstChild); + } + }; + + Frame.prototype._createFrame = function (sId, sSource, iTab) { + var oLocalRM = Core.getRenderManager(); + oLocalRM.openStart("iframe"); + oLocalRM.addStyle("position", "absolute"); + oLocalRM.addStyle("border", "none"); + oLocalRM.addStyle("top", "-10000px"); + oLocalRM.addStyle("left", "20px"); + oLocalRM.addStyle("margin", "1px"); + oLocalRM.writeStyles(); + oLocalRM.writeAttribute("tabIndex", "" + iTab); + oLocalRM.writeAttributeEscaped("id", sId); + oLocalRM.writeAttributeEscaped("scrolling", "auto"); + if (sSource) { + oLocalRM.writeAttributeEscaped("src", sSource); + } + oLocalRM.openEnd(); + oLocalRM.close("iframe"); + var div = document.createElement("div"); + oLocalRM.flush(div); + var oFrame = div.firstChild; + oFrame.addEventListener("load", this._handleLoad.bind(this)); + return oFrame; + }; + + Frame.prototype._handleLoad = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + this._oVisibleRectObserver.register(this.getDomRef(), this._syncFramePosition.bind(this)); + }; + + Frame.prototype._handleError = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + //this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEERROR15SEC")); + }; + + Frame.prototype._applyFramePosition = function (oFrame, oElement, oRect) { + if (!oFrame) { + return; + } + if (oRect.height === 0 || oRect.width === 0) { + this._hideFrame(); + return; + } + var iZIndex = getZIndex(oElement); + oFrame.style.zIndex = iZIndex === "auto" ? 2 : iZIndex; + oFrame.style.left = (oRect.left + getScrollLeft()) + "px"; + oFrame.style.top = (oRect.top + getScrollTop()) + "px"; + + if (this.getPreview()) { + var oPreviewInfo = this.getPreview().getTransformContentInfo(); + oFrame.style.width = ((oRect.width - 2) / oPreviewInfo.transformFactor) + "px"; + oFrame.style.height = ((oRect.height - 2) / oPreviewInfo.transformFactor) + "px" + oFrame.style.transform = oPreviewInfo.transformStyle; + oFrame.style.transformOrigin = oPreviewInfo.transformOriginStyle; + oFrame.style.zIndex = oPreviewInfo.zIndex; + } else { + oFrame.style.width = (oRect.width - 2) + "px"; + oFrame.style.height = (oRect.height - 2) + "px"; + } + }; + + Frame.prototype._syncFramePosition = function (oElement, oRect) { + this._applyFramePosition(this._oFrameDomRef, oElement, oRect); + this._applyFramePosition(this._oFrameBlockerDomRef, oElement, oRect); + }; + + Frame.prototype._showMessage = function (sType, sText) { + if (this._oMessage) { + this._oMessage.destroy(); + } + this._oMessage = new MessageStrip(this.getId() + "-message", { + text: sText, + type: sType, + showIcon: true + }); + var oDomRef = this.getDomRef(); + if (oDomRef) { + this._oMessage.placeAt(oDomRef); + } + }; + function focusAfter() { + this.getDomRef("after").focus(); + window.removeEventListener("focus", focusAfter); + } + Frame.prototype.onsaptabnext = function (oEvent) { + if (oEvent.target === this.getDomRef("before")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + + } + } + }; + + Frame.prototype.onsaptabprevious = function (oEvent) { + if (oEvent.target === this.getDomRef("after")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + } + } + }; + return Frame; + +}); diff --git a/advanced/wizard/sample-cards/wz-clock-card/src/controller/Card.controller.js b/advanced/wizard/sample-cards/wz-clock-card/src/controller/Card.controller.js new file mode 100644 index 0000000..d04ecc9 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/src/controller/Card.controller.js @@ -0,0 +1,149 @@ +/* + * ! ${copyright} + */ + +sap.ui.define([ + "sap/ui/core/mvc/Controller" +], function (Controller) { + "use strict"; + + return Controller.extend("sap.it.wz.cards.clock.controller.Card", { + onInit: function () { + if (!this.getOwnerComponent().card) { + return; + } + let oCard = this.getOwnerComponent().card; + let mParameters = oCard.getCombinedParameters(); + + let backgroundColor = mParameters.backgroundColor + let clockColor = mParameters.clockColor + let fontSize = mParameters.fontSize + let offset = mParameters.offset + let showSeconds = mParameters.showSeconds + let digit24Mode = mParameters.digit24Mode + + let content = this._getIframeDigitalClock(backgroundColor, clockColor, fontSize, offset, digit24Mode,showSeconds); + + + var src = URL.createObjectURL(new Blob([content], { type: "text/html" })); + var oFrame = this.byId("frame"); + oFrame.setSrc(src); + + if (oCard.editor) { + oFrame.setPreview(oCard.editor.preview); + } + + var iPixelHeight = Math.max(mParameters.height, oCard.getCardContent().getDomRef().offsetHeight); + this.getView().setHeight(iPixelHeight + "px"); + }, + _getIframeDigitalClock: function (backgroundColor, clockColor, fontSize, offset, digit24Mode, showSeconds) { + return ` + + + + + +
+

+
+ + + `; + } + + }); +}); + + +function calculate12time(h, m, s) { + var session = "AM"; + if(h>24){ + h= h-24 + } + if(h<0){ + session = "PM" + h+=12 + } + if(h == 12){ + session = "PM" + } + if(h == 0){ + h = 12; + } + if(h > 12){ + h = h - 12; + if(h==12){ + session=="AM" + } + else{ + session = "PM" + } + } + + + h = (h < 10) ? "0" + h : h; + m = (m < 10) ? "0" + m : m; + s = (s < 10) ? "0" + s : s; + + return s == 0 ? h + ":" + m + " " + session : h + ":" + m + ":" + s + " " + session +} + + +function calculate24time(h, m, s) { + if (h >= 24) { + h = h - 24 + } + if (h < 0) { + h = h + 24 + } + h = (h < 10) ? "0" + h : h + m = (m < 10) ? "0" + m : m + s = (s < 10) ? "0" + s : s + return s == 0 ? h + ":" + m : h + ":" + m + ":" + s +} + diff --git a/advanced/wizard/sample-cards/wz-clock-card/src/dt/configuration.js b/advanced/wizard/sample-cards/wz-clock-card/src/dt/configuration.js new file mode 100644 index 0000000..e1094ff --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/src/dt/configuration.js @@ -0,0 +1,192 @@ +sap.ui.define(["sap/ui/integration/Designtime" +], function (Designtime) { + "use strict"; + + var Configuration = Designtime.extend("sap.workzone.cpkg.card.sample.Configuration"); + Configuration.prototype.create = function () { + return { + form: { + items: { + "headerGroup": { + "label": "Header options", + "type": "group", + "hint": "In case of troubles please visit SAP Work Zone Help Center" + }, + "headerVisibility": { + "manifestpath": "/sap.card/header/visible", + "type": "boolean", + "label": "Visible Header", + "defaultValue" : true + }, + "title": { + "manifestpath": "/sap.card/header/title", + "type": "string", + "defaultValue": "Clock", + "label": "Title", + "visible": "{items>headerVisibility/value}" + }, + "subTitle": { + "manifestpath": "/sap.card/header/subTitle", + "type": "string", + "defaultValue": "", + "label": "Subtitle", + "visible": "{items>headerVisibility/value}" + }, + "headericon": { + "manifestpath": "/sap.card/header/icon/src", + "type": "string", + "label": "Card Icon", + "allowDynamicValues": false, + "allowSettings": false, + "visualization": { + "type": "IconSelect", + "settings": { + "value": "{currentSettings>value}", + "editable": "{currentSettings>editable}" + } + }, + "visible": "{items>headerVisibility/value}" + }, + "bodyGroup": { + "label": "Body options", + "type": "group" + }, + "offset": { + "manifestpath": "/sap.card/configuration/parameters/offset/value", + "values": { + "data": { + "json": [ + { "key": "-11", "text": "-11" }, + { "key": "-10", "text": "-10" }, + { "key": "-9", "text": "-9" }, + { "key": "-8", "text": "-8" }, + { "key": "-7", "text": "-7" }, + { "key": "-6", "text": "-6" }, + { "key": "-5", "text": "-5" }, + { "key": "-4", "text": "-4" }, + { "key": "-3", "text": "-3" }, + { "key": "-2", "text": "-2" }, + { "key": "-1", "text": "-1" }, + { "key": "0", "text": "0" }, + { "key": "1", "text": "+1" }, + { "key": "2", "text": "+2" }, + { "key": "3", "text": "+3" }, + { "key": "4", "text": "+4" }, + { "key": "5", "text": "+5" }, + { "key": "6", "text": "+6" }, + { "key": "7", "text": "+7" }, + { "key": "8", "text": "+8" }, + { "key": "9", "text": "+9" }, + { "key": "10", "text": "+10" }, + { "key": "11", "text": "+11" }, + { "key": "12", "text": "+12" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "1", + "label": "Select UTC zone", + "type": "string" + }, + "digit24Mode": { + "manifestpath": "/sap.card/configuration/parameters/digit24Mode/value", + "type": "boolean", + "label": "24h mode", + "defaultValue" : false + }, + "showSeconds": { + "manifestpath": "/sap.card/configuration/parameters/showSeconds/value", + "type": "boolean", + "label": "Show seconds", + "defaultValue" : false + }, + "backgroundColor": { + "manifestpath": "/sap.card/configuration/parameters/backgroundColor/value", + "values": { + "data": { + "json": [ + { "key": "#FFFFFF", "text": "White" }, + { "key": "#000000", "text": "Black" }, + { "key": "#1D2D3E", "text": "Dark" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "Dark", + "label": "Select background color", + "type": "string" + }, + "clockColor": { + "manifestpath": "/sap.card/configuration/parameters/clockColor/value", + "values": { + "data": { + "json": [ + { "key": "#FFFFFF", "text": "White" }, + { "key": "#000000", "text": "Black" }, + { "key": "#1D2D3E", "text": "Dark" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "White", + "label": "Select clock color", + "type": "string" + }, + "fontSize": { + "manifestpath": "/sap.card/configuration/parameters/fontSize/value", + "type": "integer", + "defaultValue": 45, + "label": "Font size in pixels", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 5, + "max": 100, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + }, + "height": { + "manifestpath": "/sap.card/configuration/parameters/height/value", + "type": "integer", + "defaultValue": 100, + "label": "Height in pixels", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 30, + "max": 600, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + } + } + }, + preview: { + modes: "Live" + } + }; + }; + return Configuration; +}); + + diff --git a/advanced/wizard/sample-cards/wz-clock-card/src/manifest.json b/advanced/wizard/sample-cards/wz-clock-card/src/manifest.json new file mode 100644 index 0000000..001ae4a --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/src/manifest.json @@ -0,0 +1,95 @@ +{ + "sap.app": { + "id": "sap.it.wz.cards.clock", + "type": "card", + "title": "Clock", + "subTitle": "Clock", + "applicationVersion": { + "version": "0.2.4" + }, + "shortTitle": "Clock", + "info": "Clock", + "description": "Select time zone to display", + "tags": { + "keywords": [ + "Clock", + "SAP IT" + ] + } + }, + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "sap-icon://away" + } + }, + "sap.ui5": { + "dependencies": { + "minUI5Version": "1.77.2", + "libs": { + "sap.ui.core": {}, + "sap.m": {} + } + }, + "rootView": { + "viewName": "sap.it.wz.cards.clock.view.Card", + "type": "XML", + "async": true, + "id": "app" + }, + "models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "sap.it.wz.cards.clock.i18n.i18n" + } + } + } + }, + "sap.platform.mobilecards": { + "_version": "1.0.0", + "compatible": false + }, + "sap.card": { + "type": "Component", + "designtime": "dt/configuration", + "header": { + "title": "Clock", + "icon": { + "src": "sap-icon://away" + }, + "visible" : true + }, + "configuration": { + "parameters": { + "showCardHeader": { + "value": true + }, + "offset" : { + "value" : "1" + }, + "digitMode" : { + "value" : true + }, + "digit24Mode" : { + "value" : false + }, + "showSeconds" : { + "value" : false + }, + "backgroundColor" : { + "value" : "#1D2D3E" + }, + "clockColor" : { + "value" : "#FFFFFF" + }, + "fontSize":{ + "value" : 45 + }, + "height": { + "value": 100 + } + } + } + } +} \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-clock-card/src/test-resources/manual/index.html b/advanced/wizard/sample-cards/wz-clock-card/src/test-resources/manual/index.html new file mode 100644 index 0000000..72c56ae --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/src/test-resources/manual/index.html @@ -0,0 +1,73 @@ + + + + + + + sap.it.wz.cards.twitter + + + + + + + +
+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-clock-card/src/view/Card.view.xml b/advanced/wizard/sample-cards/wz-clock-card/src/view/Card.view.xml new file mode 100644 index 0000000..d2c54af --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/src/view/Card.view.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/advanced/wizard/sample-cards/wz-clock-card/ui5.yaml b/advanced/wizard/sample-cards/wz-clock-card/ui5.yaml new file mode 100644 index 0000000..2ca4b5b --- /dev/null +++ b/advanced/wizard/sample-cards/wz-clock-card/ui5.yaml @@ -0,0 +1,16 @@ +specVersion: "2.0" +metadata: + name: sap-it-wz-cards-clock + copyright: |- + SAP Work Zone + * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company. +type: application +resources: + configuration: + paths: + webapp: src + propertiesFileSourceEncoding: UTF-8 +builder: + resources: + excludes: + - "test-resources/**" \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-countdown-card/package.json b/advanced/wizard/sample-cards/wz-countdown-card/package.json new file mode 100644 index 0000000..d9ed19b --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/package.json @@ -0,0 +1,19 @@ +{ + "name": "sap-it-wz-cards-countdown", + "version": "1.28.0", + "description": "", + "private": true, + "scripts": { + "start": "ui5 serve --o /test-resources/manual/index.html", + "eslint": "eslint src", + "build": "rimraf dist && ui5 build && zip sap-it-wz-cards-countdown.zip -r ./dist" + }, + "dependencies": {}, + "devDependencies": { + "rimraf": "2.6.2", + "@openui5/sap.ui.core": "1.77.2", + "@openui5/sap.ui.integration": "1.77.2", + "@ui5/cli": "2.2.3", + "eslint": "5.16.0" + } +} diff --git a/advanced/wizard/sample-cards/wz-countdown-card/sap-it-wz-cards-countdown.zip b/advanced/wizard/sample-cards/wz-countdown-card/sap-it-wz-cards-countdown.zip new file mode 100644 index 0000000000000000000000000000000000000000..eaba2fddec74e7ae66a116328985ea590e201c59 GIT binary patch literal 18991 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 NXdnOpPJT@a{vVqjy`%sD literal 0 HcmV?d00001 diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/Component.js b/advanced/wizard/sample-cards/wz-countdown-card/src/Component.js new file mode 100644 index 0000000..0e9f20a --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/Component.js @@ -0,0 +1,23 @@ +/* + * ! ${copyright} + */ +sap.ui.define(["sap/ui/core/UIComponent"], function (UIComponent) { + "use strict"; + var ChatbotComponent = UIComponent.extend("sap.it.wz.cards.countdown.component.Component", { + onCardReady: function (oCard) { + // Holds the card for use inside the controller + this.card = oCard; + + // Can get all parameters with method getCombinedParameters + oCard.getCombinedParameters(); + + // Get any section of the card manifest with method getManifestEntry + oCard.getManifestEntry("/sap.card"); + + // When in context of a Host, like in Work Zone you can use the following methods + // oCard.getHostInstance(); + // oCard.resolveDestination("myDestination"); // check more in the destinations sample + } + }); + return ChatbotComponent; +}); diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/control/Frame.js b/advanced/wizard/sample-cards/wz-countdown-card/src/control/Frame.js new file mode 100644 index 0000000..3faeda1 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/control/Frame.js @@ -0,0 +1,350 @@ +/* + * ! ${copyright} + */ + +sap.ui.define([ + "sap/ui/core/Control", + "sap/ui/core/Core", + "sap/m/MessageStrip" +], function ( + Control, + Core, + MessageStrip +) { + "use strict"; + + var oStaticArea = Core.getStaticAreaRef(); + + function getScrollTop() { + var B = document.body; + var D = document.documentElement; + D = (D.clientHeight) ? D : B; + return D.scrollTop; + } + + function getScrollLeft() { + var B = document.body; + var D = document.documentElement; + D = (D.clientWidth) ? D : B; + return D.scrollLeft; + } + + function getZIndex(e) { + var z = window.getComputedStyle(e).getPropertyValue('z-index'); + if (isNaN(z)) { + if (e.parentNode && e.parentNode.nodeType === 1) { + return getZIndex(e.parentNode); + } else { + return "auto"; + } + } else { + return z; + } + } + + //Registers an animation frame timer to check whether the position of oDomRef changed + //and calls the handler if it did + var VisibleRectObserver = function (oDomRef, fnHandler) { + if (!VisibleRectObserver._instance) { + VisibleRectObserver._instance = this; + this._elements = []; + this._sizes = []; + this._handlers = []; + this._frame = window.requestAnimationFrame(this.checkAll.bind(this)); + } + + if (oDomRef && fnHandler) { + VisibleRectObserver._instance.register(oDomRef, fnHandler); + } + return VisibleRectObserver._instance; + }; + + //loops over the elements and checks for size and position changes + VisibleRectObserver.prototype.checkAll = function () { + for (var i = 0; i < this._elements.length; i++) { + this.check(i); + } + this._frame = window.requestAnimationFrame(this.checkAll.bind(this)); + }; + + //checks size and position changes for an element and calls the handler + VisibleRectObserver.prototype.check = function (i) { + var el = this._elements[i]; + var size = el.getBoundingClientRect(), + s = JSON.stringify(size); + if (this._sizes[i] !== s) { + this._sizes[i] = s; + this._handlers[i](el, size); + } + }; + + //registers a dom element and handler to be observed for size and position changes + VisibleRectObserver.prototype.register = function (oDomElement, fnHandler) { + if (this._elements.indexOf(oDomElement) > -1) { + return; + } + this._elements.push(oDomElement); + this._sizes.push(""); + this._handlers.push(fnHandler); + this.check(VisibleRectObserver._instance._sizes.length - 1); + }; + + //deregisters a dom element from observation + VisibleRectObserver.prototype.deregister = function (oDomElement) { + var iIndex = this._elements.indexOf(oDomElement); + if (iIndex === -1) { + return; + } + this._elements.splice(iIndex, 1); + this._sizes.splice(iIndex, 1); + this._handlers.splice(iIndex, 1); + }; + + + var Frame = Control.extend("sap.it.wz.cards.flip_card.control.Frame", { + metadata: { + properties: { + src: { + type: "string" + }, + preview: { + type: "object", + defaultValue: null + } + } + }, + renderer: function (oRm, oControl) { + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.addStyle("box-sizing", "border-box"); + oRm.writeStyles(); + oRm.writeElementData(oControl); + oRm.openEnd(); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-before"); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-content"); + oRm.writeStyles(); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-after"); + oRm.openEnd(); + oRm.close("div"); + + oRm.close("div"); + + } + }); + + Frame.prototype.setSrc = function (vValue) { + if (vValue === this.getSrc()) { + return this; + } + //avoid re-rendering + this.setProperty("src", vValue, true); + + this._sRealSource = vValue; + + if (this._oFrameDomRef) { + this._oFrameDomRef.src = this._sRealSource; + } + return this; + }; + + Frame.prototype.init = function () { + this._oVisibleRectObserver = new VisibleRectObserver(); + }; + + Frame.prototype.onBeforeRendering = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + this._hideFrame(); + }; + + Frame.prototype.onAfterRendering = function () { + if (this._sRealSource && this._sRealSource.length < 5) { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + this._sRealSource = ""; + return this; + } + if (false && this._sRealSource.indexOf("http:") === 0) { + this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEHTTPERROR")); + this._sRealSource = ""; + return this; + } + if (this._sRealSource && this._sRealSource.indexOf("https://") !== 0) { + //this._sRealSource = "https://" + this._sRealSource; + } + if (this._sRealSource) { + this._iErrorTimer = window.setTimeout(this._handleError.bind(this), 1000 * 20); + if (!this._oFrameDomRef) { + this._initFrame(); + } + } else { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + } + }; + + Frame.prototype.exit = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + return this; + }; + + Frame.prototype.destroy = function () { + if (this._oFrameDomRef) { + this._oFrameDomRef.parentNode.removeChild(this._oFrameDomRef); + this._oFrameDomRef.src = ""; + } + if (this._oFrameBlockerDomRef) { + this._oFrameBlockerDomRef.parentNode.removeChild(this._oFrameBlockerDomRef); + this._oFrameBlockerDomRef.src = ""; + } + return Control.prototype.destroy.apply(this, arguments); + }; + + Frame.prototype._hideFrame = function () { + //hide the frame until it is loaded + if (!this._oFrameDomRef) { + return; + } + this._oFrameDomRef.style.top = "-10000px"; + this._oFrameDomRef.style.left = "50px"; + }; + + Frame.prototype._initFrame = function () { + var oFrame = document.getElementById("id", this.getId() + "-frame"); + if (oFrame) { + this._oFrameDomRef = oFrame; + return; + } + var iTab = this.getPreview() ? -1 : 0; + this._oFrameDomRef = this._createFrame(this.getId() + "-frame", this._sRealSource, iTab); + oStaticArea.insertBefore(this._oFrameDomRef, oStaticArea.firstChild); + if (this.getPreview()) { + this._oFrameBlockerDomRef = this._createFrame(this.getId() + "-frameblocker", "", iTab); + oStaticArea.insertBefore(this._oFrameBlockerDomRef, oStaticArea.firstChild); + } + }; + + Frame.prototype._createFrame = function (sId, sSource, iTab) { + var oLocalRM = Core.getRenderManager(); + oLocalRM.openStart("iframe"); + oLocalRM.addStyle("position", "absolute"); + oLocalRM.addStyle("border", "none"); + oLocalRM.addStyle("top", "-10000px"); + oLocalRM.addStyle("left", "20px"); + oLocalRM.addStyle("margin", "1px"); + oLocalRM.writeStyles(); + oLocalRM.writeAttribute("tabIndex", "" + iTab); + oLocalRM.writeAttributeEscaped("id", sId); + oLocalRM.writeAttributeEscaped("scrolling", "auto"); + if (sSource) { + oLocalRM.writeAttributeEscaped("src", sSource); + } + oLocalRM.openEnd(); + oLocalRM.close("iframe"); + var div = document.createElement("div"); + oLocalRM.flush(div); + var oFrame = div.firstChild; + oFrame.addEventListener("load", this._handleLoad.bind(this)); + return oFrame; + }; + + Frame.prototype._handleLoad = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + this._oVisibleRectObserver.register(this.getDomRef(), this._syncFramePosition.bind(this)); + }; + + Frame.prototype._handleError = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + //this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEERROR15SEC")); + }; + + Frame.prototype._applyFramePosition = function (oFrame, oElement, oRect) { + if (!oFrame) { + return; + } + if (oRect.height === 0 || oRect.width === 0) { + this._hideFrame(); + return; + } + var iZIndex = getZIndex(oElement); + oFrame.style.zIndex = iZIndex === "auto" ? 2 : iZIndex; + oFrame.style.left = (oRect.left + getScrollLeft()) + "px"; + oFrame.style.top = (oRect.top + getScrollTop()) + "px"; + + if (this.getPreview()) { + var oPreviewInfo = this.getPreview().getTransformContentInfo(); + oFrame.style.width = ((oRect.width - 2) / oPreviewInfo.transformFactor) + "px"; + oFrame.style.height = ((oRect.height - 2) / oPreviewInfo.transformFactor) + "px" + oFrame.style.transform = oPreviewInfo.transformStyle; + oFrame.style.transformOrigin = oPreviewInfo.transformOriginStyle; + oFrame.style.zIndex = oPreviewInfo.zIndex; + } else { + oFrame.style.width = (oRect.width - 2) + "px"; + oFrame.style.height = (oRect.height - 2) + "px"; + } + }; + + Frame.prototype._syncFramePosition = function (oElement, oRect) { + this._applyFramePosition(this._oFrameDomRef, oElement, oRect); + this._applyFramePosition(this._oFrameBlockerDomRef, oElement, oRect); + }; + + Frame.prototype._showMessage = function (sType, sText) { + if (this._oMessage) { + this._oMessage.destroy(); + } + this._oMessage = new MessageStrip(this.getId() + "-message", { + text: sText, + type: sType, + showIcon: true + }); + var oDomRef = this.getDomRef(); + if (oDomRef) { + this._oMessage.placeAt(oDomRef); + } + }; + function focusAfter() { + this.getDomRef("after").focus(); + window.removeEventListener("focus", focusAfter); + } + Frame.prototype.onsaptabnext = function (oEvent) { + if (oEvent.target === this.getDomRef("before")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + + } + } + }; + + Frame.prototype.onsaptabprevious = function (oEvent) { + if (oEvent.target === this.getDomRef("after")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + } + } + }; + return Frame; + +}); diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/controller/Card.controller.js b/advanced/wizard/sample-cards/wz-countdown-card/src/controller/Card.controller.js new file mode 100644 index 0000000..627506e --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/controller/Card.controller.js @@ -0,0 +1,38 @@ +sap.ui.define(['sap/ui/core/mvc/Controller'], + function (Controller) { + "use strict"; + + let CardController = Controller.extend("sap.it.wz.cards.countdown.controller.Card", { + onInit: function () { + if (!this.getOwnerComponent().card) { + return; + } + let oCard = this.getOwnerComponent().card; + let mParams = oCard.getCombinedParameters(); + + let oFrame = this.byId("frame"); + oFrame.setSrc(this._getSrcUrl(mParams).href); + + let iPixelHeight = Math.max(mParams.height, + oCard.getCardContent().getDomRef().offsetHeight); + this.getView().setHeight(iPixelHeight + "px"); + + if (oCard.editor) { + oFrame.setPreview(oCard.editor.preview); + } + }, + _getSrcUrl: function (params) { + window.prms = params; + let url = new URL(params.widgetSrc); + for (let param in params) { + if (!params.hasOwnProperty(param) || param == "widgetSrc") { + continue; + } + url.searchParams.append(param, params[param]); + } + return url; + } + }); + + return CardController; + }); diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/dt/Configuration.js b/advanced/wizard/sample-cards/wz-countdown-card/src/dt/Configuration.js new file mode 100644 index 0000000..378e82d --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/dt/Configuration.js @@ -0,0 +1,199 @@ +sap.ui.define(["sap/ui/integration/Designtime" +], function (Designtime) { + "use strict"; + + var Configuration = Designtime.extend("sap.workzone.cpkg.card.sample.Configuration"); + Configuration.prototype.create = function () { + return { + form: { + items: { + "headerGroup": { + "label": "Header options", + "type": "group", + "hint": "In case of troubles please visit SAP Work Zone Help Center" + }, + "headerVisibility": { + "manifestpath": "/sap.card/header/visible", + "type": "boolean", + "label": "Visible Header", + "defaultValue" : true + }, + "title": { + "manifestpath": "/sap.card/header/title", + "type": "string", + "defaultValue": "Countdown", + "label": "Title", + "visible": "{items>headerVisibility/value}" + }, + "subTitle": { + "manifestpath": "/sap.card/header/subTitle", + "type": "string", + "defaultValue": "", + "label": "Subtitle", + "visible": "{items>headerVisibility/value}" + }, + "headericon": { + "manifestpath": "/sap.card/header/icon/src", + "type": "string", + "label": "Card Icon", + "allowDynamicValues": false, + "allowSettings": false, + "visualization": { + "type": "IconSelect", + "settings": { + "value": "{currentSettings>value}", + "editable": "{currentSettings>editable}" + } + }, + "visible": "{items>headerVisibility/value}" + }, + "bodyGroup": { + "label": "Body options", + "type": "group" + }, + "widgetSrc": { + "manifestpath": "/sap.card/configuration/parameters/widgetSrc/value", + "type": "string", + "defaultValue": "https://opensocialgadgets-a426ead53.dispatcher.hana.ondemand.com/cards/countdown/web/index.html", + "label": "Widget Source URL", + "visible" : false + }, + "targetDate": { + "manifestpath": "/sap.card/configuration/parameters/targetDate/value", + "type": "datetime", + "defaultValue": new Date(), + "label": "Final Countdown Date" + }, + "seconds": { + "manifestpath": "/sap.card/configuration/parameters/seconds/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Seconds" + }, + "minutes": { + "manifestpath": "/sap.card/configuration/parameters/minutes/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Minutes" + }, + "hours": { + "manifestpath": "/sap.card/configuration/parameters/hours/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Hours" + }, + "days": { + "manifestpath": "/sap.card/configuration/parameters/days/value", + "type": "boolean", + "defaultValue": true, + "label": "Show Days" + }, + "weeks": { + "manifestpath": "/sap.card/configuration/parameters/weeks/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Weeks" + }, + "months": { + "manifestpath": "/sap.card/configuration/parameters/months/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Months" + }, + "years": { + "manifestpath": "/sap.card/configuration/parameters/years/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Years" + }, + "showCircles": { + "manifestpath": "/sap.card/configuration/parameters/showCircles/value", + "type": "boolean", + "defaultValue": true, + "label": "Display Circles" + }, + "filledStyle": { + "manifestpath": "/sap.card/configuration/parameters/filledStyle/value", + "type": "boolean", + "defaultValue": true, + "label": "Filled Style", + "visible": "{items>showCircles/value}" + }, + "color": { + "manifestpath": "/sap.card/configuration/parameters/color/value", + "values": { + "data": { + "json": [ + { "text": "Black", "key": "#000000" }, + { "text": "Grey", "key": "#40484F" }, + { "text": "Red", "key": "#FF0000" }, + { "text": "Green", "key": "#00FF00" }, + { "text": "Blue", "key": "#0000FF" }, + { "text": "Yellow", "key": "#FFFF00" }, + { "text": "Cyan", "key": "#00FFFF" }, + { "text": "Magenta", "key": "#FF00FF" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "", + "label": "Circles Color", + "type": "string" + }, + "circlesHeight": { + "manifestpath": "/sap.card/configuration/parameters/circlesHeight/value", + "type": "integer", + "defaultValue": 120, + "label": "Circles Height in Pixels" + }, + "url": { + "manifestpath": "/sap.card/configuration/parameters/url/value", + "type": "string", + "defaultValue": "", + "label": "Read More URL" + }, + "startDate": { + "manifestpath": "/sap.card/configuration/parameters/startDate/value", + "type": "datetime", + "defaultValue": new Date(), + "visible": false + }, + "endMessage": { + "manifestpath": "/sap.card/configuration/parameters/endMessage/value", + "type": "string", + "defaultValue": "", + "label": "Countdown End Message" + }, + "height": { + "manifestpath": "/sap.card/configuration/parameters/height/value", + "type": "integer", + "defaultValue": 570, + "label": "Height in pixels", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 30, + "max": 600, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + } + } + }, + preview: { + modes: "Live" + } + }; + }; + return Configuration; +}); + + diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/manifest.json b/advanced/wizard/sample-cards/wz-countdown-card/src/manifest.json new file mode 100644 index 0000000..797eff2 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/manifest.json @@ -0,0 +1,123 @@ +{ + "sap.app": { + "id": "sap.it.wz.cards.countdown", + "type": "card", + "title": "Countdown", + "subTitle": "Countdown", + "applicationVersion": { + "version": "1.1.5" + }, + "shortTitle": "Countdown", + "info": "Countdown", + "description": "Displays a countdown to a chosen date with the option of an end message.", + "tags": { + "keywords": [ + "Countdown", + "SAP IT" + ] + } + }, + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "sap-icon://fob-watch" + } + }, + "sap.ui5": { + "dependencies": { + "minUI5Version": "1.77.2", + "libs": { + "sap.ui.core": {}, + "sap.m": {} + } + }, + "rootView": { + "viewName": "sap.it.wz.cards.countdown.view.Card", + "type": "XML", + "async": true, + "id": "app" + }, + "models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "sap.it.wz.cards.countdown.i18n.i18n" + } + } + } + }, + "sap.platform.mobilecards": { + "_version": "1.0.0", + "compatible": false + }, + "sap.card": { + "designtime": "./dt/Configuration", + "type": "Component", + "header": { + "title": "Countdown", + "subTitle": "", + "icon": { + "src": "sap-icon://lateness" + }, + "visible" : true + }, + "configuration": { + "parameters": { + "showCardHeader": { + "value": true + }, + "widgetSrc": { + "value": "https://opensocialgadgets-a426ead53.dispatcher.hana.ondemand.com/cards/countdown/web/index.html" + }, + "targetDate": { + "value": null + }, + "seconds": { + "value": false + }, + "minutes": { + "value": false + }, + "hours": { + "value": false + }, + "days": { + "value": true + }, + "weeks": { + "value": false + }, + "months": { + "value": false + }, + "years": { + "value": false + }, + "showCircles": { + "value": true + }, + "filledStyle": { + "value": false + }, + "color": { + "value": "#40484F" + }, + "circlesHeight": { + "value": 120 + }, + "url": { + "value": "" + }, + "startDate": { + "value": null + }, + "endMessage": { + "value": "" + }, + "height": { + "value": 144 + } + } + } + } +} \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/test-resources/manual/index.html b/advanced/wizard/sample-cards/wz-countdown-card/src/test-resources/manual/index.html new file mode 100644 index 0000000..25b8f9c --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/test-resources/manual/index.html @@ -0,0 +1,73 @@ + + + + + + + sap.it.wz.cards.countdown + + + + + + + +
+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-countdown-card/src/view/Card.view.xml b/advanced/wizard/sample-cards/wz-countdown-card/src/view/Card.view.xml new file mode 100644 index 0000000..775a5d8 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/src/view/Card.view.xml @@ -0,0 +1,6 @@ + + + diff --git a/advanced/wizard/sample-cards/wz-countdown-card/ui5.yaml b/advanced/wizard/sample-cards/wz-countdown-card/ui5.yaml new file mode 100644 index 0000000..e3863f7 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-countdown-card/ui5.yaml @@ -0,0 +1,16 @@ +specVersion: "2.0" +metadata: + name: sap-it-wz-cards-countdown + copyright: |- + SAP Work Zone + * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company. +type: application +resources: + configuration: + paths: + webapp: src + propertiesFileSourceEncoding: UTF-8 +builder: + resources: + excludes: + - "test-resources/**" \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/package.json b/advanced/wizard/sample-cards/wz-flip-card-card/package.json new file mode 100644 index 0000000..2d65d92 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/package.json @@ -0,0 +1,18 @@ +{ + "name": "sap-it-wz-cards-flip_card", + "version": "1.28.0", + "description": "", + "private": true, + "scripts": { + "start": "ui5 serve --o /test-resources/manual/index.html", + "eslint": "eslint src", + "build": "rimraf dist && ui5 build && zip sap-it-wz-cards-flip_card.zip -r ./dist" + }, + "devDependencies": { + "@openui5/sap.ui.core": "1.77.2", + "@openui5/sap.ui.integration": "1.77.2", + "@ui5/cli": "2.2.3", + "eslint": "5.16.0", + "rimraf": "2.6.2" + } +} diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/sap-it-wz-cards-flip_card.zip b/advanced/wizard/sample-cards/wz-flip-card-card/sap-it-wz-cards-flip_card.zip new file mode 100644 index 0000000000000000000000000000000000000000..5e0b07b79bc1520805bc6416927214a888f0c772 GIT binary patch literal 21365 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 -1) { + return; + } + this._elements.push(oDomElement); + this._sizes.push(""); + this._handlers.push(fnHandler); + this.check(VisibleRectObserver._instance._sizes.length - 1); + }; + + //deregisters a dom element from observation + VisibleRectObserver.prototype.deregister = function (oDomElement) { + var iIndex = this._elements.indexOf(oDomElement); + if (iIndex === -1) { + return; + } + this._elements.splice(iIndex, 1); + this._sizes.splice(iIndex, 1); + this._handlers.splice(iIndex, 1); + }; + + + var Frame = Control.extend("sap.it.wz.cards.flip_card.control.Frame", { + metadata: { + properties: { + src: { + type: "string" + }, + preview: { + type: "object", + defaultValue: null + } + } + }, + renderer: function (oRm, oControl) { + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.addStyle("box-sizing", "border-box"); + oRm.writeStyles(); + oRm.writeElementData(oControl); + oRm.openEnd(); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-before"); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-content"); + oRm.writeStyles(); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-after"); + oRm.openEnd(); + oRm.close("div"); + + oRm.close("div"); + + } + }); + + Frame.prototype.setSrc = function (vValue) { + if (vValue === this.getSrc()) { + return this; + } + //avoid re-rendering + this.setProperty("src", vValue, true); + + this._sRealSource = vValue; + + if (this._oFrameDomRef) { + this._oFrameDomRef.src = this._sRealSource; + } + return this; + }; + + Frame.prototype.init = function () { + this._oVisibleRectObserver = new VisibleRectObserver(); + }; + + Frame.prototype.onBeforeRendering = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + this._hideFrame(); + }; + + Frame.prototype.onAfterRendering = function () { + if (this._sRealSource && this._sRealSource.length < 5) { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + this._sRealSource = ""; + return this; + } + if (false && this._sRealSource.indexOf("http:") === 0) { + this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEHTTPERROR")); + this._sRealSource = ""; + return this; + } + if (this._sRealSource && this._sRealSource.indexOf("https://") !== 0) { + //this._sRealSource = "https://" + this._sRealSource; + } + if (this._sRealSource) { + this._iErrorTimer = window.setTimeout(this._handleError.bind(this), 1000 * 20); + if (!this._oFrameDomRef) { + this._initFrame(); + } + } else { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + } + }; + + Frame.prototype.exit = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + return this; + }; + + Frame.prototype.destroy = function () { + if (this._oFrameDomRef) { + this._oFrameDomRef.parentNode.removeChild(this._oFrameDomRef); + this._oFrameDomRef.src = ""; + } + if (this._oFrameBlockerDomRef) { + this._oFrameBlockerDomRef.parentNode.removeChild(this._oFrameBlockerDomRef); + this._oFrameBlockerDomRef.src = ""; + } + return Control.prototype.destroy.apply(this, arguments); + }; + + Frame.prototype._hideFrame = function () { + //hide the frame until it is loaded + if (!this._oFrameDomRef) { + return; + } + this._oFrameDomRef.style.top = "-10000px"; + this._oFrameDomRef.style.left = "50px"; + }; + + Frame.prototype._initFrame = function () { + var oFrame = document.getElementById("id", this.getId() + "-frame"); + if (oFrame) { + this._oFrameDomRef = oFrame; + return; + } + var iTab = this.getPreview() ? -1 : 0; + this._oFrameDomRef = this._createFrame(this.getId() + "-frame", this._sRealSource, iTab); + oStaticArea.insertBefore(this._oFrameDomRef, oStaticArea.firstChild); + if (this.getPreview()) { + this._oFrameBlockerDomRef = this._createFrame(this.getId() + "-frameblocker", "", iTab); + oStaticArea.insertBefore(this._oFrameBlockerDomRef, oStaticArea.firstChild); + } + }; + + Frame.prototype._createFrame = function (sId, sSource, iTab) { + var oLocalRM = Core.getRenderManager(); + oLocalRM.openStart("iframe"); + oLocalRM.addStyle("position", "absolute"); + oLocalRM.addStyle("border", "none"); + oLocalRM.addStyle("top", "-10000px"); + oLocalRM.addStyle("left", "20px"); + oLocalRM.addStyle("margin", "1px"); + oLocalRM.writeStyles(); + oLocalRM.writeAttribute("tabIndex", "" + iTab); + oLocalRM.writeAttributeEscaped("id", sId); + oLocalRM.writeAttributeEscaped("scrolling", "auto"); + if (sSource) { + oLocalRM.writeAttributeEscaped("src", sSource); + } + oLocalRM.openEnd(); + oLocalRM.close("iframe"); + var div = document.createElement("div"); + oLocalRM.flush(div); + var oFrame = div.firstChild; + oFrame.addEventListener("load", this._handleLoad.bind(this)); + return oFrame; + }; + + Frame.prototype._handleLoad = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + this._oVisibleRectObserver.register(this.getDomRef(), this._syncFramePosition.bind(this)); + }; + + Frame.prototype._handleError = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + //this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEERROR15SEC")); + }; + + Frame.prototype._applyFramePosition = function (oFrame, oElement, oRect) { + if (!oFrame) { + return; + } + if (oRect.height === 0 || oRect.width === 0) { + this._hideFrame(); + return; + } + var iZIndex = getZIndex(oElement); + oFrame.style.zIndex = iZIndex === "auto" ? 2 : iZIndex; + oFrame.style.left = (oRect.left + getScrollLeft()) + "px"; + oFrame.style.top = (oRect.top + getScrollTop()) + "px"; + + if (this.getPreview()) { + var oPreviewInfo = this.getPreview().getTransformContentInfo(); + oFrame.style.width = ((oRect.width - 2) / oPreviewInfo.transformFactor) + "px"; + oFrame.style.height = ((oRect.height - 2) / oPreviewInfo.transformFactor) + "px" + oFrame.style.transform = oPreviewInfo.transformStyle; + oFrame.style.transformOrigin = oPreviewInfo.transformOriginStyle; + oFrame.style.zIndex = oPreviewInfo.zIndex; + } else { + oFrame.style.width = (oRect.width - 2) + "px"; + oFrame.style.height = (oRect.height - 2) + "px"; + } + }; + + Frame.prototype._syncFramePosition = function (oElement, oRect) { + this._applyFramePosition(this._oFrameDomRef, oElement, oRect); + this._applyFramePosition(this._oFrameBlockerDomRef, oElement, oRect); + }; + + Frame.prototype._showMessage = function (sType, sText) { + if (this._oMessage) { + this._oMessage.destroy(); + } + this._oMessage = new MessageStrip(this.getId() + "-message", { + text: sText, + type: sType, + showIcon: true + }); + var oDomRef = this.getDomRef(); + if (oDomRef) { + this._oMessage.placeAt(oDomRef); + } + }; + function focusAfter() { + this.getDomRef("after").focus(); + window.removeEventListener("focus", focusAfter); + } + Frame.prototype.onsaptabnext = function (oEvent) { + if (oEvent.target === this.getDomRef("before")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + + } + } + }; + + Frame.prototype.onsaptabprevious = function (oEvent) { + if (oEvent.target === this.getDomRef("after")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + } + } + }; + return Frame; + +}); diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/src/controller/Card.controller.js b/advanced/wizard/sample-cards/wz-flip-card-card/src/controller/Card.controller.js new file mode 100644 index 0000000..4594319 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/src/controller/Card.controller.js @@ -0,0 +1,213 @@ +sap.ui.define(["sap/ui/core/mvc/Controller"], function (Controller) { + "use strict"; + + return Controller.extend("sap.it.wz.cards.flip_card.controller.Card", { + onInit: function () { + if (!this.getOwnerComponent().card) { + return; + } + let oCard = this.getOwnerComponent().card; + let mParameters = oCard.getCombinedParameters(); + + + let htmlContent = this._getWidgetHtml(mParameters); + let oFrame = this._createIframe(htmlContent); + + if (oCard.editor) { + oFrame.setPreview(oCard.editor.preview); + } + + this.getView().setHeight(mParameters.height + 12 + "px"); + }, + _createIframe: function (content) { + let minimizedContent = content.replaceAll(/\n\s*/g, ''); + let blob = new Blob([minimizedContent], { type: "text/html" }); + let oFrame = this.byId("frame"); + oFrame.setSrc(URL.createObjectURL(blob)); + return oFrame; + }, + _getWidgetHtml: function (params) { + let innerHtml = `
+
+
+

${params.frontHeader}

+
+
+

${params.frontDescription}

+
+
+

${params.frontCaption}

+
+
+
+
+

${params.backHeader}

+
+
+

${params.backDescription}

+
+
+

${params.backCaption}

+
+
+
`; + + if (params.url && params.url.length > 0) { + innerHtml = `${innerHtml}`; + } + + return ` + + + + + +
+
${innerHtml}
+
+ + `; + }, + _getWidgetStyle: function (params) { + function hasText(paramName) { + return params[paramName].length > 0; + } + function getStyleParam(param) { + return (param && param != "" ? param : null); + } + + let frontHeaderHeight = hasText("frontHeader") ? 20 : 0; + let frontCaptionHeight = hasText("frontCaption") ? 20 : 0; + let frontDescriptionHeight = 90 - frontHeaderHeight - frontCaptionHeight; + let backHeaderHeight = hasText("backHeader") ? 20 : 0; + let backCaptionHeight = hasText("backCaption") ? 20 : 0; + let backDescriptionHeight = 90 - backHeaderHeight - backCaptionHeight; + + let frontColor = getStyleParam(params.frontColor); + let frontImage = getStyleParam(params.frontImage); + let frontTextShadow = getStyleParam(params.frontTextShadow); + let backColor = getStyleParam(params.backColor); + let backImage = getStyleParam(params.backImage); + let backTextShadow = getStyleParam(params.backTextShadow); + + return ` + html, body { + height: 100%; + width: 100%; + margin: 0; + overflow: auto; + font-family: Arial, Helvetica, sans-serif; + } + .settings-body { + background-color: #FFF; + } + .flip-card { + background-color: transparent; + width: 200px; + height: 200px; + padding: 5px 0; + perspective: 2500px; + -webkit-perspective: 2500px; + } + .flip-card-inner { + position: relative; + width: 100%; + height: 100%; + text-align: center; + transition: transform 0.8s; + transform-style: preserve-3d; + } + .flip-card:hover .flip-card-inner { + transform: rotateY(180deg); + } + .flip-card-front, + .flip-card-back { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + } + .flip-card-front { + background-color: white; + color: black; + } + .flip-card-back { + background-color: dodgerblue; + color: white; + transform: rotateY(180deg); + } + .section { + display: flex; + margin: auto; + text-align: center; + overflow: hidden; + } + .header-section, + .caption-section { + height: 20%; + } + .description-section { + height: 50%; + padding-top: 5%; + padding-bottom: 5%; + } + #flip_card p { + margin: auto; + padding: 0 5%; + } + #body { + display: flex; + justify-content: center; + overflow: hidden; + } + .flip-card { + width: ${params.height}px; + height: ${params.height}px; + } + .flip-card-front { + ${frontColor ? `background-color: ${frontColor};` : ""} + ${frontImage ? `background-image: url("${frontImage}");` : ""} + ${frontTextShadow ? `text-shadow: ${frontTextShadow};` : ""} + color: ${params.frontFontColor}; + font-size: ${params.frontFontSize}px; + } + .flip-card-back { + ${backColor ? `background-color: ${backColor};` : ""} + ${backImage ? `background-image: url("${backImage}");` : ""} + ${backTextShadow ? `text-shadow: ${backTextShadow};` : ""} + color: ${params.backFontColor}; + font-size: ${params.backFontSize}px; + } + .flip-card-front .header-section{ + height: ${frontHeaderHeight}%; + font-size: 1.5em; + } + .flip-card-front .description-section { + height: ${frontDescriptionHeight}%; + } + .flip-card-front .caption-section { + height: ${frontCaptionHeight}%; + } + .flip-card-back .header-section{ + height: ${backHeaderHeight}%; + } + .flip-card-back .description-section { + height: ${backDescriptionHeight}%; + } + .flip-card-back .caption-section { + height: ${backCaptionHeight}%; + } + .header-section{ + font-size: 1.5em; + } + .caption-section{ + font-size: 1.2em; + } + `; + }, + }); +}); diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/src/dt/configuration.js b/advanced/wizard/sample-cards/wz-flip-card-card/src/dt/configuration.js new file mode 100644 index 0000000..def9a30 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/src/dt/configuration.js @@ -0,0 +1,195 @@ +sap.ui.define(["sap/ui/integration/Designtime" +], function (Designtime) { + "use strict"; + + var Configuration = Designtime.extend("sap.workzone.cpkg.card.sample.Configuration"); + Configuration.prototype.create = function () { + return { + form: { + items: { + "headerGroup": { + "label": "Header options", + "type": "group", + "hint": "In case of troubles please visit SAP Work Zone Help Center" + }, + "headerVisibility": { + "manifestpath": "/sap.card/header/visible", + "type": "boolean", + "label": "Visible Header", + "defaultValue" : true + }, + "title": { + "manifestpath": "/sap.card/header/title", + "type": "string", + "defaultValue": "Flip Card", + "label": "Title", + "visible": "{items>headerVisibility/value}" + }, + "subTitle": { + "manifestpath": "/sap.card/header/subTitle", + "type": "string", + "defaultValue": "", + "label": "Subtitle", + "visible": "{items>headerVisibility/value}" + }, + "headericon": { + "manifestpath": "/sap.card/header/icon/src", + "type": "string", + "label": "Card Icon", + "allowDynamicValues": false, + "allowSettings": false, + "visualization": { + "type": "IconSelect", + "settings": { + "value": "{currentSettings>value}", + "editable": "{currentSettings>editable}" + } + }, + "visible": "{items>headerVisibility/value}" + }, + "bodyGroup": { + "label": "Body options", + "type": "group" + }, + "url": { + "manifestpath": "/sap.card/configuration/parameters/url/value", + "type": "string", + "defaultValue": "", + "label": "Navigation URL" + }, + "height": { + "manifestpath": "/sap.card/configuration/parameters/height/value", + "type": "integer", + "defaultValue": 570, + "label": "Height in pixels", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 30, + "max": 600, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + }, + "group1": { + "label": "Front Side Settings", + "type": "group" + }, + "frontHeader": { + "manifestpath": "/sap.card/configuration/parameters/frontHeader/value", + "type": "string", + "defaultValue": "", + "label": "Header Text" + }, + "frontDescription": { + "manifestpath": "/sap.card/configuration/parameters/frontDescription/value", + "type": "string", + "defaultValue": "", + "label": "Description Text" + }, + "frontCaption": { + "manifestpath": "/sap.card/configuration/parameters/frontCaption/value", + "type": "string", + "defaultValue": "", + "label": "Caption Text" + }, + "frontImage": { + "manifestpath": "/sap.card/configuration/parameters/frontImage/value", + "type": "string", + "defaultValue": "", + "label": "Background Image Link" + }, + "frontColor": { + "manifestpath": "/sap.card/configuration/parameters/frontColor/value", + "type": "string", + "defaultValue": "#EEEEEE", + "label": "Background Color" + }, + "frontFontSize": { + "manifestpath": "/sap.card/configuration/parameters/frontFontSize/value", + "type": "integer", + "defaultValue": 16, + "label": "Font Size in pixel" + }, + "frontFontColor": { + "manifestpath": "/sap.card/configuration/parameters/frontFontColor/value", + "type": "string", + "defaultValue": "#000000", + "label": "Font Color" + }, + "frontTextShadow": { + "manifestpath": "/sap.card/configuration/parameters/frontTextShadow/value", + "type": "string", + "defaultValue": "", + "label": "Text Shadow CSS", + "placeholder": "e.g. grey 1px 1px 0px" + }, + "group2": { + "label": "Back Side Settings", + "type": "group" + }, + "backHeader": { + "manifestpath": "/sap.card/configuration/parameters/backHeader/value", + "type": "string", + "defaultValue": "", + "label": "Header Text" + }, + "backDescription": { + "manifestpath": "/sap.card/configuration/parameters/backDescription/value", + "type": "string", + "defaultValue": "", + "label": "Description Text" + }, + "backCaption": { + "manifestpath": "/sap.card/configuration/parameters/backCaption/value", + "type": "string", + "defaultValue": "", + "label": "Caption Text" + }, + "backImage": { + "manifestpath": "/sap.card/configuration/parameters/backImage/value", + "type": "string", + "defaultValue": "", + "label": "Background Image Link" + }, + "backColor": { + "manifestpath": "/sap.card/configuration/parameters/backColor/value", + "type": "string", + "defaultValue": "#EEEEEE", + "label": "Background Color" + }, + "backFontSize": { + "manifestpath": "/sap.card/configuration/parameters/backFontSize/value", + "type": "integer", + "defaultValue": 16, + "label": "Font Size in pixel" + }, + "backFontColor": { + "manifestpath": "/sap.card/configuration/parameters/backFontColor/value", + "type": "string", + "defaultValue": "#000000", + "label": "Font Color" + }, + "backTextShadow": { + "manifestpath": "/sap.card/configuration/parameters/backTextShadow/value", + "type": "string", + "defaultValue": "", + "label": "Text Shadow CSS", + "placeholder": "e.g. grey 1px 1px 0px" + } + } + }, + preview: { + modes: "Live" + } + }; + }; + return Configuration; +}); + + diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/src/manifest.json b/advanced/wizard/sample-cards/wz-flip-card-card/src/manifest.json new file mode 100644 index 0000000..6d2b63d --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/src/manifest.json @@ -0,0 +1,126 @@ +{ + "sap.app": { + "id": "sap.it.wz.cards.flip_card", + "type": "card", + "title": "Flip Card", + "subTitle": "Flip Card", + "applicationVersion": { + "version": "1.2.4" + }, + "shortTitle": "Flip Card", + "info": "Flip Card", + "description": "Enrich your workspace look and feel with flip card animations.", + "tags": { + "keywords": [ + "Flip Card", + "SAP IT" + ] + } + }, + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "sap-icon://duplicate" + } + }, + "sap.ui5": { + "dependencies": { + "minUI5Version": "1.77.2", + "libs": { + "sap.ui.core": {}, + "sap.m": {} + } + }, + "rootView": { + "viewName": "sap.it.wz.cards.flip_card.view.Card", + "type": "XML", + "async": true, + "id": "app" + }, + "models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "sap.it.wz.cards.flip_card.i18n.i18n" + } + } + } + }, + "sap.platform.mobilecards": { + "_version": "1.0.0", + "compatible": false + }, + "sap.card": { + "type": "Component", + "designtime": "dt/configuration", + "header": { + "title": "Flip Card", + "subTitle": "by @SAP", + "icon": { + "src": "sap-icon://share" + }, + "visible": true + }, + "configuration": { + "parameters": { + "showCardHeader": { + "value": true + }, + "url": { + "value": "" + }, + "height": { + "value": 200 + }, + "frontHeader": { + "value": "" + }, + "frontDescription": { + "value": "" + }, + "frontCaption": { + "value": "" + }, + "frontImage": { + "value": "" + }, + "frontColor": { + "value": "#EEEEEE" + }, + "frontFontSize": { + "value": 16 + }, + "frontFontColor": { + "value": "#000000" + }, + "frontTextShadow": { + "value": "" + }, + "backHeader": { + "value": "" + }, + "backDescription": { + "value": "" + }, + "backCaption": { + "value": "" + }, + "backImage": { + "value": "" + }, + "backColor": { + "value": "#EEEEEE" + }, + "backFontSize": { + "value": 16 + }, + "backFontColor": { + "value": "#000000" + }, + "backTextShadow": { + "value": "" + } + } + } + } +} \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/src/test-resources/manual/index.html b/advanced/wizard/sample-cards/wz-flip-card-card/src/test-resources/manual/index.html new file mode 100644 index 0000000..cbe83fd --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/src/test-resources/manual/index.html @@ -0,0 +1,73 @@ + + + + + + + sap.it.wz.cards.flip_card + + + + + + + +
+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/src/view/Card.view.xml b/advanced/wizard/sample-cards/wz-flip-card-card/src/view/Card.view.xml new file mode 100644 index 0000000..9ba860d --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/src/view/Card.view.xml @@ -0,0 +1,6 @@ + + + diff --git a/advanced/wizard/sample-cards/wz-flip-card-card/ui5.yaml b/advanced/wizard/sample-cards/wz-flip-card-card/ui5.yaml new file mode 100644 index 0000000..623d7f8 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-flip-card-card/ui5.yaml @@ -0,0 +1,16 @@ +specVersion: "2.0" +metadata: + name: sap-it-wz-cards-flip_card + copyright: |- + SAP Work Zone + * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company. +type: application +resources: + configuration: + paths: + webapp: src + propertiesFileSourceEncoding: UTF-8 +builder: + resources: + excludes: + - "test-resources/**" \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/package.json b/advanced/wizard/sample-cards/wz-stackoverflow-card/package.json new file mode 100644 index 0000000..d6ceeb4 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/package.json @@ -0,0 +1,19 @@ +{ + "name": "sap-it-wz-cards-stackoverflow", + "version": "1.28.0", + "description": "", + "private": true, + "scripts": { + "start": "ui5 serve --o /test-resources/manual/index.html", + "eslint": "eslint src", + "build": "rimraf dist && ui5 build && zip sap-it-wz-cards-stackoverflow.zip -r ./dist" + }, + "dependencies": {}, + "devDependencies": { + "rimraf": "2.6.2", + "@openui5/sap.ui.core": "1.77.2", + "@openui5/sap.ui.integration": "1.77.2", + "@ui5/cli": "2.2.3", + "eslint": "5.16.0" + } +} diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/sap-it-wz-cards-stackoverflow.zip b/advanced/wizard/sample-cards/wz-stackoverflow-card/sap-it-wz-cards-stackoverflow.zip new file mode 100644 index 0000000000000000000000000000000000000000..db8f7cf751cf5a9c6d9d41be7b4a988d2e98804b GIT binary patch literal 10649 zcmdsdbyQs0@^uq5I0Sch4;tKQ+}+)2+$CtRKx4rrxJv>ACj^4KYaqA=4Guq&%)Ck7 zo0<3K&+ogvZp&JIch#wTPn})+l%fnI6g=SDQSY~>{{72uZ_oe&fT@+U3$vQ)V*sRd zLWSwK)71k300DId0RTW@Jp57d;qq^vaNjR~Lv{2__b~u)ivs}Q{(iZrgB{4h-pt;G z5#(fM>tJNcWbOQSkhPk2&hwn;cRqKR3{Kce*r{*hPu}K})mOx)J4cVZtjRdwS@5Ag zR(b&pgb<=-3%kE{gHV30Z%o<1qrk>l9og0T1rqB0Fr^?5!7I;nHpx-4q zQDbx7^#G-at|dEpNmBB`RnIOE8txY~Ka5@mQ|IU51-DmIq$hX=6Wh0SypcKRw(W4< zXni^+O?0UHrt<(UleH^e_aq8@zT`x|tC6Q_SeL{%X3CN~HY&RDMj>^*Ix_I4A-3M# zu$CCJK0IdUdASyt&0mgsjM%a*Rs^AiCP0g=WVR|d&$KbYlLL(nfxbekpo0$ln&IUK zx_pzQ(6zwl<9X!p3$I^<#fcavzu?&!q!c7?5aIU2;_)N zK=OV9@m%@lWylct{=+$SoLNxj(?nagJ-J#YRU9ap)k8so03$>pMDG!038=_unt!J&g-d|$?4KkB9&PH#xRn`%!#)=2S8dC;>J?#>QTI;WP1xt}2GtfC z)~xl0va@wW>1Fzuaj{>8bi&-YjJF$xrrEIQC9ak-E9aXv8>Hovt)$oFyy7jfsk*OCM2XmBC>xH!^90X-r~YcQ2^v=ui|MAFBt{XDoRh(J=WM~#@getpEtqlgYFAFg z{x3;JRO~8@lYVb0l38pePF~cmO^V#Meq{-bRx0hBsh|H+0`MakyL9g=fT<~+Bncs~7SE=}9vZSCtcb~&dHx+8~~1*cjz zj`MydDkZ0b=9$fb;ua1y>CEx#_)!LrZ3qq#CtTlxCR7LNbz?^rnD?9SthwImOw-Q- z;>(}AjM1Gm4t#`zq(T;=pJY$UU_>i)#fnn4Cp%x4V_o(1h;j?*mRw5jwj4x}^oK+< zyw|ebp=k}YD)BUe$tTrS?0m6bvp>PdEL}dN`lf_|tG~MPqqi5+jR$}NjXS^w+LQt+ zYZxaE28)TO@c;$c+JRXtI2jgI?CQ}n=H#+>5Sq6^0Ad#T)YFku`sbw6cQ-?w2A4K{ znoPAw@Sa1i*yuG#sS1%~dhfjY5+%))&6jzg$(H9~b1m8V-{=hX4Ni1^V7fFx_FD03 zGpHm?Wr=>dotehAUzLOQNR?pB-ajDHlC0tdVrTWmAR8FJk-)kwVOvN5FD}eY0;!jL ze_n8(4H@>$3;!9)@vDK<%YG&@RWTRqsrhGGp}ull?=*cnr9t%EdAf2$$jWu{SxY#QV{B@`bh14yJ;&#fM{<-g2Wz!oMfaegYr6O!X04wo-Zse zyx~!17gE66#hZECTPov3=&@)i;yx7 zoN%R|2cJpESLWYU;frl`!ZShm(V@T6WO}SNGsT=Y!B(snSR?f*UME-$HmoHX?UOKP z`YY+ksJC1V+Jg-*3o1^ZJJT6+6O8vYL+Ww;xh{mTop=u*aSM zLaFhTxI=^N2)7_qhH21fP04$Y{PWr)^jG3!y*cT|W0hR#lRRzn&?D43dfBT*8G7x( zSP^=h8AZ5amD^F&gHn1t%<7Fms|%(a$q@rnT4iX!vok42L6@6L6y1#xRk-}?Za&MS(PAR

ulJBQLqEr8$!-7dW7Utm*wEyfQ2$B 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 literal 0 HcmV?d00001 diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/src/dt/Configuration.js b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/dt/Configuration.js new file mode 100644 index 0000000..ea53320 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/dt/Configuration.js @@ -0,0 +1,150 @@ +sap.ui.define(["sap/ui/integration/Designtime" +], function (Designtime) { + "use strict"; + +/* + This is description of configuration ui. Here you can provide your values + to customize your card configuration +*/ + + var Configuration = Designtime.extend("sap.workzone.cpkg.card.sample.Configuration"); + Configuration.prototype.create = function () { + return { + form: { + items: { + "group1": { + "label": "Header options", + "type": "group", + "hint": "In case of troubles please visit SAP Work Zone Help Center" + }, + "headerVisibility": { + "manifestpath": "/sap.card/header/visible", + "type": "boolean", + "label": "Visible Header", + "defaultValue" : true + }, + "title": { + "manifestpath": "/sap.card/header/title", + "type": "string", + "defaultValue": "Stack", + "label": "Title", + "visible": "{items>headerVisibility/value}" + }, + "subTitle": { + "manifestpath": "/sap.card/header/subTitle", + "type": "string", + "defaultValue": "", + "label": "Subtitle", + "visible": "{items>headerVisibility/value}" + }, + "headericon": { + "manifestpath": "/sap.card/header/icon/src", + "type": "string", + "label": "Card Icon", + "allowDynamicValues": false, + "allowSettings": false, + "visualization": { + "type": "IconSelect", + "settings": { + "value": "{currentSettings>value}", + "editable": "{currentSettings>editable}" + } + }, + "visible": "{items>headerVisibility/value}" + }, + "group2": { + "label": "Body options", + "type": "group" + }, + "tagged": { + "manifestpath": "/sap.card/configuration/parameters/tagged/value", + "type": "string", + "defaultValue": "stack-overflow-for-teams", + "label": "Tags divided by semicolon" + }, + "sort": { + "manifestpath": "/sap.card/configuration/parameters/sort/value", + "values": { + "data": { + "json": [ + { "key": "activity", "text": "activity" }, + { "key": "creation", "text": "creation" }, + { "key": "votes", "text": "votes" }, + { "key": "relevance", "text": "relevance" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "activity", + "label": "Sort Type", + "type": "string" + }, + "order": { + "manifestpath": "/sap.card/configuration/parameters/order/value", + "values": { + "data": { + "json": [ + { "key": "desc", "text": "descending" }, + { "key": "asc", "text": "ascending" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "desc", + "label": "Sort Order", + "type": "string" + }, + "date": { + "manifestpath": "/sap.card/configuration/parameters/date/value", + "values": { + "data": { + "json": [ + { "key": "last_activity", "text": "Last activity" }, + { "key": "creation", "text": "Creation" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "creation", + "label": "Date to show", + "type": "string" + }, + "maxItems": { + "manifestpath": "/sap.card/configuration/parameters/maxItems/value", + "type": "integer", + "defaultValue": 5, + "label": "Number of Questions", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 1, + "max": 10, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + } + } + }, + preview: { + modes: "Live" + } + }; + }; + return Configuration; +}); + + diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/src/ext/DataFormatter.js b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/ext/DataFormatter.js new file mode 100644 index 0000000..d28a0f0 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/ext/DataFormatter.js @@ -0,0 +1,129 @@ +sap.ui.define(["sap/ui/integration/Extension"], function (Extension) { + "use strict"; + + var DataFormatter = Extension.extend("sap.it.wz.cards.stackoverflow.extension"); + /* + Here is Extension class which is used to receive data to display on card. + */ + DataFormatter.prototype.init = function () { + Extension.prototype.init.apply(this, arguments); + this.attachAction(this._handleAction.bind(this)); + }; + + + + // CAN BE REPLACED: Name of the function that used as Extension (getData) + DataFormatter.prototype.getData = function () { + + let oCard = this.getCard(); + let oParameters = oCard.getCombinedParameters(); + let url = oParameters.url; + url += "&tagged="+oParameters.tagged + url += "&sort="+oParameters.sort + url += "&order="+oParameters.order + url += "&pagesize="+(oParameters.maxItems) + + return this.getCard().request({ // sending of request with url and dataType parameters + "url": url, + "dataType": "json" + }).then(function (oXMLDocument) { + let aItems = Array.prototype.map.call(oXMLDocument.items, function (oItem) { + + let numberDate + if (oParameters.date == "creation") { + numberDate = oItem.creation_date * 1e3 + } else { + numberDate = oItem.last_activity_date * 1e3 + } + let date = new Date(numberDate) + let highlight + if (oItem.answer_count == 0) { + highlight = "Error" + } + if (oItem.answer_count > 0) { + highlight = "Warning" + } + if (oItem.accepted_answer_id != null) { + highlight = "Success" + } + + oItem.title = replaceAllSymbols(oItem.title) + oItem.owner.display_name = replaceAllSymbols(oItem.owner.display_name) + return { + title: oItem.title.trim(), + link: oItem.link, + pubDate: date, + owner: oItem.owner.display_name, + highlight: highlight + }; + }); + + + return aItems + }); + }; + + + DataFormatter.prototype._handleAction = function (oEvent) { + console.log("handler"); + var sActionType = oEvent.getParameter("type"), + mParams = oEvent.getParameter("parameters"); + + if (sActionType !== "Custom") { + return; + } + + switch (mParams.method) { + case "askQuestion": + this._askQuestion(); + break; + case "goToFeed": + this._goToFeed(); + break; + default: + Log.error("Method" + mParams.method + " not recognized"); + } + }; + + DataFormatter.prototype._askQuestion = function () { + var oCard = this.getCard(); + var params = oCard.getCombinedParameters(); + oCard.triggerAction({ + type: "Navigation", + parameters: { + "url": "https://stackoverflow.com/questions/ask?tags=" + params.tagged + } + }); + }; + + DataFormatter.prototype._goToFeed = function () { + var oCard = this.getCard(); + var params = oCard.getCombinedParameters(); + var tags = params.tagged.split(";").join(" "); + oCard.triggerAction({ + type: "Navigation", + parameters: { + "url": "https://stackoverflow.com/questions/tagged/" + tags + } + }); + }; + + return DataFormatter; + + +}); + + +function replaceAllSymbols(string){ + string = string.replaceAll('"','\"') + string = string.replaceAll(''','\'') + string = string.replaceAll('>','>') + string = string.replaceAll('<','<') + string = string.replaceAll('&','&') + let regexp = /&#\d\d\d;/g + var newString = string.replace(regexp, (match, $1) => { + return String.fromCharCode(match.substring(2,5)) + }); + return newString +} + diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/src/manifest.json b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/manifest.json new file mode 100644 index 0000000..70fc712 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/manifest.json @@ -0,0 +1,113 @@ +{ + "sap.app": { + "id": "sap.it.wz.cards.stackoverflow", + "type": "card", + "title": "Stackoverflow.com (External)", + "subTitle": "Stackoverflow.com (External)", + "applicationVersion": { + "version": "1.2.7" + }, + "shortTitle": "Stackoverflow.com (External)", + "info": "Stackoverflow.com (External)", + "description": "Shows a feed of questions from the public Stack Overflow community.", + "tags": { + "keywords": [ + "Stackoverflow.com (External)", + "SAP IT" + ] + } + }, + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "sap-icon://question-mark" + } + }, + "sap.platform.mobilecards": { + "_version": "1.0.0", + "compatible": false + }, + "sap.card": { + "type": "List", + "extension": "./ext/DataFormatter", + "designtime": "./dt/Configuration", + "header": { + "title": "Stackoverflow.com", + "subTitle": "Content from the public community", + "icon": { + "src": "sap-icon://question-mark" + }, + "visible" : true, + "actions": [ + { + "type": "Custom", + "parameters": { + "method": "goToFeed" + } + } + ] + }, + "configuration": { + "parameters": { + "url": { + "value": "https://api.stackexchange.com/2.3/search?site=stackoverflow" + }, + "tagged": { + "value": "sap-business-technology-platform" + }, + "sort": { + "value": "activity" + }, + "order": { + "value": "desc" + }, + "date":{ + "value" : "creation" + }, + "maxItems": { + "value": 5 + } + } + }, + "content": { + "data": { + "extension": { + "method": "getData" + } + }, + "item": { + "title": "{title}", + "description": "{owner}", + "info": { + "value": "{= format.dateTime(${pubDate}, {format: 'yyyyMMMdHHmm'}) }" + }, + "highlight": "{highlight}", + "actions": [ + { + "type": "Navigation", + "parameters": { + "url": "{link}" + } + } + ] + }, + "maxItems": "{{parameters.maxItems}}" + }, + "footer": { + "actionsStrip": [ + { + "buttonType": "Accept", + "text": "Ask question", + "actions": [ + { + "type": "Custom", + "parameters": { + "method": "askQuestion" + } + } + ] + } + ] + } + } +} \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/src/test-resources/manual/index.html b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/test-resources/manual/index.html new file mode 100644 index 0000000..7de4661 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/src/test-resources/manual/index.html @@ -0,0 +1,73 @@ + + + + + + + sap.it.wz.cards.stack + + + + + + + +

+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-stackoverflow-card/ui5.yaml b/advanced/wizard/sample-cards/wz-stackoverflow-card/ui5.yaml new file mode 100644 index 0000000..38c2595 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-stackoverflow-card/ui5.yaml @@ -0,0 +1,16 @@ +specVersion: "2.0" +metadata: + name: sap-it-wz-cards-stackoverflow + copyright: |- + SAP Work Zone + * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company. +type: application +resources: + configuration: + paths: + webapp: src + propertiesFileSourceEncoding: UTF-8 +builder: + resources: + excludes: + - "test-resources/**" \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-twitter-card/package.json b/advanced/wizard/sample-cards/wz-twitter-card/package.json new file mode 100644 index 0000000..f4e66cf --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/package.json @@ -0,0 +1,18 @@ +{ + "name": "sap-it-wz-cards-twitter", + "version": "1.28.0", + "description": "", + "private": true, + "scripts": { + "start": "ui5 serve --o /test-resources/manual/index.html", + "eslint": "eslint src", + "build": "rimraf dist && ui5 build && zip sap-it-wz-cards-twitter.zip -r ./dist" + }, + "devDependencies": { + "@openui5/sap.ui.core": "1.77.2", + "@openui5/sap.ui.integration": "1.77.2", + "@ui5/cli": "2.2.3", + "eslint": "5.16.0", + "rimraf": "2.6.2" + } +} diff --git a/advanced/wizard/sample-cards/wz-twitter-card/sap-it-wz-cards-twitter.zip b/advanced/wizard/sample-cards/wz-twitter-card/sap-it-wz-cards-twitter.zip new file mode 100644 index 0000000000000000000000000000000000000000..6044329216e5be155583b0ae6d2e96be55246bf9 GIT binary patch literal 21398 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 literal 0 HcmV?d00001 diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/Component.js b/advanced/wizard/sample-cards/wz-twitter-card/src/Component.js new file mode 100644 index 0000000..99885da --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/Component.js @@ -0,0 +1,23 @@ +/* + * ! ${copyright} + */ +sap.ui.define(["sap/ui/core/UIComponent"], function (UIComponent) { + "use strict"; + var ChatbotComponent = UIComponent.extend("sap.it.wz.cards.twitter.component.Component", { + onCardReady: function (oCard) { + // Holds the card for use inside the controller + this.card = oCard; + + // Can get all parameters with method getCombinedParameters + oCard.getCombinedParameters(); + + // Get any section of the card manifest with method getManifestEntry + oCard.getManifestEntry("/sap.card"); + + // When in context of a Host, like in Work Zone you can use the following methods + // oCard.getHostInstance(); + // oCard.resolveDestination("myDestination"); // check more in the destinations sample + } + }); + return ChatbotComponent; +}); diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/control/Frame.js b/advanced/wizard/sample-cards/wz-twitter-card/src/control/Frame.js new file mode 100644 index 0000000..ee64f16 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/control/Frame.js @@ -0,0 +1,350 @@ +/* + * ! ${copyright} + */ + +sap.ui.define([ + "sap/ui/core/Control", + "sap/ui/core/Core", + "sap/m/MessageStrip" +], function ( + Control, + Core, + MessageStrip +) { + "use strict"; + + var oStaticArea = Core.getStaticAreaRef(); + + function getScrollTop() { + var B = document.body; + var D = document.documentElement; + D = (D.clientHeight) ? D : B; + return D.scrollTop; + } + + function getScrollLeft() { + var B = document.body; + var D = document.documentElement; + D = (D.clientWidth) ? D : B; + return D.scrollLeft; + } + + function getZIndex(e) { + var z = window.getComputedStyle(e).getPropertyValue('z-index'); + if (isNaN(z)) { + if (e.parentNode && e.parentNode.nodeType === 1) { + return getZIndex(e.parentNode); + } else { + return "auto"; + } + } else { + return z; + } + } + + //Registers an animation frame timer to check whether the position of oDomRef changed + //and calls the handler if it did + var VisibleRectObserver = function (oDomRef, fnHandler) { + if (!VisibleRectObserver._instance) { + VisibleRectObserver._instance = this; + this._elements = []; + this._sizes = []; + this._handlers = []; + this._frame = window.requestAnimationFrame(this.checkAll.bind(this)); + } + + if (oDomRef && fnHandler) { + VisibleRectObserver._instance.register(oDomRef, fnHandler); + } + return VisibleRectObserver._instance; + }; + + //loops over the elements and checks for size and position changes + VisibleRectObserver.prototype.checkAll = function () { + for (var i = 0; i < this._elements.length; i++) { + this.check(i); + } + this._frame = window.requestAnimationFrame(this.checkAll.bind(this)); + }; + + //checks size and position changes for an element and calls the handler + VisibleRectObserver.prototype.check = function (i) { + var el = this._elements[i]; + var size = el.getBoundingClientRect(), + s = JSON.stringify(size); + if (this._sizes[i] !== s) { + this._sizes[i] = s; + this._handlers[i](el, size); + } + }; + + //registers a dom element and handler to be observed for size and position changes + VisibleRectObserver.prototype.register = function (oDomElement, fnHandler) { + if (this._elements.indexOf(oDomElement) > -1) { + return; + } + this._elements.push(oDomElement); + this._sizes.push(""); + this._handlers.push(fnHandler); + this.check(VisibleRectObserver._instance._sizes.length - 1); + }; + + //deregisters a dom element from observation + VisibleRectObserver.prototype.deregister = function (oDomElement) { + var iIndex = this._elements.indexOf(oDomElement); + if (iIndex === -1) { + return; + } + this._elements.splice(iIndex, 1); + this._sizes.splice(iIndex, 1); + this._handlers.splice(iIndex, 1); + }; + + + var Frame = Control.extend("sap.it.wz.cards.twitter.control.Frame", { + metadata: { + properties: { + src: { + type: "string" + }, + preview: { + type: "object", + defaultValue: null + } + } + }, + renderer: function (oRm, oControl) { + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.addStyle("box-sizing", "border-box"); + oRm.writeStyles(); + oRm.writeElementData(oControl); + oRm.openEnd(); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-before"); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.addStyle("min-width", "100%"); + oRm.addStyle("min-height", "100%"); + oRm.addStyle("padding", "1rem"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-content"); + oRm.writeStyles(); + oRm.openEnd(); + oRm.close("div"); + + oRm.openStart("div"); + oRm.writeAttribute("tabindex", "0"); + oRm.writeAttributeEscaped("id", oControl.getId() + "-after"); + oRm.openEnd(); + oRm.close("div"); + + oRm.close("div"); + + } + }); + + Frame.prototype.setSrc = function (vValue) { + if (vValue === this.getSrc()) { + return this; + } + //avoid re-rendering + this.setProperty("src", vValue, true); + + this._sRealSource = vValue; + + if (this._oFrameDomRef) { + this._oFrameDomRef.src = this._sRealSource; + } + return this; + }; + + Frame.prototype.init = function () { + this._oVisibleRectObserver = new VisibleRectObserver(); + }; + + Frame.prototype.onBeforeRendering = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + this._hideFrame(); + }; + + Frame.prototype.onAfterRendering = function () { + if (this._sRealSource && this._sRealSource.length < 5) { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + this._sRealSource = ""; + return this; + } + if (false && this._sRealSource.indexOf("http:") === 0) { + this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEHTTPERROR")); + this._sRealSource = ""; + return this; + } + if (this._sRealSource && this._sRealSource.indexOf("https://") !== 0) { + //this._sRealSource = "https://" + this._sRealSource; + } + if (this._sRealSource) { + this._iErrorTimer = window.setTimeout(this._handleError.bind(this), 1000 * 20); + if (!this._oFrameDomRef) { + this._initFrame(); + } + } else { + this._showMessage("Information", this.getModel("i18n").getProperty("FRAMECONFIGUREURL")); + } + }; + + Frame.prototype.exit = function () { + this._oVisibleRectObserver.deregister(this.getDomRef()); + return this; + }; + + Frame.prototype.destroy = function () { + if (this._oFrameDomRef) { + this._oFrameDomRef.parentNode.removeChild(this._oFrameDomRef); + this._oFrameDomRef.src = ""; + } + if (this._oFrameBlockerDomRef) { + this._oFrameBlockerDomRef.parentNode.removeChild(this._oFrameBlockerDomRef); + this._oFrameBlockerDomRef.src = ""; + } + return Control.prototype.destroy.apply(this, arguments); + }; + + Frame.prototype._hideFrame = function () { + //hide the frame until it is loaded + if (!this._oFrameDomRef) { + return; + } + this._oFrameDomRef.style.top = "-10000px"; + this._oFrameDomRef.style.left = "50px"; + }; + + Frame.prototype._initFrame = function () { + var oFrame = document.getElementById("id", this.getId() + "-frame"); + if (oFrame) { + this._oFrameDomRef = oFrame; + return; + } + var iTab = this.getPreview() ? -1 : 0; + this._oFrameDomRef = this._createFrame(this.getId() + "-frame", this._sRealSource, iTab); + oStaticArea.insertBefore(this._oFrameDomRef, oStaticArea.firstChild); + if (this.getPreview()) { + this._oFrameBlockerDomRef = this._createFrame(this.getId() + "-frameblocker", "", iTab); + oStaticArea.insertBefore(this._oFrameBlockerDomRef, oStaticArea.firstChild); + } + }; + + Frame.prototype._createFrame = function (sId, sSource, iTab) { + var oLocalRM = Core.getRenderManager(); + oLocalRM.openStart("iframe"); + oLocalRM.addStyle("position", "absolute"); + oLocalRM.addStyle("border", "none"); + oLocalRM.addStyle("top", "-10000px"); + oLocalRM.addStyle("left", "20px"); + oLocalRM.addStyle("margin", "1px"); + oLocalRM.writeStyles(); + oLocalRM.writeAttribute("tabIndex", "" + iTab); + oLocalRM.writeAttributeEscaped("id", sId); + oLocalRM.writeAttributeEscaped("scrolling", "auto"); + if (sSource) { + oLocalRM.writeAttributeEscaped("src", sSource); + } + oLocalRM.openEnd(); + oLocalRM.close("iframe"); + var div = document.createElement("div"); + oLocalRM.flush(div); + var oFrame = div.firstChild; + oFrame.addEventListener("load", this._handleLoad.bind(this)); + return oFrame; + }; + + Frame.prototype._handleLoad = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + this._oVisibleRectObserver.register(this.getDomRef(), this._syncFramePosition.bind(this)); + }; + + Frame.prototype._handleError = function () { + if (this._iErrorTimer) { + clearTimeout(this._iErrorTimer); + } + //this._showMessage("Error", this.getModel("i18n").getProperty("FRAMEERROR15SEC")); + }; + + Frame.prototype._applyFramePosition = function (oFrame, oElement, oRect) { + if (!oFrame) { + return; + } + if (oRect.height === 0 || oRect.width === 0) { + this._hideFrame(); + return; + } + var iZIndex = getZIndex(oElement); + oFrame.style.zIndex = iZIndex === "auto" ? 2 : iZIndex; + oFrame.style.left = (oRect.left + getScrollLeft()) + "px"; + oFrame.style.top = (oRect.top + getScrollTop()) + "px"; + + if (this.getPreview()) { + var oPreviewInfo = this.getPreview().getTransformContentInfo(); + oFrame.style.width = ((oRect.width - 2) / oPreviewInfo.transformFactor) + "px"; + oFrame.style.height = ((oRect.height - 2) / oPreviewInfo.transformFactor) + "px" + oFrame.style.transform = oPreviewInfo.transformStyle; + oFrame.style.transformOrigin = oPreviewInfo.transformOriginStyle; + oFrame.style.zIndex = oPreviewInfo.zIndex; + } else { + oFrame.style.width = (oRect.width - 2) + "px"; + oFrame.style.height = (oRect.height - 2) + "px"; + } + }; + + Frame.prototype._syncFramePosition = function (oElement, oRect) { + this._applyFramePosition(this._oFrameDomRef, oElement, oRect); + this._applyFramePosition(this._oFrameBlockerDomRef, oElement, oRect); + }; + + Frame.prototype._showMessage = function (sType, sText) { + if (this._oMessage) { + this._oMessage.destroy(); + } + this._oMessage = new MessageStrip(this.getId() + "-message", { + text: sText, + type: sType, + showIcon: true + }); + var oDomRef = this.getDomRef(); + if (oDomRef) { + this._oMessage.placeAt(oDomRef); + } + }; + function focusAfter() { + this.getDomRef("after").focus(); + window.removeEventListener("focus", focusAfter); + } + Frame.prototype.onsaptabnext = function (oEvent) { + if (oEvent.target === this.getDomRef("before")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + + } + } + }; + + Frame.prototype.onsaptabprevious = function (oEvent) { + if (oEvent.target === this.getDomRef("after")) { + if (this._oFrameDomRef && !this.getPreview()) { + setTimeout(function () { + this._oFrameDomRef.contentWindow.focus(); + }.bind(this), 20); + } + } + }; + return Frame; + +}); diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/controller/Card.controller.js b/advanced/wizard/sample-cards/wz-twitter-card/src/controller/Card.controller.js new file mode 100644 index 0000000..c24a83e --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/controller/Card.controller.js @@ -0,0 +1,127 @@ +/* + * ! ${copyright} + */ + +sap.ui.define([ + "sap/ui/core/mvc/Controller" +], function (Controller) { + "use strict"; + function isDark(rgbcolor) { + rgbcolor = rgbcolor || window.getComputedStyle(document.body).backgroundColor; + var match = /rgb\((\d+).*?(\d+).*?(\d+)\)/.exec(rgbcolor); + if (!match) { + return false; + } + var r = parseInt(match[1]), + g = parseInt(match[2]), + b = parseInt(match[3]), + yiq = (r * 299 + g * 587 + b * 114) / 1000; + return (yiq <= 128); + } + + return Controller.extend("sap.it.wz.cards.twitter.controller.Card", { + onInit: function () { + if (!this.getOwnerComponent().card) { + return; + } + let oCard = this.getOwnerComponent().card; + let mParameters = oCard.getCombinedParameters(); + + + let content = ""; + + let [target, options] = this._getTimelimeParams(mParameters); + switch (mParameters.widgetType) { + case "tweet": + content = this._getTweetScript(mParameters.tweetId, target, options); + break; + default: + content = this._getTimelineScript(target, options); + } + + var src = URL.createObjectURL(new Blob([content], { type: "text/html" })); + var oFrame = this.byId("frame"); + oFrame.setSrc(src); + + if (oCard.editor) { + oFrame.setPreview(oCard.editor.preview); + } + + var iPixelHeight = Math.max(mParameters.height, oCard.getCardContent().getDomRef().offsetHeight); + this.getView().setHeight(iPixelHeight + "px"); + }, + _getTimelineScript: function (target, options = {}) { + let sTarget = JSON.stringify(target); + let sOptions = JSON.stringify(options); + let timelineScript = `twttr.widgets.createTimeline(${sTarget}, element, ${sOptions});` + return this._getIframeHtml(timelineScript); + }, + _getTweetScript: function (id, target, options) { + let sTarget = JSON.stringify(target); + let sOptions = JSON.stringify(options); + let tweetScript = `twttr.widgets.createTweet("${id}", element, ${sOptions});`; + return this._getIframeHtml(tweetScript); + }, + _getIframeHtml: function (sScript) { + let elementId = "widget_container"; + return ` + + + + + + + +
+ + + `; + }, + _getTimelimeParams: function (mParameters) { + let params = {}; + params.sourceType = mParameters.widgetType || "profile"; + let username = mParameters.userName.replace("@", ""); + switch (params.sourceType) { + case "list": + params.ownerScreenName = username; + params.slug = mParameters.listName; + break; + case "collection": + params.id = mParameters.collectionId; + break; + default: + // profile & likes + params.screenName = username; + } + + let options = { dnt: true, ariaPolite: "polite" }; + options.theme = mParameters.theme; + if (mParameters.theme === "auto") { + options.theme = isDark() ? "dark" : "light"; + } + if (mParameters.setTweetsLimit) { + options.tweetLimit = mParameters.numberOfTweets; + } + + let chrome = []; + if (!mParameters.header) chrome.push("noheader"); + if (!mParameters.footer) chrome.push("nofooter"); + options.chrome = chrome.join(","); + + return [params, options]; + } + }); +}); diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/dt/configuration.js b/advanced/wizard/sample-cards/wz-twitter-card/src/dt/configuration.js new file mode 100644 index 0000000..6441bd5 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/dt/configuration.js @@ -0,0 +1,192 @@ +sap.ui.define(["sap/ui/integration/Designtime" +], function (Designtime) { + "use strict"; + + var Configuration = Designtime.extend("sap.workzone.cpkg.card.sample.Configuration"); + Configuration.prototype.create = function () { + return { + form: { + items: { + "headerGroup": { + "label": "Header options", + "type": "group", + "hint": "In case of troubles please visit SAP Work Zone Help Center" + }, + "headerVisibility": { + "manifestpath": "/sap.card/header/visible", + "type": "boolean", + "label": "Visible Header", + "defaultValue" : true + }, + "title": { + "manifestpath": "/sap.card/header/title", + "type": "string", + "defaultValue": "Chatbot", + "label": "Title", + "visible": "{items>headerVisibility/value}" + }, + "subTitle": { + "manifestpath": "/sap.card/header/subTitle", + "type": "string", + "defaultValue": "", + "label": "Subtitle", + "visible": "{items>headerVisibility/value}" + }, + "headericon": { + "manifestpath": "/sap.card/header/icon/src", + "type": "string", + "label": "Card Icon", + "allowDynamicValues": false, + "allowSettings": false, + "visualization": { + "type": "IconSelect", + "settings": { + "value": "{currentSettings>value}", + "editable": "{currentSettings>editable}" + } + }, + "visible": "{items>headerVisibility/value}" + }, + "bodyGroup": { + "label": "Body options", + "type": "group" + }, + "widgetType": { + "manifestpath": "/sap.card/configuration/parameters/widgetType/value", + "values": { + "data": { + "json": [ + { "key": "profile", "text": "User Timeline" }, + { "key": "list", "text": "List Timeline" }, + { "key": "tweet", "text": "Embedded Tweet" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + }, + "defaultValue": "", + "label": "Select Twitter Type", + "type": "string" + }, + "userName": { + "manifestpath": "/sap.card/configuration/parameters/userName/value", + "type": "string", + "defaultValue": "", + "placeholder": "e.g. @twitter", + "label": "Twitter Username (e.g @twitter)", + "visible": "{= ${items>widgetType/value} !== 'tweet' && ${items>widgetType/value} !== 'moment' && ${items>widgetType/value} !== 'collection'}" + }, + "listName": { + "manifestpath": "/sap.card/configuration/parameters/listName/value", + "type": "string", + "defaultValue": "", + "label": "List Name", + "visible": "{= ${items>widgetType/value} === 'list'}" + }, + "tweetId": { + "manifestpath": "/sap.card/configuration/parameters/tweetId/value", + "type": "string", + "defaultValue": "", + "label": "Tweet ID", + "visible": "{= ${items>widgetType/value} === 'tweet'}" + }, + "collectionId": { + "manifestpath": "/sap.card/configuration/parameters/collectionId/value", + "type": "string", + "defaultValue": "", + "label": "Collection ID", + "visible": "{= ${items>widgetType/value} === 'collection'}" + }, + "theme": { + "manifestpath": "/sap.card/configuration/parameters/theme/value", + "values": { + "data": { + "json": [ + { "key": "light", "text": "Light" }, + { "key": "dark", "text": "Dark" }, + { "key": "auto", "text": "Automatic" } + ] + }, + "item": { + "text": "{text}", + "key": "{key}" + } + + }, + "defaultValue": "", + "label": "Color Theme", + "type": "string" + }, + "header": { + "manifestpath": "/sap.card/configuration/parameters/header/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Header", + "visible": "{= ${items>widgetType/value} !== 'tweet'}" + }, + "footer": { + "manifestpath": "/sap.card/configuration/parameters/footer/value", + "type": "boolean", + "defaultValue": false, + "label": "Show Footer", + "visible": "{= ${items>widgetType/value} !== 'tweet'}" + }, + "setTweetsLimit": { + "manifestpath": "/sap.card/configuration/parameters/setTweetsLimit/value", + "type": "boolean", + "defaultValue": false, + "label": "Limit Number of Tweets", + "visible": "{= ${items>widgetType/value} !== 'tweet' && ${items>widgetType/value} !== 'list'}" + }, + "numberOfTweets": { + "manifestpath": "/sap.card/configuration/parameters/numberOfTweets/value", + "type": "integer", + "defaultValue": 20, + "label": "Number of Feeds", + "visible": "{= ${items>setTweetsLimit/value}}", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 1, + "max": 20, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + }, + "height": { + "manifestpath": "/sap.card/configuration/parameters/height/value", + "type": "integer", + "defaultValue": 570, + "label": "Height in pixels", + "visualization": { + "type": "sap/m/Slider", + "settings": { + "value": "{currentSettings>value}", + "min": 30, + "max": 600, + "width": "80%", + "showAdvancedTooltip": true, + "showHandleTooltip": false, + "inputsAsTooltips": true, + "enabled": "{currentSettings>editable}" + } + } + } + } + }, + preview: { + modes: "Live" + } + }; + }; + return Configuration; +}); + + diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/manifest.json b/advanced/wizard/sample-cards/wz-twitter-card/src/manifest.json new file mode 100644 index 0000000..f9ee4dc --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/manifest.json @@ -0,0 +1,108 @@ +{ + "sap.app": { + "id": "sap.it.wz.cards.twitter", + "type": "card", + "title": "Twitter Feed", + "subTitle": "Twitter Feed", + "applicationVersion": { + "version": "1.1.10" + }, + "shortTitle": "Twitter Feed", + "info": "Twitter Feed", + "description": "Select different types of Twitter timelines to be shown.", + "tags": { + "keywords": [ + "Twitter", + "SAP IT" + ] + } + }, + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "sap-icon://feed" + } + }, + "sap.ui5": { + "dependencies": { + "minUI5Version": "1.77.2", + "libs": { + "sap.ui.core": {}, + "sap.m": {} + } + }, + "rootView": { + "viewName": "sap.it.wz.cards.twitter.view.Card", + "type": "XML", + "async": true, + "id": "app" + }, + "models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "sap.it.wz.cards.twitter.i18n.i18n" + } + } + } + }, + "sap.platform.mobilecards": { + "_version": "1.0.0", + "compatible": false + }, + "sap.card": { + "type": "Component", + "designtime": "dt/configuration", + "header": { + "title": "Twitter", + "subTitle": "by @SAP", + "icon": { + "src": "sap-icon://newspaper" + }, + "visible": true + }, + "configuration": { + "parameters": { + "widgetType": { + "value": "profile" + }, + "showCardHeader": { + "value": true + }, + "userName": { + "value": "@sap" + }, + "listName": { + "value": "sap-on-twitter" + }, + "collectionId": { + "value": "576828964162965504" + }, + "momentId": { + "value": "788796479838138369" + }, + "tweetId": { + "value": "1328041466707456001" + }, + "theme": { + "value": "auto" + }, + "header": { + "value": false + }, + "footer": { + "value": false + }, + "setTweetsLimit": { + "value": false + }, + "numberOfTweets": { + "value": 20 + }, + "height": { + "value": 500 + } + } + } + } +} \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/test-resources/manual/index.html b/advanced/wizard/sample-cards/wz-twitter-card/src/test-resources/manual/index.html new file mode 100644 index 0000000..72c56ae --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/test-resources/manual/index.html @@ -0,0 +1,73 @@ + + + + + + + sap.it.wz.cards.twitter + + + + + + + +
+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/advanced/wizard/sample-cards/wz-twitter-card/src/view/Card.view.xml b/advanced/wizard/sample-cards/wz-twitter-card/src/view/Card.view.xml new file mode 100644 index 0000000..87c5db0 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/src/view/Card.view.xml @@ -0,0 +1,6 @@ + + + diff --git a/advanced/wizard/sample-cards/wz-twitter-card/ui5.yaml b/advanced/wizard/sample-cards/wz-twitter-card/ui5.yaml new file mode 100644 index 0000000..ed690d2 --- /dev/null +++ b/advanced/wizard/sample-cards/wz-twitter-card/ui5.yaml @@ -0,0 +1,16 @@ +specVersion: "2.0" +metadata: + name: sap-it-wz-cards-twitter + copyright: |- + SAP Work Zone + * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company. +type: application +resources: + configuration: + paths: + webapp: src + propertiesFileSourceEncoding: UTF-8 +builder: + resources: + excludes: + - "test-resources/**" \ No newline at end of file