~ubuntu-branches/ubuntu/lucid/flashblock/lucid-proposed

« back to all changes in this revision

Viewing changes to content/flashblock/options.js

  • Committer: Bazaar Package Importer
  • Author(s): Philippe Coval
  • Date: 2008-04-09 13:10:00 UTC
  • Revision ID: james.westby@ubuntu.com-20080409131000-5wd25isw94ithgp8
Tags: upstream-1.3.9a
ImportĀ upstreamĀ versionĀ 1.3.9a

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
function checkSiteName(siteName) {
 
2
    var regex = /^[A-Za-z0-9_\-\.\*]+(\:\d{1,5}){0,1}$/; 
 
3
    return regex.test(siteName);
 
4
}
 
5
 
 
6
function listContainsSite(site) {
 
7
    var siteList = document.getElementById("sitelist");
 
8
    var numRows = siteList.getRowCount();
 
9
    var i;
 
10
    for(i = 0; i < numRows; i++) {
 
11
        if(siteList.getItemAtIndex(i).label == site)
 
12
            return true;
 
13
    }
 
14
    return false;
 
15
}
 
16
 
 
17
function listFindIndex(site) {
 
18
    var siteList = document.getElementById("sitelist");
 
19
    var numRows = siteList.getRowCount();
 
20
    var i;
 
21
    for(i = 0; i < numRows; i++) {
 
22
        if(perDomainComparison(siteList.getItemAtIndex(i).label, site) > 0)
 
23
            break;
 
24
    }
 
25
    return i;
 
26
}
 
27
 
 
28
// To sort the whitelist array.
 
29
function perDomainComparison(host1, host2) {
 
30
    function min(a, b) {
 
31
        return (a < b) ? a : b;
 
32
    }
 
33
    // Split on domain boundaries and reverse.
 
34
    components1 = host1.split(".").reverse();
 
35
    components2 = host2.split(".").reverse();
 
36
    // Compare element by element until a difference is found
 
37
    for (i = 0; i < min(components1.length, components2.length); i++) {
 
38
        if (components1[i] < components2[i])
 
39
            return -1;
 
40
        if (components1[i] > components2[i])
 
41
            return 1;
 
42
    }
 
43
    // If all components so far are the same, the shorter name comes first
 
44
    if (components1.length > components2.length)
 
45
        return 1;
 
46
    if (components2.length > components1.length)
 
47
        return -1;
 
48
    return 0;
 
49
}
 
50
 
 
51
function addSite() {
 
52
    var textbox = document.getElementById("siteTextbox");
 
53
    var siteName = textbox.value;
 
54
 
 
55
    if(siteName.length == 0)
 
56
        return false;
 
57
 
 
58
    if(! checkSiteName(siteName)) {
 
59
        var msg = flashblockBundle.getString("invalidCharsInSiteName");
 
60
        alert(msg);
 
61
        return false;
 
62
    }
 
63
 
 
64
    var siteList = document.getElementById("sitelist");
 
65
    if(! listContainsSite(siteName)) {
 
66
        var numRows = siteList.getRowCount();
 
67
        var index = listFindIndex(siteName);
 
68
 
 
69
        if(index < numRows)
 
70
            newElement = siteList.insertItemAt(index, siteName, "");
 
71
        else
 
72
            newElement = siteList.appendItem(siteName, "");
 
73
 
 
74
        //use ensureElementIsVisible due to mozilla bug id 250123
 
75
        siteList.ensureElementIsVisible(newElement);
 
76
    }
 
77
    textbox.value = "";
 
78
    siteInput(textbox);
 
79
    textbox.focus();
 
80
    return true;
 
81
}
 
82
 
 
83
function removeSite() {
 
84
    var siteList = document.getElementById("sitelist");
 
85
    var index = siteList.selectedIndex;
 
86
    if(index != -1) {
 
87
        siteList.removeItemAt(index);
 
88
        document.getElementById("btnRemove").disabled = true;
 
89
    }
 
90
}
 
