summaryrefslogtreecommitdiff
path: root/doc/_extensions/odoo_ext/static/doc.js
diff options
context:
space:
mode:
Diffstat (limited to 'doc/_extensions/odoo_ext/static/doc.js')
-rw-r--r--doc/_extensions/odoo_ext/static/doc.js343
1 files changed, 343 insertions, 0 deletions
diff --git a/doc/_extensions/odoo_ext/static/doc.js b/doc/_extensions/odoo_ext/static/doc.js
new file mode 100644
index 00000000000..7d86eded5c0
--- /dev/null
+++ b/doc/_extensions/odoo_ext/static/doc.js
@@ -0,0 +1,343 @@
+(function ($) {
+
+ $(document).ready(function () {
+
+ // ======= Define variables =======
+ // =================================
+ // -- Screen resolutions
+ var screen_md = 992;
+
+ // -- Window, window's properties
+ var $win = $(window),
+ win_w = $win.width();
+
+ // -- Main elements
+ var $body = $('body'),
+ $header = $body.find('> header'),
+ $sub_nav = $header.find(".o_sub_nav");
+ $wrap = $body.find('> #wrap'),
+ $card_top = $wrap.find('> .card.top'),
+ $card_top_t = $card_top.find('> .container'),
+ $main = $wrap.find('main'),
+ $footer = $body.find('> footer');
+
+ // -- Floating action
+ var $mask = $body.find('#mask'),
+ $float = $body.find("#floating_action"),
+ $float_menu = $body.find("#floating_action_menu");
+
+ // -- Elements' heights
+ var body_h = $body.height(),
+ header_h = $header.outerHeight(),
+ sub_nav_h = $sub_nav.height();
+
+ // -- Aside
+ var $aside = $main.find('aside'),
+ has_aside = $aside.length > 0,
+ $aside_nav = undefined;
+ aside_links = undefined;
+
+ if (has_aside) {
+ $aside_nav = $aside.find('> .navbar-aside');
+ aside_links = $aside_nav.find("li > a");
+ }
+
+ // ======= Affix =================
+ // ===============================
+ function set_affix(body_h) {
+ var aside_offset = $aside.offset().top - sub_nav_h,
+ aside_width = $aside.width(),
+ main_bottom = 40;
+
+ $aside_nav.css('width', aside_width);
+ $aside_nav.affix({
+ target: window,
+ offset: {
+ top : aside_offset,
+ bottom : main_bottom
+ }
+ });
+ };
+
+ // ======= Footer animations =====
+ // ===============================
+ var footer_animation = function () {
+ var footer_effect = $main.outerHeight() >= $win.outerHeight();
+
+ if (!footer_effect) {
+ footer_stop();
+ return;
+ };
+
+ $footer.toggleClass('o_footer_effect', footer_effect);
+ $body.css('padding-bottom', $footer.outerHeight());
+
+ var checkIfSearch = function(e) {
+ if ((e.ctrlKey || e.metaKey) && String.fromCharCode(e.which).toLowerCase() === 'f') {
+ footer_stop();
+ }
+ };
+ $win.on('keydown.footer', function(e) {
+ checkIfSearch(e);
+ });
+ };
+
+ var footer_stop = function() {
+ $footer.removeClass('o_footer_effect');
+ $body.css('padding-bottom', 0);
+ $win.off('keydown.footer');
+ };
+
+
+ // ======= Docs Functions ==========
+ // =================================
+ // -- Layouting
+ var layouting = function () {
+ if ($main.hasClass("index")) {
+ $main.find("#index .index-tree > .row").each(function() {
+ var childs = $(this).find(".col-md-3");
+ if (childs.length == 2) {
+ childs.removeClass("col-md-3").addClass("col-md-6");
+ }
+ if (childs.length == 3) {
+ childs.removeClass("col-md-3").addClass("col-md-4");
+ }
+ })
+ $(".floating_action_container").remove();
+ }
+ if (has_aside) { $aside_nav.find("li").has("ul").addClass("parent"); };
+ }
+
+ // -- Float action menu
+ var floating_menu_layout = function() {
+ var lis = $aside_nav.find("> ul > li").clone(true)
+ .addClass("ripple")
+ .css({
+ position: 'relative',
+ overflow: 'hidden'
+ });
+ lis.find("ul").remove().end()
+ .find("a").removeClass("ripple").on("click", function() {
+ floating_menu_toggle();
+ });
+ $float_menu.find(".content").empty().append(lis);
+ $float.add($mask).on("click", function () {
+ floating_menu_toggle();
+ return false;
+ });
+ }
+ var floating_menu_toggle = function() {
+ $float.toggleClass("active");
+ setTimeout(function() {
+ $float_menu.toggleClass("active");
+ $mask.toggleClass("active");
+ }, 300);
+ };
+
+ // -- Scroll To
+ var scroll_to = function(el_list) {
+ var offset = 80;
+ el_list.each(function() {
+ var $link = $(this),
+ href = $link.attr("href");
+
+ $link.on("click", function() {
+ var val = $(href).offset().top - 60;
+ $('html, body').animate({
+ scrollTop: val
+ }, 400);
+ $aside_nav.find("li").removeClass("active");
+ $link.parents("li").addClass("active");
+ window.location.hash = $link.prop('hash');
+ return false;
+ })
+ })
+ }
+
+ // -- Ripple buttons
+ var ripple_animation = function(el_list) {
+ el_list.each(function() {
+ var btn = $(this);
+ btn
+ .css({
+ position: 'relative',
+ overflow: 'hidden'
+ })
+ .bind('mousedown', function(e) {
+ var ripple;
+ if (btn.find('.inner-ripple').length === 0) {
+ ripple = $('<span class="inner-ripple"/>');
+ btn.prepend(ripple);
+ } else {
+ ripple = btn.find('.inner-ripple');
+ }
+ ripple.removeClass('inner-ripple-animated');
+
+ if (!ripple.height() && !ripple.width()) {
+ var diameter = Math.max(btn.outerWidth(), btn.outerHeight());
+ ripple.css({
+ height: diameter,
+ width: diameter
+ });
+ }
+ var x = e.pageX - btn.offset().left - ripple.width() / 2;
+ var y = e.pageY - btn.offset().top - ripple.height() / 2;
+ ripple.css({
+ top: y + 'px',
+ left: x + 'px'
+ }).addClass('inner-ripple-animated');
+ setTimeout(function() {
+ ripple.removeClass('inner-ripple-animated');
+ }, 351);
+ });
+ });
+ };
+
+ // -- Cards animation
+ var cards_animate = function(type, speed) {
+ type = type || 'in';
+ speed = speed || 2000;
+ var $container = $("main.index"),
+ $cards = $container.find(".card"),
+ $titles = $container.find("h2");
+
+ $cards.each(function() {
+ var $card = $(this),
+ cardOffset = this.getBoundingClientRect(),
+ offset = cardOffset.left * 0.8 + cardOffset.top,
+ delay = parseFloat(offset / speed).toFixed(2);
+ $card.css("transition-delay", delay + "s");
+ });
+
+ if (type === "in") {
+ $titles.fadeTo(0, 0);
+ $titles.fadeTo(1000, 1);
+ $container.addClass("animating");
+ } else {
+ $titles.fadeTo(300, 0);
+ $container.removeClass("animating");
+ }
+ };
+
+ // -- Header buttons
+ var header_buttons = function () {
+ var timer;
+ $header.on('click', '.o_primary_nav .dropdown-toggle', function(e) {
+ e.preventDefault();
+
+ var $a = $(this);
+ clearTimeout(timer);
+
+ $a.parent().toggleClass('open');
+ $a.closest('ul').toggleClass('o_sub_opened', $a.parent().hasClass('open'));
+ if ($a.closest('.o_primary_nav').children('.open').length > 0) {
+ $header.addClass("o_sub_opened");
+ } else {
+ timer = setTimeout(function() {
+ $header.removeClass("o_sub_opened");
+ }, 200);
+ }
+ });
+ $header.on('click', '.o_primary_nav .o_secondary_nav', function(e) {
+ if (e.target === e.currentTarget) {
+ $header.find('.open').removeClass('open');
+ $header.find('.o_sub_opened').andSelf().removeClass('o_sub_opened');
+ }
+ });
+
+ // -- Mobile menu opening
+ $header.on('click', '.o_mobile_menu_toggle', function(e) {
+ e.preventDefault();
+ $(this).find('i').toggleClass('fa-bars fa-times');
+ $header.toggleClass('o_mobile_menu_opened');
+ });
+ };
+
+ var card_top_animation = function (win_top){
+ var scrollFactor = 1.6,
+ bannerHeight = Math.max(450, $card_top.outerHeight(true) - 60),
+ top = Math.min(win_top, bannerHeight/scrollFactor),
+ base_value = top * (scrollFactor - 1),
+ opacity = top/bannerHeight * scrollFactor;
+
+ $card_top.css('transform', 'translateY(' + base_value + 'px)');
+ $card_top_t.css({
+ 'transform' : 'translateY( -' + ( base_value - (top/2)) + 'px)',
+ 'opacity' : 1 - opacity
+ });
+ }
+
+ $(".content-switcher").each(function(index, switcher) {
+ var $switcher = $(switcher),
+ $links = $switcher.find('> ul > li'),
+ $tabs = $switcher.find('> .tabs > *'),
+ $all = $links.add($tabs);
+
+ function select(index) {
+ $all.removeClass('active');
+ $links.eq(index).add($tabs.eq(index)).addClass('active');
+ }
+ select(0);
+ $switcher.on('click', '> ul > li', function() {
+ select($(this).index());
+ return false;
+ });
+ });
+
+ // ======= Onload ==================
+ // =================================
+ // -- Call default functions
+ layouting();
+ cards_animate();
+ header_buttons();
+ ripple_animation($(".ripple"));
+
+ if (has_aside) {
+ floating_menu_layout();
+ scroll_to(aside_links);
+ ripple_animation(aside_links);
+ }
+
+ // -- Conditionally call specific functions according to resolution
+ if (win_w >= screen_md){
+ footer_animation();
+
+ if (has_aside) {
+ $win.load(function (){
+ // wait until page load before affix
+ body_h = $body.height();
+ set_affix(body_h);
+ })
+ }
+ };
+
+ // ======= On resize ==============
+ // ================================
+ // Update properties and conditionally call functions according to resolution
+ $win.on('resize', function () {
+ win_w = $win.width();
+ body_h = $body.height();
+
+ if (win_w >= screen_md){
+ footer_animation();
+ if (has_aside) { set_affix(body_h); };
+ } else {
+ footer_stop();
+ };
+ });
+
+ // ======= On scroll ==============
+ // ================================
+ $win.on('scroll', function () {
+ if (win_w >= screen_md) {
+ var win_top = $win.scrollTop();
+ header_h = $header.outerHeight();
+
+ $header.toggleClass('o_scrolled', win_top > header_h);
+ card_top_animation(win_top);
+ } else {
+ $card_top.css('transform', '');
+ }
+ });
+ });
+})(jQuery);