-
Notifications
You must be signed in to change notification settings - Fork 35
/
sticky.js
99 lines (81 loc) · 2.56 KB
/
sticky.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Sticky v1.0 by Daniel Raftery
// http://thrivingkings.com/sticky
//
// http://twitter.com/ThrivingKings
(function( $ )
{
// Using it without an object
$.sticky = function(note, options, callback) { return $.fn.sticky(note, options, callback); };
$.fn.sticky = function(note, options, callback)
{
// Default settings
var position = 'top-right'; // top-left, top-right, bottom-left, or bottom-right
var settings =
{
'speed' : 'fast', // animations: fast, slow, or integer
'duplicates' : true, // true or false
'autoclose' : 5000 // integer or false
};
// Passing in the object instead of specifying a note
if(!note)
{ note = this.html(); }
if(options)
{ $.extend(settings, options); }
// Variables
var display = true;
var duplicate = 'no';
// Somewhat of a unique ID
var uniqID = Math.floor(Math.random()*99999);
// Handling duplicate notes and IDs
$('.sticky-note').each(function()
{
if($(this).html() == note && $(this).is(':visible'))
{
duplicate = 'yes';
if(!settings['duplicates'])
{ display = false; }
}
if($(this).attr('id')==uniqID)
{ uniqID = Math.floor(Math.random()*9999999); }
});
// Make sure the sticky queue exists
if(!$('body').find('.sticky-queue').html())
{ $('body').append('<div class="sticky-queue ' + position + '"></div>'); }
// Can it be displayed?
if(display)
{
// Building and inserting sticky note
$('.sticky-queue').prepend('<div class="sticky border-' + position + '" id="' + uniqID + '"></div>');
$('#' + uniqID).append('<img src="close.png" class="sticky-close" rel="' + uniqID + '" title="Close" />');
$('#' + uniqID).append('<div class="sticky-note" rel="' + uniqID + '">' + note + '</div>');
// Smoother animation
var height = $('#' + uniqID).height();
$('#' + uniqID).css('height', height);
$('#' + uniqID).slideDown(settings['speed']);
display = true;
}
// Listeners
$('.sticky').ready(function()
{
// If 'autoclose' is enabled, set a timer to close the sticky
if(settings['autoclose'])
{ $('#' + uniqID).delay(settings['autoclose']).fadeOut(settings['speed']); }
});
// Closing a sticky
$('.sticky-close').click(function()
{ $('#' + $(this).attr('rel')).dequeue().fadeOut(settings['speed']); });
// Callback data
var response =
{
'id' : uniqID,
'duplicate' : duplicate,
'displayed' : display,
'position' : position
}
// Callback function?
if(callback)
{ callback(response); }
else
{ return(response); }
}
})( jQuery );