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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user