91
 
 
92
function removeAllSites() {
 
93
    var siteList = document.getElementById("sitelist");
 
94
    var msg = flashblockBundle.getString("confirmClearWhitelist");
 
95
 
 
96
    if(confirm(msg)) {
 
97
        while(siteList.getRowCount() > 0)
 
98
            siteList.removeItemAt(0);
 
99
    }
 
100
}
 
101
 
 
102
function doOK() {
 
103
    var prefStr = sitelistToString();
 
104
    setWhitelistPref(prefStr);
 
105
 
 
106
    setEnabled(document.getElementById("enableCheckbox").checked);
 
107
 
 
108
    window.close();
 
109
}
 
110
 
 
111
function onLoad() {
 
112
    flashblockBundle = document.getElementById("bundle_flashblock");
 
113
    var isJSDisabled = !isJavascriptEnabled();
 
114
    document.getElementById("enableCheckbox").checked = isEnabled();
 
115
    var pref = document.getElementById("enableToggleBtn");
 
116
    if (pref) {
 
117
        pref.checked = isButtonEnabled();
 
118
        pref.disabled = isJSDisabled;
 
119
    }
 
120
    document.getElementById("enableCheckbox").disabled = isJSDisabled;
 
121
    document.getElementById("siteTextbox").disabled = isJSDisabled;
 
122
    document.getElementById("sitelist").disabled = isJSDisabled;
 
123
    document.getElementById("btnRemoveAll").disabled = isJSDisabled;
 
124
    popWhitelist();
 
125
    getVersion();
 
126
}
 
127
 
 
128
function popWhitelist() {
 
129
    var prefStr = getWhitelistPref();
 
130
    var i;
 
131
    var siteList = document.getElementById("sitelist");
 
132
    while(siteList.getRowCount() > 0)
 
133
        siteList.removeItemAt(0);
 
134
 
 
135
    if(prefStr) {
 
136
        var array = prefStr.split(",");
 
137
        array.sort(perDomainComparison);
 
138
        for (i = 0; i < array.length; i++) {
 
139
            siteList.ensureElementIsVisible(siteList.appendItem(array[i]));
 
140
        }
 
141
    }
 
142
}
 
143
 
 
144
function doCancel() {
 
145
    window.close();
 
146
}
 
147
 
 
148
function siteInput(siteField) {
 
149
    document.getElementById("btnAdd").disabled = !siteField.value;
 
150
}
 
151
 
 
152
function siteSelected(siteList) {
 
153
    document.getElementById("btnRemove").disabled = (siteList.selectedIndex == -1);
 
154
}
 
155
 
 
156
function sitelistToString() {
 
157
    var siteList = document.getElementById("sitelist");
 
158
    var numRows = siteList.getRowCount();
 
159
    var prefStr = "";
 
160
    var i;
 
161
    for(i = 0; i < numRows; i++) {
 
162
        if(i != 0) prefStr += ",";
 
163
        prefStr += siteList.getItemAtIndex(i).label;
 
164
    }
 
165
    return prefStr;
 
166
}
 
167
 
 
168
function getVersion() {
 
169
    if ("@mozilla.org/extensions/manager;1" in Components.classes) {
 
170
        var flashblockID = "{3d7eb24f-2740-49df-8937-200b1cc08f8a}";
 
171
        var em = Components.classes["@mozilla.org/extensions/manager;1"]
 
172
                           .getService(Components.interfaces.nsIExtensionManager);
 
173
        if (!("getItemForID" in em))
 
174
            return;
 
175
        var version = em.getItemForID(flashblockID).version;
 
176
        var display = document.getElementById("flashblockVersion");
 
177
        if (display && version)
 
178
            display.value = version;
 
179
    }
 
180
}
 
181
 
 
182
var flashblockBundle;