Search in parents for the one we really want, don't just assume position
[gitorious:yousource.git] / public / javascripts / jquery.gitorious_extensions
1 /*\r#--\r#   Copyright (C) 2007-2009 Johan Sørensen <johan@johansorensen.com>\r#   Copyright (C) 2009 Marius Mathiesen <marius.mathiesen@gmail.com>\r#\r#   This program is free software: you can redistribute it and/or modify\r#   it under the terms of the GNU Affero General Public License as published by\r#   the Free Software Foundation, either version 3 of the License, or\r#   (at your option) any later version.\r#\r#   This program is distributed in the hope that it will be useful,\r#   but WITHOUT ANY WARRANTY; without even the implied warranty of\r#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r#   GNU Affero General Public License for more details.\r#\r#   You should have received a copy of the GNU Affero General Public License\r#   along with this program.  If not, see <http://www.gnu.org/licenses/>.\r#-- \r*/\r\r// Make JQuery work with Rails' respond_to\rjQuery.ajaxSetup({\r  'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }\r});\r\rjQuery.fn.highlightSelectedLines = function() {\r    var currentHighlights = [];\r    if (/^#line\d+$/.test(window.location.hash)) {\r      currentHighlights = [window.location.hash];\r    }\r\r    this.find("tr td.line-numbers a").click(function() {\r        var element = $(this).get(0);\r        currentHighlights = [element.name];\r        highlightCodeLine(currentHighlights);\r    });\r\r    var jthis = this;\r    var highlightCodeLine = function(lineId) {\r        jQuery.each(currentHighlights, function() {\r            $(jthis).find("tr#" + this + " td").removeClass("marked");\r        });\r        $(jthis).find("tr#" + lineId + " td").addClass("marked");\r        currentHighlights = [lineId];\r    };\r\r    if (currentHighlights.length === 0) return;\r    highlightCodeLine(currentHighlights);\r};\r\rjQuery.fn.changableSelection = function(options) {\r  var currentContainer = $(this);\r  var choices = $(options.container || $(this).next("ul.changable-selection-options"));\r\r  choices.css({\r    display:'none',\r    cursor:'pointer'\r  }).children("li").bind('click', function(e) {\r      currentContainer.text( $(this).text() );\r      choices.hide();\r      if (options.onChange) options.onChange.call(this);\r      return false;\r  });\r\r  currentContainer.bind('click', function(event) {\r      choices.css({\r        top: (event.pageY - $(this).height()) + "px",\r        // TODO: Check for vicinity to screen edge and adjust left/right accordingly\r        left: (event.pageX - $(this).width() - 10) + "px",\r                            position: "absolute",\r                          opacity: 1.0,\r        zIndex: 1000\r      }).fadeIn('fast');\r      return false;\r  }).css({cursor:'pointer'});\r\r  $(document).click(function(){\r      choices.fadeOut('fast');\r  });\r};\r\rjQuery.fn.hoverBubble = function() {\r  $(this).each(function() {\r      var originalOffset = $(this).offset();\r      var bubbleHeight = $(this).next(".hover-bubble-content").height();\r      var triggerWidth = $(this).width();\r      $(this).next(".hover-bubble-content").css({\r        top: originalOffset.top - bubbleHeight - 25 + 'px',\r        left: originalOffset.left - (triggerWidth/2) - 50 + 'px',\r        opacity: 0\r      });\r      $(this).hover(function() {\r          $(this).next(".hover-bubble-content").stop()\r            .animate({\r              top: originalOffset.top - bubbleHeight - 15 + 'px',\r              opacity: 0.95\r            }, "fast").show();\r      }, function(){\r          $(this).next(".hover-bubble-content").stop()\r            .animate({\r              top: originalOffset.top - bubbleHeight - 25 + 'px',\r              opacity: 0\r            }, "fast");\r      });\r\r  });\r};\r\r// toggle the elements by sliding either up or down\rjQuery.fn.slideToggle = function(speed) {\r  $(this).each(function() {\r      if ($(this).is(":visible")) {\r        $(this).slideUp(speed);\r      } else {\r        $(this).slideDown(speed);\r      }\r  });\r  return $(this);\r};\r