From 5e2d633ebb0832ad648ea9dd4fb48d19a83af802 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 28 Oct 2011 14:26:14 -0700 Subject: [PATCH] [#263] Merge common.js into application.js --- app/views/layouts/base.rhtml | 3 +- public/javascripts/application.js | 317 ++++++++++++++++++++++++++++++ public/javascripts/common.js | 314 ----------------------------- 3 files changed, 318 insertions(+), 316 deletions(-) delete mode 100644 public/javascripts/common.js diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml index f444b2c1..3fa5bd38 100644 --- a/app/views/layouts/base.rhtml +++ b/app/views/layouts/base.rhtml @@ -18,13 +18,12 @@ <%= javascript_heads %> <%= stylesheet_link_tag 'jstoolbar' %> <%= javascript_include_tag 'jquery.1.3.2.min.js' %> -<%= javascript_include_tag 'common.js' %> +<%= javascript_include_tag 'jquery.menu_expand.js' %> <%= heads_for_theme %> <% heads_for_wiki_formatter %> <%= call_hook :view_layouts_base_html_head %> <%= yield :header_tags -%> -<%= javascript_include_tag 'jquery.menu_expand.js' %>
diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 11940f3c..1c883472 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -369,3 +369,320 @@ function hideOnLoad() { } Event.observe(window, 'load', hideOnLoad); + +/* jQuery code from #263 */ +/* TODO: integrate with existing code and/or refactor */ +jQuery.noConflict(); + +jQuery(document).ready(function($) { + + // a few constants for animations speeds, etc. + var animRate = 100; + + // header menu hovers + $("#account .drop-down").hover(function() { + $(this).addClass("open").find("ul").slideDown(animRate); + $("#top-menu").toggleClass("open"); + }, function() { + $(this).removeClass("open").find("ul").slideUp(animRate); + $("#top-menu").toggleClass("open"); + }); + + // show/hide header search box + $("#account a.search").click(function() { + var searchWidth = $("#account-nav").width(); + + $(this).toggleClass("open"); + $("#nav-search").width(searchWidth).slideToggle(animRate, function(){ + $("#nav-search-box").select(); + }); + + return false; + }); + + // issue table info tooltips + $(".js-tooltip").wrapInner("
").append(""); // give an extra div for styling + + $("table.issues td.issue").hover(function(event) { + var $thisTR = $(event.target).parents("tr"); + var trPos = $thisTR.position(); + var tTarget = $thisTR.attr("id"); + + $("form#issue-list").toggleClass("tooltip-active"); + $("div[rel="+tTarget+"]").css('top', trPos.top).fadeIn(animRate*2, function(){ + //ie cleartype uglies + if ($.browser.msie) {this.style.removeAttribute('filter'); }; + }); + + }, function(event) { + var $thisTR = $(event.target).parents("tr"); + var tTarget = $thisTR.attr("id"); + + $("form#issue-list").toggleClass("tooltip-active"); + $("div[rel="+tTarget+"]").hide(); + }); + + // file table thumbnails + $("table a.has-thumb").hover(function() { + $(this).removeAttr("title").toggleClass("active"); + + // grab the image dimensions to position it properly + var thumbImg = $(this).find("img"); + var thumbImgLeft = -(thumbImg.outerWidth() ); + var thumbImgTop = -(thumbImg.height() / 2 ); + thumbImg.css({top: thumbImgTop, left: thumbImgLeft}).show(); + + }, function() { + $(this).toggleClass("active").find("img").hide(); + }); + + // show/hide the files table + $(".attachments h4").click(function() { + $(this).toggleClass("closed").next().slideToggle(animRate); + }); + + // custom function for sliding the main-menu. IE6 & IE7 don't handle sliding very well + $.fn.mySlide = function() { + if (parseInt($.browser.version, 10) < 8 && $.browser.msie) { + // no animations, just toggle + this.toggle(); + // this forces IE to redraw the menu area, un-bollocksing things + $("#main-menu").css({paddingBottom:5}).animate({paddingBottom:0}, 10); + } else { + this.slideToggle(animRate); + } + + return this; + }; + + // open and close the main-menu sub-menus + $("#main-menu li:has(ul) > a").not("ul ul a") + .append("") + .click(function() { + + $(this).toggleClass("open").parent().find("ul").not("ul ul ul").mySlide(); + + return false; + }); + + // submenu flyouts + $("#main-menu li li:has(ul)").hover(function() { + $(this).find(".profile-box").show(); + $(this).find("ul").slideDown(animRate); + }, function() { + $(this).find("ul").slideUp(animRate); + }); + + // add filter dropdown menu + $(".button-large:has(ul) > a").click(function(event) { + var tgt = $(event.target); + + // is this inside the title bar? + if (tgt.parents().is(".title-bar")) { + $(".title-bar-extras:hidden").slideDown(animRate); + } + + $(this).parent().find("ul").slideToggle(animRate); + + return false; + }); + + // suckerfish-esque on those issue dropdown menus for IE6 + if (parseInt($.browser.version, 10) < 7 && $.browser.msie) { + $(".issue-dropdown li").hover(function() { + $(this).toggleClass("hover"); + }, function() { + $(this).toggleClass("hover"); + }); + } + + // Connect new issue lightbox to the New Issue link but only when + // on the issues list. + $('a.issues.selected + ul a.new-issue').click(function() { + // Make sure the Issue form is on the page + if ($('#issue-form-wrap').size() > 0) { + tb_show("Open a new issue", "#TB_inline?inlineId=issue-form-wrap&height=510&width=735", false); + + // Taken from the custom override code + // call the resize function after 350 milliseconds. should be enough time to have it load, but not too much so that there's lag. + setTimeout(resizeNewIssue,350); + + return false; + } + }); +}); + +/* Appended 2009-07-07 */ +var animRate = 100; + +// returns viewport height +jQuery.viewportHeight = function() { + return self.innerHeight || + jQuery.boxModel && document.documentElement.clientHeight || + document.body.clientHeight; +}; + +// resizes the new issue box. +function resizeNewIssue() { + + jQuery("#TB_window").height(jQuery.viewportHeight() - 40).css({top: '20px', marginTop: '0' }); + jQuery("#TB_ajaxContent").height(jQuery("#TB_window").height() - jQuery("#TB_title").height() ); + jQuery("#TB_window #issue-form").height(jQuery("#TB_ajaxContent").height() ); + jQuery("#TB_window #issue-form .box").height(jQuery("#TB_ajaxContent").height() - jQuery("#issue-form .tracker").outerHeight() - jQuery("#issue-form .submit").outerHeight() - 20 ); + + // hacks for thickbox not picking up the proper width from the query string + if (jQuery("#TB_ajaxContent").width() < 735 ) { + jQuery("#TB_ajaxContent").width(735); + jQuery("#TB_window").css({width: 765, marginLeft: -(765/2)}); + } + +} + +function issuesPageActions() { + + + tb_init("a.thickbox"); + + // call the resize function after 350 milliseconds. should be enough time to have it load, but not too much so that there's lag. + jQuery(".new-issue a.thickbox").click(function() { + setTimeout(resizeNewIssue,350); + }); + + // tooltip handler + + + jQuery("table.issues td.issue").mouseover(function(event) { + + // first check if .js-tooltip elements have been wrapped in the crucial .js-tooltip-inner div + // if not, the first hover will add everything + if (!jQuery(".js-tooltip:first > div").hasClass("js-tooltip-inner") ) { + jQuery(".js-tooltip").wrapInner("
").append(""); // give an extra div for styling + + } + + var $thisTR = jQuery(event.target).parents("tr"); + var trPos = $thisTR.position(); + var tTarget = $thisTR.attr("id"); + + jQuery("form#issue-list").toggleClass("tooltip-active"); + jQuery("div[rel="+tTarget+"]").css('top', trPos.top).show(); + + }); + + jQuery("table.issues td.issue").mouseout(function(event) { + var $thisTR = jQuery(event.target).parents("tr"); + var tTarget = $thisTR.attr("id"); + + jQuery("form#issue-list").toggleClass("tooltip-active"); + jQuery("div[rel="+tTarget+"]").hide(); + }); + +} + +jQuery(document).ready(function($) { + + // header animation replacement - no animation, straight appear/hide + $("#account .drop-down").unbind('mouseenter').unbind("mouseleave"); //remove the current animated handlers + + // remove .drop-down class from empty dropdowns + $("#account .drop-down").each(function(index) { + if ($(this).find("li").size() < 1) { + $(this).removeClass("drop-down"); + } + }); + + $("#account .drop-down").hover(function() { + $(this).addClass("open").find("ul").show(); + $("#top-menu").addClass("open"); + + // wraps long dropdown menu in an overflow:auto div to keep long project lists on the page + var $projectDrop = $("#account .drop-down:has(.projects) ul"); + + // only do the wrapping if it's the project dropdown, and more than 15 items + if ( $projectDrop.children().size() > 15 && $(this).find("> a").hasClass("projects") ) { + + var overflowHeight = 15 * $projectDrop.find("li:eq(1)").outerHeight() - 2; + + $projectDrop + .wrapInner("
").end() + .find(".overflow").css({overflow: 'auto', height: overflowHeight, position: 'relative'}) + .find("li a").css('paddingRight', '25px'); + + // do hack-y stuff for IE6 & 7. don't ask why, I don't know. + if (parseInt($.browser.version, 10) < 8 && $.browser.msie) { + + $projectDrop.find(".overflow").css({width: 325, zoom: '1'}); + $projectDrop.find("li a").css('marginLeft', '-15px'); + $("#top-menu").css('z-index', '10000'); + } + + } + + + }, function() { + $(this).removeClass("open").find("ul").hide(); + $("#top-menu").removeClass("open"); + }); + + // first remove current event handlers for tooltips - overrides original common.js functionality. Remove this once common.js is merged with this. + $("table.issues td.issue").unbind('mouseenter').unbind("mouseleave"); + + // deal with potentially problematic super-long titles + $(".title-bar h2").css({paddingRight: $(".title-bar-actions").outerWidth() + 15 }); + + // move email checkbox inside div.box + $("#issue-form > p").clone().appendTo("#issue-form .box"); + $("#issue-form > p").remove(); + + // move preview area inside div.box + if ($("form#issue-list").size() > 0 ) { // only do this on the issue list page + $("#issue-form-wrap #preview").remove(); + $("#issue-form .box").append("
"); + } + + + + + // resize after a window resize. + $(window).resize(function() { + resizeNewIssue(); + }); + + + + + // rejigger the main-menu sub-menu functionality. + $("#main-menu .toggler").remove(); // remove the togglers so they're inserted properly later. + + $("#main-menu li:has(ul) > a").not("ul ul a") + // 1. unbind the current click functions + .unbind("click") + // 2. wrap each in a span that we'll use for the new click element + .wrapInner("") + // 3. reinsert the so that it sits outside of the above + .append("") + // 4. attach a new click function that will follow the link if you clicked on the span itself and toggle if not + .click(function(event) { + + if (!$(event.target).hasClass("toggle-follow") ) { + $(this).toggleClass("open").parent().find("ul").not("ul ul ul").mySlide(); + return false; + } + }); + + + +}); + +// Sets the save_and_close field to tell Redmine to either keep the +// thickbox open or close it when a New Issue is saved successfully. +function setCloseAfterSave(on) { + var field = $('save_and_close'); + if (field) { + if (on) { + field.value = '1'; + } else { + field.value = '0'; + } + } +} diff --git a/public/javascripts/common.js b/public/javascripts/common.js deleted file mode 100644 index 49b1d3e7..00000000 --- a/public/javascripts/common.js +++ /dev/null @@ -1,314 +0,0 @@ -jQuery.noConflict(); - -jQuery(document).ready(function($) { - - // a few constants for animations speeds, etc. - var animRate = 100; - - // header menu hovers - $("#account .drop-down").hover(function() { - $(this).addClass("open").find("ul").slideDown(animRate); - $("#top-menu").toggleClass("open"); - }, function() { - $(this).removeClass("open").find("ul").slideUp(animRate); - $("#top-menu").toggleClass("open"); - }); - - // show/hide header search box - $("#account a.search").click(function() { - var searchWidth = $("#account-nav").width(); - - $(this).toggleClass("open"); - $("#nav-search").width(searchWidth).slideToggle(animRate, function(){ - $("#nav-search-box").select(); - }); - - return false; - }); - - // issue table info tooltips - $(".js-tooltip").wrapInner("
").append(""); // give an extra div for styling - - $("table.issues td.issue").hover(function(event) { - var $thisTR = $(event.target).parents("tr"); - var trPos = $thisTR.position(); - var tTarget = $thisTR.attr("id"); - - $("form#issue-list").toggleClass("tooltip-active"); - $("div[rel="+tTarget+"]").css('top', trPos.top).fadeIn(animRate*2, function(){ - //ie cleartype uglies - if ($.browser.msie) {this.style.removeAttribute('filter'); }; - }); - - }, function(event) { - var $thisTR = $(event.target).parents("tr"); - var tTarget = $thisTR.attr("id"); - - $("form#issue-list").toggleClass("tooltip-active"); - $("div[rel="+tTarget+"]").hide(); - }); - - // file table thumbnails - $("table a.has-thumb").hover(function() { - $(this).removeAttr("title").toggleClass("active"); - - // grab the image dimensions to position it properly - var thumbImg = $(this).find("img"); - var thumbImgLeft = -(thumbImg.outerWidth() ); - var thumbImgTop = -(thumbImg.height() / 2 ); - thumbImg.css({top: thumbImgTop, left: thumbImgLeft}).show(); - - }, function() { - $(this).toggleClass("active").find("img").hide(); - }); - - // show/hide the files table - $(".attachments h4").click(function() { - $(this).toggleClass("closed").next().slideToggle(animRate); - }); - - // custom function for sliding the main-menu. IE6 & IE7 don't handle sliding very well - $.fn.mySlide = function() { - if (parseInt($.browser.version, 10) < 8 && $.browser.msie) { - // no animations, just toggle - this.toggle(); - // this forces IE to redraw the menu area, un-bollocksing things - $("#main-menu").css({paddingBottom:5}).animate({paddingBottom:0}, 10); - } else { - this.slideToggle(animRate); - } - - return this; - }; - - // open and close the main-menu sub-menus - $("#main-menu li:has(ul) > a").not("ul ul a") - .append("") - .click(function() { - - $(this).toggleClass("open").parent().find("ul").not("ul ul ul").mySlide(); - - return false; - }); - - // submenu flyouts - $("#main-menu li li:has(ul)").hover(function() { - $(this).find(".profile-box").show(); - $(this).find("ul").slideDown(animRate); - }, function() { - $(this).find("ul").slideUp(animRate); - }); - - // add filter dropdown menu - $(".button-large:has(ul) > a").click(function(event) { - var tgt = $(event.target); - - // is this inside the title bar? - if (tgt.parents().is(".title-bar")) { - $(".title-bar-extras:hidden").slideDown(animRate); - } - - $(this).parent().find("ul").slideToggle(animRate); - - return false; - }); - - // suckerfish-esque on those issue dropdown menus for IE6 - if (parseInt($.browser.version, 10) < 7 && $.browser.msie) { - $(".issue-dropdown li").hover(function() { - $(this).toggleClass("hover"); - }, function() { - $(this).toggleClass("hover"); - }); - } - - // Connect new issue lightbox to the New Issue link but only when - // on the issues list. - $('a.issues.selected + ul a.new-issue').click(function() { - // Make sure the Issue form is on the page - if ($('#issue-form-wrap').size() > 0) { - tb_show("Open a new issue", "#TB_inline?inlineId=issue-form-wrap&height=510&width=735", false); - - // Taken from the custom override code - // call the resize function after 350 milliseconds. should be enough time to have it load, but not too much so that there's lag. - setTimeout(resizeNewIssue,350); - - return false; - } - }); -}); - -/* Appended 2009-07-07 */ -var animRate = 100; - -// returns viewport height -jQuery.viewportHeight = function() { - return self.innerHeight || - jQuery.boxModel && document.documentElement.clientHeight || - document.body.clientHeight; -}; - -// resizes the new issue box. -function resizeNewIssue() { - - jQuery("#TB_window").height(jQuery.viewportHeight() - 40).css({top: '20px', marginTop: '0' }); - jQuery("#TB_ajaxContent").height(jQuery("#TB_window").height() - jQuery("#TB_title").height() ); - jQuery("#TB_window #issue-form").height(jQuery("#TB_ajaxContent").height() ); - jQuery("#TB_window #issue-form .box").height(jQuery("#TB_ajaxContent").height() - jQuery("#issue-form .tracker").outerHeight() - jQuery("#issue-form .submit").outerHeight() - 20 ); - - // hacks for thickbox not picking up the proper width from the query string - if (jQuery("#TB_ajaxContent").width() < 735 ) { - jQuery("#TB_ajaxContent").width(735); - jQuery("#TB_window").css({width: 765, marginLeft: -(765/2)}); - } - -} - -function issuesPageActions() { - - - tb_init("a.thickbox"); - - // call the resize function after 350 milliseconds. should be enough time to have it load, but not too much so that there's lag. - jQuery(".new-issue a.thickbox").click(function() { - setTimeout(resizeNewIssue,350); - }); - - // tooltip handler - - - jQuery("table.issues td.issue").mouseover(function(event) { - - // first check if .js-tooltip elements have been wrapped in the crucial .js-tooltip-inner div - // if not, the first hover will add everything - if (!jQuery(".js-tooltip:first > div").hasClass("js-tooltip-inner") ) { - jQuery(".js-tooltip").wrapInner("
").append(""); // give an extra div for styling - - } - - var $thisTR = jQuery(event.target).parents("tr"); - var trPos = $thisTR.position(); - var tTarget = $thisTR.attr("id"); - - jQuery("form#issue-list").toggleClass("tooltip-active"); - jQuery("div[rel="+tTarget+"]").css('top', trPos.top).show(); - - }); - - jQuery("table.issues td.issue").mouseout(function(event) { - var $thisTR = jQuery(event.target).parents("tr"); - var tTarget = $thisTR.attr("id"); - - jQuery("form#issue-list").toggleClass("tooltip-active"); - jQuery("div[rel="+tTarget+"]").hide(); - }); - -} - -jQuery(document).ready(function($) { - - // header animation replacement - no animation, straight appear/hide - $("#account .drop-down").unbind('mouseenter').unbind("mouseleave"); //remove the current animated handlers - - // remove .drop-down class from empty dropdowns - $("#account .drop-down").each(function(index) { - if ($(this).find("li").size() < 1) { - $(this).removeClass("drop-down"); - } - }); - - $("#account .drop-down").hover(function() { - $(this).addClass("open").find("ul").show(); - $("#top-menu").addClass("open"); - - // wraps long dropdown menu in an overflow:auto div to keep long project lists on the page - var $projectDrop = $("#account .drop-down:has(.projects) ul"); - - // only do the wrapping if it's the project dropdown, and more than 15 items - if ( $projectDrop.children().size() > 15 && $(this).find("> a").hasClass("projects") ) { - - var overflowHeight = 15 * $projectDrop.find("li:eq(1)").outerHeight() - 2; - - $projectDrop - .wrapInner("
").end() - .find(".overflow").css({overflow: 'auto', height: overflowHeight, position: 'relative'}) - .find("li a").css('paddingRight', '25px'); - - // do hack-y stuff for IE6 & 7. don't ask why, I don't know. - if (parseInt($.browser.version, 10) < 8 && $.browser.msie) { - - $projectDrop.find(".overflow").css({width: 325, zoom: '1'}); - $projectDrop.find("li a").css('marginLeft', '-15px'); - $("#top-menu").css('z-index', '10000'); - } - - } - - - }, function() { - $(this).removeClass("open").find("ul").hide(); - $("#top-menu").removeClass("open"); - }); - - // first remove current event handlers for tooltips - overrides original common.js functionality. Remove this once common.js is merged with this. - $("table.issues td.issue").unbind('mouseenter').unbind("mouseleave"); - - // deal with potentially problematic super-long titles - $(".title-bar h2").css({paddingRight: $(".title-bar-actions").outerWidth() + 15 }); - - // move email checkbox inside div.box - $("#issue-form > p").clone().appendTo("#issue-form .box"); - $("#issue-form > p").remove(); - - // move preview area inside div.box - if ($("form#issue-list").size() > 0 ) { // only do this on the issue list page - $("#issue-form-wrap #preview").remove(); - $("#issue-form .box").append("
"); - } - - - - - // resize after a window resize. - $(window).resize(function() { - resizeNewIssue(); - }); - - - - - // rejigger the main-menu sub-menu functionality. - $("#main-menu .toggler").remove(); // remove the togglers so they're inserted properly later. - - $("#main-menu li:has(ul) > a").not("ul ul a") - // 1. unbind the current click functions - .unbind("click") - // 2. wrap each in a span that we'll use for the new click element - .wrapInner("") - // 3. reinsert the so that it sits outside of the above - .append("") - // 4. attach a new click function that will follow the link if you clicked on the span itself and toggle if not - .click(function(event) { - - if (!$(event.target).hasClass("toggle-follow") ) { - $(this).toggleClass("open").parent().find("ul").not("ul ul ul").mySlide(); - return false; - } - }); - - - -}); - -// Sets the save_and_close field to tell Redmine to either keep the -// thickbox open or close it when a New Issue is saved successfully. -function setCloseAfterSave(on) { - var field = $('save_and_close'); - if (field) { - if (on) { - field.value = '1'; - } else { - field.value = '0'; - } - } -}