Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >flask 鼠标进入时显示弹窗(flask 99)

flask 鼠标进入时显示弹窗(flask 99)

作者头像
用户5760343
发布于 2019-08-21 06:24:59
发布于 2019-08-21 06:24:59
1.1K00
代码可运行
举报
文章被收录于专栏:sktjsktj
运行总次数:0
代码可运行
bootstrap的popover组件

html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <div class="col-md-8">
        {% if photos %}
            {% for photo in photos %}
                <div class="card mb-3 w-100 bg-light">
                    <div class="card-header">
                        <a class="dead-link" href="{{ url_for('user.index', username=photo.author.username) }}">
                            <img class="rounded img-fluid avatar-s profile-popover"
                                 data-href="{{ url_for('ajax.get_profile', user_id=photo.author.id) }}"
                                 src="{{ url_for('main.get_avatar', filename=photo.author.avatar_m) }}">
                        </a>
                        <a class="profile-popover trend-card-avatar"
                           data-href="{{ url_for('ajax.get_profile', user_id=photo.author.id) }}"
                           href="{{ url_for('user.index', username=photo.author.username) }}">{{ photo.author.name }}</a>
                        <span class="float-right">
            <small data-toggle="tooltip" data-placement="top" data-timestamp="{{ photo.timestamp }}"
                   data-delay="500">
                {{ moment(photo.timestamp).fromNow(refresh=True) }}</small></span>
                    </div>

js

