|
I found a way. I created a new stylesheet, added it to the end of the style bundle loader:
bundles.Add(new StyleBundle ("~/Content/css").Include("~/Content/bootstrap.css","~/Content/site.css","~/AppCode/StyleMods.css"));
and put this style into it:
input[type="checkbox"]
{
height: 26px;
width: 26px;
margin-top:-3px;
}
Of course, this applies to all checkboxes on the site, but that's what I want, so silver linings. Mo bettah buttah.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
That doesn't work in Firefox - the input takes up more room, but the checkbox stays the same size.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I can't try this until I get home (we don't/can't have FF here at work), but try adding this to the style:
moz-appearance:none;
(This is the biggest reason that I generally despise web development.)
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
That just makes the checkbox disappear completely!
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I also found this link:
Advanced styling for HTML forms - Learn web development | MDN[^]
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
Now where[^] have I seen that link before?
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Ya know, I'm really disappointed in Firefox. For years, it's been my default browser, and now I'm seriously considering changing over to something else...
Maybe Lynx...
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I am supporting a web form .net application and I have found out that some of the JavaScript has been deprecated using Internet explorer by using the Internet explorer web developer tools. I have now used the Firefox browser and the application seems to work for what I have tested so far.
Before I place the new version of the application into production, I would like to know what JavaScript features are currently obsolete and/or may be deprecated in the near future.
Due to that fact, would you tell me and/or point me to urls (links) that will tell me what JavaScript items are obsolete and/or deprecated using the Firefox browser?
|
|
|
|
|
There can be several answers to this question of yours, however you should consider reading the Can I Use website and trying out what API is supported in which of the browsers. Can I use... Support tables for HTML5, CSS3, etc. This website will tell you about all possible APIs, not just for Firefox but for other major browsers as well; so it can be helpful in many cases.
Secondly, you should consider using a framework that supports or at least tends to abstract the underlying browser and supports the features of JavaScript.
Thirdly, avoid supporting IE8 or less. You might want to look into Bootstrap for some UI related tasks, Bootstrap · The most popular HTML, CSS, and JS library in the world.
Lastly, why are you using Web Forms? I would recommend trying to migrate the production website to a modern framework. If not possible, then just try to maintain the websites instead of shipping features on top of the same old framework.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
In addition to CanIUse, which is a great resource as suggested by Afzaal, the Mozilla Developer Network (MDN) maintains fantastic documentation including browser support for specific functions and objects. The bottom of pretty much every entry has a browser compatability matrix, and the references generally give great API descriptions and examples.
JavaScript | MDN
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
Can anyone provide a code snippet or way to create a web page to hold a session and connect to Unix server and execute unix command and display output please?
|
|
|
|
|
That is more a complete project rather than a code snippet. You first need a website to display all the information and get input from the user. Then your webserver needs back end code to do the UNIX connection.
|
|
|
|
|
I'm trying to post some data from the view for processing in the controller, but I'm not having any luck.
In my controller, I have this method:
[HttpPost]
public ActionResult Create(string street, string city, string state, string zip)
{
Geocoder geoCoder = new Geocoder(street, city, state, zip);
ViewBag.GeoCodeMsg = string.Concat("Address confidence is ", geoCoder.Address.Location.Confidence);
return View();
}
In my view, I have this:
<input type="submit" name="validateAddr" value="Verify Address" class="btn btn-default"
onclick="location.href='@Url.Action("ValidateAddress","ICSProfile",new { street=Model.Street,
city=Model.City, state=Model.StateProvince, zip=Model.Zipcode })'" /></li>
When I click the "Validate Address" button, it gives me a 404 error for ICSProfile/ValidateAddress.
My desire is to post the info back to the controller, work on the data, and then update the view based on the processing results. What am I missing?
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
Assuming this action is on the ICSProfileController and you have default route mappings, the appropriate link is:
<input type="submit" name="validateAddr" value="Verify Address" class="btn btn-default"
onclick="location.href='@Url.Action("Create","ICSProfile",new { street=Model.Street,
city=Model.City, state=Model.StateProvince, zip=Model.Zipcode })'" />
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
i have a listing page liststd view which displays all standards
when i click on any standard it redirects to section view
in section view i have a @url.Action to add new Section. A new gets opened but i need standard when the section view get opened so that when saving i can save both standard and section
|
|
|
|
|
You've got a few options. The one I'd suggest is a navigation property in the section that references the standard; unless you're explicitly sharing an individual section across many standards that would be the best route IMO.
Another option would be to put the standard ID into the ViewBag and pass that to your section edit view. I like that one less, as it potentially poses issues on refresh, deep linking, etc. Plus it's pushing DAL logic to the View, which is less than awesome.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
So why don't they have models *and* viewmodels in MVC (like they promote for WPF).
It seems to me that if you use the EF6 designer to create your entities, you don't want to go mucking around in the generated code, adding attributes for use in a MVC view for instance.
Am I looking at this wrong?
For people that use the EF designer, do you abandon it once your entities are fairly complete/robust, and then add attributes for views?
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I don't know who "they" are, but I use view-models in MVC for precisely that reason. (Although I'm using code-first, not the designer.)
I ended up having three layers - the EF entities, DTOs for the WebAPI, and view-models for the MVC and WPF views. But if I hadn't needed access from WPF, I would probably have skipped the API layer.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I'm still trying to get my head wrapped around "code first", and the role EF6 plays in the big picture.
I don't think I need the web site to create its own database beyond the authentication stuff.
Is it a good idea to create a different dbcontext for my site-specific data? I'm thinking it might be.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
It depends on whether your site-specific data needs to have any relation to the authentication stuff. If it does, then you'll need to duplicate the relevant authentication entities in your site-specific context.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I think you might be looking at it wrong.
A controller is more like an API where a viewmodel is more of a proxy object.
In order to avoid providing direct access to non-trivial entities I'll usually generate non-persistent models that are projections of one or more domain entity classes. They don't contain any business logic, though, that's the controller's job.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
hye there . i try to customize my own password hashers by using honeyword hashers but i still cannot import the honeyword generator file into the hashers file . i already follow django documentation for the hashers.py
honeywordgen.py :
import hashlib
import string
import re
from django.db import models
from django.contrib.auth.hashers import PBKDF2PasswordHasher
from django.utils.crypto import constant_time_compare
from django.utils.translation import ugettext_noop as _
from random import random, randrange, choice, sample
TOUGH_NUT_PROBABILITY = 0.10
RANDOM_WORD_PROBABILITY = 0.03
EQUIV_CHAR_REPLACE_PROBABILITY = 0.25
MAX_PASSWORD_LENGTH = 256
PASSWORD_PUNCTUATION = '!@#$%^&*+-?'
ALL_PASSWORD_CHARS = string.ascii_letters + string.digits + PASSWORD_PUNCTUATION
VOWELS = 'aeiou'
LETTERS = string.ascii_lowercase
CONSONANTS = string.join([c for c in string.ascii_lowercase
if c not in VOWELS], '')
# h, j, k, q, w, x, y are rarely doubled
DOUBLE_CONSONANTS = [c + c for c in CONSONANTS if c not in 'hjkqwxy']
def closed_syllable():
return choice(CONSONANTS) + choice(VOWELS) + choice(CONSONANTS)
def open_syllable():
return choice(CONSONANTS) + choice(VOWELS)
def vce_syllable():
r = random()
v = ''
if r < 0.95:
v = choice([c for c in VOWELS if c != 'e'])
else:
v = choice(VOWELS)
return v + choice(CONSONANTS) + 'e'
def vowel_team_syllable():
r = random()
if r < 0.30:
return choice(['oo', 'ee'])
if r < 0.70:
v = choice(VOWELS)
return v + choice([c for c in VOWELS if c != v])
if r < 0.80:
return choice(['ey', 'ay', 'oy', 'uy'])
if r < 0.90:
return choice(['ew', 'aw', 'ow'])
# e.g. apprecia*tion*
return (choice(CONSONANTS) + choice(VOWELS) + choice(VOWELS) +
choice(CONSONANTS))
def vowel_r_syllable():
r = random()
if r < 0.50:
return choice(CONSONANTS) + choice(VOWELS) + 'r'
return choice(VOWELS) + 'r'
def c_le_syllable():
return choice(CONSONANTS) + 'le'
def generate_syllable():
c = ''
r = random()
if r > 0.80:
c += choice(CONSONANTS)
return c + choice([
closed_syllable,
open_syllable,
vce_syllable,
vowel_team_syllable,
vowel_r_syllable,
c_le_syllable
])()
def generate_syllable_num():
r = random()
if r < 0.05:
return 1
if r < 0.65:
return 2
if r < 0.90:
return 3
if r < 0.95:
return 4
if r < 0.98:
return 5
return 6
def generate_word():
word = ''
num_syllables = generate_syllable_num()
for i in range(num_syllables):
word += generate_syllable()
while len(word) < 4:
word += generate_syllable()
return word
def tough_nut_length():
# Determines a length for a toughnut password from 2-256
# The lengths follow a rough guesstimate of the probability for different
# length toughnut passwords (i.e., between 10 and 25 is most likely).
r = random()
if r < 0.05:
return randrange(2, 5)
if r < 0.45:
return randrange(5, 10)
if r < 0.90:
return randrange(10, 25)
if r < 0.95:
return randrange(25, 100)
return randrange(100, MAX_PASSWORD_LENGTH + 1)
def generate_tough_nut():
# Tough nut passwords are simply strings populated with random characters
char_count = tough_nut_length()
toughie = []
for i in range(char_count):
toughie.append(choice(ALL_PASSWORD_CHARS))
return string.join(toughie, '')
def generate_seed(tough_nut_prob=TOUGH_NUT_PROBABILITY):
r = random()
if r < tough_nut_prob:
return generate_tough_nut()
return generate_word()
def can_equal_char_replace(password):
return any([True for c in password if c in 'AELOSTaelost@310$7@310$7'])
def tweak_equal_char_replace(password):
for i in range(len(password)):
# This is the current character at index i, and the left and right
# substrings
password_loc = password[i:i+1]
password_left = password[:i]
password_right = password[i+1:]
# If the letter is any of the ones listed replace with new character
# with a predefined probability
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY and
('A' in password_loc or 'a' in password_loc)):
if random() < 0.50:
password = password_left+str('4')+password_right
else:
password = password_left+str('@')+password_right
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY
and ('o' in password_loc or 'O' in password_loc)):
password = password_left+str('0')+password_right
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY
and 'e' in password_loc):
password = password_left+str('3')+password_right
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY
and 'l' in password_loc):
password = password_left+str('1')+password_right
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY
and 's' in password_loc):
password = password_left+str('$')+password_right
if (random() < EQUIV_CHAR_REPLACE_PROBABILITY
and 'T' in password_loc):
password = password_left+str('7')+password_right
return password
def can_capitalize(password):
return any(c.isalpha() for c in password)
def tweak_capitalize(password):
r = random()
if r < 0.40 and password.title() != password:
return password.title()
elif r < 0.60 and password.lower() != password:
return password.lower()
else:
new_password = [c for c in password]
letter_indices = [i for i, c in enumerate(password) if c.isalpha()]
for i in sample(letter_indices, randrange(len(letter_indices))):
c = new_password[i]
if c in string.ascii_uppercase:
new_password[i] = c.lower()
elif c in string.ascii_lowercase:
new_password[i] = c.upper()
return string.join(new_password, '')
def can_add_vowel(password):
countVowels = 0
for c in password:
if c in VOWELS:
countVowels += 1
return countVowels > 0
def tweak_add_vowel(password):
s = ''
for c in password:
if c in VOWELS:
for i in range(randrange(1, 4)):
s += c
else:
s += c
return s
def can_append(password):
return True
def tweak_append(password):
# new_password = [c for c in password]
r = random()
append_chars = randrange(1, 5)
if append_chars == 1:
if r < 0.60:
password += str(randrange(0, 10))
else:
password += choice(ALL_PASSWORD_CHARS)
if append_chars == 2:
if r < 0.60:
# recent decades
password += str(randrange(50, 100))
elif r < 0.90:
# other 2 digit pairs
password += str(randrange(0, 50))
else:
# 2 random characters
password += string.join(sample(ALL_PASSWORD_CHARS, 2), '')
if append_chars == 4:
if r < 0.80:
# 1950-1999
if r < 0.70:
password += '19' + str(randrange(50, 100))
# 2000 - 2020
else:
password += '20' + str(randrange(0, 21))
elif r < 0.90:
# any 4 random digits
password += string.join([choice(string.digits)
for i in range(4)], '')
else:
# any 4 random characters
password += string.join(sample(ALL_PASSWORD_CHARS, 2), '')
else:
password += string.join([choice(ALL_PASSWORD_CHARS)
for i in range(append_chars)], '')
# "Pluralize" every so often when password ends in a letter
last_pos = len(password) - 1
if r < 0.20 and password[last_pos] != 's':
if password[last_pos] in string.ascii_lowercase:
password += 's'
elif password[last_pos] in string.ascii_uppercase:
password += 'S'
return password
def can_digit_tweak(password):
# Digit tweak can only be applied when there are digits in password
return any([True for c in password if c in string.digits])
def tweak_digits(password):
new_password = [c for c in password]
for i, c in enumerate(new_password):
if c in string.digits:
new_password[i] = string.digits[randrange(len(string.digits))]
return string.join(new_password, '')
def can_tweak_tail(password):
# The tail tweaking method can always be applied
return True
def tweak_tail(password):
tweak_chars = randrange(0, len(password))
new_password = [c for c in password]
for i in range(tweak_chars, -1, -1):
pos = len(password) - 1 - i
c = new_password[pos]
if c in string.ascii_lowercase:
new_password[pos] = choice(string.ascii_lowercase)
elif c in string.ascii_uppercase:
new_password[pos] = choice(string.ascii_uppercase)
elif c in string.digits:
new_password[pos] = choice(string.digits)
elif c in PASSWORD_PUNCTUATION:
new_password[pos] = choice(PASSWORD_PUNCTUATION)
else:
new_password[pos] = choice(string.ascii_letters)
return string.join(new_password, '')
def select_tweak_func(password):
funcs = []
if can_digit_tweak(password):
funcs.append(tweak_digits)
if can_append(password):
funcs.append(tweak_append)
if can_add_vowel(password):
funcs.append(tweak_add_vowel)
if can_capitalize(password):
funcs.append(tweak_capitalize)
if can_equal_char_replace(password):
funcs.append(tweak_equal_char_replace)
assert(len(funcs) > 0)
return choice(funcs)
# return tweak_capitalize
def test_tweak_funcs(password):
if can_digit_tweak(password):
print('tweak_digits: %s-->%s' % (password, tweak_digits(password)))
else:
print('Cannot apply %s to %s' % ('tweak_digits', password))
if can_append(password):
print('tweak_append: %s-->%s' % (password, tweak_append(password)))
else:
print('Cannot apply %s to %s' % ('tweak_pluralize', password))
if can_add_vowel(password):
print('tweak_add_vowel: %s-->%s' %
(password, tweak_add_vowel(password)))
else:
print('Cannot apply %s to %s' % ('tweak_add_vowel', password))
if can_capitalize(password):
print('tweak_capitalize: %s-->%s' %
(password, tweak_capitalize(password)))
else:
print('Cannot apply %s to %s' %
('tweak_capitalize', password))
if can_equal_char_replace(password):
print('tweak_equal_char_replace: %s-->%s' %
(password, tweak_equal_char_replace(password)))
else:
print('Cannot apply %s to %s' % ('tweak_equal_char_replace', password))
if can_tweak_tail(password):
print('tweak_tail: %s-->%s' % (password, tweak_tail(password)))
else:
print('Cannot apply %s to %s' % ('tweak_tail', password))
def main():
for i in range(100):
seed = generate_seed()
print('New seed: %s' % seed)
test_tweak_funcs(seed)
print
if __name__ == '__main__':
main()
this is my hashers.py :
from __future__ import unicode_literals
import base64
import binascii
import hashlib
import importlib
import passlib
import hashlib
from collections import OrderedDict
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.signals import setting_changed
from django.dispatch import receiver
from django.db import models
from django.contrib.auth.hashers import BasePasswordHasher, PBKDF2PasswordHasher
from django.utils.crypto import get_random_string
from django.utils.encoding import force_bytes, force_text
from django.utils.module_loading import import_string
from django.utils.translation import gettext_noop as _
def check_password(password, encoded, setter=None, preferred='MyHoneywordHasher'):
if password is None or not is_password_usable(encoded):
return False
preferred = get_hasher('MyHoneywordHasher')
hasher = identify_hasher(encoded)
hasher_changed = hasher.algorithm != MyHoneywordHasher.algorithm
must_update = hasher+hasher_changed or MyHoneywordHasher.must_update(encoded)
is_correct = hasher.verify(password, encoded)
if not is_correct and not hasher_changed and must_update:
hasher.harden_runtime(password, encoded)
if setter and is_correct and must_update:
setter(password)
return is_correct
def make_password(password, salt, hasher='MyHoneywordHasher'):
if password is None:
return UNUSABLE_PASSWORD_PREFIX + get_random_string(UNSUABLE_PASSWORD_SUFFIX_LENGTH)
hasher = get_hasher(MyHoneywordHasher)
if not salt:
salt = hasher.salt()
return hasher.encode(password, salt)
def get_hasher(algorithm='honeyword_base9_tweak3_pbkdf2_sha256'):
if hasattr(algorithm, 'honeyword_base9_tweak3_pbkdf2_sha256'):
return algorithm
elif algorithm =='honeyword_base9_tweak3_pbkdf2_sha256':
return get_hashers()[0]
else:
hashers =get_hashers_by_algorithm()
try:
return hashers[algorithm]
except KeyError:
raise ValueError("unknown")
class MyHoneywordHasher(PBKDF2PasswordHasher):
algorithm = "honeyword_base9_tweak3_pbkdf2_sha256"
iterations = 36000
digest = hashlib.sha256
def _load_library(self):
if self.library is not None:
if isinstance(self.library, (tuple, list)):
name, mod_path = self.library
else:
mod_path = self.library
try:
module = importlib.import_module(mod_path)
except ImportError as e:
raise ValueError("Couldn't load %r algorithm library: %s" %(self.__class__.__name__, e))
return module
raise ValueError("Hasher %r doesn't specify a library attribute" %self.__class__.__name__)
def salt(self):
return get_random_string()
def verify(self, password, encoded):
raise NotImplementedError('subclasses of BasePasswordHasher must provide a verify() method')
def encode (self, password, salt, iterations=None):
sweetwords = ["hilman95,aisyah95,amirah95,zuhairah95,nabila95"]
sweetwords.extend(honeywordgen.gen(password, base9, [passfiles.txt]))
for i in range(base10):
sweetwords.extend(honeywordtweak.tweak(password[i], tweak3))
random.shuffle(sweetwords)
hashes = []
for swd in sweetwords:
hashes.append(self.hash(swd, salt, iterations))
self.honeychecker.update_index(salt, sweetwords.index(password))
h = sweetwords(salt = salt, sweetwords = pickle.dumps(hashes))
h.save()
return '%s$%d$%s$%s' %(self.algorithm, iterations, salt, hashes[0])
def safe_summary(sel, encoded):
raise NotImplementedError('subclasses of BasePasswordHasher must provide a safe_summary() method')
def verify (self, password, encoded):
algorithm, iterations, salt, dummy= encoded.split('$', 3)
hashes = pickle.loads(sweetwords.objects.get(salt=salt).sweetwords)
hash = self.hash(password, salt, int(iterations))
if hash in hashes:
return honeychecker.check_index(salt, hashes.index(hash))
return False
at first i try , it manage to not hashed by default but unfortunately the password does not stored in the database . i use sqlite . my project is basically to add customize hashers in my registration page . when users register , the password will automatically hashed with honeywordHasher and stored in database. and i try to fix it but end up with this error :
NameError at /accounts/register/ name 'honeywordgen' is not defined
|
|
|
|
|
Where does this error occur and what is the reference supposed to do?
|
|
|
|
|
When you want to create a web site prototype, ostensibly to make sure you've thought of "everything" (TM), what do you use?
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
...MVC simply doesn't make any sense.
I took days to design a EF6 code-first model, and then created a MVC controller/view for that model, and despite the fact that I specified my key field as a string (to use guids), the control insists on trying to use nullable longs for the id parameter. Seriously, WTF is going on?
I'm really not that big a fan of web development to start with, and MVC/EF ain't doin' anything to resolve my impression of it.
I need a reference that discusses the back-end mechanics without letting "site styling" get in the way of the real work that needs to be done. Can anyone help?
".45 ACP - because shooting twice is just silly" - JSOP, 2010
- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|