added nice quick link dialog, moved mac hack into code itself
authorjkkn <jkkn>
Fri, 2 Nov 2007 02:00:10 +0000 (02:00 +0000)
committerjkkn <jkkn>
Fri, 2 Nov 2007 02:00:10 +0000 (02:00 +0000)
13 files changed:
.cvsignore [new file with mode: 0644]
FireFoxDev.bat [new file with mode: 0755]
content/about.xul
content/browser_overlay.xul
content/options.js [new file with mode: 0755]
content/options.xul
content/quickbox.xul [new file with mode: 0755]
content/tv2developer-main.js [new file with mode: 0755]
content/tv2developer.js
locale/en-US/tv2developer.dtd
locale/en-US/tv2developer.properties
version
webroot/index.html

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..8af9b88
--- /dev/null
@@ -0,0 +1 @@
+tv2developer.xpi
diff --git a/FireFoxDev.bat b/FireFoxDev.bat
new file mode 100755 (executable)
index 0000000..81f55f3
--- /dev/null
@@ -0,0 +1,3 @@
+@echo off\r
+set MOZ_NO_REMOTE=1\r
+start "" "%ProgramFiles%\Mozilla Firefox\firefox.exe" -P dev
\ No newline at end of file
index 77b631889db6d489f9488c05fa807f7db74310ad..b8c8ab1fc5518d3bbafb1070c340d89d40a4851f 100755 (executable)
 
 <groupbox align="center" orient="horizontal">
 <vbox>
-  <text value="TV 2 Developer Plugin" style="font-weight: bold; font-size: x-large;"/>
+  <text value="&aboutDialog.appname;" style="font-weight: bold; font-size: x-large;"/>
   <text value="&version; ${VERSION}"/>
   <separator class="thin"/>
   <text value="&createdBy;" style="font-weight: bold;"/>
   <text value="Kristian Kræmmer Nielsen &lt;jkkn@tv2.dk&gt;" class="url"
-        onclick="window.open('http://jkkn.dk/tv2developer/');"/>
+        onclick="window.close();window.open('http://jkkn.dk/tv2developer/');"/>
   <separator class="thin"/>
     <text value="&homePage;" style="font-weight: bold;"/>
     <text value="http://jkkn.dk/tv2developer/"
           class="url"
-          onclick="window.open('http://jkkn.dk/tv2developer/');"/>
+          onclick="window.close();window.open('http://jkkn.dk/tv2developer/');"/>
   <separator class="thin"/>
 </vbox>
 <spring flex="1"/>
index 92f65e6ab38797335b7877d72ec25701611e63a7..7570721a150844c3b0cf879003aa5404d90311bf 100755 (executable)
@@ -6,15 +6,11 @@
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <script type="application/x-javascript" src="tv2developer.js" />
+<script type="application/x-javascript" src="tv2developer-main.js" />
 <stringbundleset id="stringbundleset">
     <stringbundle id="tv2developer_strings" src="chrome://tv2developer/locale/tv2developer.properties"/>
 </stringbundleset>
 
-<keyset id="mainKeyset">
-    <key id="tv2-key-open-win" modifiers="alt" key="1" oncommand="TV2Developer.handleKeyShortcut(event)"/>
-    <key id="tv2-key-open-mac" modifiers="control" key="1" oncommand="TV2Developer.handleKeyShortcut(event)"/>
-</keyset>
-
 <popupset id="mainPopupSet">
     <popup id="tv2developer-contextmenu">
         <menuitem label="&config.label;..." accesskey="&config.accesskey;"
@@ -28,7 +24,6 @@
 <toolbarpalette id="BrowserToolbarPalette">
   <toolbarbutton id="tv2-swap-button" type="menu-button"
                  context="tv2developer-contextmenu"
-                 accesskey="2"
                  insertAfter="urlbar-container"
                  label="tv2.dk"
                  oncommand="TV2Developer.handleButton(event);"
