~randomaction/ubufox/lp274605

« back to all changes in this revision

Viewing changes to content/pluginAlternativeOverlay.js

  • Committer: Alexander Sack
  • Date: 2008-10-14 21:04:03 UTC
  • mfrom: (9.1.130 ubufox)
  • Revision ID: asac@jwsdot.com-20081014210403-x1zhz5033r443w82
* ubufox release candidate 0.6 (lp:ubufox / bzr 139); Features:
  - firefox restart notification on upgrade
  - improved plugin wizard
  - plugin alternative wizard lets you select a preferred plugin
    for a specific mime-type
* elminate all cherry picked changes since beta1
  - (cherry-pick rev 111 from lp:ubufox)
  - (cherry-pick rev 112 from lp:ubufox)
  - (cherry-pick rev 113 from lp:ubufox)
  - (cherry-pick rev 114 from lp:ubufox)
  - (cherry-pick rev 116 from lp:ubufox)
  - (cherry-pick rev 115 from lp:ubufox)

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
 
44
44
window.addEventListener("load", showContentList, false);
45
45
 
 
46
var gBrowser = document.getElementById("content");
46
47
var usedMimeTypes = new Array();
47
48
var allHandledMimeTypes = new Array();
48
49
var filteredMimeTypes = null;
61
62
  store[mtype] = "x";
62
63
}
63
64
 
 
65
var filehintNameMap = null;
 
66
 
 
67
 
 
68
function parseFilehintNameText (text)
 
69
{
 
70
   var map = {};
 
71
   var array = new Array();
 
72
 
 
73
   var start = 0;
 
74
   var next  = 0;
 
75
   next = text.indexOf("\n", start);
 
76
 
 
77
   while (next  > -1) {
 
78
      array.push(text.substring(start, next));
 
79
      start = next+1;
 
80
      next = text.indexOf("\n", start);
 
81
   }
 
82
   array.push(text.substring(start));
 
83
 
 
84
   var key = null;
 
85
   var value = null;
 
86
   var line = null;
 
87
   var separator = 0;
 
88
   var left = null;
 
89
   var right = null;
 
90
   for (let a = 0; a < array.length; a++) {
 
91
      line = array[a];
 
92
      separator = line.indexOf(":");
 
93
      left = line.substring(0, separator);
 
94
      right = line.substring(separator+2);
 
95
      if (left == "filehint")
 
96
         key = right;
 
97
      else {
 
98
         map[key] = right;
 
99
      }
 
100
   }
 
101
   return map;
 
102
}
 
103
 
 
104
function getFilehintNameMap () {
 
105
  if (filehintNameMap)
 
106
    return filehintNameMap;
 
107
 
 
108
  var url = "http://localhost/~asac/cgi-bin/plugin-finder.py?op=filehint2name&distributionID=8.10";
 
109
  try {
 
110
    url = prefBranch.getCharPref("pfs.filehint.url");
 
111
  } catch (e) {}
 
112
 
 
113
  var req = new XMLHttpRequest();
 
114
  req.open('GET', url, true); /* 3rd argument, true, marks this as async */
 
115
  req.onreadystatechange = function (aEvt) {
 
116
    if (req.readyState == 4) {
 
117
       if(req.status == 200) {
 
118
         filehintNameMap = parseFilehintNameText (req.responseText);
 
119
         showContentList();
 
120
       }
 
121
    }
 
122
  };
 
123
  req.send(null); 
 
124
  return null;
 
125
}
 
126
 
 
127
if (!filehintNameMap)
 
128
  getFilehintNameMap();
64
129
 
65
130
function showContentList(){
66
131
  var contentName;
88
153
}
89
154
 
90
155
function describePreferredAction(mimeType){
 
156
  var filehintNameMap = getFilehintNameMap();
91
157
 
92
158
  var preferredFileName = null;
93
159
  try {
115
181
   }
116
182
 
117
183
  if(!perfectMatchPlugin)
118
 
    return "no plugin avail";
 
184
    return "...";
 
185
 
 
186
  for (betterNameCarrierKey in filehintNameMap) {
 
187
     if (perfectMatchPlugin.filename && perfectMatchPlugin.filename.indexOf(betterNameCarrierKey) > -1) {
 
188
       return filehintNameMap[betterNameCarrierKey];
 
189
     }
 
190
  }
 
191
 
119
192
  if(perfectMatchPlugin.name.indexOf("Shockwave Flash") >= 0 ||
120
193
     perfectMatchPlugin.name.indexOf("Windows Media Player") >= 0)
121
194
    return perfectMatchPlugin.description;
136
209
  if (_list.selectedItem)
137
210
    _list.setAttribute("lastSelectedType", _list.selectedItem.getAttribute("type"));
138
211
}
139
 
  
 