$(function () { var default_error_message = 'Server error, please try again later.';

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$.ajaxSetup({
    beforeSend: function (xhr, settings) {
        if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader('X-CSRFToken', csrf_token);
        }
    }
});

$(document).ajaxError(function (event, request, settings) {
    var message = null;
    if (request.responseJSON && request.responseJSON.hasOwnProperty('message')) {
        message = request.responseJSON.message;
    } else if (request.responseText) {
        var IS_JSON = true;
        try {
            var data = JSON.parse(request.responseText);
        }
        catch (err) {
            IS_JSON = false;
        }
        if (IS_JSON && data !== undefined && data.hasOwnProperty('message')) {
            message = JSON.parse(request.responseText).message;
        } else {
            message = default_error_message;
        }
    } else {
        message = default_error_message;
    }
    toast(message, 'error');
});

var flash = null;

function toast(body, category) {
    clearTimeout(flash);
    var $toast = $('#toast');
    if (category === 'error') {
        $toast.css('background-color', 'red')
    } else {
        $toast.css('background-color', '#333')
    }
    $toast.text(body).fadeIn();
    flash = setTimeout(function () {
        $toast.fadeOut();
    }, 3000);
}

var hover_timer = null;

function show_profile_popover(e) {
    var $el = $(e.target);

    hover_timer = setTimeout(function () {
        hover_timer = null;
        $.ajax({
            type: 'GET',
            url: $el.data('href'),
            success: function (data) {
                $el.popover({
                    html: true,
                    content: data,
                    trigger: 'manual',
                    animation: false
                });
                $el.popover('show');
                $('.popover').on('mouseleave', function () {
                    setTimeout(function () {
                        $el.popover('hide');
                    }, 200);
                });
            }
        });
    }, 500);
}

function hide_profile_popover(e) {
    var $el = $(e.target);

    if (hover_timer) {
        clearTimeout(hover_timer);
        hover_timer = null;
    } else {
        setTimeout(function () {
            if (!$('.popover:hover').length) {
                $el.popover('hide');
            }
        }, 200);
    }
}

function update_followers_count(id) {
    var $el = $('#followers-count-' + id);
    $.ajax({
        type: 'GET',
        url: $el.data('href'),
        success: function (data) {
            $el.text(data.count);
        }
    });
}

function update_collectors_count(id) {
    $.ajax({
        type: 'GET',
        url: $('#collectors-count-' + id).data('href'),
        success: function (data) {
            console.log(data);
            $('#collectors-count-' + id).text(data.count);
        }
    });
}

function update_notifications_count() {
    var $el = $('#notification-badge');
    $.ajax({
        type: 'GET',
        url: $el.data('href'),
        success: function (data) {
            if (data.count === 0) {
                $('#notification-badge').hide();
            } else {
                $el.show();
                $el.text(data.count)
            }
        }
    });
}

function follow(e) {
    var $el = $(e.target);
    var id = $el.data('id');

    $.ajax({
        type: 'POST',
        url: $el.data('href'),
        success: function (data) {
            $el.prev().show();
            $el.hide();
            update_followers_count(id);
            toast(data.message);
        }
    });
}

function unfollow(e) {
    var $el = $(e.target);
    var id = $el.data('id');

    $.ajax({
        type: 'POST',
        url: $el.data('href'),
        success: function (data) {
            $el.next().show();
            $el.hide();
            update_followers_count(id);
            toast(data.message);
        }
    });
}

function collect(e) {
    var $el = $(e.target).data('href') ? $(e.target) : $(e.target).parent('.collect-btn');
    var id = $el.data('id');

    $.ajax({
        type: 'POST',
        url: $el.data('href'),
        success: function (data) {
            $el.prev().show();
            $el.hide();
            update_collectors_count(id);
            toast(data.message);
        }
    });
}

function uncollect(e) {
    var $el = $(e.target).data('href') ? $(e.target) : $(e.target).parent('.uncollect-btn');
    var id = $el.data('id');
    $.ajax({
        type: 'POST',
        url: $el.data('href'),
        success: function (data) {
            $el.next().show();
            $el.hide();
            update_collectors_count(id);
            toast(data.message);
        }
    });
}

$('.profile-popover').hover(show_profile_popover.bind(this), hide_profile_popover.bind(this));
$(document).on('click', '.follow-btn', follow.bind(this));
$(document).on('click', '.unfollow-btn', unfollow.bind(this));
$(document).on('click', '.collect-btn', collect.bind(this));
$(document).on('click', '.uncollect-btn', uncollect.bind(this));

// hide or show tag edit form
$('#tag-btn').click(function () {
    $('#tags').hide();
    $('#tag-form').show();
});
$('#cancel-tag').click(function () {
    $('#tag-form').hide();
    $('#tags').show();
});
// hide or show description edit form
$('#description-btn').click(function () {
    $('#description').hide();
    $('#description-form').show();
});
$('#cancel-description').click(function () {
    $('#description-form').hide();
    $('#description').show();
});
// delete confirm modal
$('#confirm-delete').on('show.bs.modal', function (e) {
    $('.delete-form').attr('action', $(e.relatedTarget).data('href'));
});

if (is_authenticated) {
    setInterval(update_notifications_count, 30000);
}

$("[data-toggle='tooltip']").tooltip({title: moment($(this).data('timestamp')).format('lll')})

});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
18种PCB设计特殊布线的画法与技巧!
Tool 里选 Interactive length tuning 要先布好线再改成蛇形, 这里用的是布线时直接走蛇形: 先 P->T 布线, 再 Shift + A 切换成蛇形走线。
AI 电堂
2020/11/09
2K0
18种PCB设计特殊布线的画法与技巧!
PCB设计(二):汉化及设计
本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2024/01/13
3740
PCB设计(二):汉化及设计
Cadence Allegro贴片和插件元器件封装制作流程总结
因为我们制作0805封装,所以PCB焊盘宽度X = 1.20mm,PCB焊盘高度Y = 1.40mm,PCB总长度G = 3.20mm。
黑马Amos
2023/03/21
4.3K0
Cadence Allegro贴片和插件元器件封装制作流程总结
MasterCAM 大 纲
解压缩        CAD数据/GERBER/钻带/锣带        CAM软件处理
用户7505898
2020/09/06
1.5K0
MasterCAM 大 纲
Altium Designer PCB制作入门实例
概要: 本章旨在说明如何生成电路原理图、把设计信息更新到PCB文件中以及在PCB中布线和生成器件输出文件。并且介绍了工程和集成库的概念以及提供了3D PCB开发环境的简要说明。 欢迎使用Altium Designer,这是一个完善的适应电子产品发展的开发软件。本章将以"非稳态多谐振荡器"为例,介绍如何创建一个PCB工程。
RainMark
2019/09/10
3.7K0
PCB制图总结(AD版)
前几天听老师的技术课,感觉PCB绘制更多的是业内的一些共识,就像老师傅的经验一样,这样做就对了。当然也不是纯经验,所有的经验都可以被理论的解释。因为最近事情多,但是一直都想系统的学这个PCB绘制,我准备录几门课,有需要的可以后台戳戳我。
云深无际
2023/03/24
1.6K0
PCB制图总结(AD版)
六步教你如何用PADS进行PCB设计?
  在使用PADS进行PCB设计的过程中,需要对印制板的设计流程以及相关的注意事项进行重点关注,这样才能更好的为工作组中的设计人员提供系统的设计规范,同时也方便设计人员之间进行相互的交流和检查。
