A Proposal: The YAHOO.ext.Domino Framework
Taking the YAHOO.ext.Domino.View idea further we could go on to add a whole framework with which we can take Notes client applications to the web. Easily.
We could start by defining an object that all the others extend:
var db = new YAHOO.ext.Domino.Database();
Now we can do things like:
alert( db.title + " is at " + db.path + " on " + db.server);
Or what about:
db.search("find me", { view:"AnotherViewName", fuzzy: true, max:250} );
On Monday I showed you a demo database that loaded a frameset-like layout using Jack Slocum's BorderLayout code. Then, using my own code, loaded a Notes view "on the fly". Taking this one step further we could go on to load the navigation element of the page with an Outline object.
var outline = new YAHOO.ext.Domino.Outline("OutlineName") outline.render("ContainerID");
This would load JSON for the Outline using a ?ReadDesign method and the render() method would convert it to a tree-based set of links in the specified navigation area.
This would have us looking at something more like a Notes app. What else is there though? Well, Forms and documents. Like, obviously.
So, let's extend the database object with a Form:
var frm = new YAHOO.ext.Domino.Form("MyFormName");
Methods of this object could be .create() to open a blank one in a new tab and .validate() to call a ported version of my validator functionality.
Extending the Form object there could be a Document object.
var myDocument = new YAHOO.ext.Domino.Document()
Opened either from a Database method:
myDocument = db.getDocumentByUNID("UNID");
Or a View method:
myDocument = view.getDocumentByKey("UNID").open();
The .open() method of the document could be used to launch a tab and place the document in there. You could pass it parameters such as "view to use" (default "/0/") and whether to force edit mode.
Still on documents, consider the following code:
if (myDocument.isBeingEdited) { alert(myDocument.DocumentUNID + " is in edit mode already"); }else{ myDocument.edit() }
And this:
if (!myDocument){ alert("Can't find the document") ; } else { myDocument.delete( { prompt: "Are you sure?", backto: "/" } ); }
We could go even further and port my name picking widget and have it interface with the specified address book.
nab = new YAHOO.ext.Domino.AddressBook("names.nsf"); nab.ChooseName();
Other things we could add include a session object with a username property and a login/out method. What about @PickList and all the other nice-to-haves? The possibilities are almost endless.
Lots of this could turn out to be fanciful dreaming and just not possible with old stuck in its way Domino. It's all a challenge though and that's what I love about my choice in career — there's always something new and exciting round the corner.
Very good idea Jake, it would be great if this Yahoo.ext.Domino framework could be operationnal ...
The idea is great. I've been working on something similar using Prototype and that helped my team a lot.
However, you said something like "This would have us looking at something more like a Notes app". Personally, my direction is trying to build web apps that do not look like a notes applications: Displaying documents as lists and using comboboxes to filter categories, using tab-menu navigation.... it's a pity I can't show you guys an online demo.
Are you volunteering to be the master chef for this open source project? Sounds like fun.
Great minds and all that. Jack Ratliff is rewriting his OpenNTF Domino Web Tools project to work off Yahoo.ext as well. Maybe you guys should collaborate on this.
Personally, I'm waiting for the jQuery version of EXT over the Yahoo version (that was an exciting announcement), but that's just 'cause I'm a nut about the size of these libraries.
Really Cool idea!
I'm very interested in the YAHOO.ext.Domino Framework. Could I colaborate in any way? Feel free to contact with me, please.
As far as open source goes I'm not sure how to play it. As with everything I do, if people have ideas, enhancements or bug reports, I'm all ears. Whether or not I want to make it a proper team effort I just can't decide.
Most of what I do is to learn and because I enjoy playing. I know I could save a load of time and effort enlisting help, but still can't help thinking I want to do it all alone.
From what I've seen of Jack Ratcliff's version it's very similar to what I would end up doing and there's the obvious overlaps. My time might well be better spent helping Jack, but I have my own interests to look after and the codestore brand to keep alive.
What it boils down to is that I'm a control freak and want to have all the credit for myself ;o)
"However, you said something like "This would have us looking at something more like a Notes app". "
I think what Jake is saying here is to look at developing applications for the web using techniques and formatting that are familiar to creating Notes structures, not designing applications that look like Notes. The very possibility of intentionally building a Domino application that looks like a "traditional" Notes application is something that I think would cause someone like Jake to break out in hives, pull all of his hair out with tweezers, and consider a career change to something involving juggling cutlery dripping with molten tar. I mean this as a compliment, of course.
I think that teamwork here is unavoidable. What you're suggesting is really cool, but it's also really big. If you can handle it all yourself, then by all means, go for it. But, it's a lot of work to do, and you'll likely find it very overwhelming.
This is pretty much the end goal for the Domino YUI Project :P Though I have been thinking about waiting for the jQuery version and dropping the whole YUI piece to make things a little lighter.
Joel. The concept of this Domino web framework - to me at least - is to make it really easy to web-enable client-based apps. Even with limited JavaScript knowledge. All you need is a load of library files bolted to your DB and a few lines of JS to create something that looks and behaves a lot like its client counterpart. The fact that the layout is like a Notes client app might not thrill me but it would make the transition to the web a lot less painful for the developer used to the client.
With the toolkit I could try and sell myself as a service to quickly web-enable of legacy Notes app.
I've been tracking Jack Slocum's efforts for some time and I know that Jake or Jack Ratliff are not the only two implementing EXT (drop the Yahoo portion) library with Domino.
I'd like to see a number of Domino implementations using EXT in different ways. If you do put together a demo, at least post the link for the example on the EXT discussion forum.
Jake, you said it perfectly and I couldn't agree more: "The concept of this Domino web framework - to me at least - is to make it really easy to web-enable client-based apps. Even with limited JavaScript knowledge."
I view this as a bit of a holy grail as it allows power users, who generally can pick up Notes client development pretty well, to get their stuff out to the web, which generally is not a task for the inexperienced coder. I'm working on a "simple" Notes client framework db that these folks could easily customize, and I would like to be able to add in something like this which would allow a web representation of their database to "just work" without additional coding or customization.
As for making use of the OpenNTF collaboration framework, you don't necessarily have to give up control of the code. And you might even find that making your code available via an OpenNTF project gives added exposure to the CodeStore brand. There are bug reporting and feature request elements of OpenNTF which you might find useful even if you remain the only developer on the project.
There are concerns about effort overlap with Jack Ratcliff's work, but the nature of this code is that it is an encapsulated module that just "bolts on" to an existing Notes DB. It should therefore be a (relatively) simple matter for a developer to swap out your code for his, or vice versa.
Collaboration or competition, there will likely still be plenty of idea sharing and the result will be better code all 'round.
Keep up the good work!
Like just about everyone else, I think this is a great thing to pursue. There are three things I would consider, were I you, Jake, as far as deciding how to proceed.
What is most important to you:
the learning experience?
meeting a certain time frame?
ensuring the product is "best of the best"?
I think you can see where that leads. If your focus is purely on the joy of engineering the solution, there's no reason to make it an open source project as that has a certain amount of overhead in the form of time to coordinate the efforts of others. To that end, you need a project plan so work can be broken out - which means a good detailed design up front.
If you want to meet a certain time frame and aren't so focussed on solving all the challenges yourself, having a team pitch in might accelerate the effort but there is still the time overhead.
The "best of both worlds" approach is the last item on my list above. If you want "best of the best", there's usually a great deal of truth in "two (or more) heads are better than one".
If you do decide you would like to do the team approach, I'd be happy to lend my skill as a project manager to help write up the design and break it into a project. I think this could be a great collaborative effort amongst all the great minds here.
That said, I am a big fan of OpenNTF - the only thing missing from the general approach there is separating the role of lead developer from project management. It's very difficult to play both roles on a big project and still be effective at each. Not saying OpenNTF isn't the place to do this - it's a decent enough existing tool and it gets plenty of traffic from your target market.
As far as the wellbeing of Rockall and the Codestore brand, I think making this Open Source with a clear pointer back to you as the goto man for implementation services would leverage the free advertising aspect of Open Source with the entrepreneurial (Red Hat?) support model.
Either way - best of luck. If I can be of any help, just let me know.
This is super cool. There is at least three of us now building a framework to aid Domino developers in building *web* applications that run on Domino.
Jake, what you are proposing is very close to what I am doing as well as Rich Waters is doing with Domino YUI. I have spent most of my time this past month on getting views and outlines to work. Categorized views and views with response docs are going to be tough but I think they are doable. The toughest thing I see is docs with readers fields. Yuck!
Anyway, I'm also building a JavaScript Class library to represent domino objects (NoteSession, NotesView, NotesDatabase, NotesDocument, NotesUIWorkspace, NotesUIView, NotesUIDocument, etc). This will allow developers to do some advanced client-side web development.
Also, for those of you who think the three of us should team up and collaborate on this, I think that its best we build each framework on our own. We can still share code and ideas but this way neither of us has to wait on one of the other two, and you, as the development community, will have at least three choices of frameworks. Choice is good, right? :)
As you all seem to use Domino mostly for developping web applications maybe you should use Couchdb in the future. It is free, it is designed to work on the web and it is a bit like Domino (document oriented)