Primefaces password feedback text localization - primefaces

I'm having a problem translating the ff text from primefaces's password field:
"Please enter a password", "Weak", "Good", "Strong", etc.
Any idea how to override the default translation values? I tried searching the primefaces jar but can't see them in Messages.properties file.
Thanks,
czetsuya

Look at the the showcase:
http://www.primefaces.org/showcase/ui/password.jsf
Here is the turkish example copied from there:
<p:password id="turkishFeedback" value="#{passwordBean.password3}" feedback="true"
promptLabel="Lütfen şifre giriniz"
weakLabel="Zayıf"
goodLabel="Orta seviye"
strongLabel="Güçlü" />

Related

How to disabled or non-editable text editor using CSS or jQuery?

I am using a rich text editor on my portal. Is there any way not to edit this without permission from the admin? I mean can we disabled it?
I also testing this jQuery rich text
I tried the below code but it's still allowing me to edit.
HTML
<textarea class="contenteditor1 disabledme" name="message" hidden="hidden"><?php echo $info['message'];?></textarea>
jquery
$('.disabledme').attr('disabled', 'disabled');
If you look rich text editor HomePage you will know that there is a future ReadOnly
editor1.setReadOnly(true);
This will disable the textEditor.
Read more about this here
to set readonly true
data.attr("readonly",true);
to set readonly false
data.attr("readonly",false);
Here is the proper solution, you need to edit the few lines of code:
First in your main index.html file you have to pass two arguments, one blank and one with either true or false, true means editable and false means not editable.
$('.content').richText('',false);
Than in your jquery.richtext.js file on line at 27 add one more argument (iseditable) in function like below:
$.fn.richText = function (options,iseditable) {
Than on same jquery.richtext.js file at line 535 replace the whole line with the below code like this:
var $editorView = $('', {class: "richText-editor", id: editorID, contenteditable: iseditable});

Primefaces "reset fail" example

The documentation on the Primefaces showcase page gives a number of examples for ajax and non-ajax reset buttons. One is called "reset fail" and it can be found here. It simply involves calling an actionListener which sets all relevant backing bean fields to null.
I tried "reset fail" and it seems to do the job. So why is it a "fail" example and why do the docs say it "won't work"?
Thanks!
OK try this...
On that Showcase demo page enter "a" in the first field and "bbb" in the second field and press "Submit". You will get a validation error.
Now press "Reset Fail". See how the first field is still highlighted RED as validation has failed?
Now press "Reset Tag" and you will see the RED highlighted field go away.
So the difference is the Reset Fail doesn't reset the validation failures and Reset Tag does.
In the end, a combination of actionListener= and resetValues="true" worked for me, i.e:
<p:commandButton value="Reset" actionListener="#{otb.resetFail}" process="#this" update="#form" resetValues="true" style="margin-left:20px;"/>
Without the actionListener my fields don't clear properly. But the resetValues attribute is needed to get around the validation issue. I got this idea from the StanL answer in this post.
One more thing - in contrast to the example in the PF demo, my bean's "resetFail" method just nulls out the fields. It does not call PrimeFaces.current().resetInputs("form:panel"); (I don't have that library). Still, it works fine.

TVML - how to modify formTemplate to show "pin entry"

TVML's formTemplate can easily be adapted to only allow numeric input:
<formTemplate>
<textField keyboardType="numberPad">0000</textField>
<footer>
<button>
<text>${TEXT("Submit")}</text>
</button>
</footer>
</formTemplate>
This gives a page like...
I would like to reduce it even further to only display a "pin entry" screen as shown here:
Is this possible with TVML, without hosting an own UIControl? I have nowhere found any mentioning of changing styles like this. Any idea how to achieve this? Thanks!
Use secure attribute in textField
https://developer.apple.com/library/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/TVJSAttributes.html#//apple_ref/doc/uid/TP40015064-CH42-SW37
<textField keyboardType="numberPad" secure="true">0000</textField>
What you are referring to is the TVDigitEntryViewController. You can read more about it here:
https://developer.apple.com/design/human-interface-guidelines/tvos/interface-elements/digit-entry-views/
TVDigitEntryViewController
A view controller that enables the user to enter digits, like a passcode, in your app.
https://developer.apple.com/documentation/tvuikit/tvdigitentryviewcontroller

