tried the show method as well but it didn't work.
I think i'm missing something obvious but i don't see what.
My code is below, am i stupid?
FBL.ns(function() { with (FBL) {
function firejettsPanel() {}
firejettsPanel.prototype = extend(Firebug.Panel,
{
name: "firejetts",
title: "FireJetts",
parentPanel: 'html',
});
Firebug.firejettsModel = extend(Firebug.Module,
{
initialize: function() {
Firebug.Panel.initialize.apply(this, arguments);
},
showPanel: function(browser, panel) {
var isfirejettsPanel = panel && panel.name == "firejetts";
var firejettsButtons = browser.chrome.$("fbfirejettsButtons");
collapse(firejettsButtons, !isfirejettsPanel);
if (!isfirejettsPanel) return;
var doc = panel.document;
var div = panel.panelNode;
if (!this.initialized) {
this.initialized = true;
}
var htmlpanel = FirebugContext.getPanel('html');
if(typeof htmlpanel.selection != 'undefined' &&
htmlpanel.selection != null)
{
xpath = this.getElementXPath(htmlpanel.selection);
this.xpathRep.myTag.append({xpath:xpath}, div,
this.xpathRep);
}
},
showSidePanel: function(browser, panel)
{
this.showPanel(browser, panel);
},
show: function(state)
{
// nothing pops up in console :(
Firebug.Console.log('show');
},
getElementXPath: function(element)
{
if (element && element.id)
return '//*...@id="' + element.id + '"]';
else
return this.getElementTreeXPath(element);
},
getElementTreeXPath: function(element)
{
var isRelative = false;
var paths = [];
for (; element && element.nodeType == 1; element =
element.parentNode)
{
if(element.id) {
paths.splice(0, 0,
this.getElementXPath(element));
isRelative = true;
break;
}else{
var index = 0;
for (var sibling = element.previousSibling; sibling;
sibling = sibling.previousSibling)
{
if (sibling.localName == element.localName)
++index;
}
var tagName = element.localName.toLowerCase();
var pathIndex = (index ? "[" + (index+1) + "]" : "");
paths.splice(0, 0, tagName + pathIndex);
}
}
return paths.length ? ((isRelative) ? "" : "/") + paths.join("/") :
null;
},
});
Firebug.firejettsModel.xpathRep = domplate(
{
myTag:
DIV({onclick: "$onClick"},
SPAN({class: "cssProp editGroup"},"$xpath")
),
onClick: function(event)
{
event.target.parentNode.removeChild(event.target)
}
});
Firebug.registerPanel(firejettsPanel);
Firebug.registerModule(Firebug.firejettsModel);
}});
Le 17 mars 2010 à 18:15, John J Barton a écrit :
>
>
> On Mar 17, 10:00 am, Duchesnes Grégory - Ilomedia
> <[email protected]> wrote:
>> jjb,
>>
>> Thanks for the quick answer.
>>
>> for the moment, i managed to do this :
>>
>> - create a totally new panel
>> - when something is selected in the html panel and i switch to my panel, the
>> xpath is displayed thanks to a domplate called in showPanel (the selected
>> element is found thanks to FirebugContext.getPanel('html').selection)
>> - add a little delete icon on the left of the xpath address to delete it
>> (thanks for the idea)
>>
>> i'm trying now to move this to a side panel of the html panel as you
>> suggested.
>> Everything works fine but i need to switch between my panel and another one
>> everytime for the selection to be taken into account (since i use
>> showSidePanel method).
>
> Take a look a breakpoint.js in Firebug. I think you want to implement
> "show(state)" .
>
> jjb
>
>
>> I've had a look a codeburner extension but couldn't figure out which method
>> is called when selection is changed. I've also looked at bindings, but this
>> is a complete mistery to me (i don't even understand what's it is used for,
>> but i'm a complete newbie in XUL)
>>
>> Is there a method that would be called magically in my side panel when the
>> selection changes in the html panel? I thought updateSelection (which i
>> found in css.js) would be a good candidate but it does not seemed to be
>> called.
>> I've seen some code bindings in a11y.js such as bind(this.onHTMLFocus,
>> this); but i didn't have more luck.
>>
>> Thanks for your help
>>
>> Greg
>>
>> Le 17 mars 2010 à 15:44, John J Barton a écrit :
>>
>>
>>
>>> On Mar 17, 1:58 am, ilomedia <[email protected]> wrote:
>>>> Hi all,
>>
>>>> I'm trying to build a simple extension and i must admit that i'm kind
>>>> of lost.
>>
>>>> The purpose of my extension is to provide a new panel in which a list
>>>> of the xpath adresses selected in the HTML panel will be kept.
>>>> To make it clearer, i need a new right-click item on an node in the
>>>> HTML panel that would add the xpath adress to an array and when i go
>>>> my new panel i can see the list of copied addresses.
>>
>>>> I already built a basic extension that adds my new panel. I also
>>>> managed to add a new right-click item on a node thanks to the
>>>> supportsObject method (though i'm not very pleased with the label
>>>> "inspect in ...").
>>>> When i click on my new inspect item, my panel is displayed but i
>>>> couldn't find the way to get the DOM element selected in the HTML
>>>> panel (and believe me i tried hard).
>>
>>>> Here are my questions :
>>
>>>> - Which method should i use to retrive this element? I tried to access
>>>> Firebug.HTMLPanel.inspectorHistory, panel.selection, panel.context
>>>> (and other properties) without any success.
>>> Here is some code from bindings.xml mouseOver, with my
>>> interpretations:
>>
>>> Get the meta-object for the graphical rendering object under the
>>> event:
>>> var object = Firebug.getRepObject(event.target);
>>> if (object)
>>> {
>>> Get the type of the meta-object
>>> var rep = Firebug.getRep(object);
>>> Get the Firefox object that the meta-object represents from the type
>>> object:
>>> object = rep.getRealObject(object, FirebugContext);
>>> if (object)
>>> Firebug.Inspector.highlightObject(object,
>>> FirebugContext);
>>> }
>>
>>>> - Is using a new panel the right option? Or should i use a sub-panel
>>>> of the HTML panel? I don't think this can be done though since those
>>>> sub-panels seemed to be cleared at each selection.
>>
>>> Some side panels, like Style, synchronize to the main panel selection.
>>> Others, like the Breakpoints side panel, act like alternative indexes
>>> into the main panel. It sounds like that would be a good model for
>>> you.
>>
>>>> - Finally, is there another way to add a right-click item in the HTML
>>>> panel (without any hack)
>>
>>> I don't know your eventual goal, but another suggestion: the XPath
>>> side panel could be an "editable history". So the side panel would add
>>> one XPath for every selection in the HTML panel. The user creates the
>>> list by selecting HTML elements rather than right click > add; Each
>>> XPath would have a (x) button on the left to remove the XPath. Mouse
>>> over on the XPath item would highlight the corresponding HTML
>>> object.
>>
>>> Novice users will be able to use the XPath side panel immediately
>>> because it will always have content. Expert users will know to clear
>>> the XPath side panel and then select the HTML nodes they want,
>>> deleting any they add by mistake.
>>
>>> jjb
>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Firebug" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group
>>> athttp://groups.google.com/group/firebug?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Firebug" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/firebug?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Firebug" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/firebug?hl=en.