From 7ba3922bffa4e82fc0717b8c46ea4da713198115 Mon Sep 17 00:00:00 2001 From: "mkaply%us.ibm.com" Date: Sat, 10 Mar 2001 00:50:54 +0000 Subject: [PATCH] #70961 r=jst, sr=erik DOM changes to implement the dir attribute (document.dir) needed for Bidi git-svn-id: svn://10.0.0.236/trunk@89174 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsDocument.cpp | 13 ++++++ mozilla/content/base/src/nsDocument.h | 2 + .../xul/document/src/nsXULDocument.cpp | 13 ++++++ mozilla/dom/public/coreDom/nsIDOMNSDocument.h | 7 +++ mozilla/dom/public/idl/coreDom/Document.idl | 1 + mozilla/dom/public/nsDOMPropEnums.h | 1 + mozilla/dom/public/nsDOMPropNames.h | 1 + mozilla/dom/src/coreDOM/nsJSDocument.cpp | 45 ++++++++++++++++++- 8 files changed, 81 insertions(+), 2 deletions(-) diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 7b65c1a2c00..6ff706d01b3 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -2369,6 +2369,19 @@ nsDocument::SetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject* aBoxObject) return NS_OK; } +NS_IMETHODIMP +nsDocument::GetDir(nsAWritableString& aDirection) +{ + aDirection.Assign(NS_LITERAL_STRING("ltr") ); + return NS_OK; +} + +NS_IMETHODIMP +nsDocument::SetDir(const nsAReadableString& aDirection) +{ + return NS_OK; +} + // // nsIDOMNode methods // diff --git a/mozilla/content/base/src/nsDocument.h b/mozilla/content/base/src/nsDocument.h index 978bd3fdce6..51707b114e4 100644 --- a/mozilla/content/base/src/nsDocument.h +++ b/mozilla/content/base/src/nsDocument.h @@ -371,6 +371,8 @@ public: NS_IMETHOD GetPlugins(nsIDOMPluginArray** aPlugins); NS_IMETHOD GetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject** aResult); NS_IMETHOD SetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject* aBoxObject); + NS_IMETHOD GetDir(nsAWritableString& aDirection); + NS_IMETHOD SetDir(const nsAReadableString& aDirection); // nsIDOMNode interface NS_DECL_IDOMNODE diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 36286de4c05..a6e65af0547 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -2932,6 +2932,19 @@ nsXULDocument::GetPlugins(nsIDOMPluginArray** aPlugins) return NS_ERROR_NOT_IMPLEMENTED; } +NS_IMETHODIMP +nsXULDocument::GetDir(nsAWritableString& aDirection) +{ + aDirection.Assign(NS_LITERAL_STRING("ltr") ); + return NS_OK; +} + +NS_IMETHODIMP +nsXULDocument::SetDir(const nsAReadableString& aDirection) +{ + return NS_OK; +} + //---------------------------------------------------------------------- // // nsIDOMXULDocument interface diff --git a/mozilla/dom/public/coreDom/nsIDOMNSDocument.h b/mozilla/dom/public/coreDom/nsIDOMNSDocument.h index 98ff113ecaf..30edc745f88 100644 --- a/mozilla/dom/public/coreDom/nsIDOMNSDocument.h +++ b/mozilla/dom/public/coreDom/nsIDOMNSDocument.h @@ -44,6 +44,9 @@ public: NS_IMETHOD GetCharacterSet(nsAWritableString& aCharacterSet)=0; + NS_IMETHOD GetDir(nsAWritableString& aDir)=0; + NS_IMETHOD SetDir(const nsAReadableString& aDir)=0; + NS_IMETHOD GetPlugins(nsIDOMPluginArray** aPlugins)=0; NS_IMETHOD GetLocation(jsval* aLocation)=0; @@ -61,6 +64,8 @@ public: #define NS_DECL_IDOMNSDOCUMENT \ NS_IMETHOD GetCharacterSet(nsAWritableString& aCharacterSet); \ + NS_IMETHOD GetDir(nsAWritableString& aDir); \ + NS_IMETHOD SetDir(const nsAReadableString& aDir); \ NS_IMETHOD GetPlugins(nsIDOMPluginArray** aPlugins); \ NS_IMETHOD GetLocation(jsval* aLocation); \ NS_IMETHOD SetLocation(jsval aLocation); \ @@ -73,6 +78,8 @@ public: #define NS_FORWARD_IDOMNSDOCUMENT(_to) \ NS_IMETHOD GetCharacterSet(nsAWritableString& aCharacterSet) { return _to GetCharacterSet(aCharacterSet); } \ + NS_IMETHOD GetDir(nsAWritableString& aDir); \ + NS_IMETHOD SetDir(const nsAReadableString& aDir); \ NS_IMETHOD GetPlugins(nsIDOMPluginArray** aPlugins) { return _to GetPlugins(aPlugins); } \ NS_IMETHOD GetLocation(jsval* aLocation) { return _to GetLocation(aLocation); } \ NS_IMETHOD SetLocation(jsval aLocation) { return _to SetLocation(aLocation); } \ diff --git a/mozilla/dom/public/idl/coreDom/Document.idl b/mozilla/dom/public/idl/coreDom/Document.idl index 8701bad059c..f48f4380438 100644 --- a/mozilla/dom/public/idl/coreDom/Document.idl +++ b/mozilla/dom/public/idl/coreDom/Document.idl @@ -91,6 +91,7 @@ interface NSDocument { { 0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32} } */ readonly attribute DOMString characterSet; + attribute DOMString dir; readonly attribute PluginArray plugins; attribute jsval location; diff --git a/mozilla/dom/public/nsDOMPropEnums.h b/mozilla/dom/public/nsDOMPropEnums.h index ee75a18cf6c..79760fcb0ff 100644 --- a/mozilla/dom/public/nsDOMPropEnums.h +++ b/mozilla/dom/public/nsDOMPropEnums.h @@ -768,6 +768,7 @@ enum nsDOMProp { NS_DOM_PROP_NOTATION_SYSTEMID, NS_DOM_PROP_NSDOCUMENT_CHARACTERSET, NS_DOM_PROP_NSDOCUMENT_CREATERANGE, + NS_DOM_PROP_NSDOCUMENT_DIR, NS_DOM_PROP_NSDOCUMENT_GETBOXOBJECTFOR, NS_DOM_PROP_NSDOCUMENT_LOAD, NS_DOM_PROP_NSDOCUMENT_LOCATION, diff --git a/mozilla/dom/public/nsDOMPropNames.h b/mozilla/dom/public/nsDOMPropNames.h index 34eccfc8d98..3e7a8fb3ad2 100644 --- a/mozilla/dom/public/nsDOMPropNames.h +++ b/mozilla/dom/public/nsDOMPropNames.h @@ -766,6 +766,7 @@ "notation.systemid", \ "nsdocument.characterset", \ "nsdocument.createrange", \ + "nsdocument.dir", \ "nsdocument.getboxobjectfor", \ "nsdocument.load", \ "nsdocument.location", \ diff --git a/mozilla/dom/src/coreDOM/nsJSDocument.cpp b/mozilla/dom/src/coreDOM/nsJSDocument.cpp index a87a83b072f..9d267f0485b 100644 --- a/mozilla/dom/src/coreDOM/nsJSDocument.cpp +++ b/mozilla/dom/src/coreDOM/nsJSDocument.cpp @@ -102,8 +102,9 @@ enum Document_slots { DOCUMENTSTYLE_STYLESHEETS = -4, DOCUMENTVIEW_DEFAULTVIEW = -5, NSDOCUMENT_CHARACTERSET = -6, - NSDOCUMENT_PLUGINS = -7, - NSDOCUMENT_LOCATION = -8 + NSDOCUMENT_DIR = -7, + NSDOCUMENT_PLUGINS = -8, + NSDOCUMENT_LOCATION = -9 }; /***********************************************************************/ @@ -224,6 +225,25 @@ GetDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) } break; } + case NSDOCUMENT_DIR: + { + rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_NSDOCUMENT_DIR, PR_FALSE); + if (NS_SUCCEEDED(rv)) { + nsAutoString prop; + nsIDOMNSDocument* b; + if (NS_OK == a->QueryInterface(kINSDocumentIID, (void **)&b)) { + rv = b->GetDir(prop); + if(NS_SUCCEEDED(rv)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + NS_RELEASE(b); + } + else { + rv = NS_ERROR_DOM_WRONG_TYPE_ERR; + } + } + break; + } case NSDOCUMENT_PLUGINS: { rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_NSDOCUMENT_PLUGINS, PR_FALSE); @@ -292,6 +312,26 @@ SetDocumentProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) if (!secMan) return PR_FALSE; switch(JSVAL_TO_INT(id)) { + case NSDOCUMENT_DIR: + { + rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_NSDOCUMENT_DIR, PR_TRUE); + if (NS_SUCCEEDED(rv)) { + nsAutoString prop; + nsJSUtils::nsConvertJSValToString(prop, cx, *vp); + + nsIDOMNSDocument *b; + if (NS_OK == a->QueryInterface(kINSDocumentIID, (void **)&b)) { + b->SetDir(prop); + NS_RELEASE(b); + } + else { + + rv = NS_ERROR_DOM_WRONG_TYPE_ERR; + } + + } + break; + } case NSDOCUMENT_LOCATION: { rv = secMan->CheckScriptAccess(cx, obj, NS_DOM_PROP_NSDOCUMENT_LOCATION, PR_TRUE); @@ -337,6 +377,7 @@ static JSPropertySpec DocumentProperties[] = {"styleSheets", DOCUMENTSTYLE_STYLESHEETS, JSPROP_ENUMERATE | JSPROP_READONLY}, {"defaultView", DOCUMENTVIEW_DEFAULTVIEW, JSPROP_ENUMERATE | JSPROP_READONLY}, {"characterSet", NSDOCUMENT_CHARACTERSET, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"dir", NSDOCUMENT_DIR, JSPROP_ENUMERATE}, {"plugins", NSDOCUMENT_PLUGINS, JSPROP_ENUMERATE | JSPROP_READONLY}, {"location", NSDOCUMENT_LOCATION, JSPROP_ENUMERATE}, {0}