Localization doesn't work for german?

I googled a lot and did these changes to my project:
.csproj:
<SupportedCultures>
en-US;de-DE;ru-RU;
</SupportedCultures>
WPAppManifest.xaml:
<DefaultLanguage xmlns="" code="en-US" />
<Languages xmlns="">
<Language code="en-US" />
<Language code="de-DE" />
<Language code="ru-RU" />
</Languages>
And of course I have AppResources.de-DE.resx, AppResources.en-US.resx, AppResources.resx and AppResources.ru-RU.resx.
When I set the phone to russian, the app starts in russian as expected. But that doesn't work with german. I checked the AppResources-files many times. It's all in there, they should work. but somehow de-DE doesn't get recognized.
Tried the same with simple "en;de;ru;" with the same result.
Any ideas?
Edit:
I found this tutorial: http://www.silverlightshow.net/items/Windows-Phone-8-Localization.aspx and they also use "de". So I changed all appearances of those strings to "de", "en" and "ru". Still russian works, german appears as english - the default language =/
Okay, stupid, but it was in the project's properties. For some reason the defaultlanguage was set to german.
Still think that it's in confusingly many places. I'll summarize them for everybody who might need it in the future:
project's properties, 1st tab "supported cultures" and "asseblmy information" button!
WPAppManifest.xaml view Code
AppResources.xx.resx
inside AppResources files the "ResourceLanguage"-tag should be set to "de", "en", "fr" or whatever.
That's many places and I hope I didn't forget one O-o

Stop LastPass filling out a form