用户6754675
2020/02/20
1.1K0
通用仪表放大器 EVM-Layout
TI家的精密运放都是用的同一个小板子,以前写过,浮在表面,做的时候才发现一地鸡毛。
云深无际
2024/08/20
1320
通用仪表放大器 EVM-Layout
Altium Designer 入门教程
我本身是硬件出身的,最开始接触的是protel 99SE,非常轻量,用来画一些简单的电路图作为入门是可以的,之后做比赛接触到了Altium Designer(以下简称 AD),其实 AD 对于我们现阶段的使用其实是够用了,网上很多人说Candence很厉害,包括我身边以前实验室的朋友都夸它好,有人夸说明肯定又优势,但是都是一门工具,要我说,武功再好,也怕菜刀,工具趁手,就是好工具。
全栈程序员站长
2022/09/14
1.9K0
Altium Designer 入门教程
CAM350-技巧
1.当客户未提供钻孔文件时,除了可以用孔径孔位转成钻孔外,还可以用线路PAD 转成钻孔文件。当孔径孔位符号之间相交不易做成Flash 时,或未给出孔数时(一般指导通孔),用以上方法比较好。先将线路上的所有PAD 拷贝到一个空层,按孔径大小做Flash 后将多余的贴件PAD 删除后转成钻孔文件即可。 2. 当防焊与线路PAD 匹配大部分不符合制程能力时,可将所有线路PAD 拷贝到一个空层,用此层和防焊层计较多余的线路PAD 删除,接着将此层整体放大0.2mm(整体放大或缩小:Utilities-->Over/Under),最后将防焊层的吃锡条或块(大铜皮上的)拷贝过去即可。用此方法做防焊一定要与原始防焊仔细比较,以防多防焊或少防焊。 3.当资料有大面积铜箔覆盖,线路或PAD 与铜皮的距离不在制作要求之内,且外型尺寸又较大时,(如广上的)可用下列方法快速修整线路或PAD 与铜皮的间距。先将线路层(此层为第一层)的所有PAD 拷贝到一个空层,把对应在大铜皮上的PAD 删除后将剩余PAD 放大做为减线路层(即第二层),然后把第一层拷贝到一个空层,将大铜皮删除后作为第三等。合层方式为:第一层(加层)、第二层(减层)、第三层(加层)。一般来说我们为了减小数据量,可以将第一层只保留大铜皮。如果只是防焊到大铜皮的间距不够,就可以把放大后(满足制程能力)的防焊拷贝到一个空层,把对应在大铜皮上的防焊删除后将剩余防焊放大做为第二层。 注:用此方法做好线路后,一定要用命令将多个层面合成Utilities-->Convert Composite 的一个复合层转换成一个层面,然后将此层和原稿用Anglysis-->Compare Layers 命令进行仔细核对。 4.有些资料的文字层有很多文字框,且文字框到线路PAD 间距不满足制程能力时,可借鉴以下方法:先将任何类型的以个文字框用Edit-->Move Vtx/Seg 命令拉伸至规格范围后做成Flash,接着将其同类型的其它文字框做成与之相同的Flash 即可。但要注意的是,做成Flash 后一定要将其打散,以防下此打开资料时D 码会旋转。
用户7505898
2020/09/11
3.6K0
Altium_Designer的使用
​内容包括原理图、PCB图绘制方法,封装制作以及DRC规则的使用、图纸的打印、出错处理,3D元件体建立教程及相应的3D封装下载等。持续更新,原创不易!
爱上电路设计
2023/09/05
1.7K0
Altium_Designer的使用
altium designer绘制51单片机最小系统
4、新建PCB库,并给原理图库中我们所用到的每一个元件,绘制PCB封装,当然对于常用元件,AD已经自带PCB封装,这种情况显然不用自绘PCB封装了。后缀为pcbLib.
全栈程序员站长
2022/09/10
4.1K0
altium designer绘制51单片机最小系统
Altium Designer
🚀write in front🚀 ---- 🔎大家好,我是泽En,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅嵌入式领域新星创作者→2021年度博客之星物联网与嵌入式开发TOP5→2021年博客之星TOP100→周榜34→总榜2815🏅 🆔本文由 泽En 原创 CSDN首发🐒 如需转载还请通知⚠ 📝个人主页:打打酱油desu_泽En_CSDN博客🎓 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【Altium Designer】系列_打打酱油desu-CSDN博
謓泽
2022/12/12
1.1K0
Altium Designer
104条PCB 布局布线技巧问答
2、[问] 在布板时,如果线密,过孔就可能要多,当然就会影响板子的电气性能,请问怎样提高板子的电气性能?
硬件开源小站
2023/04/14
1.3K1
protel相关资料
其实,在一块主板上采用蛇行线的原因有两个:一是为了保证走线线路的等长。因为像CPU到北桥芯片的时钟线,它不同于普通家电的电路板线路,在这些线路上以100MHz左右的频率高速运行的信号,对线路的长度十分敏感。不等长的时钟线路会引起信号的不同步,继而造成系统不稳定。故此,某些线路必须以弯曲的方式走线来调节长度。另一个使用蛇行线的常见原因为了尽可能减少电磁辐射(EMI)对主板其余部件和人体的影响。因为高速而单调的数字信号会干扰主板中各种零件的正常工作。通常,主板厂商抑制 EMI的一种简便方法就是设计蛇形线,尽可能多地消化吸收辐射。但是,我们也应该看到,虽然采用蛇行线有上面这些好处,也并不是说在设计主板走线时使用的蛇行线越多越好。因为过多过密的主板走线会造成主板布局的疏密不均,会对主板的质量有一定的影响。好的走线应使主板上各部分线路密度差别不大,并且要尽可能均匀分布,否则很容易造成主板的不稳定。 3、忌用“飞线”主板  判断一块主板走线的好坏,还可以从走线的转弯角度看出来。好的主板布线应该比较均匀整齐,走线转弯角度不应小于135度。因为转弯角度过小的走线在高频电路中相当于电感元件,会对其它设备产生干扰。    而某些设计水平很差的主板厂商在设计走线时,由于技术实力原因往往会导致最后的成品有缺陷。此时,便采取人工修补的方法来解决问题,这种因设计不合理而出现的导线,称之为“飞线”(图2)。如果一块主板上有飞线,就证明该主板的走线设计有一些问题。
全栈程序员站长
2022/06/26
1.7K0
protel相关资料
ESP32-C3设计汇总
首先是ESP32-C3只支持BLE,也就是数据是以packet出现的。不支持普通的蓝牙,也就是数据的处理的时候是可以字符串去操作的。
云深无际
2024/08/20
2820
ESP32-C3设计汇总
CAM学习资料
每一个PCB 板基本上都是由孔径孔位层、DRILL 层、线路层、阻焊层、字符层所组成的,在CAM350 中,每载入一层都会以不同的颜色区分开,以便于我们操作。
用户7505898
2020/09/21
1.8K0
CAM学习资料
VC++6.0入门——第九讲 定制应用功能程序外观
好事文章地址:https://cloud.tencent.com/developer/article/2470499
Arya
2024/12/03
1210
VC++6.0入门——第九讲 定制应用功能程序外观
UG编程手册
准备几何(Prepare Geometry)-------------------------------(2)
用户7505898
2020/09/28
2.4K0
UG编程手册
日拱一卒,麻省理工CS入门系列完结撒花
今天我们继续麻省理工missing smester,消失的学期的学习。这一节课的内容比较杂, 是一些使用过程当中的配置和技巧,算是杂项吧。
TechFlow-承志
2022/09/21
5020
相关推荐
18种PCB设计特殊布线的画法与技巧!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验