      1 /*
      2  *  Copyright (C) 2008-2009 WaveMaker Software, Inc.
      3  *
      4  *  This file is part of the WaveMaker Client Runtime.
      5  *
      6  *  Licensed under the Apache License, Version 2.0 (the "License");
      7  *  you may not use this file except in compliance with the License.
      8  *  You may obtain a copy of the License at
      9  *
     10  *      http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  *  Unless required by applicable law or agreed to in writing, software
     13  *  distributed under the License is distributed on an "AS IS" BASIS,
     14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  *  See the License for the specific language governing permissions and
     16  *  limitations under the License.
     17  */
     18 dojo.provide("wm.base.widget.dijit.Dijit");
     19 dojo.require("wm.base.widget.Box");
     20 // include tooltip so the master tooltip is created right away
     21 dojo.require("dijit.Tooltip");
     22
     23 // style dijit a11y node to hidden so that it does not interfere with wm.box
     24 // a11yTestNode is created in dijit.util.wai and if it is changed to be
     25 // style="visibility: hidden" there then this code can be removed
     26 // FIXME: make a dojo ticket to make this happen
     27 // hide master tooltip node also
     28 dojo.addOnLoad(function() {
     29 	var invisible = function(inId) {
     30 		var n = dojo.byId(inId);
     31 		n&&(n.style.visibility='hidden');
     32 	}
     33 	invisible('a11yTestNode');
     34 });
     35
     36 // Note: dijit events and properties must be exposed manually.
     37 // This gives finer control over what is exposed via our API.
     38 /**
     39 	Wrapper class to contain a Dijit.
     40 	@name wm.Dijit
     41 	@class
     42 	@extends wm.Box
     43 */
     44 dojo.declare("wm.Dijit", wm.Box, {
     45 	/** @lends wm.Dijit.prototype */
     46 	dijitClass: null,
     47 	// FIXME: ignore props not intended for dijit
     48 	nonDijitProps: {
     49 		name: 1,
     50 		flex: 1,
     51 		box: 1,
     52 		left: 1,
     53 		top: 1,
     54 		width: 1,
     55 		height: 1,
     56 		owner: 1,
     57 		parent: 1,
     58 		publishClass: 1,
     59 		dijitClass: 1,
     60 		domNode: 1,
     61 		id: 1
     62 	},
     63 	prepare: function(inProps) {
     64 		this.dijitProps = {};
     65 		for (var i in inProps)
     66 			if (!(i in this.nonDijitProps))
     67 				this.dijitProps[i] = inProps[i];
     68 		this.inherited(arguments);
     69 	},
     70 	destroy: function() {
     71 		this.dijit.destroy();
     72 		this.inherited(arguments);
     73 	},
     74 	setDomNode: function(inDomNode) {
     75 		inDomNode = this.initDijit(inDomNode);
     76 		this.inherited(arguments);
     77 	},
     78 	initDijit: function(inDomNode) {
     79 		var n = document.createElement('div');
     80 		inDomNode.appendChild(n);
     81 		var p = dojo.mixin({srcNodeRef: n}, this.getProperties());
     82 		this.dijit = this.dijitClass ? new this.dijitClass(p) : null;
     83 		this.setEvents();
     84 		return inDomNode;
     85 	},
     86 	// return properties intended for the dijit
     87 	getProperties: function() {
     88 		return this.dijitProps;
     89 	},
     90 	// connect our events to dijit events of the same name
     91 	setEvents: function() {
     92 		for (var n in this.dijit) {
     93 			// only if n starts with "on" (indexOf == 0)
     94 			if (!n.indexOf("on")) {
     95 				// we match "_on<Event>" first
     96 				var e = '_' + n;
     97 				if (!this[e])
     98 					// we match "on<Event>" second
     99 					e = n;
    100 				// connect our facade event to the dijit event
    101 				if (this[e])
    102 					this.connect(this.dijit, n, this, e);
    103 			}
    104 		}
    105 	}
    106 });
    107
    108 wm.Object.extendSchema(wm.Dijit, {
    109 	/*dojoAttachEvent: {ignore: 1},
    110 	dojoAttachPoint: {ignore: 1},
    111 	baseClass: {ignore: 1},
    112 	widgetsInTemplate: {ignore: 1},
    113 	templateString: {ignore: 1},
    114 	alt: {ignore: 1},
    115 	dir: {ignore: 1},
    116 	type: {ignore: 1},
    117 	waiRole: {ignore: 1},
    118 	waiState: {ignore: 1},
    119 	intermediateChanges:  {ignore: 1},*/
    120 	box: {ignore: 1}
    121 });
    122
    123 dojo.declare("wm.DijitWrapper", wm.Dijit, {
    124 });
    125