diff --git a/content/options.js b/content/options.js
new file mode 100755 (executable)
index 0000000..86528dc
--- /dev/null
@@ -0,0 +1,34 @@
+
+var TV2Options = {
+    
+    _keyBranch: null,
+    _hackEnabled: false,
+    init: function() {
+        var hacks = document.getElementById('mac-hacks');
+        this._keyBranch =
+            Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService)
+            .getBranch('ui.key.');
+        // we show the options for hacing accesskeys if user has set a preference or accesskeys are disabled
+        this._hackEnabled =
+            this._keyBranch.prefHasUserValue('menuAccessKey') ||
+            (this._keyBranch.getIntPref('menuAccessKey') == -1);
+        if (!this._hackEnabled) {
+            hacks.style.display = 'none';
+        } else {
+            document.getElementById('mac-accesskeys').checked =
+                (this._keyBranch.getIntPref('menuAccessKey') != -1);
+        }
+    },
+    
+    save: function() {
+        if (this._hackEnabled) {
+            var keys_hack = document.getElementById('mac-accesskeys').checked;
+            if (keys_hack) {
+                this._keyBranch.setIntPref('menuAccessKey', 17);
+            } else {
+                this._keyBranch.clearUserPref('menuAccessKey');
+            }
+        }
+    }
+    
+}
\ No newline at end of file
index dc2c2a577587939544646d8ce3a4237fc8546c6f..37acd153f0893f961c67bca43b4de72a203b84f4 100755 (executable)
@@ -4,18 +4,24 @@
 
 <prefwindow id="tv2developer_options"
             xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-               title="&optionsDialog.title;">
-
-  <prefpane id="pane1" label="Options">
+               title="&optionsDialog.title;"
+               onload="TV2Options.init()"
+               ondialogaccept="TV2Options.save()"
+               >
+<script type="application/x-javascript" src="options.js" />
+  
+  <prefpane id="pane1" label="&optionsDialog.options.label;">
     <preferences>
       <preference id="pref_developer-initials" name="tv2developer.developer-initials" type="string"/>
     </preferences>
      
-    <groupbox title="Options" align="center" orient="horizontal">
-    <vbox>
-        <label control="developer-initials" value="&developerInitials.description;"/>
-        <textbox id="developer-initials" preference="pref_developer-initials"/>
-    </vbox>
+    <groupbox>
+        <label control="developer-initials" value="&developerInitials.description;" />
+        <textbox id="developer-initials" preference="pref_developer-initials" />
+    </groupbox>
+
+    <groupbox id="mac-hacks">
+        <checkbox id="mac-accesskeys" label="&optionsDialog.mac.accesskeys;" tooltiptext="&optionsDialog.mac.accesskeys.tooltiptext;"/>
     </groupbox>
   </prefpane>
 
diff --git a/content/quickbox.xul b/content/quickbox.xul
new file mode 100755 (executable)
index 0000000..b43ba49
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>  
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<!DOCTYPE prefwindow SYSTEM "chrome://tv2developer/locale/tv2developer.dtd">
+<dialog
+    id="tv2developer_quickbox"
+       title="&quickbox.title;"
+       buttons="accept,cancel"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       onload="TV2Developer.updateQuickbox()"
+       ondialogaccept="TV2Developer.goQuickbox()">
+<script type="application/x-javascript" src="tv2developer.js" />
+
+<stringbundleset id="stringbundleset">
+    <stringbundle id="tv2developer_strings" src="chrome://tv2developer/locale/tv2developer.properties"/>
+</stringbundleset>
+
+<groupbox>
+<label value="&quickbox.enterprefix;" control="tv2prefix"/>
+<textbox id="tv2prefix"/>
+
+<radiogroup id="tv2postfix">
+  <grid>
+    <columns>
+       <column/><column/><column/>
+    </columns>
+       <rows id="radiobox-rows" />
+  </grid>
+  <checkbox id="php4site" label="&quickbox.php4site;" accesskey="4" tooltiptext="&quickbox.php4site.tooltiptext;" />
+  <separator class="groove"/>
+  <radio id="go-node" label="&quickbox.nodeid;" accesskey="&quickbox.nodeid.accesskey;"/>
+  <radio id="go-content-id" label="&quickbox.contentid;" accesskey="&quickbox.contentid.accesskey;"/>
+  <radio id="go-ttv-page" label="&quickbox.ttvpage;" accesskey="&quickbox.ttvpage.accesskey;"/>
+</radiogroup>
+
+</groupbox>
+
+</dialog>
diff --git a/content/tv2developer-main.js b/content/tv2developer-main.js
new file mode 100755 (executable)
index 0000000..921da76
--- /dev/null
@@ -0,0 +1,2 @@
+
+window.addEventListener("load", function(e) { TV2Developer.init(); }, false);
index 2f969d8d2cb6404ecbde4aaaa6c4bf2fb3e0d745..c2a246b2cfb8211a58d8d1e7a5d6b1fd49e3b603 100755 (executable)
@@ -19,6 +19,7 @@
 // O = Opdatering
 // P = Ttv page
 // P = Ttvpumpe
