Как я могу заставить свою кнопку на панели инструментов расширения Firefox появиться автоматически?

Я думаю, что добавление «столбца номера транзакции» для каждой политики облегчит это. Затем вы можете просто снять транзакции, чтобы увидеть, есть ли «измененные» строки.

Посмотрите на следующее, например:

import pandas as pd

dat = [['b123', 234, 522], ['b123', 234, 522], ['c123', 34, 23], 
['c123', 38, 23], ['c123', 34, 23]]

cols = ['Policy_id', 'Fee1', 'Fee2']

df = pd.DataFrame(dat, columns=cols)

df['transaction_id'] = 1
df['transaction_id'] = df.groupby('Policy_id').cumsum()['transaction_id']

df2 = df[cols].drop_duplicates()

final_df = df2.join(df[['transaction_id']])

Вывод:

      Policy_id  Fee1  Fee2  transaction_id
0      b123   234   522               1
2      c123    34    23               1
3      c123    38    23               2

И так как b123 имеет только одну транзакцию после дедупликации, вы знаете, что ничего изменилось. Что-то должно было измениться с c123.

Вы можете получить все измененные транзакции с помощью final_df[final_df.transaction_id > 1].

Как уже упоминалось, вам, возможно, придется сделать какую-то другую математику с датами, но это должно помочь вам в этом.

Редактировать: Если вы хотите просмотреть только последние два месяца, вы можете отфильтровать DataFrame перед запуском вышеуказанного.

Как это сделать:

Создайте переменную для отфильтрованной даты, например:

from datetime import date, timedelta
filtered_date = date.today() - timedelta(days=60)

Затем я бы использовал пакет pyjanitor, чтобы использовать его метод filter_date. Просто выберите любой столбец, который вам нужен; Я думал, что Start_date кажется наиболее разумным.

import janitor

final_df.filter_date("Start_date", start=filtered_date)

Как только вы запустите import janitor, final_df волшебным образом получит доступ к методу filter_date.

Вы можете увидеть больше filter_date примеров здесь .

8
задан GEOCHET 23 February 2009 в 22:30
поделиться

3 ответа

От https://developer.mozilla.org/En/Code_snippets:Toolbar#Adding_button_by_default-

Когда Вы создаете и развертываете свое расширение и включаете кнопку на панели инструментов для него путем накладывания Настраивания toolbarpalette, это не доступно по умолчанию. Пользователь должен перетащить его на панель инструментов. Следующий код поместит Вашу кнопку в панель инструментов по умолчанию. Это должно только быть сделано на первом показе Вашего дополнения после установки так, чтобы, если пользователь решает удалить Вашу кнопку, она не обнаруживалась снова каждый раз, когда они запускают приложение.

Примечания

Вставьте свою кнопку по умолчанию только однажды на первом показе, или когда дополнительное обновление добавит новую кнопку.

Только добавьте свою кнопку по умолчанию, если она добавляет действительное значение к пользователю и будет частой точкой входа к Вашему расширению.

Вы не должны вставлять свою кнопку на панели инструментов ни между одним из следующих элементов: объединенное назад/вперед кнопка, адресная панель, остановка botton или кнопка перезагрузки. Эти элементы имеют специальные поведения при размещении друг рядом с другом и повреждении, если разделено другим элементом.

/**
 * Installs the toolbar button with the given ID into the given
 * toolbar, if it is not already present in the document.
 *
 * @param {string} toolbarId The ID of the toolbar to install to.
 * @param {string} id The ID of the button to install.
 * @param {string} afterId The ID of the element to insert after. @optional
 */
function installButton(toolbarId, id, afterId) {
    if (!document.getElementById(id)) {
        var toolbar = document.getElementById(toolbarId);

        // If no afterId is given, then append the item to the toolbar
        var before = null;
        if (afterId) {
            let elem = document.getElementById(afterId);
            if (elem && elem.parentNode == toolbar)
                before = elem.nextElementSibling;
        }

        toolbar.insertItem(id, before);
        toolbar.setAttribute("currentset", toolbar.currentSet);
        document.persist(toolbar.id, "currentset");

        if (toolbarId == "addon-bar")
            toolbar.collapsed = false;
    }
}

if (firstRun) {
    installButton("nav-bar", "my-extension-navbar-button");
    // The "addon-bar" is available since Firefox 4
    installButton("addon-bar", "my-extension-addon-bar-button");
}
8
ответ дан 5 December 2019 в 19:03
поделиться

Мы используем следующий код....

function init() {

    // .... 

    var navbar = document.getElementById("nav-bar");
    if ((myExtensionShared.checkMyBtnInstalled() == false) &&
        (navbar != null && document.getElementById("myExtension-button") == null)) {
        var newset;
            if (navbar.getAttribute('currentset') && 
              navbar.getAttribute('currentset').indexOf('myExtension-button') == -1) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset = navbar.getAttribute('currentset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }
            else if (!navbar.getAttribute('currentset')) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset=navbar.getAttribute('defaultset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }

    }

    // .... 

}



myExtensionShared.prototype.checkMyBtnInstalled = function() {
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                                       .getService(Components.interfaces.nsIPrefBranch);
    var btnInstalled = false;
    if (prefs.prefHasUserValue("extensions.myExtension.myBtnInstalled")) {
        btnInstalled = prefs.getBoolPref("extensions.myExtension.myBtnInstalled");
    }
    if (!btnInstalled) {
        prefs.setBoolPref("extensions.myExtension.myBtnInstalled", true);
    }
    return btnInstalled;
}
1
ответ дан 5 December 2019 в 19:03
поделиться

Мы используем следующий код, который будет добавьте кнопку (если она уже существует где-то еще на панели).

//...
appendButtonInToolbar:function(buttonId, toolbarId) {
    var toolbar = document.getElementById(toolbarId);
    var button = document.getElementById(buttonId);
    if(button) {
        var parentBar = button.parentNode;          
        if(parentBar && parentBar != toolbar) {
            var newset = this.removeButtonFromToolbarCurrentSet(parentBar,buttonId);              
        }
        toolbar.appendChild(button);
    }else{          
        toolbar.insertItem(buttonId);
    }

    this.appendButtonInToolbarCurrentSet(toolbar,buttonId);
},

appendButtonInToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    var newset = "";
    if(oldset && oldset!="") {
        newset = oldset + ",";
    }        
    newset += buttonId;        
    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
},


removeButtonFromToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    if(!oldset || oldset=="" || oldset.indexOf(buttonId) == -1) return oldset;
    var reg = new RegExp(buttonId+",?", "gi");        
    var newset = oldset.replace(reg,"");
    if (newset.charAt(newset.length-1) == ",") {
       newset = newset.substring(0, newset.length - 1);
    }

    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
}, 
//...
0
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: