diff --git a/AlertJS/Sample/src/demo.js b/AlertJS/Sample/src/demo.js index 491d31c..f39b406 100644 --- a/AlertJS/Sample/src/demo.js +++ b/AlertJS/Sample/src/demo.js @@ -5,10 +5,10 @@ async function onLoad() { examples.push({ blurb: "Simple dialog with callback", id: "simplecallback", - imageUrl: "https://user-images.githubusercontent.com/14048382/86217559-c1139100-bbd3-11ea-9dd1-edf455430eac.png", + imageUrl: "https://github.com/user-attachments/assets/19604543-3bbd-4a01-8bb3-8ef664a4cb77", code: `new Dialog({ title: "Would you like to create a sale?", - message: "This will create and open the new sale record", + message: "This will create and open the new sale record.", icon: "INFO", buttons: [ new Dialog.Button("Create Sale", function() { @@ -26,10 +26,10 @@ async function onLoad() { examples.push({ blurb: "Recreate the Close Opportunity screen", id: "opportunity", - imageUrl: "https://user-images.githubusercontent.com/14048382/86326459-d81ab780-bc95-11ea-88cb-02b50f85724b.png", + imageUrl: "https://github.com/user-attachments/assets/b629b119-e051-446e-8041-eb99fa5c8100", code: `new Dialog({ id: "closeOpp", - height: 480, + height: 500, width: 450, title: "Close Opportunity", message: "Provide the following information about why this opportunity is being closed.", @@ -53,10 +53,10 @@ async function onLoad() { examples.push({ blurb: "Recreate the Assign Records screen with disabled fields", id: "assign", - imageUrl: "https://user-images.githubusercontent.com/14048382/90304139-9e7dd300-df08-11ea-81d9-af5823aeb869.png", + imageUrl: "https://github.com/user-attachments/assets/845d1a76-3b67-43f2-bb20-dc12552c75f0", code: `var dialog = new Dialog({ id: "assign", - height: 300, + height: 330, width: 400, title: "Assign Lead", message: "You have selected 1 Lead. To whom would you like to assign it?", @@ -103,11 +103,11 @@ dialog.getElement("#assignuser input").addEventListener("click", function () { examples.push({ blurb: "Example using file upload, and using the base64 data to display the image on screen", id: "fileupload", - imageUrl: "https://user-images.githubusercontent.com/14048382/86326576-08625600-bc96-11ea-911e-a3f6b291a72b.png", + imageUrl: "https://github.com/user-attachments/assets/c96d780d-8129-41fa-9e93-3a6d44e1045b", code: `new Dialog({ id: "image", - width: 380, - height: 200, + width: 430, + height: 230, title: "Image Preview", message: "Please select an image file you wish to preview.", buttons: [ @@ -146,7 +146,7 @@ dialog.getElement("#assignuser input").addEventListener("click", function () { examples.push({ blurb: "Using various different field types", id: "variousfields", - imageUrl: "https://user-images.githubusercontent.com/14048382/86327421-680d3100-bc97-11ea-9f9b-551f366223ff.png", + imageUrl: "https://github.com/user-attachments/assets/eccc8257-9eb6-4ff1-9cf5-335cf6656b51", code: `new Dialog({ height: 700, padding: 20, @@ -159,9 +159,9 @@ dialog.getElement("#assignuser input").addEventListener("click", function () { new Dialog.Input({ type: "date", label: "Date" }), new Dialog.Lookup({ label: "Lookup", entityTypes: ["contact"] }), new Dialog.Group({ label: "Inline Group", inline: true, fields: [ - new Dialog.Input({ label: "Click this", type: "radio", value: true }, { name: "clickThis" }), - new Dialog.Input({ label: "Or this", type: "radio" }, { name: "clickThis" }), - new Dialog.Input({ label: "Or check this", type: "checkbox", value: true }) + new Dialog.Input({ label: "Click this", type: "radio", value: true, divider: true }, { name: "clickThis" }), + new Dialog.Input({ label: "Or this", type: "radio", divider: true }, { name: "clickThis" }), + new Dialog.Input({ label: "Or check this", type: "checkbox", value: true, divider: true }) ] }), new Dialog.OptionSet({ label: "OptionSet", options: [ { text: "One", value: "1" }, @@ -176,7 +176,7 @@ dialog.getElement("#assignuser input").addEventListener("click", function () { examples.push({ blurb: "Login screen with custom keypress event", id: "loginkeypress", - imageUrl: "https://user-images.githubusercontent.com/14048382/86327927-2466f700-bc98-11ea-8d6a-6435b6d74576.png", + imageUrl: "https://github.com/user-attachments/assets/f54a7a00-2776-4231-9c89-88e13afacd36", code: `function signInCallback(data) { new Dialog({ title: data.getValue(0).getValue("email") + "
" + data.getValue(0).getValue("password") @@ -186,7 +186,7 @@ var dialog = new Dialog({ icon: "SEARCH", title: "Portal Sign-in", message: "Please enter your login details below (don't worry this is all client side).", - height: 300, + height: 340, buttons: [ new Dialog.Button("Sign in", signInCallback, true), new Dialog.Button("Cancel") @@ -214,12 +214,12 @@ dialog.getElement("#password input").addEventListener("keydown", function (e) { examples.push({ blurb: "Progress bar for async tasks", id: "progressbar", - imageUrl: "https://user-images.githubusercontent.com/14048382/86429346-639e5200-bd43-11ea-8c09-65bb693f851c.png", + imageUrl: "https://github.com/user-attachments/assets/d341bde4-b117-4a7c-89db-7e0badfc7ac2", code: `var data = ["Some", "data", "to", "process", "async", "via", "webapi", "etc"]; var loading = new Dialog({ id: "loading", title: "Processing..." }).showLoading(); for (var i = 1; i <= data.length; i++) { - loading.message("Record " + i + " of " + data.length); + loading.content("Record " + i + " of " + data.length); // Do something async (waits 1 second) await new Promise(resolve => setTimeout(resolve, 1000)); @@ -234,25 +234,25 @@ new Dialog({ icon: "SUCCESS", title: "Process complete!" }).show();` examples.push({ blurb: "Displaying a simple IFrame", id: "iframe", - imageUrl: "https://user-images.githubusercontent.com/14048382/86431682-86336980-bd49-11ea-955f-ec9b2c6ba684.png", + imageUrl: "https://github.com/user-attachments/assets/bb5e6129-b9a6-40c3-9bfb-eb6917b99bd4", code: `new Dialog({ - title: "Just Bing it!", - message: "Google doesn't allow embedding in a frame.", - icon: "SEARCH", + title: "Display webpages in an iframe!", + message: "Some websites don't allow embedding in iframes on other sites.", + icon: "INFO", buttons: [ new Dialog.Button("Open New Tab", function() { - window.open("https://bing.com"); + window.open("https://www.magnetismsolutions.com/"); }), new Dialog.Button("Close", null, true) ] -}).showIFrame("https://bing.com");` +}).showIFrame("https://www.magnetismsolutions.com/");` }); // Showing filtered lookup/search results as a list of options examples.push({ blurb: "Showing filtered lookup/search results as a list of options", id: "filteredsearch", - imageUrl: "https://user-images.githubusercontent.com/14048382/86499824-4a4be300-bde1-11ea-8f1d-d1bdb81053e5.png", + imageUrl: "https://github.com/user-attachments/assets/99418239-8f53-4e09-85bf-dea4ed2e749f", code: `function searchAccounts(dialog, searchTerm) { var loading = new Dialog({ id: "loading" }).showLoading(); searchTerm = (searchTerm || "").toLowerCase(); @@ -268,6 +268,7 @@ new Dialog({ icon: "SUCCESS", title: "Process complete!" }).show();` //Xrm.WebApi.retrieveMultipleRecords("account", // "?$select=name,accountid" + // "&$filter=statecode eq 0 and contains(name,'" + searchTerm + "')" + + // "&$top=100" + // "&$orderby=name") // .then(function (results) { // var accounts = results.entities; @@ -282,6 +283,7 @@ function showSearchPrompt(dialog, searchTerm, data) { type: "radio", label: account.name, id: account.accountid, + divider: true, value: data.length == 1 }, { name: "accounts" }); }); @@ -295,41 +297,44 @@ function showSearchPrompt(dialog, searchTerm, data) { e = e || window.event; if (e.which == 13) { // Enter e.preventDefault(); - searchAccounts(dialog, dialog.getPromptResponses().getValue("searchField")); + searchAccounts(dialog, dialog.getPromptResponses().getValue("search").getValue("searchField")); } }); dialog.getElement("#searchButton input").addEventListener("click", function (e) { - searchAccounts(dialog, dialog.getPromptResponses().getValue("searchField")); + searchAccounts(dialog, dialog.getPromptResponses().getValue("search").getValue("searchField")); }); } function setDialogFields(diolog, searchTerm, fields) { dialog.fields([ - new Dialog.Input({ id: "searchField", label: "Search for an Account", inline: false, value: searchTerm }), - new Dialog.Input({ id: "searchButton", type: "button", value: "Search"}, - { style: "background-color: #236099; color: #fff; width: 100px; cursor: pointer" }), + new Dialog.Group({ id: "search", columns: 2, fields: [ + new Dialog.Input({ id: "searchField", value: searchTerm }), + new Dialog.Input({ id: "searchButton", type: "button", value: "Search"}, + { style: "width: 100px;", class: "dialog-js-button primary" }) + ]}), new Dialog.Group({ id: "account", fields: fields }) ]); } var dialog = new Dialog({ - title: "Select an Account", - message: "Select or search for an account.", - icon: "SEARCH", - height: 530, - buttons: [ - new Dialog.Button("OK", function (data) { - var accountId = data.getValue("account").getSelected(); - if (accountId == null || accountId.length == 0) { - alert("Please select an account"); - return; - } - alert(accountId[0]); - dialog.close(); - }, true, true), - new Dialog.Button("Cancel") - ] - }).show(); + id: "filter", + title: "Select an Account", + message: "Select or search for an account.", + icon: "SEARCH", + height: 530, + buttons: [ + new Dialog.Button("OK", function (data) { + var accountId = data.getValue("account").getSelected(); + if (accountId == null || accountId.length == 0) { + new Dialog({ title: "Please select an account", width: 350, height: 150 }).show(); + return; + } + new Dialog({ title: accountId[0], width: 350, height: 150 }).show(); + dialog.close(); + }, true, true), + new Dialog.Button("Cancel") + ] +}).show(); setDialogFields(dialog); searchAccounts(dialog);` @@ -339,7 +344,7 @@ searchAccounts(dialog);` examples.push({ blurb: "Time tracker with required fields validation", id: "timetracker", - imageUrl: "https://user-images.githubusercontent.com/14048382/87120947-d1172900-c2d5-11ea-80ad-020f306832c3.png", + imageUrl: "https://github.com/user-attachments/assets/4bcefdd9-3206-456e-9628-874c42c7eb81", code: `var timeTracker = new Dialog({ id: "timetracker", icon: "https://user-images.githubusercontent.com/14048382/87119185-5ea44a00-c2d1-11ea-89df-8367771f6344.png", @@ -371,8 +376,8 @@ function submitTime(results) { icon: "ERROR", title: "Required fields", message: "You must provide a value for: " + nullFields.map(a => a.id).join(", "), - width: 280, - height: 180 + width: 320, + height: 200 }).show(); return; } @@ -397,12 +402,12 @@ function submitTime(results) { examples.push({ blurb: "Create branching dialogs with paging", id: "paging", - imageUrl: "https://user-images.githubusercontent.com/14048382/92077525-b615f080-ee10-11ea-9cb4-37708e7b9634.png", + imageUrl: "https://github.com/user-attachments/assets/24d55cce-99f5-45e4-92a7-00accc6c0193", code: `var data = { page1: { subscribe: true }, page2: { interests: {} }, page3: {} }; var dialog = new Dialog({ id: "onboarding", width: 400, - height: 420, + height: 450, }).show(); page1(); @@ -498,16 +503,17 @@ function page3() { examples.push({ blurb: "Using showAsync and awaiting a response", id: "async", - imageUrl: "https://user-images.githubusercontent.com/14048382/144333620-9592e049-bb2d-4bd6-8587-6d3e8c30a81c.png", + imageUrl: "https://github.com/user-attachments/assets/a8e58756-bef2-46bf-a78c-f55f61cace71", code: `var dialog = new Dialog({ id: "async", title: "Enter a value to return", message: "Code execution will resume once the dialog closes.", + allowDismiss: true, buttons: [ new Dialog.Button("OK", function (results) { // Validation only if (results[0].value == null) { - new Dialog({ title: "Input required", width: 300, height: 200 }).show(); + new Dialog({ title: "Input required", icon: "ERROR", width: 300, height: 150 }).show(); // Prevent the await response from firing return false; @@ -542,7 +548,7 @@ else { examples.push({ blurb: "Create a dialog using all the available dialog options", id: "options", - imageUrl: "https://user-images.githubusercontent.com/14048382/155616396-09953801-d8a2-4766-9aa9-71a304c9f7f9.png", + imageUrl: "https://github.com/user-attachments/assets/3a7c904a-0057-4acf-b499-de5348e3946f", code: `var options = { id: "new-dialog", title: "The main (large) text to display inside the message", @@ -568,7 +574,8 @@ else { fullscreen: false, preventResize: false, columns: 1, - color: "#555555" + color: "#555555", + direction: "ltr" }; var dialog = new Dialog(options).show();` @@ -578,7 +585,7 @@ var dialog = new Dialog(options).show();` examples.push({ blurb: "Customize and build your own dialog right from within Dialog Builder!", id: "builder", - imageUrl: "https://user-images.githubusercontent.com/14048382/86889882-95068b80-c150-11ea-94f2-08d2d432ae41.png", + imageUrl: "https://github.com/user-attachments/assets/72c124e1-9d8e-4da8-893f-9f41ffb196ad", code: `// This is an overly complex example to show just how far this solution can go var dialog = new Dialog({ id: "dialogBuilder", @@ -603,7 +610,7 @@ var dialog = new Dialog({ new Dialog.Input({ id: "width", label: "Width" }), new Dialog.Input({ id: "height", label: "Height" }), new Dialog.Input({ id: "icon", label: "Icon" }), - new Dialog.MultiLine({ id: "content", label: "Content" }, { style: "height: 79px" }), + new Dialog.MultiLine({ id: "content", label: "Content" }, { style: "height: 80px" }), new Dialog.Input({ id: "columns", label: "Columns" }), new Dialog.Input({ id: "id", label: "ID" }), new Dialog.Input({ id: "padding", label: "Padding" }), @@ -615,9 +622,9 @@ var dialog = new Dialog({ ] }), new Dialog.MultiLine({ id: "buttons", label: "Buttons", inline: false }, - { style: "height: 150px", title: "Example:\\n[\\n new Dialog.Button(label, callback, setFocus, preventClose)\\n]" }), + { style: "height: 140px", title: "Example:\\n[\\n new Dialog.Button(label, callback, setFocus, preventClose)\\n]" }), new Dialog.MultiLine({ id: "fields", label: "Fields", inline: false }, - { style: "height: 150px", title: "Example:\\n[\\n new Dialog.Input(options, extraAttributes)\\n]" }) + { style: "height: 140px", title: "Example:\\n[\\n new Dialog.Input(options, extraAttributes)\\n]" }) ] }).show(); @@ -656,7 +663,7 @@ function viewSource(results) { id: "viewSource", title: "Dialog Source", width: 550, - height: 170 + sourceCode.split("\\n").length * 12, + height: 160 + sourceCode.split("\\n").length * 20, content: "
" + sourceCode + "
", buttons: [ new Dialog.Button("Preview", function () { eval(sourceCode); }, false, true), @@ -816,7 +823,7 @@ function addFieldType(results, fieldsValue, dialogContext, id) { var addFieldDialog = new Dialog({ id: id + "-addField", title: "Add " + fieldType, - height: fieldType == "Lookup" ? 640 : 540, + height: fieldType == "Lookup" ? 640 : 570, buttons: buttons, fields: fields, }).show();