1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 22:22:27 +01:00

Add dactylIUtils.createContents. Closes issue #581.

This commit is contained in:
Kris Maglione
2011-09-26 16:20:26 -04:00
parent c0833dae29
commit 9fd915fb41
4 changed files with 36 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
/* Public Domain */
#include "nsISupports.idl"
#include "nsIDOMElement.idl"
%{C++
#include "jsapi.h"
@@ -19,6 +20,8 @@ interface dactylIUtils : nsISupports
[optional] in ACString filename,
[optional] in PRInt32 lineNumber);
void createContents(in nsIDOMElement element);
[implicit_jscontext]
jsval getGlobalForObject(in jsval object);

View File

@@ -40,6 +40,9 @@
#include "jsdbgapi.h"
#include "jsobj.h"
#include "nsIContent.h"
#include "nsIDOMXULElement.h"
#include "nsIXULTemplateBuilder.h"
#include "nsIObserverService.h"
#include "nsIScriptSecurityManager.h"
#include "nsIXPCScriptable.h"
@@ -271,6 +274,28 @@ dactylUtils::EvalInContext(const nsAString &aSource,
return rv;
}
NS_IMETHODIMP
dactylUtils::CreateContents(nsIDOMElement *aElement)
{
nsCOMPtr<nsIContent> content = do_QueryInterface(aElement);
for (nsIContent *element = content;
element;
element = element->GetParent()) {
nsCOMPtr<nsIDOMXULElement> xulelem = do_QueryInterface(element);
if (xulelem) {
nsCOMPtr<nsIXULTemplateBuilder> builder;
xulelem->GetBuilder(getter_AddRefs(builder));
if (builder) {
builder->CreateContents(content, PR_TRUE);
break;
}
}
}
return NS_OK;
}
NS_IMETHODIMP
dactylUtils::GetGlobalForObject(const jsval &aObject,
JSContext *cx,

View File

@@ -143,6 +143,8 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
}
function addChildren(node, parent) {
DOM(node).createContents();
if (~["menu", "menupopup"].indexOf(node.localName) && node.children.length)
dispatch(node, "popupshowing");

View File

@@ -688,6 +688,9 @@ var DOM = Class("DOM", {
}, this);
},
createContents: function createContents()
this.each(DOM.createContents, this),
getSet: function getSet(args, get, set) {
if (!args.length)
return this[0] && get.call(this, this[0]);
@@ -1240,6 +1243,9 @@ var DOM = Class("DOM", {
})
}),
createContents: Class.Memoize(function () services.has("dactyl") && services.dactyl.createContents
|| function (elem) {}),
/**
* The set of input element type attribute values that mark the element as
* an editable field.