Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Fix reset function #38

Merged
merged 1 commit into from

3 participants

@cwardzala

As a simple fix I changed reset to use setFaviconTag instead of Tinycon.setImage. The best fix would be to reset the canvas and go back to using setImage.

@Charuru

Still doesn't work in firefox, fixes it for webkit though.

@cwardzala

I just tested in Firefox (14,15,16 mac and 16 win) and it works just fine.

@tommoor tommoor merged commit d432008 into tommoor:master
@tommoor
Owner

Thanks @cwardzala all merged in

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Nov 12, 2012
  1. make reset use setFaviconTag instead of setImage

    Cameron Wardzala authored
This page is out of date. Refresh to see the latest.
Showing with 52 additions and 52 deletions.
  1. +52 −52 tinycon.js
View
104 tinycon.js
@@ -7,7 +7,7 @@
*/
(function(){
-
+
var Tinycon = {};
var currentFavicon = null;
var originalFavicon = null;
@@ -24,7 +24,7 @@
fallback: true,
abbreviate: true
};
-
+
var ua = (function () {
var agent = navigator.userAgent.toLowerCase();
// New function has access to 'agent' via closure
@@ -40,26 +40,26 @@
safari: ua('safari') && !ua('chrome'),
mozilla: ua('mozilla') && !ua('chrome') && !ua('safari')
};
-
+
// private methods
var getFaviconTag = function(){
-
+
var links = document.getElementsByTagName('link');
-
+
for(var i=0, len=links.length; i < len; i++) {
if ((links[i].getAttribute('rel') || '').match(/\bicon\b/)) {
return links[i];
}
}
-
+
return false;
};
-
+
var removeFaviconTag = function(){
-
+
var links = document.getElementsByTagName('link');
var head = document.getElementsByTagName('head')[0];
-
+
for(var i=0, len=links.length; i < len; i++) {
var exists = (typeof(links[i]) !== 'undefined');
if (exists && links[i].getAttribute('rel') === 'icon') {
@@ -67,9 +67,9 @@
}
}
};
-
+
var getCurrentFavicon = function(){
-
+
if (!originalFavicon || !currentFavicon) {
var tag = getFaviconTag();
originalFavicon = currentFavicon = tag ? tag.getAttribute('href') : '/favicon.ico';
@@ -77,70 +77,70 @@
return currentFavicon;
};
-
+
var getCanvas = function (){
-
+
if (!canvas) {
canvas = document.createElement("canvas");
canvas.width = 16;
canvas.height = 16;
}
-
+
return canvas;
};
-
+
var setFaviconTag = function(url){
removeFaviconTag();
-
+
var link = document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'icon';
link.href = url;
document.getElementsByTagName('head')[0].appendChild(link);
};
-
+
var log = function(message){
if (window.console) window.console.log(message);
};
-
+
var drawFavicon = function(label, colour) {
// fallback to updating the browser title if unsupported
if (!getCanvas().getContext || browser.ie || browser.safari || options.fallback === 'force') {
return updateTitle(label);
}
-
+
var context = getCanvas().getContext("2d");
var colour = colour || '#000000';
var src = getCurrentFavicon();
-
+
faviconImage = new Image();
faviconImage.onload = function() {
-
- // clear canvas
+
+ // clear canvas
context.clearRect(0, 0, 16, 16);
// draw original favicon
context.drawImage(faviconImage, 0, 0, faviconImage.width, faviconImage.height, 0, 0, 16, 16);
-
+
// draw bubble over the top
if ((label + '').length > 0) drawBubble(context, label, colour);
-
+
// refresh tag in page
refreshFavicon();
};
-
+
// allow cross origin resource requests if the image is not a data:uri
// as detailed here: https://github.com/mrdoob/three.js/issues/1305
if (!src.match(/^data/)) {
faviconImage.crossOrigin = 'anonymous';
}
-
+
faviconImage.src = src;
};
-
+
var updateTitle = function(label) {
-
+
if (options.fallback) {
if ((label + '').length > 0) {
document.title = '(' + label + ') ' + originalTitle;
@@ -149,14 +149,14 @@
}
}
};
-
+
var drawBubble = function(context, label, colour) {
-
+
// automatic abbreviation for long (>2 digits) numbers
if (typeof label == 'number' && label > 99 && options.abbreviate) {
label = abbreviateNumber(label);
}
-
+
// bubble needs to be larger for double digits
var len = (label + '').length-1;
var width = options.width + (6*len);
@@ -168,93 +168,93 @@
context.fillStyle = options.background;
context.strokeStyle = options.background;
context.lineWidth = 1;
-
+
// bubble
context.fillRect(w,h,width-1,options.height);
-
+
// rounded left
context.beginPath();
context.moveTo(w-0.5,h+1);
context.lineTo(w-0.5,15);
context.stroke();
-
+
// rounded right
context.beginPath();
context.moveTo(15.5,h+1);
context.lineTo(15.5,15);
context.stroke();
-
+
// bottom shadow
context.beginPath();
context.strokeStyle = "rgba(0,0,0,0.3)";
context.moveTo(w,16);
context.lineTo(15,16);
context.stroke();
-
+
// label
context.fillStyle = options.colour;
context.textAlign = "right";
context.textBaseline = "top";
-
+
// unfortunately webkit/mozilla are a pixel different in text positioning
- context.fillText(label, 15, browser.mozilla ? 7 : 6);
+ context.fillText(label, 15, browser.mozilla ? 7 : 6);
};
-
+
var refreshFavicon = function(){
// check support
if (!getCanvas().getContext) return;
-
+
setFaviconTag(getCanvas().toDataURL());
};
-
+
var abbreviateNumber = function(label) {
var metricPrefixes = [
['G', 1000000000],
['M', 1000000],
['k', 1000]
];
-
+
for(var i = 0; i < metricPrefixes.length; ++i) {
if (label >= metricPrefixes[i][1]) {
label = round(label / metricPrefixes[i][1]) + metricPrefixes[i][0];
break;
}
}
-
+
return label;
};
-
+
var round = function (value, precision) {
var number = new Number(value);
return number.toFixed(precision);
};
-
+
// public methods
Tinycon.setOptions = function(custom){
options = {};
-
+
for(var key in defaults){
options[key] = custom.hasOwnProperty(key) ? custom[key] : defaults[key];
}
return this;
};
-
+
Tinycon.setImage = function(url){
currentFavicon = url;
refreshFavicon();
return this;
};
-
+
Tinycon.setBubble = function(label, colour) {
label = label || '';
drawFavicon(label, colour);
return this;
};
-
+
Tinycon.reset = function(){
- Tinycon.setImage(originalFavicon);
- };
-
+ setFaviconTag(originalFavicon);
+ };
+
Tinycon.setOptions(defaults);
window.Tinycon = Tinycon;
})();
Something went wrong with that request. Please try again.