| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- //
- // Namespace - Module Pattern.
- //
- var JQD = (function($, window, document, undefined) {
- // Expose innards of JQD.
- return {
- go: function() {
- for (var i in JQD.init) {
- JQD.init[i]();
- }
- },
- init: {
- frame_breaker: function() {
- if (window.location !== window.top.location) {
- window.top.location = window.location;
- }
- },
- //
- // Initialize the clock.
- //
- clock: function() {
- var clock = $('#clock');
- if (!clock.length) {
- return;
- }
- // Date variables.
- var date_obj = new Date();
- var hour = date_obj.getHours();
- var minute = date_obj.getMinutes();
- var day = date_obj.getDate();
- var year = date_obj.getFullYear();
- var suffix = 'AM';
- // Array for weekday.
- var weekday = [
- 'Sunday',
- 'Monday',
- 'Tuesday',
- 'Wednesday',
- 'Thursday',
- 'Friday',
- 'Saturday'
- ];
- // Array for month.
- var month = [
- 'January',
- 'February',
- 'March',
- 'April',
- 'May',
- 'June',
- 'July',
- 'August',
- 'September',
- 'October',
- 'November',
- 'December'
- ];
- // Assign weekday, month, date, year.
- weekday = weekday[date_obj.getDay()];
- month = month[date_obj.getMonth()];
- // AM or PM?
- if (hour >= 12) {
- suffix = 'PM';
- }
- // Convert to 12-hour.
- if (hour > 12) {
- hour = hour - 12;
- }
- else if (hour === 0) {
- // Display 12:XX instead of 0:XX.
- hour = 12;
- }
- // Leading zero, if needed.
- if (minute < 10) {
- minute = '0' + minute;
- }
- // Build two HTML strings.
- var clock_time = weekday + ' ' + hour + ':' + minute + ' ' + suffix;
- var clock_date = month + ' ' + day + ', ' + year;
- // Shove in the HTML.
- clock.html(clock_time).attr('title', clock_date);
- // Update every 60 seconds.
- setTimeout(JQD.init.clock, 60000);
- },
- //
- // Initialize the desktop.
- //
- desktop: function() {
- // Alias to document.
- var d = $(document);
- // Cancel mousedown.
- d.mousedown(function(ev) {
- var tags = ['a', 'button', 'input', 'select', 'textarea', 'tr'];
- if (!$(ev.target).closest(tags).length) {
- JQD.util.clear_active();
- ev.preventDefault();
- ev.stopPropagation();
- }
- });
- // Cancel right-click.
- d.on('contextmenu', function() {
- return false;
- });
- // Relative or remote links?
- d.on('click', 'a', function(ev) {
- var url = $(this).attr('href');
- this.blur();
- if (url.match(/^#/)) {
- ev.preventDefault();
- ev.stopPropagation();
- }
- else {
- $(this).attr('target', '_blank');
- }
- });
- // Make top menus active.
- d.on('mousedown', 'a.menu_trigger', function() {
- if ($(this).next('ul.menu').is(':hidden')) {
- JQD.util.clear_active();
- $(this).addClass('active').next('ul.menu').show();
- }
- else {
- JQD.util.clear_active();
- }
- });
- // Transfer focus, if already open.
- d.on('mouseenter', 'a.menu_trigger', function() {
- if ($('ul.menu').is(':visible')) {
- JQD.util.clear_active();
- $(this).addClass('active').next('ul.menu').show();
- }
- });
- // Cancel single-click.
- d.on('mousedown', 'a.icon', function() {
- // Highlight the icon.
- JQD.util.clear_active();
- $(this).addClass('active');
- });
- // Respond to double-click.
- d.on('dblclick', 'a.icon', function() {
- // Get the link's target.
- var x = $(this).attr('href');
- var y = $(x).find('a').attr('href');
- // Show the taskbar button.
- if ($(x).is(':hidden')) {
- $(x).remove().appendTo('#dock');
- $(x).show('fast');
- }
- // Bring window to front.
- JQD.util.window_flat();
- $(y).addClass('window_stack').show();
- });
- // Make icons draggable.
- d.on('mouseenter', 'a.icon', function() {
- $(this).off('mouseenter').draggable({
- revert: true,
- containment: 'parent'
- });
- });
- // Taskbar buttons.
- d.on('click', '#dock a', function() {
- // Get the link's target.
- var x = $($(this).attr('href'));
- // Hide, if visible.
- if (x.is(':visible')) {
- x.hide();
- }
- else {
- // Bring window to front.
- JQD.util.window_flat();
- x.show().addClass('window_stack');
- }
- });
- // Focus active window.
- d.on('mousedown', 'div.window', function() {
- // Bring window to front.
- JQD.util.window_flat();
- $(this).addClass('window_stack');
- });
- // Make windows draggable.
- d.on('mouseenter', 'div.window', function() {
- $(this).off('mouseenter').draggable({
- // Confine to desktop.
- // Movable via top bar only.
- cancel: 'a',
- containment: 'parent',
- handle: 'div.window_top'
- }).resizable({
- containment: 'parent',
- minWidth: 400,
- minHeight: 200
- });
- });
- // Double-click top bar to resize, ala Windows OS.
- d.on('dblclick', 'div.window_top', function() {
- JQD.util.window_resize(this);
- });
- // Double click top bar icon to close, ala Windows OS.
- d.on('dblclick', 'div.window_top img', function() {
- // Traverse to the close button, and hide its taskbar button.
- $($(this).closest('div.window_top').find('a.window_close').attr('href')).hide('fast');
- // Close the window itself.
- $(this).closest('div.window').hide();
- // Stop propagation to window's top bar.
- return false;
- });
- // Minimize the window.
- d.on('click', 'a.window_min', function() {
- $(this).closest('div.window').hide();
- });
- // Maximize or restore the window.
- d.on('click', 'a.window_resize', function() {
- JQD.util.window_resize(this);
- });
- // Close the window.
- d.on('click', 'a.window_close', function() {
- $(this).closest('div.window').hide();
- $($(this).attr('href')).hide('fast');
- });
- // Show desktop button, ala Windows OS.
- d.on('mousedown', '#show_desktop', function() {
- // If any windows are visible, hide all.
- if ($('div.window:visible').length) {
- $('div.window').hide();
- }
- else {
- // Otherwise, reveal hidden windows that are open.
- $('#dock li:visible a').each(function() {
- $($(this).attr('href')).show();
- });
- }
- });
- $('table.data').each(function() {
- // Add zebra striping, ala Mac OS X.
- $(this).find('tbody tr:odd').addClass('zebra');
- });
- d.on('mousedown', 'table.data tr', function() {
- // Clear active state.
- JQD.util.clear_active();
- // Highlight row, ala Mac OS X.
- $(this).closest('tr').addClass('active');
- });
- },
- wallpaper: function() {
- // Add wallpaper last, to prevent blocking.
- if ($('#desktop').length) {
- $('body').prepend('<img id="wallpaper" class="abs" src="/shares/jqueryDesktop/images/misc/wallpaper.jpg" />');
- }
- }
- },
- util: {
- //
- // Clear active states, hide menus.
- //
- clear_active: function() {
- $('a.active, tr.active').removeClass('active');
- $('ul.menu').hide();
- },
- //
- // Zero out window z-index.
- //
- window_flat: function() {
- $('div.window').removeClass('window_stack');
- },
- //
- // Resize modal window.
- //
- window_resize: function(el) {
- // Nearest parent window.
- var win = $(el).closest('div.window');
- // Is it maximized already?
- if (win.hasClass('window_full')) {
- // Restore window position.
- win.removeClass('window_full').css({
- 'top': win.attr('data-t'),
- 'left': win.attr('data-l'),
- 'right': win.attr('data-r'),
- 'bottom': win.attr('data-b'),
- 'width': win.attr('data-w'),
- 'height': win.attr('data-h')
- });
- }
- else {
- win.attr({
- // Save window position.
- 'data-t': win.css('top'),
- 'data-l': win.css('left'),
- 'data-r': win.css('right'),
- 'data-b': win.css('bottom'),
- 'data-w': win.css('width'),
- 'data-h': win.css('height')
- }).addClass('window_full').css({
- // Maximize dimensions.
- 'top': '0',
- 'left': '0',
- 'right': '0',
- 'bottom': '0',
- 'width': '100%',
- 'height': '100%'
- });
- }
- // Bring window to front.
- JQD.util.window_flat();
- win.addClass('window_stack');
- }
- }
- };
- // Pass in jQuery.
- })(jQuery, this, this.document);
- //
- // Kick things off.
- //
- jQuery(document).ready(function() {
- JQD.go();
- });
|