Use .i. address for now
authorKristian Kræmmer Nielsen <jkkn@jkkn.dk>
Wed, 6 Jul 2011 06:19:27 +0000 (08:19 +0200)
committerKristian Kræmmer Nielsen <jkkn@jkkn.dk>
Wed, 6 Jul 2011 06:19:27 +0000 (08:19 +0200)
1 [new file with mode: 0644]
content/quickbox.js
content/tv2developer.js
version

diff --git a/1 b/1
new file mode 100644 (file)
index 0000000..0a1187d
--- /dev/null
+++ b/1
@@ -0,0 +1,704 @@
+// TV 2 Developer Plugin
+// Javascript Implementation
+// @author Kristian Kræmmer Nielsen <jkkn@tv2.dk>
+//
+// Keyboard shortcuts
+// . = Prompttest
+// 2 = Back from i2
+// 7 = Lookup R7 video clip
+// A = Template
+// B = Robot
+// C = Gitweb
+// D = Dynamic version
+// E = Node info
+// F = Tango interface
+// G = Look in tango
+// H = View source in Gitweb
+// I = I2 tree
+// K = Lookup content
+// L = Live
+// N = Node lookup
+// O = Opdatering
+// P = Ttv page
+// P = Ttvpumpe
+// Q = Open quicklink dialog
+// R = Requeue in tango
+// S = Snapshot
+// T = Test
+// T = tv2.dk
+// U = Node query tool
+// V = W3C markup validator
+// W = Webroot
+// X = Examine database queries
+// Y = Flush cache
+
+var TV2Developer = {
+    
+    _lastAction: null,
+    _useStatusBarIconInstead: false,
+   
+    /* toggle between statusbar/toolbar mode */
+    updateStatusBarMode: function() {
+        var enabled = this._useStatusBarIconInstead = TV2Util.getPref('useStatusBarMode');
+        
+        var statusbutton = document.getElementById('tv2developer_statusbutton');
+        var swapbutton = document.getElementById('tv2-swap-button');
+        var popupmenu = document.getElementById('tv2developer-popupmenu');
+
+        statusbutton.hidden = !enabled;
+        swapbutton.hidden = enabled;
+
+        if (enabled) {
+            statusbutton.appendChild(popupmenu);
+        } else {
+            swapbutton.appendChild(popupmenu);
+        }
+    },
+
+    /* method for initialize, reading properties, adding icon at firstrun, added keyshortcuts */
+    init: function() {
+        // init
+        this._lastAction = TV2Util.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', 'VK_F1', 'TV2Developer.handleKeyShortcut(event)');
+            this._addShortcut(shortcuts, 'tv2-key-repeat', altKey, '2', 'VK_F2', 'TV2Developer.handleButton(event)');
+            this._addShortcut(shortcuts, 'tv2-key-quick', altKey, '3', 'VK_F3', 'TV2Developer.openQuickbox(event)');
+            this._addShortcut(shortcuts, 'tv2-key-quick-go', altKey, '4', 'VK_F4', 'TV2Developer.openQuickbox(event, true)');
+        }
+
+        // first run, add icon
+        if (TV2Util.getPref('firstRun')) {
+            TV2Util.setPref('firstRun', false);
+            // add icon
+             try {
+               var firefoxnav = document.getElementById('nav-bar');
+               var curSet = firefoxnav.currentSet;
+               if (curSet.indexOf('tv2-swap-button') == -1)
+               {
+                 var set;
+                 // Place the button after the urlbar
+                 if (curSet.indexOf('urlbar-container') != -1)
+                   set = curSet.replace(/urlbar-container/, 'urlbar-container,tv2-swap-button');
+                 else // otherwise at the end
+                   set = firefoxnav.currentSet + ',tv2-swap-button';
+                 firefoxnav.setAttribute('currentset', set);
+                 firefoxnav.currentSet = set;
+                 document.persist('nav-bar', 'currentset');
+                 // If you don't do the following call, funny things happen
+                 try {
+                   BrowserToolboxCustomizeDone(true);
+                 }
+                 catch (e) { }
+               }
+             }
+             catch(e) { }
+        }
+        
+        // initializes the statusbar icon by observe optional preference changes
+        TV2Util.prefs.addObserver('useStatusBarMode', {
+            observe: function(subject, topic, data) {
+                if (topic == 'nsPref:changed') {
+                    TV2Developer.updateStatusBarMode();
+                }
+            }}, false);
+        TV2Developer.updateStatusBarMode();
+    },
+    
+    /* utility function to create shortcut object */
+    _addShortcut: function(parent, id, modifiers, key, fkeycode, 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);
+        // also add F-key shortcut
+        newKey = document.createElement('key');
+        newKey.setAttribute('id', id+'-fkey');
+        newKey.setAttribute('modifiers', 'accel');
+        newKey.setAttribute('keycode', fkeycode);
+        newKey.setAttribute('oncommand', oncommand);
+        parent.appendChild(newKey);
+    },
+            
+    /* popup menu utility functions */
+    emptyMenu: function(menu) {
+      var children = menu.childNodes;
+      for (var i = children.length - 1; i >= 0; --i) {
+          menu.removeChild(children[i]);
+      }
+    },
+    
+    TV2Link: function(type, domain, uri, accesskey, flags) {
+        this.type = type;
+        // Postfix label with up to 25 chars of uri
+        this.label = domain; 
+        if (uri.length > 25) {
+               this.label += uri.substr(0, 23) + '\u2026';
+        } else {
+               this.label += uri;
+        }
+        this.url = 'http://' + domain + uri;
+        if (accesskey) this.accesskey = accesskey;
+        this.disabled = false;
+        this.flags = (flags ? flags : '');
+    },
+    
+    TV2LinkSplit: function () {
+        this.type = 'split';
+    },
+
+    TV2LinkWithLabel: function(type, label, url, accesskey, flags, disabled) {
+        this.type = type;
+        this.label = label; 
+        this.url = url;
+        if (accesskey) this.accesskey = accesskey;
+        this.disabled = typeof(disabled)!='undefined' ? disabled : false;
+        this.flags = (flags ? flags : '');
+    },
+
+    addMenuLink: function(menu, tv2link, defSet) {
+        var def = false;
+        var item;
+        if (tv2link.type == 'split') {
+            item = document.createElement('menuseparator');
+        } else {
+            item = document.createElement('menuitem');
+            item.setAttribute('label', tv2link.label); 
+            if (tv2link.accesskey) 
+                item.setAttribute('accesskey', tv2link.accesskey);
+            item.setAttribute('url', tv2link.url);
+            item.setAttribute('tooltiptext', tv2link.label);
+            item.setAttribute('disabled', tv2link.disabled);
+            item.setAttribute('tv2flags', tv2link.flags);
+            if (!defSet && tv2link.type == this._lastAction) {
+                item.setAttribute('style', 'font-weight: bold');
+                def = true;
+            }
+        }
+        item.setAttribute('tv2link', tv2link.type);
+        menu.appendChild(item);
+        return def;
+    },
+    
+    _isPhp4: function(site) {
+        if (!site) site = 'www';
+        return ((','+TV2Util.getPref('php4sites')+',').indexOf(','+site+',') != -1);
+    },
+    /* Main function for adding all the links for the menu popup */   
+    _reg_tv2: /^https?:\/\/([^/.]*)?([^/]*?)(\.(robot|opdatering|template)\.?)?(\.(php4|php5)\.?)?(\.((test3?|snapshot3?|stage))\.)?tv2\.dk((\/[^#\?]*).*)?$/,
+    _reg_branchuser: /^\.(([^.]*?)\.)?([^.]*)/,
+    _reg_php: /^(.*\.php)/,
+    _reg_nodeid: /([0-9]{2,})/g,
+    _reg_i2files: /\/([0-9]+)-/,
+    _reg_r7program: /-([0-9]+)\//,
+    _reg_fromgitweb: /^https?:\/\/flimmer\.tv2\.dk\/git\/\?p=([^/]+)\.tv2\.dk\.git.*(?:f=(webroot|robot|opdatering|template)([^;&]*))/,
+    _reg_fromi2if: /^\/(tango\/(entry|requeue|dynamic)|tool\/pdo_log\/frameset)\.php.*?(\?|&)url=([^&]+)/,
+    _reg_cutdomain: /^(.*)\.tv2\.dk$/,
+    getLinks: function() {
+        var links = new Array();
+        var currentURL = getBrowser().currentURI.spec;
+        var encodedURL = encodeURIComponent(currentURL);
+        var initials = TV2Util.getPref('developer-initials');
+
+               /* Check if we are on the Gitweb site */
+               var fromgitweb = this._reg_fromgitweb.exec(currentURL);
+               
+        // Adding links as appropiate if tv2.dk site
+        var tv2 = this._reg_tv2.exec(currentURL);
+               
+        if (tv2 && !fromgitweb) {
+            var skip_treenodes = false;
+            var tv2_sitename = tv2[1];
+            var tv2_branchuser = tv2[2];
+            var tv2_sitetype = tv2[4];
+                       var tv2_apptype  = tv2[6]; // php4 or php5
+            var tv2_testsite = tv2[8];
+            var tv2_testtype = tv2[9]; /* no 3 */
+            var tv2_uri      = tv2[10];
+            var tv2_uriOnly  = tv2[11]; // no parameters, anchers
+
+            // Strip -dyn and -static
+            if (tv2_sitename) tv2_sitename = tv2_sitename.replace(/-(dyn|static)$/, '');
+            
+                       // convert old URLs (.test3 / .snapshot3)
+                       if (tv2_testsite == 'test3') {
+                               tv2_testsite = 'test';
+                               tv2_apptype = 'php4';
+                       } else if (tv2_testsite == 'snapshot3') {
+                               tv2_testsite = 'snapshot';
+                               tv2_apptype = 'php4';
+                       }
+       
+                       var tv2_user;
+                       var tv2_branch;
+               // In stage and snapshot and test - split username and branch
+            if (tv2_testsite == 'snapshot' || tv2_testsite == 'stage' || tv2_testsite == 'test' && tv2_branchuser) {
+                               if (tv2_testsite == 'test') { // if only one - this is the username
+                                       var bc = this._reg_branchuser.exec(tv2_branchuser);
+                                       if (bc) {
+                                               tv2_branch = bc[2];
+                                               tv2_user = bc[3];
+                                       }
+                               } else { // we do not have usernames on snapshot/stage, so this is the branch
+                                       tv2_branch = tv2_branchuser.replace(/^\./, '');
+                               }
+                       }
+                       
+            // php4 site
+            var php4 = this._isPhp4(tv2_sitename);
+                       if (!tv2_apptype) {
+                               tv2_apptype = php4 ? 'php4' : 'php5';
+                       }
+
+            // Handle sites with aliases (e.g. ol2008.tv2.dk is ol.tv2.dk on live... )
+            var git_sitename;
+            var live_sitename = (tv2_sitename ? tv2_sitename : 'www');
+            
+            var docWin = getBrowser().contentWindow;
+            if (docWin.wrappedJSObject) {
+                var docObj = docWin.wrappedJSObject;
+                if (docObj.TV2_PROJECTNAME) {
+                    var nodomain = this._reg_cutdomain.exec(docObj.TV2_PROJECTNAME);
+                    if (nodomain) {
+                        git_sitename = nodomain[1];
+                    }
+                }
+                if (docObj.TV2_LIVESITE) {
+                    var nodomain = this._reg_cutdomain.exec(docObj.TV2_LIVESITE);
+                    if (nodomain) {
+                        live_sitename = nodomain[1];
+                    }
+                }
+            }
+            
+            // Find live, test, stage and snapshot url for current site
+            var liveurl;
+            var live_sitename_complete = ((live_sitename=='www') ? '' : live_sitename+'.') + 'tv2.dk';
+            if (!git_sitename) {
+                git_sitename = tv2_sitename ? tv2_sitename : 'www';
+            }
+
+            // Construct corresponding live URL
+            if (tv2_testsite) { // test, snapshot or stage
+                if (tv2_sitetype) { /* opdatering, ... */
+                    liveurl = tv2_sitename+'.'+tv2_sitetype+'.tv2.dk';
+                } else {
+                    liveurl = live_sitename_complete;
+                }
+            }
+            
+            var testprompturl = git_sitename+(tv2_branch?'.'+tv2_branch:'')+'.?'+(tv2_sitetype?'.'+tv2_sitetype:'')+'.'+tv2_apptype+'.test'+'.tv2.dk';
+            var testurl       = git_sitename+(tv2_branch?'.'+tv2_branch:'')+'.'+initials+(tv2_sitetype?'.'+tv2_sitetype:'')+'.'+tv2_apptype+'.test'+'.tv2.dk';
+            var snapshoturl   = git_sitename+(tv2_branch?'.'+tv2_branch:'')+(tv2_sitetype?'.'+tv2_sitetype:'')+'.'+tv2_apptype+'.snapshot'+'.tv2.dk';
+            var stageurl      = git_sitename+(tv2_branch?'.'+tv2_branch:'')+(tv2_sitetype?'.'+tv2_sitetype:'')+'.'+tv2_apptype+'.stage'+'.tv2.dk';
+            
+            // Add the two urls we are not at
+            if (!tv2_testsite) { // always add swaps to stage, snapshot and the test site
+                links.push(new this.TV2Link('test_live_swap', testurl, tv2_uri, TV2Util.getStr('test.accesskey')));
+                links.push(new this.TV2Link('snapshot_live_swap', snapshoturl, tv2_uri, TV2Util.getStr('snapshot.accesskey')));
+                links.push(new this.TV2Link('stage_live_swap', stageurl, tv2_uri, TV2Util.getStr('stage.accesskey')));
+                links.push(new this.TV2Link('testprompt_swap', testprompturl, tv2_uri, TV2Util.getStr('testprompt.accesskey'), 'promptInitials'));
+            } else if (tv2_testtype == 'snapshot') {
+                links.push(new this.TV2Link('snapshot_live_swap', liveurl, tv2_uri, TV2Util.getStr('live.accesskey')));
+                links.push(new this.TV2Link('snapshot_stage_swap', stageurl, tv2_uri, TV2Util.getStr('stage.accesskey')));
+                links.push(new this.TV2Link('test_snapshot_swap', testurl, tv2_uri, TV2Util.getStr('test.accesskey')));
+                links.push(new this.TV2Link('testprompt_swap', testprompturl, tv2_uri, TV2Util.getStr('testprompt.accesskey'), 'promptInitials'));
+            } else if (tv2_testtype == 'stage') {
+                links.push(new this.TV2Link('stage_live_swap', liveurl, tv2_uri, TV2Util.getStr('live.accesskey')));
+                links.push(new this.TV2Link('snapshot_stage_swap', snapshoturl, tv2_uri, TV2Util.getStr('stage.accesskey')));
+                links.push(new this.TV2Link('test_stage_swap', testurl, tv2_uri, TV2Util.getStr('test.accesskey')));
+                links.push(new this.TV2Link('testprompt_swap', testprompturl, tv2_uri, TV2Util.getStr('testprompt.accesskey'), 'promptInitials'));
+            } else { // must be test
+                links.push(new this.TV2Link('test_live_swap', liveurl, tv2_uri, TV2Util.getStr('live.accesskey')));
+                links.push(new this.TV2Link('test_snapshot_swap', snapshoturl, tv2_uri, TV2Util.getStr('snapshot.accesskey')));
+                links.push(new this.TV2Link('test_stage_swap', stageurl, tv2_uri, TV2Util.getStr('stage.accesskey')));
+                if (tv2_user != initials) {
+                    links.push(new this.TV2Link('test_swap', testurl, tv2_uri, TV2Util.getStr('test.accesskey')));
+                }
+                links.push(new this.TV2Link('testprompt_swap', testprompturl, tv2_uri, TV2Util.getStr('testprompt.accesskey'), 'promptInitials'));
+            }
+            
+            links.push(new this.TV2LinkSplit());
+            
+            // Add link to .opdatering, .template, .robot
+            var _prefix = (tv2_testsite ? git_sitename : live_sitename) + (tv2_branch?'.'+tv2_branch:'') + (tv2_user ? '.' + tv2_user : '');
+            var _postfix = (tv2_testsite ? '.'+tv2_apptype+'.'+tv2_testsite : '') + '.tv2.dk';
+            var opdatering = _prefix + '.opdatering' + _postfix;
+            //var template = _prefix + '.template' + _postfix;
+            var robot = _prefix + '.robot' + _postfix;
+            var normal = (tv2_testsite ? _prefix + '.' + tv2_apptype + '.' + tv2_testsite + '.tv2.dk'
+                                       : live_sitename_complete);
+            links.push(new this.TV2Link('opdatering_swap', (tv2_sitetype!='opdatering')?opdatering:normal, '/',
+                                        (tv2_sitetype!='opdatering') ? TV2Util.getStr('opdatering.accesskey') : TV2Util.getStr('webroot.accesskey')));
+            /*links.push(new this.TV2Link('template_swap', (tv2_sitetype!='template')?template:normal, '/',
+                                        (tv2_sitetype!='template') ? TV2Util.getStr('template.accesskey') : TV2Util.getStr('webroot.accesskey'))); */
+            links.push(new this.TV2Link('robot_swap', (tv2_sitetype!='robot')?robot:normal, '/',
+                                        (tv2_sitetype!='robot') ? TV2Util.getStr('robot.accesskey') : TV2Util.getStr('webroot.accesskey')));
+            
+            links.push(new this.TV2LinkSplit());
+            
+            // Add the GitWeb link, inspired by ViewCVS link, inspired by Adrian Bak (ADBA)
+            var gitweb = 'http://flimmer.i.tv2.dk/git/?p='
+                        + git_sitename + '.tv2.dk.git;hb=HEAD;f=' + (tv2_sitetype?tv2_sitetype:'webroot');
+            var php = this._reg_php.exec(tv2_uriOnly);
+            if (php) {
+                gitweb += php[1];
+            } else if(tv2_uriOnly.substr(-1) == '/') {
+                // we add 'index.php' and say that's it! :-)
+                gitweb += tv2_uriOnly + 'index.php';
+            } else {
+                gitweb += tv2_uriOnly;
+            }
+            var gitweb_source = gitweb + ';a=blob';
+            gitweb += ';a=history';
+            // we set a nice type so we can swap between using the button (test<>gitweb, live<>gitweb,...)
+            var gitweb_type;
+            if (!tv2_testsite) {
+                gitweb_type = 'gitweb_live';
+            } else if (tv2_testtype == 'snapshot') {
+                gitweb_type = 'gitweb_snapshot';
+            } else if (tv2_testtype == 'stage') {
+                gitweb_type = 'gitweb_stage';
+            } else {
+                gitweb_type = 'gitweb_test';
+            }
+            links.push(new this.TV2LinkWithLabel(gitweb_type, TV2Util.getStr('lookupInGitWebSource'), gitweb_source,
+                                                 TV2Util.getStr('lookupInGitWebSource.accesskey')));
+            links.push(new this.TV2LinkWithLabel(gitweb_type, TV2Util.getStr('lookupInGitWeb'), gitweb,
+                                                 TV2Util.getStr('lookupInGitWeb.accesskey')));
+
+            // Update and I2 base URL
+            var updatepostfix = (tv2_user ? '.' + tv2_user : '')
+                              + '.opdatering'
+                              + (tv2_testtype ? '.php5.' + tv2_testtype : '') + '.tv2.dk'
+            var i2link = 'http://i2' + updatepostfix;
+
+            // Check if we are on an Tango or I2 interface, then we can extract the URL again
+            var onI2interface;
+            var onI2interface_url;
+            if (tv2_sitetype == 'opdatering' && tv2_sitename == 'i2') {
+                var tangoif = this._reg_fromi2if.exec(tv2_uri);
+                if (tangoif) {
+                    onI2interface = tangoif[1];
+                    onI2interface_url = decodeURIComponent(tangoif[4]);
+                }
+            }
+            
+            // Add Tango lookup link
+            var i2tango = i2link + '/tango/entry.php?url=';
+            var tango = encodedURL;
+            var docWin = getBrowser().contentWindow;
+            if (docWin.wrappedJSObject && docWin.wrappedJSObject.Tango_URL) {
+                tango = encodeURIComponent(docWin.wrappedJSObject.Tango_URL);
+                links.push(new this.TV2LinkWithLabel('tango/dynamic', TV2Util.getStr('viewDynamicVersion'),
+                        i2link + '/tango/dynamic.php?url='+tango+'&referer='+encodedURL, 
+                        TV2Util.getStr('viewDynamicVersion.accesskey'),
+                        'flushCache'));
+            }
+            if (onI2interface != 'tango/entry' && onI2interface != 'tango/requeue') {
+                links.push(new this.TV2LinkWithLabel('tango/entry', TV2Util.getStr('lookupInTango'),
+                                i2link + '/tango/entry.php?url=' + tango, TV2Util.getStr('lookupInTango.accesskey')));
+                links.push(new this.TV2LinkWithLabel('tango/requeue', TV2Util.getStr('requeueInTango'),
+                                i2link + '/tango/requeue.php?url=' + tango, TV2Util.getStr('requeueInTango.accesskey')));
+            }
+            
+            // Add run pdo_log link
+            if ((onI2interface != 'tool/pdo_log/frameset') &&
+                ((!tv2_testsite && !php4) || // only php5 live sites
+                (tv2_testsite && tv2_apptype != 'php4'))) { /* not supported on php4 sites */
+                links.push(new this.TV2LinkWithLabel('tool/pdo_log/frameset', TV2Util.getStr('performDbPdoLog'),
+                   i2link + '/tool/pdo_log/frameset.php?url='+tango+'&autostop=1&prefix='+initials,
+                   TV2Util.getStr('performDbPdoLog.accesskey'),
+                   'flushCache'));
+            }
+            
+//            if (TV2Util.getPref('enable-secret', false)) {
+//            }
+
+            if (onI2interface_url) {
+                /* link entered in I2 interface */
+                links.push(new this.TV2LinkSplit());
+                /* tango/entry, tango/requeue, tango/dynamic, tool/pdo_log */
+                links.push(new this.TV2LinkWithLabel(onI2interface, onI2interface_url, onI2interface_url, TV2Util.getStr('backI2.accesskey')));
+            }
+         
+            // Some special cases for some sites 
+            if (tv2_sitename == 'ttv') {
+                links.push(new this.TV2LinkSplit());
+                var ttv_page = /side=([0-9]+)/.exec(tv2_uri);
+                var ttvpumpelink = 'ttvpumpe'+updatepostfix;
+                if (ttv_page) {
+                    skip_treenodes = true;
+                    links.push(new this.TV2LinkWithLabel('ttvpage', TV2Util.getStr('lookupTTVPage') + ' ' + ttv_page[1],
+                                'http://' + ttvpumpelink + '/?channel=TV+2&page=' + ttv_page[1] + '#' + ttv_page[1], /* hardcoded to TV 2 TTV */
+                                TV2Util.getStr('lookupTTVPage.accesskey')));
+                }
+                /*links.push(new this.TV2Link('ttvpumpe', ttvpumpelink, '/', TV2Util.getStr('ttvpumpe.accesskey')));*/
+                links.push(new this.TV2Link('ttvpumpe', 'ttvpumpe.opdatering.tv2.dk', '/', TV2Util.getStr('ttvpumpe.accesskey')));
+            }
+            
+            // I2-Files and I2-Images
+            if (tv2_sitename == 'i2-files' || tv2_sitename == 'i2-images' || tv2_sitename == 'i2') {
+                var contentId = this._reg_i2files.exec(tv2_uriOnly);
+                if (contentId) {
+                    var typeId;
+                    var typeName;
+                    skip_treenodes = true;
+                    if (tv2_sitename == 'i2-files') {
+                        typeId = 74; // I2_File (and subtypes)
+                        typeName = 'I2_File';
+                    } else {
+                        if (tv2_uriOnly.substr(0,2)=='/s') {
+                            typeId = 8; typeName = 'I2_Image_Selection';
+                        } else {
+                            typeId = 7; typeName = ' I2_Image';
+                        }
+                    }
+                    links.push(new this.TV2LinkSplit());
+                    links.push(new this.TV2LinkWithLabel('i2files', TV2Util.getStr('lookupContent') + ' ' + contentId[1] + ', ' +
+                        TV2Util.getStr('lookupContent.type') + ' ' + typeName,
+                        i2link + 
+                            '/tool/query/?id=&_checkbox=1&2=&3='+typeId+'&content_id='+contentId[1]+'&4=&5=0&6=&action=Query&timeout=1',
+                            TV2Util.getStr('lookupContent.accesskey')
+                            ));
+                }
+            }
+            
+                       // Sputnik R7 program links
+            if (tv2_sitename == 'sputnik') {
+                var programId = this._reg_r7program.exec(tv2_uriOnly);
+                if (programId) {
+                                       skip_treenodes = true;
+                    links.push(new this.TV2LinkSplit());
+                    links.push(new this.TV2LinkWithLabel('r7program', TV2Util.getStr('lookupR7Program') + ' ' + programId[1],
+                        i2link + 
+                            '/tool/r7/?1='+programId[1],
+                            TV2Util.getStr('lookupR7Program.accesskey')
+                            ));
+                }
+            }
+            
+            // Try to extract node id and add links to the node tool
+            if (!skip_treenodes) {
+                var i2node = i2link + '/tool/node/?id=';
+                var nodeids;
+                var first = true;
+                while ((nodeids = this._reg_nodeid.exec(tv2_uri)) != null) {
+                    if (first) {
+                        links.push(new this.TV2LinkSplit());
+                        first = false;
+                    }
+                    links.push(new this.TV2LinkWithLabel('node', TV2Util.getStr('lookupTreeNode') + ' ' + nodeids[1],
+                                i2node + nodeids[1],
+                                TV2Util.getStr('lookupTreeNode.accesskey')
+                                ));
+               }
+            }
+            
+        } else {
+            
+                       /* Add links to the site if viewing info at GitWeb site */
+            if (fromgitweb) {
+                var tv2_sitename = fromgitweb[1];
+                var tv2_sitetype = fromgitweb[2];
+                var tv2_uri      = fromgitweb[3];
+                
+                // cut off 'index.php'
+                if (tv2_uri.substr(-10) == '/index.php') {
+                    tv2_uri = tv2_uri.substr(0, tv2_uri.length-9);
+                }
+
+                // php4 sites
+                var php4 = this._isPhp4(tv2_sitename);
+                var appType = php4 ? 'php4.' : 'php5.';
+
+                var live_sitename = (tv2_sitetype=='webroot' && tv2_sitename=='www') ? '': (tv2_sitename+'.');
+                var type = (tv2_sitetype=='webroot')? '' : tv2_sitetype+'.';
+                
+                links.push(new this.TV2Link('gitweb_live', live_sitename + type + 'tv2.dk', tv2_uri, TV2Util.getStr('live.accesskey')));
+                links.push(new this.TV2Link('gitweb_test', tv2_sitename + '.' + initials + '.' + type + appType + 'test' + '.tv2.dk', tv2_uri, TV2Util.getStr('test.accesskey')));
+                links.push(new this.TV2Link('gitweb_snapshot', tv2_sitename + '.' + type + appType + 'snapshot' + '.tv2.dk', tv2_uri, TV2Util.getStr('snapshot.accesskey')));
+                links.push(new this.TV2Link('gitweb_stage', tv2_sitename + '.' + type + appType + 'stage' + '.tv2.dk', tv2_uri, TV2Util.getStr('stage.accesskey')));
+                links.push(new this.TV2Link('gitweb_testprompt', tv2_sitename + '.?.' + type + appType + 'test' + '.tv2.dk', tv2_uri, TV2Util.getStr('testprompt.accesskey'), 'promptInitials'));
+                
+            } else {
+                links.push(new this.TV2LinkWithLabel('disabled', TV2Util.getStr('notTV2Site'), null, '', null, true));
+                links.push(new this.TV2LinkSplit());
+                links.push(new this.TV2Link('tv2dk', 'tv2.dk', '/', TV2Util.getStr('tv2dk.accesskey')));
+            }
+        }
+        
+        // Utility links
+        links.push(new this.TV2LinkSplit());
+        links.push(new this.TV2LinkWithLabel('link_tree', TV2Util.getStr('i2Tree'), 'http://i2.opdatering.tv2.dk/tree/', TV2Util.getStr('i2Tree.accesskey')));
+        links.push(new this.TV2LinkWithLabel('node', TV2Util.getStr('nodeInformationTool'), 'http://i2.opdatering.tv2.dk/tool/node/', TV2Util.getStr('nodeInformationTool.accesskey')));
+        links.push(new this.TV2LinkWithLabel('link_query', TV2Util.getStr('nodeQueryTool'), 'http://i2.opdatering.tv2.dk/tool/query/', TV2Util.getStr('nodeQueryTool.accesskey')));
+        links.push(new this.TV2LinkWithLabel('tango/entry', TV2Util.getStr('tangoInterface'), 'http://i2.opdatering.tv2.dk/tango/', TV2Util.getStr('tangoInterface.accesskey')));
+        links.push(new this.TV2LinkWithLabel('w3c', TV2Util.getStr('w3c'),
+            'http://validator.jkkn.net/check?uri=' + encodedURL, TV2Util.getStr('w3c.accesskey')));
+        links.push(new this.TV2LinkWithLabel('flushcache', TV2Util.getStr('flushCache'),
+           '-', TV2Util.getStr('flushCache.accesskey'), 'flushCache'));
+
+        return links;
+        
+    },
+
+    /* fill in menu onbefore popup event */    
+    fillMenu: function(event) {
+        var menu = event.target;
+        var links = this.getLinks();
+        this.emptyMenu(menu);
+
+        var defSet = false;
+        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', TV2Util.getStr('quickbox.menuitem')); 
+        item.setAttribute('accesskey', TV2Util.getStr('quickbox.accesskey'));
+        item.setAttribute('tooltiptext', TV2Util.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'),
+                             t.getAttribute('tv2link'),
+                             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();
+        for (var i = 0; i < children.length; i++) {
+            if (children[i].type == this._lastAction) {
+                return children[i];
+            }
+        }
+        return null;
+    },
+        
+    /* handle click on button, either default action or show menu */
+    handleButton: function(event) {
+        var action = this.getButtonAction();
+        if (action) {
+            this.gotoLink(event, action.url, action.type, action.flags);
+        } else {
+            event.target.open = true;
+        }
+    },
+    
+    setStatusText: function(text) {
+        var statusTextFld = document.getElementById("statusbar-display");
+        if (statusTextFld && statusTextFld.label != text) {
+            statusTextFld.label = text;
+        }
+    },
+
+    handleStatusText: function(event) {
+        var id = event.target.getAttribute('id');
+        if (id == 'tv2-swap-button') {
+            var action = this.getButtonAction();
+            var button = document.getElementById('tv2-swap-button');
+            if (action) {
+                button.setAttribute('tooltiptext', action.label);
+                this.setStatusText(action.url);
+            } else {
+                button.removeAttribute('tooltiptext');
+            }
+        } else {
+            var url = event.target.getAttribute('url');
+            if (url) {
+                this.setStatusText(url);
+            }
+        }
+    },
+
+    /* shortcut to open menu */
+    handleKeyShortcut: function(event) {
+        if (!this._useStatusBarIconInstead) { // normal icon dropdown
+            document.getElementById('tv2-swap-button').open = true;
+        } else { // status bar icon
+            var popupmenu = document.getElementById('tv2developer-popupmenu');
+            popupmenu.showPopup();
+        }
+    },
+    
+    /* utility function to go to a link */
+    gotoLink: function(event, url, tv2linktype, tv2flags) {
+        if (url) {
+            /* handle flags */
+            if (tv2flags) {
+                 if (tv2flags.indexOf('promptInitials') != -1) {
+                    var initials = prompt(TV2Util.getStr('enterInitials'), TV2Util.getPref('alternativ-initials', ''));
+                    if (initials == '' || initials == null) {
+                        return; // cancelled
+                    }
+                    TV2Util.setPref('alternativ-initials', initials);
+                    url = url.replace('?', initials);
+                 }
+                 if (tv2flags.indexOf('flushCache') != -1) {
+                    this.clearCache();
+                }
+            }
+            /* follow link */
+            if (url != '-') {
+                openUILink(url, event, false, true, false); /* allow ctrl, not alt, and don't google */
+            }
+            if (tv2linktype) {
+                this._lastAction = tv2linktype;
+                TV2Util.setPref('lastaction-linktype', tv2linktype);
+            }
+        }
+    },
+    
+    /* function to clear browser cache */
+    clearCache: function () {
+        var cacheService = Components.classes["@mozilla.org/network/cache-service;1"]
+                                     .getService(Components.interfaces.nsICacheService);
+        try {
+          cacheService.evictEntries(Components.interfaces.nsICache.STORE_ANYWHERE);
+        } catch(ex) {}
+    },
+
+    openQuickbox: function(event, autogo) {
+      var startUrl = '';
+      var urlbar = document.getElementById('urlbar');
+      if (typeof(autogo)=='undefined') autogo = false;
+      if (urlbar) {
+          startUrl = urlbar.value;
+      }
+        window.openDialog('chrome://tv2developer/content/quickbox.xul','tv2quickbox','modal,centerscreen,chrome,resizable=no,title=no', startUrl, autogo);
+    },
+    
+    /* Options */
+    openOptionsDialog: function(event) {
+      var instantApply = getBoolPref("browser.preferences.instantApply", false);
+      var features = "chrome,titlebar,toolbar,centerscreen" + (instantApply ? ",dialog=no" : ",modal");
+      window.openDialog('chrome://tv2developer/content/options.xul', 'tv2options', features);
+  }
+
+
+}
index 1a360d956b1a5b2b6d6f872f25dc5de6369c323d..75955b98de4cbdc1f20b74b40f184e2e8d8cc410 100644 (file)
@@ -506,7 +506,7 @@ var TV2DeveloperQuickBox = {
                     entered_url = this._makeUrl(protocol, env, sitetype, branch, php4, username, site, uri, false);
                 }
                 var git_sitename = (!site) ? 'www' : site.replace(/-(static|dyn)/, '');
-                url = 'http://flimmer.tv2.dk/git/?p=';
+                url = 'http://flimmer.i.tv2.dk/git/?p=';
                 var git_root = '/' + sitetype;
                 var magicChangeView = (!manual);
                 var magicChangeViewTo = (uriOnly ? 'content' : 'summary');
index 289db7169095a5f57915ff108a7deaf28098f2a6..0a1187d54597e29b9621d9d52a9683a3aa078859 100644 (file)
@@ -354,7 +354,7 @@ var TV2Developer = {
             links.push(new this.TV2LinkSplit());
             
             // Add the GitWeb link, inspired by ViewCVS link, inspired by Adrian Bak (ADBA)
-            var gitweb = 'http://flimmer.tv2.dk/git/?p='
+            var gitweb = 'http://flimmer.i.tv2.dk/git/?p='
                         + git_sitename + '.tv2.dk.git;hb=HEAD;f=' + (tv2_sitetype?tv2_sitetype:'webroot');
             var php = this._reg_php.exec(tv2_uriOnly);
             if (php) {
diff --git a/version b/version
index ec2a90e94a1fd1361d8c1be52a78369dee2b1b6c..88b6cf36c279414e7a78ca2082d06d84ee36e902 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-0.13.11
+0.13.12