212
 
 
213
function onSelectUsedPlugins (e) {
 
214
        filteredMimeTypes = usedMimeTypes;
 
215
        showContentList();
 
216
}
 
217
 
 
218
function onSelectAllPlugins (e) {
 
219
        filteredMimeTypes = allHandledMimeTypes;
 
220
        showContentList();
 
221
}
 
222
   
140
223
var gApplicationsPane = {  
141
224
 
142
225
  rebuildActionsMenu: function() {
 
226
    var filehintNameMap = getFilehintNameMap();
143
227
    var _list = document.getElementById("pluginsList");
144
228
    var typeItem = _list.selectedItem;
145
229
    var menu = document.getAnonymousElementByAttribute(typeItem, "class", "actionsMenu");
149
233
    while (menuPopup.hasChildNodes())
150
234
      menuPopup.removeChild(menuPopup.lastChild);
151
235
 
 
236
    var menuItem = null;
152
237
    for each (let mimeType in filteredMimeTypes) {
153
238
      for (var i = 0; i < pluginArrayLength; i++) {
154
239
        var plugin = navigator.plugins[i];
155
240
        for (var j = 0; j < plugin.length; j++) {
156
241
          if(plugin.item(j).type == mimeType && typeItem.type == mimeType){  
157
 
            let menuItem = document.createElement("menuitem");
 
242
            menuItem = document.createElement("menuitem");
158
243
            var pluginName = plugin.name;
159
244
            if(pluginName.indexOf("Shockwave Flash") >= 0)
160
245
              pluginName = plugin.description;
 
246
            for (betterNameCarrierKey in filehintNameMap) {
 
247
               if (plugin.filename && plugin.filename.indexOf(betterNameCarrierKey) > -1) {
 
248
                  pluginName = filehintNameMap[betterNameCarrierKey];
 
249
               }
 
250
            }
161
251
            menuItem.setAttribute("label", pluginName);
 
252
            menuItem.setAttribute("id", pluginName);
162
253
            menuItem.ubufoxPlugin = plugin;
163
254
            menuItem.setAttribute(APP_ICON_ATTR_NAME, "plugin");
164
255
            menuPopup.appendChild(menuItem);
166
257
        }
167
258
      }
168
259
    }
 
260
    var strbundle = document.getElementById("ubufox-alt-strings")
 
261
    var search = strbundle.getString("ubufox.altplugins.search");
 
262
 
 
263
    menuItem = document.createElement("menuitem");
 
264
    menuItem.setAttribute("id", "install-plugin-handler");
 
265
    menuItem.setAttribute("label", search);
 
266
    menuItem.type = typeItem.type;
 
267
    menuPopup.appendChild(menuItem);
169
268
  },
170
269
  
171
270
  onSelectAction: function(aActionItem) {
172
271
    var _list = document.getElementById("pluginsList");
173
272
    var typeItem = _list.selectedItem;
174
 
    var pluginArrayLength = navigator.plugins.length;
175
 
    prefBranch.setCharPref("modules.plugins.mimetype." + typeItem.type, aActionItem.ubufoxPlugin.filename);
176
 
    pluginManager.reloadPlugins(true);
177
 
    showContentList();
 
273
 
 
274
    var id = aActionItem.getAttribute ("id");
 
275
    if (id == "install-plugin-handler") {
 
276
      var pluginInfoArray = {};
 
277
      var fakePluginInfo = new Object();
 
278
      fakePluginInfo.mimetype = typeItem.type;
 
279
      fakePluginInfo.pluginsPage = "";
 
280
      pluginInfoArray[typeItem.type] = fakePluginInfo;
 
281
 
 
282
      window.openDialog("chrome://mozapps/content/plugins/pluginInstallerWizard.xul",
 
283
                 "PFSWindow", "chrome,centerscreen,resizable=yes,width=600,height=600",
 
284
                 {plugins: pluginInfoArray, browser: gBrowser});
 
285
 
 
286
      pluginManager.reloadPlugins(true);
 
287
      showContentList();
 
288
    }
 
289
    else {
 
290
      prefBranch.setCharPref("modules.plugins.mimetype." + typeItem.type, aActionItem.ubufoxPlugin.filename);
 
291
      pluginManager.reloadPlugins(true);
 
292
      showContentList();
 
293
    }
178
294
    return;
179
295
  }
180
296
};