+// Q = Open quicklink dialog
 // R = Requeue in tango
 // S = Snapshot
 // T = Test
 var TV2Developer = {
     
     _lastAction: null,
+    
+    /* method for initialize, reading properties, adding icon at firstrun, added keyshortcuts */
     init: function() {
         // init
         this._lastAction = this.getPref('lastaction-linktype');
+        // add shortcuts depending on platform
+        var shortcuts = document.getElementById('mainKeyset');
+        // We take this from ui.key.chromeAccess (no other way it seems, jkkn)
+        // Use 0 for disabled, 1 for Shift, 2 for Ctrl, 4 for Alt, 8 for Meta
+        // (values can be combined, e.g. 5 for Alt+Shift)
+        var altKey = []; // ALT on windows, CONTROL on mac
+        var chromeAccess =
+            Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService)
+            .getBranch('ui.key.').getIntPref('chromeAccess');
+        if (chromeAccess & 1) altKey.push('shift');
+        if (chromeAccess & 2) altKey.push('control');
+        if (chromeAccess & 4) altKey.push('alt');
+        if (chromeAccess & 8) altKey.push('meta');
+        if (altKey.length > 0) {
+            altKey = altKey.join(',');
+            this._addShortcut(shortcuts, 'tv2-key-open',  altKey, '1', 'TV2Developer.handleKeyShortcut(event)');
+            this._addShortcut(shortcuts, 'tv2-key-repeat', altKey, '2', 'TV2Developer.handleButton(event)');
+            this._addShortcut(shortcuts, 'tv2-key-quick', altKey, '3', 'TV2Developer.openQuickbox(event)');
+        }
+        // first run, add icon
         if (this.getPref('firstRun')) {
             this.setPref('firstRun', false);
             // add icon
@@ -61,7 +84,18 @@ var TV2Developer = {
              catch(e) { }
         }
     },
-
+    
+    /* utility function to create shortcut object */
+    _addShortcut: function(parent, id, modifiers, key, oncommand) {
+        var newKey = document.createElement('key');
+        newKey.setAttribute('id', id);
+        newKey.setAttribute('modifiers', modifiers);
+        newKey.setAttribute('key', key);
+        newKey.setAttribute('oncommand', oncommand);
+        parent.appendChild(newKey);
+    },
+            
+    /* string methods for localizations */
     _strs: null,
     get strs() {
         if (!this._strs) {
@@ -76,9 +110,11 @@ var TV2Developer = {
             return this.strs.getString(str);
         } catch(e) {
             alert('Missing string: ' + str);
+                       return '';
         }
     },
     
+    /* preference functions */
     _prefs: null,
     get prefs() {
         if (!this._prefs)
@@ -120,14 +156,12 @@ var TV2Developer = {
         }
     },
     
+    /* popup menu utility functions */
     emptyMenu: function(menu) {
       var children = menu.childNodes;
-      for (var i = children.length - 1; i >= 0; --i)
-        {
-          var index = children[i].getAttribute('tv2link');
-          if (index)
-            menu.removeChild(children[i]);
-        }
+      for (var i = children.length - 1; i >= 0; --i) {
+          menu.removeChild(children[i]);
+      }
     },
     
     TV2Link: function(type, domain, uri, accesskey, flags) {
@@ -175,7 +209,8 @@ var TV2Developer = {
         menu.appendChild(item);
         return def;
     },
-    
+    /* Main function for adding all the links for the menu popup */   
     _reg_tv2: /^https?:\/\/([^/.]*)?([^/]*?)(\.(robot|opdatering2?|template)\.?)?(\.((test|snapshot)3?)\.)?tv2\.dk((\/[^#\?]*).*)?$/,
     _reg_php: /^(.*\.php)/,
     _reg_nodeid: /([0-9]{2,})/g,
@@ -445,7 +480,8 @@ var TV2Developer = {
         return links;
         
     },
-    
+
+    /* fill in menu onbefore popup event */    
     fillMenu: function(event) {
         var menu = event.target;
         var links = this.getLinks();
@@ -455,8 +491,18 @@ var TV2Developer = {
         for (var i=0; i<links.length; i++) {
             defSet |= this.addMenuLink(menu, links[i], defSet);
         }
+        
+        // add link to quickbox
+        menu.appendChild(document.createElement('menuseparator'));
+        var item = document.createElement('menuitem');
+        item.setAttribute('label', this.getStr('quickbox.menuitem')); 
+        item.setAttribute('accesskey', this.getStr('quickbox.accesskey'));
+        item.setAttribute('tooltiptext', this.getStr('quickbox.menuitem'));
+        item.setAttribute('oncommand', 'TV2Developer.openQuickbox(event)');
+        menu.appendChild(item);
     },
     
+    /* handle a link menu item */
     handleMenu: function(event) {
         var t = event.target;
         this.gotoLink(event, t.getAttribute('url'),
@@ -464,6 +510,7 @@ var TV2Developer = {
                              t.getAttribute('tv2flags'));
     },
     
+    /* return link for default action */
     getButtonAction: function() {
         /* repeat last action or may hit a fall back link of same type */
         var children = this.getLinks();
@@ -475,6 +522,7 @@ var TV2Developer = {
         return null;
     },
         
+    /* handle click on button, either default action or show menu */
     handleButton: function(event) {
         var action = this.getButtonAction();
         if (action) {
@@ -509,11 +557,13 @@ var TV2Developer = {
             }
         }
     },
-    
+
+    /* shortcut to open menu */
     handleKeyShortcut: function(event) {
         document.getElementById('tv2-swap-button').open = true;
     },
-
+    
+    /* utility function to go to a link */
     gotoLink: function(event, url, tv2linktype, tv2flags) {
         if (url) {
             /* handle flags */
@@ -530,8 +580,8 @@ var TV2Developer = {
                     this.clearCache();
                 }
             }
-            /* follow link */            
-            openUILink(url, event, false, false, false); /* allow ctrl, alt, but don't google */
+            /* follow link */
+            openUILink(url, event, false, true, false); /* allow ctrl, not alt, and don't google */
             if (tv2linktype) {
                 this._lastAction = tv2linktype;
                 this.setPref('lastaction-linktype', tv2linktype);
@@ -539,7 +589,7 @@ var TV2Developer = {
         }
     },
     
-    /* function to clear cache */
+    /* function to clear browser cache */
     clearCache: function () {
         var cacheService = Components.classes["@mozilla.org/network/cache-service;1"]
                                      .getService(Components.interfaces.nsICacheService);
@@ -548,6 +598,80 @@ var TV2Developer = {
         } catch(ex) {}
     },
 
-}
+       /* Below is functionality for the quick link box */
+
+       _addCheckbox: function(here, id, label, accesskey) {
+               var radio = document.createElement('radio');
+               radio.setAttribute('id', id);
+               radio.setAttribute('label', label);
+               radio.setAttribute('accesskey', accesskey);
+               here.appendChild(radio);
+       },
 
-window.addEventListener("load", function(e) { TV2Developer.init(); }, false);
+       updateQuickbox: function() {
+               var postfix = document.getElementById('radiobox-rows');
+               var username = this.getPref('developer-initials');
+               var php4 = '';
+               // add webroot links
+               var webroot = document.createElement('row');
+               this._addCheckbox(webroot, 'postfix-live', '.tv2.dk', this.getStr('quickbox.live.accesskey'));
+               this._addCheckbox(webroot, 'postfix-test', '.'+username+'.test'+php4+'.tv2.dk', this.getStr('quickbox.test.accesskey'));
+               this._addCheckbox(webroot, 'postfix-snapshot', '.snapshot'+php4+'.tv2.dk', this.getStr('quickbox.snapshot.accesskey'));
+               postfix.appendChild(webroot);
+               // add opdatering links
+               var opdatering = document.createElement('row');
+               this._addCheckbox(opdatering, 'postfix-live-opdatering', '.opdatering.tv2.dk', this.getStr('quickbox.live-opdatering.accesskey'));
+               this._addCheckbox(opdatering, 'postfix-test-opdatering', '.'+username+'.opdatering.test'+php4+'.tv2.dk', this.getStr('quickbox.test-opdatering.accesskey'));
+               this._addCheckbox(opdatering, 'postfix-snapshot-opdatering', '.opdatering.snapshot'+php4+'.tv2.dk', this.getStr('quickbox.snapshot-opdatering.accesskey'));
+               postfix.appendChild(opdatering);
+               // add robot links
+               var robot = document.createElement('row');
+               this._addCheckbox(robot, 'postfix-live-robot', '.robot.tv2.dk', this.getStr('quickbox.live-robot.accesskey'));
+               this._addCheckbox(robot, 'postfix-test-robot', '.robot.'+username+'.test'+php4+'.tv2.dk', this.getStr('quickbox.test-robot.accesskey'));
+               this._addCheckbox(robot, 'postfix-snapshot-robot', '.robot.snapshot'+php4+'.tv2.dk', this.getStr('quickbox.snapshot-robot.accesskey'));
+               postfix.appendChild(robot);
+               // select default radio button
+               var def = document.getElementById(this.getPref('lastaction-quickbox-postfix', 'postfix-live'));
+               if (def) {
+                   document.getElementById('tv2postfix').selectedItem = def;
+               }
+               document.getElementById('tv2prefix').value = this.getPref('lastaction-quickbox-prefix', '');
+               document.getElementById('php4site').checked = this.getPref('lastaction-quickbox-php4site', false);
+       },
+       
+       goQuickbox: function() {
+           var prefix  =  document.getElementById('tv2prefix').value;
+           var postfix_obj = document.getElementById('tv2postfix').selectedItem;
+           var php4site = document.getElementById('php4site').checked;
+           var url;
+           this.setPref('lastaction-quickbox-prefix', prefix);
+           this.setPref('lastaction-quickbox-postfix', postfix_obj.id);
+           this.setPref('lastaction-quickbox-php4site', document.getElementById('php4site').checked);
+           if (postfix_obj.id.substr(0, 8)=='postfix-') {
+               if (prefix == '') {
+                   prefix = 'www';
+               }
+               var postfix = postfix_obj.label;
+               if (php4site) { /* change test to test3, snapshot to snapshot3 */
+                   postfix = postfix.replace(/(test|snapshot)(\.tv2\.dk)/, '$13$2');
+               }
+               url = prefix+postfix;
+           } else {
+               var id = encodeURIComponent(prefix);
+               if (postfix_obj.id == 'go-node') {
+                   url = 'http://i2.opdatering.tv2.dk/tool/node/?id=' + id;
+               } else if (postfix_obj.id == 'go-content-id') {
+                   url = 'http://i2.opdatering2.tv2.dk/tool/query/?id=&2=&3=&_checkbox=1&content_id='+id+'&4=&5=0&6=&action=Query&timeout=1';
+               } else if (postfix_obj.id == 'go-ttv-page') {
+                   url = 'http://i2.opdatering2.tv2.dk/tool/ttv/?1=' + id + '&2=0';
+               }
+           }
+        window.close();
+        opener.openUILink(url, 'current', false, false, false); /* allow ctrl, alt, but don't google */
+       },
+       
+       openQuickbox: function(event) {
+           window.openDialog('chrome://tv2developer/content/quickbox.xul','tv2quickbox','chrome,dialog,modal');
+       }
+
+}
index 1c2e9ff6eb846664bb6795130f7b8de74960ac7d..9e77a527308256b2013496ace4af2ae1914ed51b 100755 (executable)
@@ -1,13 +1,32 @@
 <!ENTITY version "version">
 <!ENTITY aboutDialog.title "TV 2 Developer  - about">
+<!ENTITY aboutDialog.appname "TV 2 Developer Plugin">
 <!ENTITY createdBy "Created By:">
 <!ENTITY homePage "Home Page:">
 
 <!ENTITY optionsDialog.title "TV 2 Developer - Options">
+<!ENTITY optionsDialog.options.label "Options">
 <!ENTITY developerInitials.description "Enter your TV 2 initials (e.x. jkkn):">
+<!ENTITY optionsDialog.mac.accesskeys "Enable accesskeys in Firefox on Mac">
+<!ENTITY optionsDialog.mac.accesskeys.tooltiptext "Changing this requires restart of Firefox">
 
 <!ENTITY config.label "Configure">
 <!ENTITY config.accesskey "c">
 
 <!ENTITY about.label "About TV 2 Developer Plugin">
 <!ENTITY about.accesskey "a">
+
+<!ENTITY quickbox.title "TV 2 | Quickbox">
+<!ENTITY quickbox.enterprefix "Enter tv2.dk prefix:">
+<!ENTITY quickbox.php4site "PHP 4 site">
+<!ENTITY quickbox.php4site.tooltiptext "Changes test to test3, snapshot to snapshot3.">
+
+<!ENTITY quickbox.nodeid "Lookup as Node ID">
+<!ENTITY quickbox.nodeid.accesskey "n">
+
+<!ENTITY quickbox.contentid "Lookup as Content ID">
+<!ENTITY quickbox.contentid.accesskey "c">
+
+<!ENTITY quickbox.ttvpage "Lookup as TTV Page">
+<!ENTITY quickbox.ttvpage.accesskey "g">
+
index 9272cb66f4d188fef784185a1737041d07ed0648..5b580370dc43bf060e8e78364fd3ff371b05aade 100755 (executable)
@@ -56,3 +56,16 @@ ttvpumpe.accesskey=p
 tv2dk.accesskey=t
 
 enterInitials=Enter TV 2 initials (e.x. jkkn):
+
+quickbox.menuitem=Open TV 2 | Quickbox dialog...
+quickbox.accesskey=q
+
+quickbox.live.accesskey=w
+quickbox.test.accesskey=t
+quickbox.snapshot.accesskey=s
+quickbox.live-opdatering.accesskey=o
+quickbox.test-opdatering.accesskey=p
+quickbox.snapshot-opdatering.accesskey=d
+quickbox.live-robot.accesskey=r
+quickbox.test-robot.accesskey=b
+quickbox.snapshot-robot.accesskey=a
diff --git a/version b/version
index 964783a811942ebd53432e400ef66451a3a05bd4..a918a2aa18d5bec6a8bb93891a7a63c243111796 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-0.5.13
+0.6.0
index b46bae52387994f17f8905343dfdd6bf2eb4c798..e875c15c7e0a5e59b8bab0a083569388e555316a 100644 (file)
@@ -31,6 +31,7 @@
                 <li>Åbn siden op i Tangos requeue værktøj (evt. udfra Tango_URL hvis siden har sat denne).</li>
                 <li>Se alle database forespørgsler på siden ved at køre DB_PDO_Logging værktøjet på siden.</li>
                    <em>Browserens cache tømmes desuden automatisk</em>.</li>
+                <li>Quick link dialog, hvor man hurtig kan navigere hen til et tv2.dk site (genvej <code>ALT+3</code>, (På mac, <code>CTRL+1</code>)</li>
             </ul>
             <h3>Feature liste på i2-images og i2-files:</h3>
             <ul>
             <ul>
                 <li>Mulighed for at validere nuværende side via W3C Validatoren.</li>
                 <li>Følgende sites genkendes som php5 sites og håndteres derefter mht. til test vs. test3 og snapshot og snapshot3:<br/><code>1234, nyhederne, i2</code>.</li>
-                <li>Genvejstast til senest benyttede funktion: <strong>ALT+1</strong><br/>
-                (På mac, <strong>>CTRL+1</strong>)</li>
-                <li>Genvejstast til menuen: <strong>ALT+2</strong><br/>
-                (På mac, <strong>>CTRL+2</strong>)</li>
-                <li>Opfører sig som normale links, således <strong>CTRL</strong> kan bruges til at åbne i ny tab, <strong>CTRL+SHIFT</strong> i en ny tab i baggrunden, <strong>SHIFT</strong> i ny vindue, osv..</li>
-                <li>(Bemærk at på mac er det muligt at slå accesskeys til ved at gå til <a href="about:config">about:config</a> og ændre "ui.key.menuAccessKey" til "17", genstart herefter Firefox)
-                </li>
+                <li>Genvejstast til menuen: <code>ALT+1</code>
+                (På mac, <code>CTRL+1</code>)</li>
+                <li>Genvejstast til quick link dialogen: <code>ALT+2</code>
+                (På mac, <code>CTRL+2</code>)</li>
+                <li>Genvejstast til senest benyttede funktion i menuen: <code>ALT+3</code>
+                (På mac, <code>CTRL+3</code>)</li>
+                <li>Links opfører sig som normale links, således <code>CTRL</code> kan bruges til at åbne i ny tab, <code>CTRL+SHIFT</code> i en ny tab i baggrunden, <code>SHIFT</code> i ny vindue, osv..</li>
+                <li>(Bemærk at på mac er det nødvendigt at slå accesskeys til - dette kan gøres under indstillingerne i pluginen).</li>
             </ul>
             <div class="center">
                 <a href="tv2developer.xpi">Install now</a>