Initial checkin of file for the EditorAppShell test bed.
|
@ -0,0 +1,17 @@
|
||||||
|
interface EditorAppCore : BaseAppCore
|
||||||
|
{
|
||||||
|
/* IID: { 0x9afff72b, 0xca9a, 0x11d2, \
|
||||||
|
{0x96, 0xc9, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56}} */
|
||||||
|
|
||||||
|
void EditorAppCore();
|
||||||
|
|
||||||
|
void setAttribute(in wstring attr, in wstring value);
|
||||||
|
void undo();
|
||||||
|
void exit();
|
||||||
|
|
||||||
|
void setToolbarWindow(in Window win);
|
||||||
|
void setContentWindow(in Window win);
|
||||||
|
void setWebShellWindow(in Window win);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||||
|
|
||||||
|
#ifndef nsIDOMEditorAppCore_h__
|
||||||
|
#define nsIDOMEditorAppCore_h__
|
||||||
|
|
||||||
|
#include "nsISupports.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsIScriptContext.h"
|
||||||
|
#include "nsIDOMBaseAppCore.h"
|
||||||
|
|
||||||
|
class nsIDOMWindow;
|
||||||
|
|
||||||
|
#define NS_IDOMEDITORAPPCORE_IID \
|
||||||
|
{ 0x9afff72b, 0xca9a, 0x11d2, \
|
||||||
|
{0x96, 0xc9, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56}}
|
||||||
|
|
||||||
|
class nsIDOMEditorAppCore : public nsIDOMBaseAppCore {
|
||||||
|
public:
|
||||||
|
static const nsIID& IID() { static nsIID iid = NS_IDOMEDITORAPPCORE_IID; return iid; }
|
||||||
|
|
||||||
|
NS_IMETHOD SetAttribute(const nsString& aAttr, const nsString& aValue)=0;
|
||||||
|
|
||||||
|
NS_IMETHOD Undo()=0;
|
||||||
|
|
||||||
|
NS_IMETHOD Exit()=0;
|
||||||
|
|
||||||
|
NS_IMETHOD SetToolbarWindow(nsIDOMWindow* aWin)=0;
|
||||||
|
|
||||||
|
NS_IMETHOD SetContentWindow(nsIDOMWindow* aWin)=0;
|
||||||
|
|
||||||
|
NS_IMETHOD SetWebShellWindow(nsIDOMWindow* aWin)=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define NS_DECL_IDOMEDITORAPPCORE \
|
||||||
|
NS_IMETHOD SetAttribute(const nsString& aAttr, const nsString& aValue); \
|
||||||
|
NS_IMETHOD Undo(); \
|
||||||
|
NS_IMETHOD Exit(); \
|
||||||
|
NS_IMETHOD SetToolbarWindow(nsIDOMWindow* aWin); \
|
||||||
|
NS_IMETHOD SetContentWindow(nsIDOMWindow* aWin); \
|
||||||
|
NS_IMETHOD SetWebShellWindow(nsIDOMWindow* aWin); \
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define NS_FORWARD_IDOMEDITORAPPCORE(_to) \
|
||||||
|
NS_IMETHOD SetAttribute(const nsString& aAttr, const nsString& aValue) { return _to##SetAttribute(aAttr, aValue); } \
|
||||||
|
NS_IMETHOD Undo() { return _to##Undo(); } \
|
||||||
|
NS_IMETHOD Exit() { return _to##Exit(); } \
|
||||||
|
NS_IMETHOD SetToolbarWindow(nsIDOMWindow* aWin) { return _to##SetToolbarWindow(aWin); } \
|
||||||
|
NS_IMETHOD SetContentWindow(nsIDOMWindow* aWin) { return _to##SetContentWindow(aWin); } \
|
||||||
|
NS_IMETHOD SetWebShellWindow(nsIDOMWindow* aWin) { return _to##SetWebShellWindow(aWin); } \
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" NS_DOM nsresult NS_InitEditorAppCoreClass(nsIScriptContext *aContext, void **aPrototype);
|
||||||
|
|
||||||
|
extern "C" NS_DOM nsresult NS_NewScriptEditorAppCore(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn);
|
||||||
|
|
||||||
|
#endif // nsIDOMEditorAppCore_h__
|
|
@ -0,0 +1,533 @@
|
||||||
|
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS"
|
||||||
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||||
|
* the License for the specific language governing rights and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Communicator client code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape Communications
|
||||||
|
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||||
|
* Netscape Communications Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsEditorAppCore.h"
|
||||||
|
#include "nsIBrowserWindow.h"
|
||||||
|
#include "nsIWebShell.h"
|
||||||
|
#include "pratom.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsAppCores.h"
|
||||||
|
#include "nsAppCoresCIDs.h"
|
||||||
|
#include "nsAppCoresManager.h"
|
||||||
|
|
||||||
|
#include "nsIScriptContext.h"
|
||||||
|
#include "nsIScriptContextOwner.h"
|
||||||
|
#include "nsIScriptGlobalObject.h"
|
||||||
|
#include "nsIDOMDocument.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
|
#include "nsIDOMWindow.h"
|
||||||
|
|
||||||
|
#include "nsIScriptGlobalObject.h"
|
||||||
|
#include "nsIWebShell.h"
|
||||||
|
#include "nsIWebShellWindow.h"
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
|
||||||
|
#include "nsIServiceManager.h"
|
||||||
|
#include "nsIURL.h"
|
||||||
|
#include "nsIWidget.h"
|
||||||
|
#include "plevent.h"
|
||||||
|
|
||||||
|
#include "nsIAppShell.h"
|
||||||
|
#include "nsIAppShellService.h"
|
||||||
|
#include "nsAppShellCIDs.h"
|
||||||
|
|
||||||
|
#include "nsIDocumentViewer.h"
|
||||||
|
#include "nsIDOMHTMLImageElement.h"
|
||||||
|
#include "nsIPresShell.h"
|
||||||
|
#include "nsIPresContext.h"
|
||||||
|
#include "nsEditorMode.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Editor Includes
|
||||||
|
///////////////////////////////////////
|
||||||
|
//#include "nsEditorMode.h"
|
||||||
|
#include "nsEditorInterfaces.h"
|
||||||
|
#include "nsIDOMEventReceiver.h"
|
||||||
|
#include "nsIDOMEventCapturer.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsIDOMText.h"
|
||||||
|
#include "nsIDOMElement.h"
|
||||||
|
#include "nsIDOMDocument.h"
|
||||||
|
|
||||||
|
#include "nsIEditor.h"
|
||||||
|
#include "nsITextEditor.h"
|
||||||
|
#include "nsEditorCID.h"
|
||||||
|
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsIServiceManager.h"
|
||||||
|
///////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
/* Define Class IDs */
|
||||||
|
static NS_DEFINE_IID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID);
|
||||||
|
static NS_DEFINE_IID(kEditorAppCoreCID, NS_EDITORAPPCORE_CID);
|
||||||
|
|
||||||
|
/* Define Interface IDs */
|
||||||
|
static NS_DEFINE_IID(kIAppShellServiceIID, NS_IAPPSHELL_SERVICE_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kIEditorAppCoreIID, NS_IDOMEDITORAPPCORE_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIDOMDocumentIID, nsIDOMDocument::IID());
|
||||||
|
static NS_DEFINE_IID(kIDocumentIID, nsIDocument::IID());
|
||||||
|
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kINetSupportIID, NS_INETSUPPORT_IID);
|
||||||
|
static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID);
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIWebShellWindowIID, NS_IWEBSHELL_WINDOW_IID);
|
||||||
|
static NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID);
|
||||||
|
|
||||||
|
|
||||||
|
#define APP_DEBUG 0
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// nsEditorAppCore
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
nsEditorAppCore::nsEditorAppCore()
|
||||||
|
{
|
||||||
|
if (APP_DEBUG) printf("Created nsEditorAppCore\n");
|
||||||
|
|
||||||
|
mScriptObject = nsnull;
|
||||||
|
mToolbarWindow = nsnull;
|
||||||
|
mToolbarScriptContext = nsnull;
|
||||||
|
mContentWindow = nsnull;
|
||||||
|
mContentScriptContext = nsnull;
|
||||||
|
mWebShellWin = nsnull;
|
||||||
|
mWebShell = nsnull;
|
||||||
|
mCurrentNode = nsnull;
|
||||||
|
mDomDoc = nsnull;
|
||||||
|
mEditor = nsnull;
|
||||||
|
|
||||||
|
IncInstanceCount();
|
||||||
|
NS_INIT_REFCNT();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsEditorAppCore::~nsEditorAppCore()
|
||||||
|
{
|
||||||
|
NS_IF_RELEASE(mToolbarWindow);
|
||||||
|
NS_IF_RELEASE(mToolbarScriptContext);
|
||||||
|
NS_IF_RELEASE(mContentWindow);
|
||||||
|
NS_IF_RELEASE(mContentScriptContext);
|
||||||
|
NS_IF_RELEASE(mWebShellWin);
|
||||||
|
NS_IF_RELEASE(mWebShell);
|
||||||
|
DecInstanceCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMPL_ADDREF(nsEditorAppCore)
|
||||||
|
NS_IMPL_RELEASE(nsEditorAppCore)
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||||
|
{
|
||||||
|
if (aInstancePtr == NULL) {
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always NULL result, in case of failure
|
||||||
|
*aInstancePtr = NULL;
|
||||||
|
|
||||||
|
if ( aIID.Equals(kIEditorAppCoreIID) ) {
|
||||||
|
*aInstancePtr = (void*) ((nsIDOMEditorAppCore*)this);
|
||||||
|
AddRef();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
if (aIID.Equals(kINetSupportIID)) {
|
||||||
|
*aInstancePtr = (void*) ((nsINetSupport*)this);
|
||||||
|
NS_ADDREF_THIS();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
if (aIID.Equals(kIStreamObserverIID)) {
|
||||||
|
*aInstancePtr = (void*) ((nsIStreamObserver*)this);
|
||||||
|
NS_ADDREF_THIS();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return nsBaseAppCore::QueryInterface(aIID, aInstancePtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
|
||||||
|
{
|
||||||
|
NS_PRECONDITION(nsnull != aScriptObject, "null arg");
|
||||||
|
nsresult res = NS_OK;
|
||||||
|
if (nsnull == mScriptObject)
|
||||||
|
{
|
||||||
|
res = NS_NewScriptEditorAppCore(aContext,
|
||||||
|
(nsISupports *)(nsIDOMEditorAppCore*)this,
|
||||||
|
nsnull,
|
||||||
|
&mScriptObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
*aScriptObject = mScriptObject;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Init(const nsString& aId)
|
||||||
|
{
|
||||||
|
|
||||||
|
nsBaseAppCore::Init(aId);
|
||||||
|
|
||||||
|
// XXX This is lame and needs to be changed
|
||||||
|
nsAppCoresManager* sdm = new nsAppCoresManager();
|
||||||
|
sdm->Add((nsIDOMBaseAppCore *)(nsBaseAppCore *)this);
|
||||||
|
delete sdm;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIPresShell*
|
||||||
|
nsEditorAppCore::GetPresShellFor(nsIWebShell* aWebShell)
|
||||||
|
{
|
||||||
|
nsIPresShell* shell = nsnull;
|
||||||
|
if (nsnull != aWebShell) {
|
||||||
|
nsIContentViewer* cv = nsnull;
|
||||||
|
aWebShell->GetContentViewer(&cv);
|
||||||
|
if (nsnull != cv) {
|
||||||
|
nsIDocumentViewer* docv = nsnull;
|
||||||
|
cv->QueryInterface(kIDocumentViewerIID, (void**) &docv);
|
||||||
|
if (nsnull != docv) {
|
||||||
|
nsIPresContext* cx;
|
||||||
|
docv->GetPresContext(cx);
|
||||||
|
if (nsnull != cx) {
|
||||||
|
cx->GetShell(&shell);
|
||||||
|
NS_RELEASE(cx);
|
||||||
|
}
|
||||||
|
NS_RELEASE(docv);
|
||||||
|
}
|
||||||
|
NS_RELEASE(cv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return shell;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsEditorAppCore::DoEditorMode(nsIWebShell *aWebShell)
|
||||||
|
{
|
||||||
|
PRInt32 i, n;
|
||||||
|
if (nsnull != aWebShell) {
|
||||||
|
nsIContentViewer* mCViewer;
|
||||||
|
aWebShell->GetContentViewer(&mCViewer);
|
||||||
|
if (nsnull != mCViewer) {
|
||||||
|
nsIDocumentViewer* mDViewer;
|
||||||
|
if (NS_OK == mCViewer->QueryInterface(kIDocumentViewerIID, (void**) &mDViewer))
|
||||||
|
{
|
||||||
|
nsIDocument* mDoc;
|
||||||
|
mDViewer->GetDocument(mDoc);
|
||||||
|
if (nsnull != mDoc) {
|
||||||
|
nsIDOMDocument* mDOMDoc;
|
||||||
|
if (NS_OK == mDoc->QueryInterface(kIDOMDocumentIID, (void**) &mDOMDoc))
|
||||||
|
{
|
||||||
|
nsIPresShell* shell = GetPresShellFor(aWebShell);
|
||||||
|
NS_InitEditorMode(mDOMDoc, shell);
|
||||||
|
mEditor = GetEditor();
|
||||||
|
//SetToEditorMode(mDOMDoc, shell);
|
||||||
|
NS_RELEASE(mDOMDoc);
|
||||||
|
NS_IF_RELEASE(shell);
|
||||||
|
}
|
||||||
|
NS_RELEASE(mDoc);
|
||||||
|
}
|
||||||
|
NS_RELEASE(mDViewer);
|
||||||
|
}
|
||||||
|
NS_RELEASE(mCViewer);
|
||||||
|
}
|
||||||
|
|
||||||
|
aWebShell->GetChildCount(n);
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
nsIWebShell* mChild;
|
||||||
|
aWebShell->ChildAt(i, mChild);
|
||||||
|
DoEditorMode(mChild);
|
||||||
|
NS_RELEASE(mChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetAttribute(const nsString& aAttr, const nsString& aValue)
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Back()
|
||||||
|
{
|
||||||
|
ExecuteScript(mToolbarScriptContext, mDisableScript);
|
||||||
|
ExecuteScript(mContentScriptContext, "window.back();");
|
||||||
|
ExecuteScript(mToolbarScriptContext, mEnableScript);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Forward()
|
||||||
|
{
|
||||||
|
ExecuteScript(mToolbarScriptContext, mDisableScript);
|
||||||
|
ExecuteScript(mContentScriptContext, "window.forward();");
|
||||||
|
ExecuteScript(mToolbarScriptContext, mEnableScript);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetDisableCallback(const nsString& aScript)
|
||||||
|
{
|
||||||
|
mDisableScript = aScript;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetEnableCallback(const nsString& aScript)
|
||||||
|
{
|
||||||
|
mEnableScript = aScript;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::LoadUrl(const nsString& aUrl)
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetToolbarWindow(nsIDOMWindow* aWin)
|
||||||
|
{
|
||||||
|
mToolbarWindow = aWin;
|
||||||
|
NS_ADDREF(aWin);
|
||||||
|
mToolbarScriptContext = GetScriptContext(aWin);
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetContentWindow(nsIDOMWindow* aWin)
|
||||||
|
{
|
||||||
|
mContentWindow = aWin;
|
||||||
|
NS_ADDREF(aWin);
|
||||||
|
mContentScriptContext = GetScriptContext(aWin);
|
||||||
|
nsCOMPtr<nsIScriptGlobalObject> globalObj( mContentWindow );
|
||||||
|
if (!globalObj) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIWebShell * webShell;
|
||||||
|
globalObj->GetWebShell(&webShell);
|
||||||
|
if (nsnull != webShell) {
|
||||||
|
DoEditorMode(webShell);
|
||||||
|
NS_RELEASE(webShell);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetWebShellWindow(nsIDOMWindow* aWin)
|
||||||
|
{
|
||||||
|
if (!mContentWindow) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
nsCOMPtr<nsIScriptGlobalObject> globalObj( aWin );
|
||||||
|
if (!globalObj) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIWebShell * webShell;
|
||||||
|
globalObj->GetWebShell(&webShell);
|
||||||
|
if (nsnull != webShell) {
|
||||||
|
mWebShell = webShell;
|
||||||
|
NS_ADDREF(mWebShell);
|
||||||
|
const PRUnichar * name;
|
||||||
|
webShell->GetName( &name);
|
||||||
|
nsAutoString str(name);
|
||||||
|
|
||||||
|
if (APP_DEBUG) printf("Attaching to WebShellWindow[%s]\n", str.ToNewCString());
|
||||||
|
|
||||||
|
nsIWebShellContainer * webShellContainer;
|
||||||
|
webShell->GetContainer(webShellContainer);
|
||||||
|
if (nsnull != webShellContainer) {
|
||||||
|
if (NS_OK == webShellContainer->QueryInterface(kIWebShellWindowIID, (void**) &mWebShellWin)) {
|
||||||
|
}
|
||||||
|
NS_RELEASE(webShellContainer);
|
||||||
|
}
|
||||||
|
NS_RELEASE(webShell);
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::NewWindow()
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Undo()
|
||||||
|
{
|
||||||
|
if (mEditor) {
|
||||||
|
mEditor->Undo(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------
|
||||||
|
void nsEditorAppCore::SetButtonImage(nsIDOMNode * aParentNode, PRInt32 aBtnNum, const nsString &aResName)
|
||||||
|
{
|
||||||
|
PRInt32 count = 0;
|
||||||
|
nsCOMPtr<nsIDOMNode> button(FindNamedDOMNode(nsAutoString("button"), aParentNode, count, aBtnNum));
|
||||||
|
count = 0;
|
||||||
|
nsCOMPtr<nsIDOMNode> img(FindNamedDOMNode(nsAutoString("img"), button, count, 1));
|
||||||
|
nsCOMPtr<nsIDOMHTMLImageElement> imgElement(do_QueryInterface(img));
|
||||||
|
if (imgElement) {
|
||||||
|
char * str = aResName.ToNewCString();
|
||||||
|
imgElement->SetSrc(str);
|
||||||
|
delete [] str;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::PrintPreview()
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Close()
|
||||||
|
{
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::Exit()
|
||||||
|
{
|
||||||
|
nsIAppShellService* appShell = nsnull;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the Application Shell instance...
|
||||||
|
*/
|
||||||
|
nsresult rv = nsServiceManager::GetService(kAppShellServiceCID,
|
||||||
|
kIAppShellServiceIID,
|
||||||
|
(nsISupports**)&appShell);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
appShell->Shutdown();
|
||||||
|
nsServiceManager::ReleaseService(kAppShellServiceCID, appShell);
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::ExecuteScript(nsIScriptContext * aContext, const nsString& aScript)
|
||||||
|
{
|
||||||
|
if (nsnull != aContext) {
|
||||||
|
const char* url = "";
|
||||||
|
PRBool isUndefined = PR_FALSE;
|
||||||
|
nsString rVal;
|
||||||
|
if (APP_DEBUG) printf("Executing [%s]\n", aScript.ToNewCString());
|
||||||
|
aContext->EvaluateString(aScript, url, 0, rVal, &isUndefined);
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//static nsIDOMDocument* mDomDoc;
|
||||||
|
//static nsIDOMNode* mCurrentNode;
|
||||||
|
|
||||||
|
//static nsIEditor *gEditor;
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIDOMTextIID, NS_IDOMTEXT_IID);
|
||||||
|
static NS_DEFINE_IID(kIDOMElementIID, NS_IDOMELEMENT_IID);
|
||||||
|
static NS_DEFINE_IID(kIEditorIID, NS_IEDITOR_IID);
|
||||||
|
static NS_DEFINE_CID(kEditorCID, NS_EDITOR_CID);
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define EDITOR_DLL "ender.dll"
|
||||||
|
#else
|
||||||
|
#ifdef XP_MAC
|
||||||
|
#define EDITOR_DLL "ENDER_DLL"
|
||||||
|
#else // XP_UNIX
|
||||||
|
#define EDITOR_DLL "libender.so"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCore::SetToEditorMode(nsIDOMDocument *aDOMDocument, nsIPresShell* aPresShell)
|
||||||
|
{
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
static needsInit=PR_TRUE;
|
||||||
|
#if 0
|
||||||
|
if (gEditor)
|
||||||
|
|
||||||
|
gEditor=nsnull;
|
||||||
|
|
||||||
|
NS_ASSERTION(nsnull!=aDOMDocument, "null document");
|
||||||
|
NS_ASSERTION(nsnull!=aPresShell, "null presentation shell");
|
||||||
|
|
||||||
|
if ((nsnull==aDOMDocument) || (nsnull==aPresShell))
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
/** temp code until the editor auto-registers **/
|
||||||
|
if (PR_TRUE==needsInit)
|
||||||
|
{
|
||||||
|
needsInit=PR_FALSE;
|
||||||
|
result = nsRepository::RegisterFactory(kTextEditorCID, EDITOR_DLL,
|
||||||
|
PR_FALSE, PR_FALSE);
|
||||||
|
if (NS_ERROR_FACTORY_EXISTS!=result)
|
||||||
|
{
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result = nsRepository::RegisterFactory(kEditorCID, EDITOR_DLL,
|
||||||
|
PR_FALSE, PR_FALSE);
|
||||||
|
if (NS_ERROR_FACTORY_EXISTS!=result)
|
||||||
|
{
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** end temp code **/
|
||||||
|
/*
|
||||||
|
nsISupports *isup = nsnull;
|
||||||
|
result = nsServiceManager::GetService(kTextEditorCID,
|
||||||
|
kITextEditorIID, &isup);
|
||||||
|
*/
|
||||||
|
result = nsRepository::CreateInstance(kTextEditorCID,
|
||||||
|
nsnull,
|
||||||
|
kITextEditorIID, (void **)&gEditor);
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
if (!gEditor) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
gEditor->InitTextEditor(aDOMDocument, aPresShell);
|
||||||
|
gEditor->EnableUndo(PR_TRUE);
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
#ifndef nsEditorAppCore_h___
|
||||||
|
#define nsEditorAppCore_h___
|
||||||
|
|
||||||
|
//#include "nsAppCores.h"
|
||||||
|
|
||||||
|
#include "nscore.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
|
|
||||||
|
#include "nsIDOMEditorAppCore.h"
|
||||||
|
#include "nsBaseAppCore.h"
|
||||||
|
#include "nsINetSupport.h"
|
||||||
|
#include "nsIStreamObserver.h"
|
||||||
|
|
||||||
|
class nsIBrowserWindow;
|
||||||
|
class nsIWebShell;
|
||||||
|
class nsIScriptContext;
|
||||||
|
class nsIDOMWindow;
|
||||||
|
class nsIURL;
|
||||||
|
class nsIWebShellWindow;
|
||||||
|
class nsIPresShell;
|
||||||
|
class nsITextEditor;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// nsEditorAppCore:
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class nsEditorAppCore : public nsBaseAppCore,
|
||||||
|
public nsIDOMEditorAppCore
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsEditorAppCore();
|
||||||
|
virtual ~nsEditorAppCore();
|
||||||
|
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
|
||||||
|
NS_IMETHOD Init(const nsString& aId);
|
||||||
|
NS_IMETHOD GetId(nsString& aId) { return nsBaseAppCore::GetId(aId); }
|
||||||
|
|
||||||
|
NS_IMETHOD SetAttribute(const nsString& aAttr, const nsString& aValue);
|
||||||
|
NS_IMETHOD Undo();
|
||||||
|
NS_IMETHOD Back();
|
||||||
|
NS_IMETHOD Forward();
|
||||||
|
NS_IMETHOD LoadUrl(const nsString& aUrl);
|
||||||
|
NS_IMETHOD SetToolbarWindow(nsIDOMWindow* aWin);
|
||||||
|
NS_IMETHOD SetContentWindow(nsIDOMWindow* aWin);
|
||||||
|
NS_IMETHOD SetWebShellWindow(nsIDOMWindow* aWin);
|
||||||
|
NS_IMETHOD SetDisableCallback(const nsString& aScript);
|
||||||
|
NS_IMETHOD SetEnableCallback(const nsString& aScript);
|
||||||
|
NS_IMETHOD NewWindow();
|
||||||
|
NS_IMETHOD PrintPreview();
|
||||||
|
NS_IMETHOD Close();
|
||||||
|
NS_IMETHOD Exit();
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
NS_IMETHOD SetToEditorMode(nsIDOMDocument *aDOMDocument, nsIPresShell* aPresShell);
|
||||||
|
nsIPresShell* GetPresShellFor(nsIWebShell* aWebShell);
|
||||||
|
void DoEditorMode(nsIWebShell *aWebShell);
|
||||||
|
NS_IMETHOD ExecuteScript(nsIScriptContext * aContext, const nsString& aScript);
|
||||||
|
void SetButtonImage(nsIDOMNode * aParentNode, PRInt32 aBtnNum, const nsString &aResName);
|
||||||
|
|
||||||
|
nsString mEnableScript;
|
||||||
|
nsString mDisableScript;
|
||||||
|
|
||||||
|
nsIScriptContext *mToolbarScriptContext;
|
||||||
|
nsIScriptContext *mContentScriptContext;
|
||||||
|
|
||||||
|
nsIDOMWindow *mToolbarWindow;
|
||||||
|
nsIDOMWindow *mContentWindow;
|
||||||
|
|
||||||
|
nsIWebShellWindow *mWebShellWin;
|
||||||
|
nsIWebShell * mWebShell;
|
||||||
|
|
||||||
|
nsITextEditor * mEditor;
|
||||||
|
nsIDOMDocument* mDomDoc;
|
||||||
|
nsIDOMNode* mCurrentNode;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsEditorAppCore_h___
|
|
@ -0,0 +1,131 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "License"); you may not use this file except in
|
||||||
|
* compliance with the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS"
|
||||||
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||||
|
* the License for the specific language governing rights and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Communicator client code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape Communications
|
||||||
|
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||||
|
* Netscape Communications Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsAppCores.h"
|
||||||
|
#include "nsEditorAppCoreFactory.h"
|
||||||
|
#include "nsEditorAppCore.h"
|
||||||
|
#include "pratom.h"
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
|
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
// nsEditorAppCoreFactory
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
nsEditorAppCoreFactory::nsEditorAppCoreFactory(void)
|
||||||
|
{
|
||||||
|
mRefCnt=0;
|
||||||
|
IncInstanceCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsEditorAppCoreFactory::~nsEditorAppCoreFactory(void)
|
||||||
|
{
|
||||||
|
DecInstanceCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCoreFactory::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||||
|
{
|
||||||
|
if (aInstancePtr == NULL)
|
||||||
|
{
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always NULL result, in case of failure
|
||||||
|
*aInstancePtr = NULL;
|
||||||
|
|
||||||
|
if ( aIID.Equals(kISupportsIID) )
|
||||||
|
{
|
||||||
|
*aInstancePtr = (void*) this;
|
||||||
|
}
|
||||||
|
else if ( aIID.Equals(kIFactoryIID) )
|
||||||
|
{
|
||||||
|
*aInstancePtr = (void*) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aInstancePtr == NULL)
|
||||||
|
{
|
||||||
|
return NS_ERROR_NO_INTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddRef();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCoreFactory::AddRef(void)
|
||||||
|
{
|
||||||
|
return ++mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCoreFactory::Release(void)
|
||||||
|
{
|
||||||
|
if (--mRefCnt ==0)
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
return 0; // Don't access mRefCnt after deleting!
|
||||||
|
}
|
||||||
|
|
||||||
|
return mRefCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCoreFactory::CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
||||||
|
{
|
||||||
|
if (aResult == NULL)
|
||||||
|
{
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*aResult = NULL;
|
||||||
|
|
||||||
|
/* do I have to use iSupports? */
|
||||||
|
nsEditorAppCore *inst = new nsEditorAppCore();
|
||||||
|
|
||||||
|
if (inst == NULL)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
nsresult result = inst->QueryInterface(aIID, aResult);
|
||||||
|
|
||||||
|
if (result != NS_OK)
|
||||||
|
delete inst;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsEditorAppCoreFactory::LockFactory(PRBool aLock)
|
||||||
|
{
|
||||||
|
if (aLock)
|
||||||
|
IncLockCount();
|
||||||
|
else
|
||||||
|
DecLockCount();
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
#ifndef nsEditorAppCoreFactory_h___
|
||||||
|
#define nsEditorAppCoreFactory_h___
|
||||||
|
|
||||||
|
//#include "nscore.h"
|
||||||
|
//#include "nsString.h"
|
||||||
|
#include "nsIFactory.h"
|
||||||
|
#include "nsISupports.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// nsEditorAppCoreFactory:
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class nsEditorAppCoreFactory : public nsIFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsEditorAppCoreFactory();
|
||||||
|
virtual ~nsEditorAppCoreFactory();
|
||||||
|
|
||||||
|
PRBool CanUnload(void);
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||||
|
REFNSIID aIID,
|
||||||
|
void **aResult);
|
||||||
|
|
||||||
|
NS_IMETHOD LockFactory(PRBool aLock);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // nsEditorAppCoreFactory_h___
|
|
@ -0,0 +1,69 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsEditorInterfaces_h__
|
||||||
|
#define nsEditorInterfaces_h__
|
||||||
|
|
||||||
|
#include "nsIDOMEvent.h"
|
||||||
|
#include "nsIDOMKeyListener.h"
|
||||||
|
#include "nsIDOMMouseListener.h"
|
||||||
|
|
||||||
|
//nsIDOMKeyListener interface
|
||||||
|
class nsEditorKeyListener : public nsIDOMKeyListener {
|
||||||
|
public:
|
||||||
|
nsEditorKeyListener();
|
||||||
|
virtual ~nsEditorKeyListener();
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
virtual nsresult ProcessEvent(nsIDOMEvent* aEvent);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent);
|
||||||
|
virtual nsresult KeyUp(nsIDOMEvent* aKeyEvent);
|
||||||
|
virtual nsresult KeyPress(nsIDOMEvent* aKeyEvent);
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual nsresult GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char *aChar);
|
||||||
|
};
|
||||||
|
|
||||||
|
//nsIDOMMouseListener interface
|
||||||
|
class nsEditorMouseListener : public nsIDOMMouseListener {
|
||||||
|
public:
|
||||||
|
nsEditorMouseListener();
|
||||||
|
virtual ~nsEditorMouseListener();
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
virtual nsresult ProcessEvent(nsIDOMEvent* aEvent);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent);
|
||||||
|
virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent);
|
||||||
|
virtual nsresult MouseClick(nsIDOMEvent* aMouseEvent);
|
||||||
|
virtual nsresult MouseDblClick(nsIDOMEvent* aMouseEvent);
|
||||||
|
virtual nsresult MouseOver(nsIDOMEvent* aMouseEvent);
|
||||||
|
virtual nsresult MouseOut(nsIDOMEvent* aMouseEvent);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern nsresult NS_NewEditorKeyListener(nsIDOMEventListener ** aInstancePtrResult);
|
||||||
|
|
||||||
|
extern nsresult NS_NewEditorMouseListener(nsIDOMEventListener ** aInstancePtrResult);
|
||||||
|
|
||||||
|
#endif //nsEditorInterfaces_h__
|
|
@ -0,0 +1,102 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
#include "nsEditorMode.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsIDOMDocument.h"
|
||||||
|
|
||||||
|
#include "nsITextEditor.h"
|
||||||
|
#include "nsEditorCID.h"
|
||||||
|
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsIServiceManager.h"
|
||||||
|
|
||||||
|
static nsITextEditor *gEditor;
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kITextEditorIID, NS_ITEXTEDITOR_IID);
|
||||||
|
static NS_DEFINE_CID(kTextEditorCID, NS_TEXTEDITOR_CID);
|
||||||
|
static NS_DEFINE_IID(kIEditorIID, NS_IEDITOR_IID);
|
||||||
|
static NS_DEFINE_CID(kEditorCID, NS_EDITOR_CID);
|
||||||
|
|
||||||
|
#ifdef XP_PC
|
||||||
|
#define EDITOR_DLL "ender.dll"
|
||||||
|
#else
|
||||||
|
#ifdef XP_MAC
|
||||||
|
#define EDITOR_DLL "ENDER_DLL"
|
||||||
|
#else // XP_UNIX
|
||||||
|
#define EDITOR_DLL "libender.so"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nsITextEditor * GetEditor()
|
||||||
|
{
|
||||||
|
return gEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult NS_InitEditorMode(nsIDOMDocument *aDOMDocument, nsIPresShell* aPresShell)
|
||||||
|
{
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
static needsInit=PR_TRUE;
|
||||||
|
if (gEditor)
|
||||||
|
|
||||||
|
gEditor=nsnull;
|
||||||
|
|
||||||
|
NS_ASSERTION(nsnull!=aDOMDocument, "null document");
|
||||||
|
NS_ASSERTION(nsnull!=aPresShell, "null presentation shell");
|
||||||
|
|
||||||
|
if ((nsnull==aDOMDocument) || (nsnull==aPresShell))
|
||||||
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
/** temp code until the editor auto-registers **/
|
||||||
|
if (PR_TRUE==needsInit)
|
||||||
|
{
|
||||||
|
needsInit=PR_FALSE;
|
||||||
|
result = nsRepository::RegisterFactory(kTextEditorCID, EDITOR_DLL,
|
||||||
|
PR_FALSE, PR_FALSE);
|
||||||
|
if (NS_ERROR_FACTORY_EXISTS!=result)
|
||||||
|
{
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result = nsRepository::RegisterFactory(kEditorCID, EDITOR_DLL,
|
||||||
|
PR_FALSE, PR_FALSE);
|
||||||
|
if (NS_ERROR_FACTORY_EXISTS!=result)
|
||||||
|
{
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** end temp code **/
|
||||||
|
/*
|
||||||
|
nsISupports *isup = nsnull;
|
||||||
|
result = nsServiceManager::GetService(kTextEditorCID,
|
||||||
|
kITextEditorIID, &isup);
|
||||||
|
*/
|
||||||
|
result = nsRepository::CreateInstance(kTextEditorCID,
|
||||||
|
nsnull,
|
||||||
|
kITextEditorIID, (void **)&gEditor);
|
||||||
|
if (NS_FAILED(result))
|
||||||
|
return result;
|
||||||
|
if (!gEditor) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
gEditor->InitTextEditor(aDOMDocument, aPresShell);
|
||||||
|
gEditor->EnableUndo(PR_TRUE);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef nsEditorMode_h__
|
||||||
|
#define nsEditorMode_h__
|
||||||
|
|
||||||
|
#include "nsError.h"
|
||||||
|
|
||||||
|
class nsIDOMDocument;
|
||||||
|
class nsIPresShell;
|
||||||
|
class nsITextEditor;
|
||||||
|
|
||||||
|
extern nsresult NS_InitEditorMode(nsIDOMDocument * aDOMDocument, nsIPresShell* aPresShell);
|
||||||
|
extern nsITextEditor * GetEditor();
|
||||||
|
|
||||||
|
#endif //nsEditorMode_h__
|
|
@ -0,0 +1,547 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public License
|
||||||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||||
|
* http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* NPL.
|
||||||
|
*
|
||||||
|
* The Initial Developer of this code under the NPL is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||||
|
* Reserved.
|
||||||
|
*/
|
||||||
|
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||||
|
|
||||||
|
#include "jsapi.h"
|
||||||
|
#include "nsJSUtils.h"
|
||||||
|
#include "nscore.h"
|
||||||
|
#include "nsIScriptContext.h"
|
||||||
|
#include "nsIJSScriptObject.h"
|
||||||
|
#include "nsIScriptObjectOwner.h"
|
||||||
|
#include "nsIScriptGlobalObject.h"
|
||||||
|
#include "nsIPtr.h"
|
||||||
|
#include "nsString.h"
|
||||||
|
#include "nsIDOMEditorAppCore.h"
|
||||||
|
#include "nsIDOMWindow.h"
|
||||||
|
#include "nsIScriptNameSpaceManager.h"
|
||||||
|
#include "nsRepository.h"
|
||||||
|
#include "nsDOMCID.h"
|
||||||
|
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||||
|
static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID);
|
||||||
|
static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID);
|
||||||
|
static NS_DEFINE_IID(kIEditorAppCoreIID, NS_IDOMEDITORAPPCORE_IID);
|
||||||
|
static NS_DEFINE_IID(kIWindowIID, NS_IDOMWINDOW_IID);
|
||||||
|
|
||||||
|
NS_DEF_PTR(nsIDOMEditorAppCore);
|
||||||
|
NS_DEF_PTR(nsIDOMWindow);
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
//
|
||||||
|
// EditorAppCore Properties Getter
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
GetEditorAppCoreProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *a = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == a) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JSVAL_IS_INT(id)) {
|
||||||
|
switch(JSVAL_TO_INT(id)) {
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
//
|
||||||
|
// EditorAppCore Properties Setter
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
SetEditorAppCoreProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *a = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == a) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JSVAL_IS_INT(id)) {
|
||||||
|
switch(JSVAL_TO_INT(id)) {
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore finalizer
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(void)
|
||||||
|
FinalizeEditorAppCore(JSContext *cx, JSObject *obj)
|
||||||
|
{
|
||||||
|
nsJSUtils::nsGenericFinalize(cx, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore enumerate
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EnumerateEditorAppCore(JSContext *cx, JSObject *obj)
|
||||||
|
{
|
||||||
|
return nsJSUtils::nsGenericEnumerate(cx, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore resolve
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
ResolveEditorAppCore(JSContext *cx, JSObject *obj, jsval id)
|
||||||
|
{
|
||||||
|
return nsJSUtils::nsGenericResolve(cx, obj, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method SetAttribute
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreSetAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
nsAutoString b0;
|
||||||
|
nsAutoString b1;
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 2) {
|
||||||
|
|
||||||
|
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
|
||||||
|
|
||||||
|
nsJSUtils::nsConvertJSValToString(b1, cx, argv[1]);
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->SetAttribute(b0, b1)) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function setAttribute requires 2 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method Undo
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreUndo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 0) {
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->Undo()) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function undo requires 0 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method Exit
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreExit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 0) {
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->Exit()) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function exit requires 0 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method SetToolbarWindow
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreSetToolbarWindow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
nsIDOMWindowPtr b0;
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1) {
|
||||||
|
|
||||||
|
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
|
||||||
|
kIWindowIID,
|
||||||
|
"Window",
|
||||||
|
cx,
|
||||||
|
argv[0])) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->SetToolbarWindow(b0)) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function setToolbarWindow requires 1 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method SetContentWindow
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreSetContentWindow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
nsIDOMWindowPtr b0;
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1) {
|
||||||
|
|
||||||
|
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
|
||||||
|
kIWindowIID,
|
||||||
|
"Window",
|
||||||
|
cx,
|
||||||
|
argv[0])) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->SetContentWindow(b0)) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function setContentWindow requires 1 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Native method SetWebShellWindow
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCoreSetWebShellWindow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsIDOMEditorAppCore *nativeThis = (nsIDOMEditorAppCore*)JS_GetPrivate(cx, obj);
|
||||||
|
nsIDOMWindowPtr b0;
|
||||||
|
|
||||||
|
*rval = JSVAL_NULL;
|
||||||
|
|
||||||
|
// If there's no private data, this must be the prototype, so ignore
|
||||||
|
if (nsnull == nativeThis) {
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1) {
|
||||||
|
|
||||||
|
if (JS_FALSE == nsJSUtils::nsConvertJSValToObject((nsISupports **)&b0,
|
||||||
|
kIWindowIID,
|
||||||
|
"Window",
|
||||||
|
cx,
|
||||||
|
argv[0])) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_OK != nativeThis->SetWebShellWindow(b0)) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*rval = JSVAL_VOID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
JS_ReportError(cx, "Function setWebShellWindow requires 1 parameters");
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
//
|
||||||
|
// class for EditorAppCore
|
||||||
|
//
|
||||||
|
JSClass EditorAppCoreClass = {
|
||||||
|
"EditorAppCore",
|
||||||
|
JSCLASS_HAS_PRIVATE,
|
||||||
|
JS_PropertyStub,
|
||||||
|
JS_PropertyStub,
|
||||||
|
GetEditorAppCoreProperty,
|
||||||
|
SetEditorAppCoreProperty,
|
||||||
|
EnumerateEditorAppCore,
|
||||||
|
ResolveEditorAppCore,
|
||||||
|
JS_ConvertStub,
|
||||||
|
FinalizeEditorAppCore
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore class properties
|
||||||
|
//
|
||||||
|
static JSPropertySpec EditorAppCoreProperties[] =
|
||||||
|
{
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore class methods
|
||||||
|
//
|
||||||
|
static JSFunctionSpec EditorAppCoreMethods[] =
|
||||||
|
{
|
||||||
|
{"setAttribute", EditorAppCoreSetAttribute, 2},
|
||||||
|
{"undo", EditorAppCoreUndo, 0},
|
||||||
|
{"exit", EditorAppCoreExit, 0},
|
||||||
|
{"setToolbarWindow", EditorAppCoreSetToolbarWindow, 1},
|
||||||
|
{"setContentWindow", EditorAppCoreSetContentWindow, 1},
|
||||||
|
{"setWebShellWindow", EditorAppCoreSetWebShellWindow, 1},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore constructor
|
||||||
|
//
|
||||||
|
PR_STATIC_CALLBACK(JSBool)
|
||||||
|
EditorAppCore(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||||
|
{
|
||||||
|
nsresult result;
|
||||||
|
nsIID classID;
|
||||||
|
nsIScriptContext* context = (nsIScriptContext*)JS_GetContextPrivate(cx);
|
||||||
|
nsIScriptNameSpaceManager* manager;
|
||||||
|
nsIDOMEditorAppCore *nativeThis;
|
||||||
|
nsIScriptObjectOwner *owner = nsnull;
|
||||||
|
|
||||||
|
static NS_DEFINE_IID(kIDOMEditorAppCoreIID, NS_IDOMEDITORAPPCORE_IID);
|
||||||
|
|
||||||
|
result = context->GetNameSpaceManager(&manager);
|
||||||
|
if (NS_OK != result) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = manager->LookupName("EditorAppCore", PR_TRUE, classID);
|
||||||
|
NS_RELEASE(manager);
|
||||||
|
if (NS_OK != result) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = nsRepository::CreateInstance(classID,
|
||||||
|
nsnull,
|
||||||
|
kIDOMEditorAppCoreIID,
|
||||||
|
(void **)&nativeThis);
|
||||||
|
if (NS_OK != result) {
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX We should be calling Init() on the instance
|
||||||
|
|
||||||
|
result = nativeThis->QueryInterface(kIScriptObjectOwnerIID, (void **)&owner);
|
||||||
|
if (NS_OK != result) {
|
||||||
|
NS_RELEASE(nativeThis);
|
||||||
|
return JS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
owner->SetScriptObject((void *)obj);
|
||||||
|
JS_SetPrivate(cx, obj, nativeThis);
|
||||||
|
|
||||||
|
NS_RELEASE(owner);
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// EditorAppCore class initialization
|
||||||
|
//
|
||||||
|
extern "C" NS_DOM nsresult NS_InitEditorAppCoreClass(nsIScriptContext *aContext, void **aPrototype)
|
||||||
|
{
|
||||||
|
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||||
|
JSObject *proto = nsnull;
|
||||||
|
JSObject *constructor = nsnull;
|
||||||
|
JSObject *parent_proto = nsnull;
|
||||||
|
JSObject *global = JS_GetGlobalObject(jscontext);
|
||||||
|
jsval vp;
|
||||||
|
|
||||||
|
if ((PR_TRUE != JS_LookupProperty(jscontext, global, "EditorAppCore", &vp)) ||
|
||||||
|
!JSVAL_IS_OBJECT(vp) ||
|
||||||
|
((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) ||
|
||||||
|
(PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) ||
|
||||||
|
!JSVAL_IS_OBJECT(vp)) {
|
||||||
|
|
||||||
|
if (NS_OK != NS_InitBaseAppCoreClass(aContext, (void **)&parent_proto)) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
proto = JS_InitClass(jscontext, // context
|
||||||
|
global, // global object
|
||||||
|
parent_proto, // parent proto
|
||||||
|
&EditorAppCoreClass, // JSClass
|
||||||
|
EditorAppCore, // JSNative ctor
|
||||||
|
0, // ctor args
|
||||||
|
EditorAppCoreProperties, // proto props
|
||||||
|
EditorAppCoreMethods, // proto funcs
|
||||||
|
nsnull, // ctor props (static)
|
||||||
|
nsnull); // ctor funcs (static)
|
||||||
|
if (nsnull == proto) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) {
|
||||||
|
proto = JSVAL_TO_OBJECT(vp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aPrototype) {
|
||||||
|
*aPrototype = proto;
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Method for creating a new EditorAppCore JavaScript object
|
||||||
|
//
|
||||||
|
extern "C" NS_DOM nsresult NS_NewScriptEditorAppCore(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn)
|
||||||
|
{
|
||||||
|
NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptEditorAppCore");
|
||||||
|
JSObject *proto;
|
||||||
|
JSObject *parent;
|
||||||
|
nsIScriptObjectOwner *owner;
|
||||||
|
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
nsIDOMEditorAppCore *aEditorAppCore;
|
||||||
|
|
||||||
|
if (nsnull == aParent) {
|
||||||
|
parent = nsnull;
|
||||||
|
}
|
||||||
|
else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) {
|
||||||
|
if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) {
|
||||||
|
NS_RELEASE(owner);
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
NS_RELEASE(owner);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_OK != NS_InitEditorAppCoreClass(aContext, (void **)&proto)) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = aSupports->QueryInterface(kIEditorAppCoreIID, (void **)&aEditorAppCore);
|
||||||
|
if (NS_OK != result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a js object for this class
|
||||||
|
*aReturn = JS_NewObject(jscontext, &EditorAppCoreClass, proto, parent);
|
||||||
|
if (nsnull != *aReturn) {
|
||||||
|
// connect the native object to the js object
|
||||||
|
JS_SetPrivate(jscontext, (JSObject *)*aReturn, aEditorAppCore);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NS_RELEASE(aEditorAppCore);
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
|
@ -0,0 +1,303 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet href="xul.css" type="text/css"?>
|
||||||
|
|
||||||
|
<!DOCTYPE window>
|
||||||
|
|
||||||
|
<xul:window xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||||
|
xmlns:xul ="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||||
|
xul:onConstruction="Startup()">
|
||||||
|
|
||||||
|
<html:style>
|
||||||
|
#header {
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 75px;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: auto;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
#main {
|
||||||
|
position: fixed;
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
top: 75px;
|
||||||
|
right: 0;
|
||||||
|
bottom: 34px;
|
||||||
|
left: 0;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 2px .5em;
|
||||||
|
border: solid 0px black;
|
||||||
|
}
|
||||||
|
#footer {
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 34px;
|
||||||
|
top: auto;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
margin-top: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: green;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
</html:style>
|
||||||
|
|
||||||
|
<html:script>
|
||||||
|
function Startup()
|
||||||
|
{
|
||||||
|
dump("Doing Startup...\n");
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
dump("Looking up EditorAppCore...\n");
|
||||||
|
if (appCore == null) {
|
||||||
|
dump("Creating EditorAppCore...\n");
|
||||||
|
appCore = new EditorAppCore();
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("EditorAppCore has been created.\n");
|
||||||
|
appCore.Init("EditorAppCore");
|
||||||
|
appCore.setContentWindow(window.frames[0]);
|
||||||
|
appCore.setWebShellWindow(window);
|
||||||
|
appCore.setToolbarWindow(window);
|
||||||
|
dump("Adding EditorAppCore to AppCoreManager...\n");
|
||||||
|
XPAppCoresManager.Add(appCore);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has already been created! Why?\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function DoDisableButtons()
|
||||||
|
{
|
||||||
|
// Find buttons in the UI and disable them
|
||||||
|
dump("Browser disabling buttons\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function DoEnableButtons()
|
||||||
|
{
|
||||||
|
// Find buttons in the UI and enable them
|
||||||
|
dump("Browser enabling buttons\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function EditorBold()
|
||||||
|
{
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("Going Back\n");
|
||||||
|
appCore.setAttribute("bold", "");
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has not been created!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function BrowserForward()
|
||||||
|
{
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("Going Forward\n");
|
||||||
|
appCore.forward();
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has not been created!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EditorNewWindow()
|
||||||
|
{
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("Opening New Window\n");
|
||||||
|
appCore.newWindow();
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has not been created!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EditorUndo()
|
||||||
|
{
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("Opening New Window\n");
|
||||||
|
appCore.undo();
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has not been created!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function BrowserClose()
|
||||||
|
{
|
||||||
|
dump("BrowserClose\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function BrowserExit()
|
||||||
|
{
|
||||||
|
appCore = XPAppCoresManager.Find("EditorAppCore");
|
||||||
|
if (appCore != null) {
|
||||||
|
dump("Exiting\n");
|
||||||
|
appCore.exit();
|
||||||
|
} else {
|
||||||
|
dump("EditorAppCore has not been created!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EditorPrintPreview() {
|
||||||
|
var toolkitCore = XPAppCoresManager.Find("ToolkitCore");
|
||||||
|
if (!toolkitCore) {
|
||||||
|
toolkitCore = new ToolkitCore();
|
||||||
|
if (toolkitCore)
|
||||||
|
toolkitCore.Init("ToolkitCore");
|
||||||
|
}
|
||||||
|
if (toolkitCore)
|
||||||
|
toolkitCore.ShowWindow("resource:/res/samples/printsetup.html", window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</html:script>
|
||||||
|
|
||||||
|
<xul:broadcaster id="canGoBack"/>
|
||||||
|
<xul:broadcaster id="canGoForward"/>
|
||||||
|
<xul:broadcaster id="canReload"/>
|
||||||
|
<xul:broadcaster id="canStop"/>
|
||||||
|
<xul:broadcaster id="canPrint"/>
|
||||||
|
|
||||||
|
<xul:menubar>
|
||||||
|
<xul:menu name="File">
|
||||||
|
<xul:menuitem name="New Window" onClick="EditorNewWindow();"/>
|
||||||
|
<xul:menuitem name="Change Icons" onClick="BrowserPrintPreview();"/>
|
||||||
|
<xul:separator />
|
||||||
|
<xul:menuitem name="Print Setup" onClick="EditorPrintPreview();"/>
|
||||||
|
<xul:menuitem name="Print Preview" onClick="BrowserPrintPreview();"/>
|
||||||
|
<xul:menuitem name="Print" onClick=""/>
|
||||||
|
<xul:separator />
|
||||||
|
<xul:menuitem name="Close" onClick=""/>
|
||||||
|
<xul:menuitem name="Exit" onClick="BrowserExit();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Edit">
|
||||||
|
<xul:menuitem name="Undo" onClick="EditorUndo();"/>
|
||||||
|
<xul:separator />
|
||||||
|
<xul:menuitem name="Cut" onClick="EditorCut();"/>
|
||||||
|
<xul:menuitem name="Copy" onClick="EditorCopy();"/>
|
||||||
|
<xul:menuitem name="Paste" onClick="EditorPaste();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="View">
|
||||||
|
<xul:menuitem name="Hide Composition Toolbar" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Hide Format Toolbar" onClick="BrowserForward();" />
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Insert">
|
||||||
|
<xul:menuitem name="Link..." onClick="MakeDialog();"/>
|
||||||
|
<xul:menuitem name="Target..." onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Image..." onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Horizontal Line" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Table" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="HTML Tag..." onClick="BrowserBack();"/>
|
||||||
|
<xul:separator />
|
||||||
|
<xul:menuitem name="Line Break" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Break Below Image(s)" onClick="BrowserBack();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Format">
|
||||||
|
<xul:menuitem name="Font" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Size" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Style" onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Color..." onClick="BrowserBack();"/>
|
||||||
|
<xul:menuitem name="Remove All Style(s)" onClick="BrowserBack();"/>
|
||||||
|
<xul:separator />
|
||||||
|
<xul:menuitem name="Heading" onClick="BrowserBack();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Tools">
|
||||||
|
<xul:menuitem name="Spell Check" onClick="BrowserBack();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Communicator">
|
||||||
|
<xul:menuitem name="Navigator" onClick="BrowserBack();"/>
|
||||||
|
</xul:menu>
|
||||||
|
<xul:menu name="Help">
|
||||||
|
<xul:menuitem name="About" onClick="BrowserBack();"/>
|
||||||
|
</xul:menu>
|
||||||
|
|
||||||
|
</xul:menubar>
|
||||||
|
|
||||||
|
<html:div html:id="header">
|
||||||
|
<xul:toolbox>
|
||||||
|
|
||||||
|
<xul:toolbar>
|
||||||
|
<html:button id="cut" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Cut.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="copy" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Copy.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="paste" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Paste.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="Find" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Find.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="link" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Link.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="target" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Target.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="image" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Image.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="hline" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_HLine.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="table" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Table.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="spell" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Spell.gif"/>
|
||||||
|
</html:button>
|
||||||
|
</xul:toolbar>
|
||||||
|
|
||||||
|
<xul:toolbar>
|
||||||
|
<html:button id="undo" onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Undo.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button id="bold" onClick="EditorBold()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Bold.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Underline.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Indent.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Dedent.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Bullets.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Numbers.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Left.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Center.gif"/>
|
||||||
|
</html:button>
|
||||||
|
<html:button onClick="EditorUndo()">
|
||||||
|
<html:img src="resource:/res/toolbar/ED_Right.gif"/>
|
||||||
|
</html:button>
|
||||||
|
</xul:toolbar>
|
||||||
|
|
||||||
|
|
||||||
|
</xul:toolbox>
|
||||||
|
</html:div>
|
||||||
|
|
||||||
|
<html:div html:id="main">
|
||||||
|
<html:iframe html:name="content" html:src="EditorInitPage.html" html:width="100%" html:height="450"></html:iframe>
|
||||||
|
</html:div>
|
||||||
|
|
||||||
|
<html:div html:id="footer">
|
||||||
|
<html:iframe html:name="status" html:src="status.html" html:width="100%" html:height="34"></html:iframe>
|
||||||
|
</html:div>
|
||||||
|
|
||||||
|
</xul:window>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Gecko Editor Startup Page</title>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#FFFFFF" text="#000000">
|
||||||
|
|
||||||
|
<h1>Welcome to the Little Feat - The Gecko Editor Test Bed</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
После Ширина: | Высота: | Размер: 876 B |
После Ширина: | Высота: | Размер: 860 B |
После Ширина: | Высота: | Размер: 855 B |
После Ширина: | Высота: | Размер: 933 B |
После Ширина: | Высота: | Размер: 908 B |
После Ширина: | Высота: | Размер: 916 B |
После Ширина: | Высота: | Размер: 867 B |
После Ширина: | Высота: | Размер: 920 B |
После Ширина: | Высота: | Размер: 859 B |
После Ширина: | Высота: | Размер: 916 B |
После Ширина: | Высота: | Размер: 867 B |
После Ширина: | Высота: | Размер: 871 B |
После Ширина: | Высота: | Размер: 857 B |
После Ширина: | Высота: | Размер: 893 B |
После Ширина: | Высота: | Размер: 868 B |
После Ширина: | Высота: | Размер: 913 B |
После Ширина: | Высота: | Размер: 857 B |
После Ширина: | Высота: | Размер: 939 B |
После Ширина: | Высота: | Размер: 911 B |
После Ширина: | Высота: | Размер: 894 B |
После Ширина: | Высота: | Размер: 882 B |
После Ширина: | Высота: | Размер: 878 B |