Jump to content

Village Idiot

Members
  • Posts

    187
  • Joined

  • Last visited

Everything posted by Village Idiot

  1. Awesome! Wish we had snow up here.
  2. Just been wondering about this for the last few mins... not just me then! Edit: Seems to be ok now.
  3. You've pretty much sussed it yourself from what you said - the autopopulating was screwing things up. I changed this // fills in the input box w/the first match (assumed to be the best match) function autoFill(sValue){ // if the last user key pressed was backspace, don't autofill if( lastKeyPressCode != 8 ){ // fill in the value (keep the case the user has typed) $input.val($input.val() + sValue.substring(prev.length)); // select the portion of the value not typed by the user (so the next character will erase) createSelection(prev.length, sValue.length); } } to // fills in the input box w/the first match (assumed to be the best match) function autoFill(sValue){ // if the last user key pressed was backspace, don't autofill if( lastKeyPressCode != 8 ){ //$input.val(sValue); // select the portion of the value not typed by the user (so the next character will erase) //createSelection(prev.length, sValue.length); } }; I should've removed these lines, but was lazy and just commented it out instead . What it does is stop the text field from getting automatically populated with the closest match - this was causing problems narrowing down the results when you typed the next character. and this function matchSubset(s, sub) { if (!options.matchCase) s = s.toLowerCase(); var i = s.indexOf(sub); if (i == -1) return false; return i == 0 || options.matchContains; }; to function matchSubset(s, sub) { if (!options.matchCase) s = s.toLowerCase(); var i = s.indexOf(sub); if (i == -1) return false; //return i == 0 || options.matchContains; return true; }; This is called everytime you type a 2nd/3rd/4th letter and it narrows down the original list of matches that were shown. Before it was only returning true where i = 0, (i.e. if "ab" was a substring of "aberdeen" but not if "de" was a substring of "aberdeen", as i would be 4 in that case. Now it returns true if there's a match anywhere in the string.
  4. Ok, think I've got it now... jQuery.autocomplete = function(input, options) { // Create a link to self var me = this; // Create jQuery object for input element var $input = $(input).attr("autocomplete", "off"); // Apply inputClass if necessary if (options.inputClass) $input.addClass(options.inputClass); // Create results var results = document.createElement("div"); // Create jQuery object for results var $results = $(results); $results.hide().addClass(options.resultsClass).css("position", "absolute"); if( options.width > 0 ) $results.css("width", options.width); // Add to body element $("body").append(results); input.autocompleter = me; var timeout = null; var prev = ""; var active = -1; var cache = {}; var keyb = false; var hasFocus = false; var lastKeyPressCode = null; // flush cache function flushCache(){ cache = {}; cache.data = {}; cache.length = 0; }; // flush cache flushCache(); // if there is a data array supplied if( options.data != null ){ var sFirstChar = "", stMatchSets = {}, row = []; // no url was specified, we need to adjust the cache length to make sure it fits the local data store if( typeof options.url != "string" ) options.cacheLength = 1; // loop through the array and create a lookup structure for( var i=0; i < options.data.length; i++ ){ // if row is a string, make an array otherwise just reference the array row = ((typeof options.data[i] == "string") ? [options.data[i]] : options.data[i]); /*// if the length is zero, don't add to list if( row[0].length > 0 ){ // get the first character sFirstChar = row[0].substring(0, 1).toLowerCase(); // if no lookup array for this character exists, look it up now if( !stMatchSets[sFirstChar] ) stMatchSets[sFirstChar] = []; // if the match is a string stMatchSets[sFirstChar].push(row); }*/ // if the length is zero, don't add to list if( row[0].length > 0 ){ // Go through each character in the data string and index a match var tmpArray = []; for (var j = 1; j <= row[0].length; j++) { // get the next character sNextChar = row[0].substring(j-1, j).toLowerCase(); // Check whether this character already exists in the temp array. // If it does, we skip it to ensure the phrase is not added twice // to the cache var alreadyIndexed = false; for (var k = 0; k < tmpArray.length; k++){ if(tmpArray[k] == sNextChar) { alreadyIndexed = true; } } // Character has not been skipped so index the match if (!alreadyIndexed) { tmpArray.push(sNextChar); // if no lookup array for this character exists, look it up now if( !stMatchSets[sNextChar] ) stMatchSets[sNextChar] = []; // if the match is a string stMatchSets[sNextChar].push(row); } } } } // add the data items to the cache for( var k in stMatchSets ){ // increase the cache size options.cacheLength++; // add to the cache addToCache(k, stMatchSets[k]); } } $input .keydown(function(e) { // track last key pressed lastKeyPressCode = e.keyCode; switch(e.keyCode) { case 38: // up e.preventDefault(); moveSelect(-1); break; case 40: // down e.preventDefault(); moveSelect(1); break; case 9: // tab case 13: // return if( selectCurrent() ){ // make sure to blur off the current field $input.get(0).blur(); e.preventDefault(); } break; default: active = -1; if (timeout) clearTimeout(timeout); timeout = setTimeout(function(){onChange();}, options.delay); break; } }) .focus(function(){ // track whether the field has focus, we shouldn't process any results if the field no longer has focus hasFocus = true; }) .blur(function() { // track whether the field has focus hasFocus = false; hideResults(); }); hideResultsNow(); function onChange() { // ignore if the following keys are pressed: [del] [shift] [capslock] if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide(); var v = $input.val(); if (v == prev) return; prev = v; if (v.length >= options.minChars) { $input.addClass(options.loadingClass); requestData(v); } else { $input.removeClass(options.loadingClass); $results.hide(); } }; function moveSelect(step) { var lis = $("li", results); if (!lis) return; active += step; if (active < 0) { active = 0; } else if (active >= lis.size()) { active = lis.size() - 1; } lis.removeClass("ac_over"); $(lis[active]).addClass("ac_over"); // Weird behaviour in IE // if (lis[active] && lis[active].scrollIntoView) { // lis[active].scrollIntoView(false); // } }; function selectCurrent() { var li = $("li.ac_over", results)[0]; if (!li) { var $li = $("li", results); if (options.selectOnly) { if ($li.length == 1) li = $li[0]; } else if (options.selectFirst) { li = $li[0]; } } if (li) { selectItem(li); return true; } else { return false; } }; function selectItem(li) { if (!li) { li = document.createElement("li"); li.extra = []; li.selectValue = ""; } var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML); input.lastSelected = v; prev = v; $results.html(""); $input.val(v); hideResultsNow(); if (options.onItemSelect) setTimeout(function() { options.onItemSelect(li) }, 1); }; // selects a portion of the input string function createSelection(start, end){ // get a reference to the input element var field = $input.get(0); if( field.createTextRange ){ var selRange = field.createTextRange(); selRange.collapse(true); selRange.moveStart("character", start); selRange.moveEnd("character", end); selRange.select(); } else if( field.setSelectionRange ){ field.setSelectionRange(start, end); } else { if( field.selectionStart ){ field.selectionStart = start; field.selectionEnd = end; } } field.focus(); }; // fills in the input box w/the first match (assumed to be the best match) function autoFill(sValue){ // if the last user key pressed was backspace, don't autofill if( lastKeyPressCode != 8 ){ //$input.val(sValue); // select the portion of the value not typed by the user (so the next character will erase) //createSelection(prev.length, sValue.length); } }; /* // fills in the input box w/the first match (assumed to be the best match) function autoFill(sValue){ // if the last user key pressed was backspace, don't autofill if( lastKeyPressCode != 8 ){ // fill in the value (keep the case the user has typed) $input.val($input.val() + sValue.substring(prev.length)); // select the portion of the value not typed by the user (so the next character will erase) createSelection(prev.length, sValue.length); } };*/ function showResults() { // get the position of the input field right now (in case the DOM is shifted) var pos = findPos(input); // either use the specified width, or autocalculate based on form element var iWidth = (options.width > 0) ? options.width : $input.width(); // reposition $results.css({ width: parseInt(iWidth) + "px", top: (pos.y + input.offsetHeight) + "px", left: pos.x + "px" }).show(); }; function hideResults() { if (timeout) clearTimeout(timeout); timeout = setTimeout(hideResultsNow, 200); }; function hideResultsNow() { if (timeout) clearTimeout(timeout); $input.removeClass(options.loadingClass); if ($results.is(":visible")) { $results.hide(); } if (options.mustMatch) { var v = $input.val(); if (v != input.lastSelected) { selectItem(null); } } }; function receiveData(q, data) { if (data) { $input.removeClass(options.loadingClass); results.innerHTML = ""; // if the field no longer has focus or if there are no matches, do not display the drop down if( !hasFocus || data.length == 0 ) return hideResultsNow(); if ($.browser.msie) { // we put a styled iframe behind the calendar so HTML SELECT elements don't show through $results.append(document.createElement('iframe')); } results.appendChild(dataToDom(data)); // autofill in the complete box w/the first match as long as the user hasn't entered in more data if( options.autoFill && ($input.val().toLowerCase() == q.toLowerCase()) ) autoFill(data[0][0]); showResults(); } else { hideResultsNow(); } }; function parseData(data) { if (!data) return null; var parsed = []; var rows = data.split(options.lineSeparator); for (var i=0; i < rows.length; i++) { var row = $.trim(rows[i]); if (row) { parsed[parsed.length] = row.split(options.cellSeparator); } } return parsed; }; function dataToDom(data) { var ul = document.createElement("ul"); var num = data.length; // limited results to a max number if( (options.maxItemsToShow > 0) && (options.maxItemsToShow < num) ) num = options.maxItemsToShow; for (var i=0; i < num; i++) { var row = data[i]; if (!row) continue; var li = document.createElement("li"); if (options.formatItem) { li.innerHTML = options.formatItem(row, i, num); li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if (row.length > 1) { extra = []; for (var j=1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; ul.appendChild(li); $(li).hover( function() { $("li", ul).removeClass("ac_over"); $(this).addClass("ac_over"); active = $("li", ul).indexOf($(this).get(0)); }, function() { $(this).removeClass("ac_over"); } ).click(function(e) { e.preventDefault(); e.stopPropagation(); selectItem(this) }); } return ul; }; function requestData(q) { if (!options.matchCase) q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache(q) : null; // recieve the cached data if (data) { receiveData(q, data); // if an AJAX url has been supplied, try loading the data now } else if( (typeof options.url == "string") && (options.url.length > 0) ){ $.get(makeUrl(q), function(data) { data = parseData(data); addToCache(q, data); receiveData(q, data); }); // if there's been no data found, remove the loading class } else { $input.removeClass(options.loadingClass); } }; function makeUrl(q) { var url = options.url + "?q=" + encodeURI(q); for (var i in options.extraParams) { url += "&" + i + "=" + encodeURI(options.extraParams[i]); } return url; }; function loadFromCache(q) { if (!q) return null; if (cache.data[q]) return cache.data[q]; if (options.matchSubset) { for (var i = q.length - 1; i >= options.minChars; i--) { var qs = q.substr(0, i); var c = cache.data[qs]; if (c) { var csub = []; for (var j = 0; j < c.length; j++) { var x = c[j]; var x0 = x[0]; if (matchSubset(x0, q)) { csub[csub.length] = x; } } return csub; } } } return null; }; function matchSubset(s, sub) { if (!options.matchCase) s = s.toLowerCase(); var i = s.indexOf(sub); if (i == -1) return false; //return i == 0 || options.matchContains; return true; }; this.flushCache = function() { flushCache(); }; this.setExtraParams = function(p) { options.extraParams = p; }; this.findValue = function(){ var q = $input.val(); if (!options.matchCase) q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache(q) : null; if (data) { findValueCallback(q, data); } else if( (typeof options.url == "string") && (options.url.length > 0) ){ $.get(makeUrl(q), function(data) { data = parseData(data) addToCache(q, data); findValueCallback(q, data); }); } else { // no matches findValueCallback(q, null); } } function findValueCallback(q, data){ if (data) $input.removeClass(options.loadingClass); var num = (data) ? data.length : 0; var li = null; for (var i=0; i < num; i++) { var row = data[i]; if( row[0].toLowerCase() == q.toLowerCase() ){ li = document.createElement("li"); if (options.formatItem) { li.innerHTML = options.formatItem(row, i, num); li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if( row.length > 1 ){ extra = []; for (var j=1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; } } if( options.onFindValue ) setTimeout(function() { options.onFindValue(li) }, 1); } function addToCache(q, data) { if (!data || !q || !options.cacheLength) return; if (!cache.length || cache.length > options.cacheLength) { flushCache(); cache.length++; } else if (!cache[q]) { cache.length++; } cache.data[q] = data; }; function findPos(obj) { var curleft = obj.offsetLeft || 0; var curtop = obj.offsetTop || 0; while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } return {x:curleft,y:curtop}; } } jQuery.fn.autocomplete = function(url, options, data) { // Make sure options exists options = options || {}; // Set url as option options.url = url; // set some bulk local data options.data = ((typeof data == "object") && (data.constructor == Array)) ? data : null; // Set default values for required options options.inputClass = options.inputClass || "ac_input"; options.resultsClass = options.resultsClass || "ac_results"; options.lineSeparator = options.lineSeparator || "\n"; options.cellSeparator = options.cellSeparator || "|"; options.minChars = options.minChars || 1; options.delay = options.delay || 400; options.matchCase = options.matchCase || 0; options.matchSubset = options.matchSubset || 1; options.matchContains = options.matchContains || 0; options.cacheLength = options.cacheLength || 1; options.mustMatch = options.mustMatch || 0; options.extraParams = options.extraParams || {}; options.loadingClass = options.loadingClass || "ac_loading"; options.selectFirst = options.selectFirst || false; options.selectOnly = options.selectOnly || false; options.maxItemsToShow = options.maxItemsToShow || -1; options.autoFill = options.autoFill || false; options.width = parseInt(options.width, 10) || 0; this.each(function() { var input = this; new jQuery.autocomplete(input, options); }); // Don't break the chain return this; } jQuery.fn.autocompleteArray = function(data, options) { return this.autocomplete(null, options, data); } jQuery.fn.indexOf = function(e){ for( var i=0; i<this.length; i++ ){ if( this[i] == e ) return i; } return -1; }; Only thing is, if your using the matchContains options, it'll probably no longer work.
  5. Tried to edit the js file, but is harder than i thought. Managed to get this far... Replace if( row[0].length > 0 ){ // get the first character sFirstChar = row[0].substring(0, 1).toLowerCase(); // if no lookup array for this character exists, look it up now if( !stMatchSets[sFirstChar] ) stMatchSets[sFirstChar] = []; // if the match is a string stMatchSets[sFirstChar].push(row); } with // if the length is zero, don't add to list if( row[0].length > 0 ){ var tmpArray = []; for (var j = 1; j <= row[0].length; j++) { // get the next character sNextChar = row[0].substring(j-1, j).toLowerCase(); // Needed to stop duplicate matches appearing in results var alreadyIndexed = false; for (var k = 0; k < tmpArray.length; k++){ if(tmpArray[k] == sNextChar) { alreadyIndexed = true; } } // Character has not been skipped if (!alreadyIndexed) { tmpArray.push(sNextChar); // if no lookup array for this character exists, look it up now if( !stMatchSets[sNextChar] ) stMatchSets[sNextChar] = []; // if the match is a string stMatchSets[sNextChar].push(row); } } } } ^^ That looks at the whole word rather than just the first character and if( lastKeyPressCode != 8 ){ // fill in the value (keep the case the user has typed) $input.val($input.val() + sValue.substring(prev.length)); with if( lastKeyPressCode != 8 ){ // fill in the value $input.val(sValue); ^^ That ignores the character what was typed and shows the 'proper' match. Hard to explain, but take it out and you'll see what I mean. That will match things halfway through the word/phrase but only on the first character. I'm not too sure how you can make the rest of what the user types match as well. Like if you type "d" it would match "aberdeen" and "denmark", but then "de" would only match "denmark" whereas it should match aberdeen. Not sue how to get past this bit either, sorry.
  6. I'd say you're probably best off with the jquery one you found as it seems to do most of what you want, then modify the search code to look at any matches in all of the text. I'm not familiar with how it works, but I reckon it's worth a look to see if it's do-able rather than starting from scratch. Edit: I'll have a quick look at the code and see if I can figure it out.
  7. Where abouts are the rocks at Hartlepool? - never ridden down that way before. Might try and make it down depending on the weather like.
  8. I'd start off with a bit explaining what you actually want (like you're looking for work experience/a job whatever with XYZ) then a bit about what you're studying, your interests in that area etc - basically why you're interested in what you're doing and what you hope to gain from the placement. Then try and make it specific to the actual company - show you've done a bit of research into them, know their market, what they do etc and why you've chosen them over another company. You're right about the economy, a lot of companies aren't hiring at the minute and are actually laying people off (I've been applying for job recently lol), so if I was you I'd consider maybe settling for an unpaid/voluntary placement if you can't find a paid placement. It might sound bad at the minute, but when you're applying for jobs later on, it'll make you stand out if you've got up of your own back and got a bit of experience in the industry. It might also lead to a job with the company if they like you.
  9. Mines been fine so far (touch wood). Had it over 4 years now (T610 I think), only thing wrong is the battery loses charges pretty quick - but that's probably gonna happen with a lot of old phonse anyways.
  10. Not had a problem with the DMRs moving around the bars before - mind you they were only on for a few rides . Try double sided sticky tape and whitespirit - put a bit of double sided sticky tape on the bars, then use white spirit instead of hairspray to fit the grips. Has worked quite well for me with other grips.
  11. Dunno about the Creative Zens, but I've got a 1gig Creative Muvo. Had it 2 years I think now, and it's still working fine (touch wood). Think they might do them larger than 1gig now, but dunno if they do them over 4gig.
  12. Gapping from 1 rock to another, back wheel must've got stuck somehow as I went to gap, sending me over the bars head first into the rock I was going for. Helmet ended up with a nice big scratch along the side. Dread to think what might have happened if I wasn't wearing it.
  13. Unless I'm missing something - or being completely stupid... http://www.chainreactioncycles.com/Models.aspx?ModelID=13263 Flood damaged one is £12, whereas the normal one (same size) is reduced to £9.99
  14. Awesome race, especially the last 8 laps or so. First race of the season I've actually watched all the way through - and pleased I did!
  15. No allowance as far as I know. After the MOT's expired you're only able to drive to a pre-booked MOT appointment (and I think to a place of repair if it fails).
  16. Can't really think of any of the top of my head - but whatever you choose make sure you can say what you're doing to get around them, as they'll probably be looking for someone who can realise their own faults/weaknesses and can take actions to overcome them.
  17. I'd do a bit of research into the company (if you haven't already) - who the competitors are, the market, their future plans etc and think about how you could fit in with this. Also, I'd try and backup your answers to questions with examples, as they'll probably be looking for situations in other jobs/college/uni/any thing else you've done where you can demonstrate you're good enough and you have they skills they're after. I wouldn't say it was wrong to talk about climbing the ladder (or mentioning progressingin your answers) as it shows you've got drive and ambition and want to stay with the company for a while. I'd try and think of some questions to ask them as they'll probably ask if you have any, but if they've covered everything then I'd tell them - I wouldn't ask a question for the sake of asking one. Good luck!
  18. Those days you get when it feels like you're going backwards (not literally, as in you can't do half the things you could on the last few rides).
  19. Village Idiot

    Tea

    Drink both, probably about 2-3 cups of coffee a day and 4 cups of tea. Couldn't stand the stuff till maybe about 4 years ago - now just can't stop drinking it .
  20. 'Go Home' link 3 Primary / main site links 3 Links to dead-end pages (contact us, about us, smallprint etc) 6 Search function 2 Login 2 Log out 2 Sign up 2 Edit personal profile 4 Immediate information about the purpose/function of the site 5 Avatar / profile 4
  21. Any chance you could post the html?
  22. Do you mean you want to stretch the image to fill the space? I'm not sure how you'd do that with css. Your image might look a bit odd if you stretched it - the wheels would be oval shaped rather than a circle. Oh and, the image looks really good by the way . How did you make it? Is it a drawing or did you use photoshop or something?
  23. No problems - sorry if my last post didn't make much sense. Do you mean the image is not the full width of the internet page? If so try this:
  24. What web browser (FireFox, Internet Explorer, etc) are you using? I copied the CSS you had and it seems to work in FireFox and Internet Explorer for me. Basically the image is repeated vertically to fill the length of the page. Any chance you could post the html up as well?
  25. Hmmm. I've got the same set up but I'm running a 20T chainring. I've never tried a 22T on, so don't know whether there's enough clearence for one or not. You could maybe try a 20T chainring with a different sized sproket/cog at the back to keep the gear ratio the same.
×
×
  • Create New...