Right now I'm trying to create a custom confirmation page to be displayed to the user after they finish filling out one of my forms. This custom confirmation page will use some of the data that they entered into the form. Right now I only have 3 fields: name, phone number, and a logo image.
So I went into the Settings->Confirmations section of my form and set Confirmation Type to Page, chose the page, and checked off 'Pass Field Data Via Query String'. Then I entered in the string 'gym_name={Gym/Program Name:2}&gym_phone={Gym/Program website and/or phone number:3}&logo={Logo:4}'. The logo parameter is passed as the image src url.
I ran through a quick test of my form and after filling it out, all of the data was successfully sent to the confirmation page, with one problem. For some reason, Gravity Form appends '|:||:||:||:|2372' (it's not always 2372, it's different every time) to the end of the logo section of the url. This happens no matter where in the query string I put logo, and it does not get appended if I don't include the logo.
Does anyone know what the cause of this is, and how to stop it? Thank you in advance.
I'm assuming the Logo field is a Post Image field. If so, you'll need to use the :url modifier to retrieve only the URL.
&logo={Logo:4:url}
More details here: https://docs.gravityforms.com/post-image-merge-tags/
So I would like to be able to have a print button for entries in our database so users can print an entry via a print friendly "form".
My thought was to create a separate page, add labels and have those labels pull the relevant information.
I know I can add the open widget information via this code:
app.datasources.ModelName.selectKey(widget.datasource.item._key);
app.showPage(app.pages.TestPrint);
But I'm running into a few problems:
I can't get the page to open in a new window. Is this possible?
window.open(app.pages.TestPrint);
Just gives me a blank page. Does the browser lose the widget source once the new window opens?
I can't get the print option (either onClick or onDataLoad) to print JUST the image (or widget). I run
window.print();
And it includes headers + scroll bars. Do I need to be running a client side script instead?
Any help would be appreciated. Thank you!
To get exactly what you'd want you'd have to do a lot of work.
Here is my suggested, simpler answer:
Don't open up a new tab. If you use showPage like you mention, and provide a "back" button on the page to go back to where you were, you'll get pretty much everything you need. If you don't want the back to show up when you print, then you can setVisibility(false) on the button before you print, then print, then setVisibility(true).
I'll give a quick summary of how you could do this with a new tab, but it's pretty involved so I can't go into details without trying it myself. The basic idea, is you want to open the page with a full URL, just like a user was navigating to it.
You can use #TestPrint to indicate which page you want to load. You also need the URL of your application, which as far as I can remember is only available in a server-side script using the Apps Script method: ScriptApp.getService().getUrl(). On top of this, you'll probably need to pass in the key so that your page knows what data to load.
So given this, you need to assemble a url by calling a server script, then appending the key property to it. In the end you want a url something like:
https://www.script.google.com/yourappaddress#TestPage?key=keyOfYourModel.
Then on TestPage you need to read the key, and load data for that key. (You can read the key using google.script.url).
Alternatively, I think there are some tricks you can play by opening a blank window and then writing directly to its DOM, but I've never tried that, and since Apps Script runs inside an iframe I'm not sure if it's possible. If I get a chance I'll play with it and update this answer, but for your own reference you could look here: create html page and print to new tab in javascript
I'm imagining something like that, except that your page an write it's html content. Something like:
var winPrint = window.open('', '_blank', 'left=0,top=0,width=800,height=600,toolbar=0,scrollbars=0,status=0');
winPrint.document.write(app.pages.TestPage.getElement().innerHTML);
winPrint.document.close();
winPrint.focus();
winPrint.print();
winPrint.close();
Hope one of those three options helps :)
So here is what I ended up doing. It isn't elegant, but it works.
I added a Print Button to a Page Fragment that pops up when a user edits a database entry.
Database Edit Button code:
app.datasources.ModelName.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.FragmentName);
That Print Button goes to a different (full) Page and closes the Fragment.
Print Button Code:
app.datasources.ModelName.selectKey(widget.datasource.item._key);
app.showPage(app.pages.ModelName_Print);
app.closeDialog();
I made sure to make the new Print Page was small enough so that Chrome fits it properly into a 8.5 x 11" page (728x975).
I then created a Panel that fills the page and populated the page with Labels
#datasource.item.FieldName
I then put the following into the onDataLoad for the Panel
window.print();
So now when the user presses the Print Button in the Fragment they are taken to this new page and after the data loads they automatically get a print dialog.
The only downside is that after printing the user has to use a back button I added to return to the database page.
1.
As far as I know, you cannot combine window.open with app.pages.*, because
window.open would require url parameter at least, while app.pages.* is essentially an internal routing mechanism provided by App Maker, and it returns page object back, suitable for for switching between pages, or opening dialogs.
2.
You would probably need to style your page first, so like it includes things you would like to have printed out. To do so please use #media print
ex: We have a button on the page and would like to hide it from print page
#media print {
.app-NewPage-Button1 {
display : none;
}
}
Hope it helps.
1. Here is how it is done, in a pop up window, without messing up the current page (client script):
function print(widget, title){
var content=widget.getElement().innerHTML;
var win = window.open('', 'printWindow', 'height=600,width=800');
win.document.write('<head><title>'+title+'/title></head>');
win.document.write('<body>'+content+'</body>');
win.document.close();
win.focus();
win.print();
win.close();
}
and the onclick handler for the button is:
print(widget.root.descendants.PageFragment1, 'test');
In this example, PageFragment1 is a page fragment on the current page, hidden by adding a style with namehidden with definition .hidden{display:none;} (this is different than visible which in App Maker seems to remove the item from the DOM). Works perfectly...
2. You cannot open pages from the app in another tab. In principle something like this would do it:
var w=window.parent.parent;
w.open(w.location.protocol+'//'+w.location.host+w.location.pathname+'#PrintPage', '_blank');
But since the app is running in frame nested two deep from the launching page, and with a different origin, you will not be able to access the url that you need (the above code results in a cross origin frame access error). So you would have to hard code the URL, which changes at deployment, so it gets ugly very fast. Not that you want to anyway, the load time of an app should discourage you from wanting to do that anyway.
I am developing a web application in which we have generated labels with barcode. Now we need to read these labels during packing stage.
I understand that Barcode scanners work as keyboard entry so I have created a View with text box to read the barcodes from labels. When I scan any label its reading barcode and automatically directing to some search page.
View
<td>
#Html.TextBoxFor(model => model.StyleNumber)
#* <input type = "text" style="border:0px;" value = "" />*#
</td>
There are 2 issues :
Automatically append row with a text box with for each label
Not to direct to some other page and have all the scanned labels on the same page to be read and used for further processing.
I have tried a lot but didn't find anything concrete. Please advise.
I'd like to suggest to move in this direction:
Obtain technical specification of barcode reader
Barcode should add some "begin and ending char" before and after the barcode read
Example if you barcode in 123456 reader can add 123456/n
where /n is new line or something else
You can monitor keydown of text field and monitor when text change and you detect ending character, at this point you can submit the form that contain your textbox. You can use javascript/Jquery
http://www.aaronkjackson.com/2011/02/quick-tip-use-jquery-to-submit-a-textbox/
This example if the first that I've found but it can be improved for example sumitting a form without button
You can perform barcode validation on server side
At this point you can process barcode on server side and return void from controller method. Y
You can improve solution providing some better user experince for example validating barcode client side or hide the text control or submit data using jquery insted of form like this:
How to send data in jquery.post to mvc controller which use ViewModel as parameter?
Pay attention on setting focus over control otherwise if user ckick mouse out of text control the text read form barcode reader isn't inserted into textbox.
I think that could be possibile develop some ActiveX but this is more invasive solution
HTML5 is your answer. But it will work in HTML5 compatible browser only. If you are targeting older version of browser you need to create Activex which is pretty old and not secure.
There is a jquery plugin for reading QR and Barcode which is worth looking into it.
http://dwa012.github.io/html5-qrcode/
Another way is doing capturing it on mobile devices with HTML5
http://www.html5rocks.com/en/tutorials/getusermedia/intro/
There is a paid option also.
http://www.visionsmarts.com/products/barcode-shell.html
There is this magical To-Address field in yahoo mail , which you can type-in the names and shows you an auto-complete list , click on the names and then a block shows up in the field , each block has a tiny x mark and you can just delete the names from the field and all remaining block shift to left to fill it's place !
how can i achieve this behavior for a address field in my application , with minimal effort on asp.net ?
plus : i mainly looking for a .net component which is preferably free to use , the commercial one's are appreciated .
Rather than a .NET component, take a look at some client side plugins. TagIt, for JQuery, is a good one for doing just what you are talking about doing. Here is a demo: http://webspirited.com/tagit/
You can also wire up a web service and retrieve values from the server based on the input the user has entered (auto complete functionality). It's definitely one close to what you are referring to.
I have an ASP.NET MVC application and I'm using CKEditor for text entry. I have turned off input validation so the HTML created from CKEditor can be passed into the controller action. I am then showing the entered HTML on a web page.
I only have certain buttons on CKEditor enabled, but obviously someone could send whatever text they want down. I want to be able to show the HTML on the page after the user has entered it. How can I validate the input, but still be able to show the few things that are enabled in the editor?
So basically I want to sanitize everything except for a few key things like bold, italics, lists and links. This needs to be done server side.
How about AntiXSS?
See my full answer here from similar question:
I have found that replacing the angel
brackets with encoded angel brackets
solves most problems
You could create a "whitelist" of sorts for the html tags you'd like to allow. You could start by HTML encoding the whole thing. Then, replace a series of "allowed" sequences, such as:
"<strong>" and "</strong>" back to "<strong>" and "</strong>"
"<em>" and "</em>" back to "<em>" and "</em>"
"<li>" and "</li>" back to ... etc. etc.
For things like the A tag, you could resort to a regular expression (since you'd want the href attribute to be allowed too). You would still want to be careful about XSS; someone else already recommended AntiXSS.
Sample Regexp to replace the A tags:
<a href="([^"]+)">
Then replace as
<a href="$1">
Good luck!