Is there a way to prevent the LastPass browser extension from filling out a HTML-based form with an input field with the name "username"?
This is an hidden field, so I don't want any software to use this field for their purposes:
<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">
The solution should not be like "rename the input field".
Adding
data-lpignore="true"
to an input field disabled the grey LastPass [...] box for me.
Sourced from LastPass.com
Two conditions have to be met:
The form (not the element) needs to have autocomplete="off" attribute
Lastpass user needs to have this option enabled:
(old) Settings > Advanced > Allow pages to disable autofill
(new) Account Options > Extension Preferences > Advanced > Respect AutoComplete=off: allow websites to disable Autofill
So this depends on both user and the developer.
What worked for me is having word "-search-" in the id of the form, something like <form id="affiliate-search-form"> - and lastpass doesn't add its elements onto the form inputs. It works with something simpler like <form id="search"> but doesn't work with <form id="se1rch">
I know I'm late to the party here, but I found this when I was trying to stop lastpass from ruining my forms. #takeshin is correct in that autocomplete is not enough. I ended up doing the hack below just to hide the symbol. Not pretty, but I got rid of the icon.
If any lastpass developers are reading this, please give us an attribute to use, so we don't have to resort to stuff like this.
form[autocomplete="off"] input[type="text"] {
background-position: 150% 50% !important;
}
I think lastpass honors the autocomplete="off" attribute for inputs, but I'm not 100% sure.
EDIT
As others have pointed out. this only works if the user has last pass configured to honor this.
For me worked either type=search which is kinda equal to text or using role=note.
You can check the LastPass-JavaScript but it's huge, may be you can find some workaround there, from what I saw they only check 4 input types, so input type=search would be one workaround:
!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))
Also those are the role-keywords they seem to ignore:
var c = b.getAttribute("role");
switch (c) {
case "navigation":
case "banner":
case "contentinfo":
case "note":
case "search":
case "seealso":
case "columnheader":
case "presentation":
case "toolbar":
case "directory":`
I checked LastPass' onloadwff.js, prepare for 26.960 lines of code :)
Add "search" to input id
<input type="text" name="user" id="user-search"/>
Bit late to the party but I have just achieved this with modifying the form with:
<form autocomplete="off" name="lastpass-disable-search">
I guess this fools lastpass into thinking that it's a search form. This does not work for password fields however! Lastpass ignores the name field in this case.
The only way I've managed to do this is to add the following directly at the top of the form:
<form autocomplete="off">
<div id="lp" ><input type="text" /><input type="password" /></div><script type="text/javascript">setTimeout(function(){document.getElementById('lp').style.display = 'none'},75);</script>
</form>
It causes a nasty flicker but does remove the autofill nonsense - though it does still show the "generate password" widget. LastPass waits until domready and then checks to see if there are any visible password fields, so it's not possible to hide or shrink the mock fields above.
This ES6 style code was helpful for me as it added data-lpignore to all my input controls:
const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
To access a specific INPUT control, one could write something like this:
document.getElementById('userInput').setAttribute("data-lpignore", "true");
Or, you can do it by class name:
const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
For this latest October 2019 buggy release of Lastpass, this simple fix seems to be best.
Add
type="search"
to your input.
The lastpass routine checks the type attribute to determine what to do with its autofill, and it does nothing on this html5 type of "search." This fix is mildly hacky, but it's a one line change that can be easily removed when they fix their buggy script.
Note: After doing this, your input might appear to be styled differently by some browsers if they pick up on the type attribute. If you observe this, you can prevent it from happening by setting the browser-specific CSS properties -webkit-appearance and -moz-appearance to 'none' on your input.
None of the options here (autocomplete, data-lpignore etc.) prevented LastPass from auto-filling my form fields unfortunately. I took a more sledge-hammer approach to the problem and asynchronously set the input name attributes via JavaScript instead. The following jQuery-dependent function (invoked from the form's onsubmit event handler) did the trick:
function setInputNames() {
$('#myForm input').each(function(idx, el) {
el = $(el);
if (el.attr('tmp-name')) {
el.attr('name', el.attr('tmp-name'));
}
});
}
$('#myForm').submit(setInputNames);
In the form, I simply used tmp-name attributes in place of the equivalent name attributes. Example:
<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>
Update 2019-03-20
I still ran into difficulties with the above on account of AngularJS depending upon form fields having name attributes in order for ngMessages to correctly present field validation error messages.
Ultimately, the only solution I could find to prevent LastPass filling password fields on my Password Change form was to:
Avoid using input[type=password]entirely, AND
to not have 'password' in the field name
Since I need to be able to submit the form normally in my case, I still employed my original solution to update the field names 'just in time'. To avoid using password input fields, I found this solution worked very nicely.
Here's what worked for me to prevent lastpass from filling a razor #Html.EditorFor box in Chrome:
Click the active LastPass icon in your toolbar, then go to Account Options > Extension Preferences.
On this screen check "Don't overwrite fields that are already filled" (at the bottom)
Next, click "advanced" on the left.
On this screen check "Respect AutoComplete=off: allow websites to disable Autofill".
I did not need to do anything special in my ASP cshtml form but I did have a default value in the form for the #Html.EditorFor box.
I hope this helps and works for someone. I could not find any Razor-specific help on this problem on the web so I thought I'd add this since I figured it out with the help of above link and contributions.
For someone who stumbles upon this - autocomplete="new-password" on password field prevents LastPass from filling the password, which in combination with data-lpignore="true" disables it at all
Try this one:
[data-lastpass-icon-root], [data-lastpass-root] {
display: none !important;
}
Tried the -search rename but for some reason that did not work. What worked for me is the following:
mark form to autocomplete - autocomplete="off"
change the form field input type to text
add a new class to your css to mask the input, simulates a password field
css bit: input.masker {
-webkit-text-security: disc;
}
Tried and tested in latest versions of FF and Chrome.
type="hidden" autocomplete="off"
Adding this to my input worked for me. (the input also had visibility: hidden css).
Update NOV 2021
I have noticed that all LastPass widgets are wrapped in div of class css-1obar3y.
div.css-1obar3y {
display: none!important;
}
Works perfectly for me
None of these work as of 10/11/2022.
What I did was add the following to a fake password field
<input id="disable_autofill1" name="disable_autofill1"
style="height:0; width:0; background:transparent;
border:none;padding:0.3px;margin:0;display:block;"
type="password">
This seems to be enough to minimize the size this element takes on screen (pretty much 0 for me) while still not triggering last pass's vicious algorithm. Put it before the real password field.
I'm sure a variant of this could be used to fool last pass for other fields where we don't need autofill or to suggest a new password.