diff --git a/api/CommonAPI/sharedglobal/3_xhr.js b/api/CommonAPI/sharedglobal/3_xhr.js
index 53db9dd..ed77ec7 100644
--- a/api/CommonAPI/sharedglobal/3_xhr.js
+++ b/api/CommonAPI/sharedglobal/3_xhr.js
@@ -179,8 +179,11 @@
blackberry.transport.call(url, opts, function (response) {
if (callback(response)) {
- this.blackberry.transport.poll(url, opts, callback);
- }
+ setTimeout(
+ function() { this.blackberry.transport.poll(url, opts, callback); },
+ 0
+ );
+ }
});
};
})();
diff --git a/api/app/src/main/java/blackberry/app/ExitFunction.java b/api/app/src/main/java/blackberry/app/ExitFunction.java
index c936460..3a21fa7 100644
--- a/api/app/src/main/java/blackberry/app/ExitFunction.java
+++ b/api/app/src/main/java/blackberry/app/ExitFunction.java
@@ -35,6 +35,7 @@ public Object execute( Object thiz, Object[] args ) {
static class ExitRunner implements Runnable {
public void run() {
+ System.gc(); // MemoryMaid
System.exit( 0 );
}
}
diff --git a/api/bbm/lib/net_rim_bb_qm_platform.jar b/api/bbm/lib/net_rim_bb_qm_platform.jar
index 1a173ba..34543e7 100644
Binary files a/api/bbm/lib/net_rim_bb_qm_platform.jar and b/api/bbm/lib/net_rim_bb_qm_platform.jar differ
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformContextListenerImpl.java b/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformContextListenerImpl.java
index 3e2f3bd..5949ed2 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformContextListenerImpl.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformContextListenerImpl.java
@@ -17,9 +17,15 @@
import net.rim.blackberry.api.bbm.platform.BBMPlatformContext;
import net.rim.blackberry.api.bbm.platform.BBMPlatformContextListener;
+import net.rim.blackberry.api.bbm.platform.profile.BBMPlatformContact;
+import net.rim.blackberry.api.bbm.platform.profile.Presence;
+import net.rim.blackberry.api.bbm.platform.profile.UserProfile;
import net.rim.blackberry.api.bbm.platform.profile.UserProfileBoxItem;
+import net.rim.device.api.script.Scriptable;
import net.rim.device.api.script.ScriptableFunction;
+import blackberry.bbm.platform.self.SelfNamespace;
import blackberry.bbm.platform.self.profilebox.ScriptableProfileBoxItem;
+import blackberry.bbm.platform.users.BBMPlatformUser;
import blackberry.bbm.platform.util.ConstantsUtil;
import blackberry.bbm.platform.util.Util;
@@ -60,7 +66,7 @@ public void accessChanged(boolean isAccessAllowed, int code) {
Util.dispatchCallback(callback, args);
}
- public void appInvoked(int reason, Object param) {
+ public void appInvoked(int reason, Object param, Presence user) {
final ScriptableFunction callback;
try {
callback = (ScriptableFunction) _platform.getField(BBMPlatformNamespace.EVENT_ON_APP_INVOKED);
@@ -68,15 +74,47 @@ public void appInvoked(int reason, Object param) {
return;
}
- final Object[] args;
- if(reason == BBMPlatformContext.INVOKE_PROFILE_BOX_ITEM) {
- final ScriptableProfileBoxItem scriptItem =
- new ScriptableProfileBoxItem(_platform.getProfileBox(), (UserProfileBoxItem) param);
- args = new Object[] { "profilebox", scriptItem };
+ // Get reason string and scriptable param
+ final String reasonStr;
+ final Object scriptableParam;
+ switch(reason) {
+ case BBMPlatformContext.INVOKE_PROFILE_BOX_ITEM:
+ reasonStr = "profilebox";
+ scriptableParam = new ScriptableProfileBoxItem(_platform.getProfileBox(), (UserProfileBoxItem) param);
+ break;
+ case BBMPlatformContext.INVOKE_PROFILE_BOX:
+ reasonStr = "profileboxtitle";
+ scriptableParam = Scriptable.UNDEFINED;
+ break;
+ case BBMPlatformContext.INVOKE_PERSONAL_MESSAGE:
+ reasonStr = "personalmessage";
+ scriptableParam = (String) param;
+ break;
+ case BBMPlatformContext.INVOKE_CHAT_MESSAGE:
+ reasonStr = "chatmessage";
+ scriptableParam = Scriptable.UNDEFINED;
+ break;
+ default:
+ // Don't invoke if we don't know what to do with the reason
+ return;
+ }
+
+ // Get scriptable user: either self namespace of BBMPlatformUser instance
+ final Object scriptableUser;
+ if(user instanceof UserProfile) {
+ scriptableUser = SelfNamespace.getInstance();
+ } else if(user instanceof BBMPlatformContact) {
+ scriptableUser = new BBMPlatformUser(user);
} else {
- return;
+ scriptableUser = Scriptable.UNDEFINED;
}
+ final Object[] args = {
+ reasonStr,
+ scriptableParam,
+ scriptableUser,
+ };
Util.dispatchCallback(callback, args);
}
+
}
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformNamespace.java b/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformNamespace.java
index 2e07e7a..1b60388 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformNamespace.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/BBMPlatformNamespace.java
@@ -27,6 +27,7 @@
import blackberry.bbm.platform.io.IONamespace;
import blackberry.bbm.platform.io.MessagingServiceListenerImpl;
import blackberry.bbm.platform.self.SelfNamespace;
+import blackberry.bbm.platform.settings.SettingsNamespace;
import blackberry.bbm.platform.ui.UINamespace;
import blackberry.bbm.platform.users.UsersNamespace;
import blackberry.bbm.platform.util.ConstantsUtil;
@@ -43,6 +44,7 @@ public final class BBMPlatformNamespace extends Scriptable {
public static final String FUNC_REGISTER = "register";
public static final String FUNC_REQUEST_USER_PERMISSION = "requestUserPermission";
+ public static final String FUNC_SHOW_OPTIONS = "showBBMAppOptions";
public static final String FIELD_ENVIRONMENT = "environment";
public static final String EVENT_ON_APP_INVOKED = "onappinvoked";
public static final String EVENT_ON_ACCESS_CHANGED = "onaccesschanged";
@@ -99,6 +101,8 @@ public Object getField(String name) throws Exception {
return new RegisterFunction();
} else if(name.equals(BBMPlatformNamespace.FUNC_REQUEST_USER_PERMISSION)) {
return new RequestUserPermissionFunction();
+ } else if(name.equals(BBMPlatformNamespace.FUNC_SHOW_OPTIONS)) {
+ return new ShowOptionsFunction();
} else if(name.equals(SelfNamespace.NAME)) {
return SelfNamespace.getInstance();
} else if(name.equals(UsersNamespace.NAME)) {
@@ -107,6 +111,8 @@ public Object getField(String name) throws Exception {
return IONamespace.getInstance();
} else if(name.equals(UINamespace.NAME)) {
return UINamespace.getInstance();
+ } else if(name.equals(SettingsNamespace.NAME)) {
+ return SettingsNamespace.getInstance();
} else if(_wFields.hasField(name)){
return _wFields.getField(name);
} else if(name.equals(FIELD_ENVIRONMENT)) {
@@ -126,22 +132,42 @@ private Object getEnvironment() {
} catch(ControlledAccessException e) {
return UNDEFINED;
}
-
}
private class RegisterFunction extends ScriptableFunctionBase {
- public static final String OPTIONS_FIELD_UUID = "uuid";
+ public static final String OPTIONS_FIELD_UUID = "uuid";
+ public static final String OPTIONS_FIELD_SHARECONTENTSPLAT = "shareContentSplat";
protected Object execute(Object thiz, Object[] args) throws Exception {
final Object onAccessChanged = BBMPlatformNamespace.this.getField(EVENT_ON_ACCESS_CHANGED);
if(onAccessChanged.equals(UNDEFINED)) {
- throw new IllegalStateException("blackberry.bbm.platform.onAccessChanged == undefined");
+ throw new IllegalStateException("blackberry.bbm.platform.onaccesschanged == undefined");
}
final Scriptable options = (Scriptable) args[0];
final String uuid = (String) options.getField(OPTIONS_FIELD_UUID);
- final BBMPlatformApplication bbmApp = new BBMPlatformApplication(uuid);
+
+ // Get optional shareContentSplat property
+ final Object shareContentSplatObj = options.getField(OPTIONS_FIELD_SHARECONTENTSPLAT);
+ boolean shareContentSplat;
+ try {
+ shareContentSplat = ((Boolean) shareContentSplatObj).booleanValue();
+ } catch(Exception e) {
+ shareContentSplat = false;
+ }
+ final boolean finalShareContentSplat = shareContentSplat;
+
+ final BBMPlatformApplication bbmApp = new BBMPlatformApplication(uuid) {
+ public int getDefaultSettings() {
+ if(finalShareContentSplat) {
+ return super.getDefaultSettings() | BBMPlatformContext.SETTING_SHARECONTENT_SPLAT;
+ } else {
+ return super.getDefaultSettings();
+ }
+
+ }
+ };
Dispatcher.getInstance().dispatch(new DispatchableEvent(null) {
protected void dispatch() {
@@ -196,4 +222,33 @@ protected FunctionSignature[] getFunctionSignatures() {
};
}
} // RequestUserPermissionFunction
+
+ private class ShowOptionsFunction extends ScriptableFunctionBase {
+
+ protected Object execute(Object thiz, Object[] args) throws Exception {
+
+ final ScriptableFunction onComplete = (ScriptableFunction) args[0];
+
+ UiApplication.getUiApplication().invokeLater(new Runnable() {
+ public void run() {
+ UiApplication.getUiApplication().invokeLater(new Runnable() {
+ public void run() {
+ _bbmpContext.requestAppSettings();
+ Util.dispatchCallback(onComplete, null);
+ }
+ });
+ }
+ });
+
+ return UNDEFINED;
+ }
+
+ protected FunctionSignature[] getFunctionSignatures() {
+ FunctionSignature sig1 = new FunctionSignature(1);
+ sig1.addParam(ScriptableFunction.class, true);
+ return new FunctionSignature[] {
+ sig1
+ };
+ }
+ } // ShowOptionsFunction
}
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/io/MessagingServiceListenerImpl.java b/api/bbm/src/main/java/blackberry/bbm/platform/io/MessagingServiceListenerImpl.java
index 8608959..fdfb426 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/io/MessagingServiceListenerImpl.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/io/MessagingServiceListenerImpl.java
@@ -15,6 +15,7 @@
*/
package blackberry.bbm.platform.io;
+import java.util.Date;
import java.util.Hashtable;
import net.rim.blackberry.api.bbm.platform.io.BBMPlatformChannel;
@@ -28,6 +29,7 @@
import net.rim.blackberry.api.bbm.platform.service.MessagingServiceListener;
import net.rim.device.api.script.ScriptableFunction;
import blackberry.bbm.platform.users.BBMPlatformUser;
+import blackberry.bbm.platform.users.UsersNamespace;
import blackberry.bbm.platform.util.ConstantsUtil;
import blackberry.bbm.platform.util.Util;
import blackberry.core.threading.DispatchableEvent;
@@ -230,4 +232,21 @@ public void onMessagesExpired(BBMPlatformContact contact, BBMPlatformData[] data
};
Util.dispatchCallback(callback, args);
}
+
+ public void onShareContentReceived(BBMPlatformContact contact, String description, BBMPlatformData content, long timestamp) {
+ final ScriptableFunction callback;
+ try {
+ callback = (ScriptableFunction) UsersNamespace.getInstance().getField(UsersNamespace.EVENT_ON_SHARE_CONTENT);
+ } catch(Exception e) {
+ return;
+ }
+ final Object[] args = {
+ new BBMPlatformUser(contact),
+ content.getDataAsString(),
+ description,
+ new Date(timestamp),
+ };
+ Util.dispatchCallback(callback, args);
+ }
+
}
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/self/SelfNamespace.java b/api/bbm/src/main/java/blackberry/bbm/platform/self/SelfNamespace.java
index 0f30a9f..bb0c7ca 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/self/SelfNamespace.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/self/SelfNamespace.java
@@ -107,7 +107,7 @@ protected void dispatch() {
protected FunctionSignature[] getFunctionSignatures() {
FunctionSignature sig1 = new FunctionSignature(2);
- sig1.addParam(String.class, true);
+ sig1.addNullableParam(String.class, true);
sig1.addParam(ScriptableFunction.class, true);
return new FunctionSignature[] {
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/self/profilebox/ProfileBoxNamespace.java b/api/bbm/src/main/java/blackberry/bbm/platform/self/profilebox/ProfileBoxNamespace.java
index 9e61eec..0e85801 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/self/profilebox/ProfileBoxNamespace.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/self/profilebox/ProfileBoxNamespace.java
@@ -15,6 +15,8 @@
*/
package blackberry.bbm.platform.self.profilebox;
+import java.nio.ByteBuffer;
+
import net.rim.blackberry.api.bbm.platform.profile.UserProfile;
import net.rim.blackberry.api.bbm.platform.profile.UserProfileBox;
import net.rim.blackberry.api.bbm.platform.profile.UserProfileBoxAccessException;
@@ -117,8 +119,9 @@ protected Object execute(Object thiz, Object[] args) throws Exception {
if(iconURI.equals(UNDEFINED)) {
iconID = -1;
} else {
- final Bitmap icon = Util.requestBitmap((String) iconURI);
- iconID = Math.abs(icon.hashCode()); // icon ID is hash code of bitmap
+ final byte[] iconBytes = Util.requestBitmapBytes((String) iconURI);
+ final Bitmap icon = Bitmap.createBitmapFromBytes(iconBytes, 0, iconBytes.length, 1);
+ iconID = Math.abs(ByteBuffer.wrap(iconBytes).hashCode()); // icon ID is hash code of bitmap
if(! _profileBox.isIconRegistered(iconID)) {
_profileBox.registerIcon(iconID, PNGEncodedImage.encode(icon));
}
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/settings/SettingsNamespace.java b/api/bbm/src/main/java/blackberry/bbm/platform/settings/SettingsNamespace.java
new file mode 100644
index 0000000..7dd8032
--- /dev/null
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/settings/SettingsNamespace.java
@@ -0,0 +1,39 @@
+package blackberry.bbm.platform.settings;
+
+import blackberry.bbm.platform.BBMPlatformNamespace;
+import net.rim.blackberry.api.bbm.platform.SettingsManager;
+import net.rim.device.api.script.Scriptable;
+
+public class SettingsNamespace extends Scriptable {
+
+ public static final String NAME = "settings";
+
+ private static final String FIELD_PROFILE_BOX = "profileboxEnabled";
+ private static final String FIELD_PUBLIC_CONNS = "alwaysAllowPublicConns";
+
+ private static SettingsNamespace _instance;
+
+ private final SettingsManager _settings;
+
+ public SettingsNamespace(SettingsManager settings) {
+ _settings = settings;
+ }
+
+ public static SettingsNamespace getInstance() {
+ if(_instance == null) {
+ final SettingsManager settings = BBMPlatformNamespace.getInstance().getContext().getSettingsManager();
+ _instance = new SettingsNamespace(settings);
+ }
+ return _instance;
+ }
+
+ public Object getField(String name) throws Exception {
+ if(name.equals(FIELD_PROFILE_BOX)) {
+ return new Boolean(_settings.getSetting(SettingsManager.SETTING_PROFILE_BOX) == SettingsManager.VALUE_ENABLED);
+ } else if(name.equals(FIELD_PUBLIC_CONNS)) {
+ return new Boolean(_settings.getSetting(SettingsManager.SETTING_ALWAYS_ALLOW_PUBLIC_CONN) == SettingsManager.VALUE_ENABLED);
+ } else {
+ return UNDEFINED;
+ }
+ }
+}
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/users/BBMPlatformUser.java b/api/bbm/src/main/java/blackberry/bbm/platform/users/BBMPlatformUser.java
index 2a73463..e8922b7 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/users/BBMPlatformUser.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/users/BBMPlatformUser.java
@@ -23,14 +23,16 @@
public class BBMPlatformUser extends Scriptable {
- public static final String FIELD_DISPLAY_PIC = "displayPicture";
- public static final String FIELD_DISPLAY_NAME = "displayName";
- public static final String FIELD_PERSONAL_MSG = "personalMessage";
- public static final String FIELD_STATUS = "status";
- public static final String FIELD_STATUS_MSG = "statusMessage";
- public static final String FIELD_HANDLE = "handle";
- public static final String FIELD_PPID = "ppid";
- public static final String FIELD_TYPE = "type";
+ public static final String FIELD_DISPLAY_PIC = "displayPicture";
+ public static final String FIELD_DISPLAY_NAME = "displayName";
+ public static final String FIELD_PERSONAL_MSG = "personalMessage";
+ public static final String FIELD_STATUS = "status";
+ public static final String FIELD_STATUS_MSG = "statusMessage";
+ public static final String FIELD_HANDLE = "handle";
+ public static final String FIELD_PPID = "ppid";
+ public static final String FIELD_TYPE = "type";
+ public static final String FIELD_APP_VERSION = "appVersion";
+ public static final String FIELD_BBM_SDK_VERSION = "bbmsdkVersion";
public static final String STATUS_STR_AVAILABLE = "available";
public static final String STATUS_STR_BUSY = "busy";
@@ -57,6 +59,10 @@ public Object getField(String name) throws Exception {
return BBMPlatformUser.statusToString(_presence.getStatus());
} else if(name.equals(BBMPlatformUser.FIELD_STATUS_MSG)) {
return _presence.getStatusMessage();
+ } else if(name.equals(BBMPlatformUser.FIELD_APP_VERSION)) {
+ return _presence.getAppVersion();
+ } else if(name.equals(BBMPlatformUser.FIELD_BBM_SDK_VERSION)) {
+ return new Integer(_presence.getBBMSDKVersion());
} else if(name.equals(BBMPlatformUser.FIELD_TYPE)) {
return "BBM";
} else if(name.equals(BBMPlatformUser.FIELD_HANDLE)) {
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/users/UsersNamespace.java b/api/bbm/src/main/java/blackberry/bbm/platform/users/UsersNamespace.java
index 7d2d4c6..b2daaea 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/users/UsersNamespace.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/users/UsersNamespace.java
@@ -17,6 +17,7 @@
import net.rim.blackberry.api.bbm.platform.BBMPlatformContext;
import net.rim.blackberry.api.bbm.platform.io.BBMPlatformConnection;
+import net.rim.blackberry.api.bbm.platform.io.BBMPlatformData;
import net.rim.blackberry.api.bbm.platform.io.IOErrorCode;
import net.rim.blackberry.api.bbm.platform.profile.BBMInvitationRequest;
import net.rim.blackberry.api.bbm.platform.profile.BBMPlatformContact;
@@ -52,6 +53,8 @@ public class UsersNamespace extends Scriptable {
private static final String FUNC_SEND_FILE = "sendFile";
private static final String FIELD_CONTACTS_WITH_APP = "contactsWithApp";
private static final String EVENT_ON_UPDATE = "onupdate";
+ private static final String FUNC_SHARE_CONTENT = "shareContent";
+ public static final String EVENT_ON_SHARE_CONTENT = "onsharecontent";
private static UsersNamespace instance;
@@ -62,6 +65,7 @@ public class UsersNamespace extends Scriptable {
private UsersNamespace() {
_wFields = new ScriptableFieldManager();
_wFields.addField(EVENT_ON_UPDATE);
+ _wFields.addField(EVENT_ON_SHARE_CONTENT);
}
public static UsersNamespace getInstance() {
@@ -98,6 +102,8 @@ public Object getField(String name) throws Exception {
return new InviteToBBMConnFunction();
} else if(name.equals(FUNC_SEND_FILE)) {
return new SendFileFunction();
+ } else if(name.equals(FUNC_SHARE_CONTENT)) {
+ return new ShareContentFunction();
} else if(_wFields.hasField(name)) {
return _wFields.getField(name);
} else {
@@ -485,6 +491,80 @@ protected FunctionSignature[] getFunctionSignatures() {
};
}
} // SendFileFunction
+
+ private static class ShareContentFunction extends ScriptableFunctionBase {
+
+ protected Object execute(Object thiz, Object[] args) throws Exception {
+ final String content = (String) args[0];
+ final String description = (String) args[1];
+ final ScriptableFunction onComplete = (ScriptableFunction) args[2];
+ final Object options;
+ if(args.length >= 4) {
+ options = args[3];
+ } else {
+ options = null;
+ }
+
+ // Throw exceptions for too long parameters
+ final int maxContentLength = 61124;
+ if(content.length() > maxContentLength) {
+ throw new IllegalArgumentException("content.length > " + maxContentLength);
+ }
+ final int maxDescLength = 128;
+ if(description.length() > maxDescLength) {
+ throw new IllegalArgumentException("description.length > " + maxDescLength);
+ }
+
+ // Parse options object for title and contacts
+ final String title;
+ final ContactListProvider contacts;
+ if(options == null || options.equals(UNDEFINED)) {
+ title = null;
+ contacts = null;
+ } else {
+ // Title
+ final Scriptable optionsObj = (Scriptable) options;
+ final Object titleObj = optionsObj.getField("title");
+ if(titleObj.equals(UNDEFINED)) {
+ title = null;
+ } else {
+ title = (String) titleObj;
+ }
+
+ // Contacts
+ Object contactsObj = optionsObj.getField("users");
+ if(contactsObj.equals(UNDEFINED)) {
+ contacts = null;
+ } else {
+ final BBMPlatformUser[] users = Util.scriptableUsersArrayToUserArray((Scriptable) contactsObj);
+ contacts = new Util.SimpleContactListProvider(users);
+ }
+ }
+
+ // Call API
+ final BBMPlatformNamespace bbmpNpsc = BBMPlatformNamespace.getInstance();
+ final MessagingService msgService = bbmpNpsc.getMessagingService();
+ UiApplication.getUiApplication().invokeLater(new Runnable() {
+ public void run() {
+ msgService.shareContent(description, new BBMPlatformData(content), contacts, title);
+ Util.dispatchCallback(onComplete, null);
+ }
+ });
+
+ return UNDEFINED;
+ }
+
+ protected FunctionSignature[] getFunctionSignatures() {
+ FunctionSignature sig1 = new FunctionSignature(4);
+ sig1.addParam(String.class, true);
+ sig1.addParam(String.class, true);
+ sig1.addParam(ScriptableFunction.class, true);
+ sig1.addParam(Scriptable.class, false);
+ return new FunctionSignature[] {
+ sig1
+ };
+ }
+ } // ShareContentFunction
private static String eventTypeToString(int eventType) {
switch(eventType) {
diff --git a/api/bbm/src/main/java/blackberry/bbm/platform/util/Util.java b/api/bbm/src/main/java/blackberry/bbm/platform/util/Util.java
index 6df0a7b..acc0502 100644
--- a/api/bbm/src/main/java/blackberry/bbm/platform/util/Util.java
+++ b/api/bbm/src/main/java/blackberry/bbm/platform/util/Util.java
@@ -73,6 +73,11 @@ public static String bitmapToBase64Str(Bitmap bitmap) {
}
public static Bitmap requestBitmap(String uri) throws Exception {
+ byte[] bmpBytes = requestBitmapBytes(uri);
+ return Bitmap.createBitmapFromBytes(bmpBytes, 0, bmpBytes.length, 1);
+ }
+
+ public static byte[] requestBitmapBytes(String uri) throws Exception {
BrowserField browserField = (BrowserField) BBMPlatformExtension._browserField.get();
final BrowserFieldConfig bfConfig = browserField.getConfig();
final BrowserFieldController bfController =
@@ -94,7 +99,7 @@ public static Bitmap requestBitmap(String uri) throws Exception {
} catch(EOFException e) {
}
- return Bitmap.createBitmapFromBytes(bmpBytes.getArray(), 0, bmpBytes.size(), 1);
+ return bmpBytes.getArray();
} finally {
try {
ic.close();
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/ColorPickerAsyncFunction.java b/api/dialog/src/main/java/blackberry/ui/dialog/ColorPickerAsyncFunction.java
new file mode 100644
index 0000000..3c39ced
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/ColorPickerAsyncFunction.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package blackberry.ui.dialog;
+
+import net.rim.device.api.script.Scriptable;
+import net.rim.device.api.script.ScriptableFunction;
+import net.rim.device.api.ui.UiApplication;
+import blackberry.core.FunctionSignature;
+import blackberry.core.ScriptableFunctionBase;
+import blackberry.ui.dialog.DialogRunnableFactory;
+
+/**
+ * Implementation of asynchronous color picker dialog
+ *
+ * @author jachoi
+ *
+ */
+public class ColorPickerAsyncFunction extends ScriptableFunctionBase {
+
+ public static final String NAME = "colorPickerAsync";
+ private final int HEX_BASE = 16;
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#execute(Object, Object[])
+ */
+ public Object execute( Object thiz, Object[] args ) throws Exception {
+ int initialColor = stringToColor( (String) args[ 0 ] );
+ ScriptableFunction callback = (ScriptableFunction) args[ 1 ];
+
+ // create dialog
+ Runnable dr = DialogRunnableFactory.getColorPickerRunnable( initialColor, callback, thiz );
+
+ // queue
+ UiApplication.getUiApplication().invokeLater( dr );
+
+ // return value
+ return Scriptable.UNDEFINED;
+ }
+
+ private int stringToColor(String color) {
+ if ( color.startsWith( "#" ) ) {
+ return Integer.parseInt( color.substring( 1 ), HEX_BASE );
+ }
+ return Integer.parseInt( color, HEX_BASE );
+ }
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#getFunctionSignatures()
+ */
+ protected FunctionSignature[] getFunctionSignatures() {
+ FunctionSignature fs = new FunctionSignature( 2 );
+ // initialColor
+ fs.addParam( String.class, true );
+ // callback
+ fs.addParam( ScriptableFunction.class, true );
+
+ return new FunctionSignature[] { fs };
+ }
+}
\ No newline at end of file
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/DateTimeAsyncFunction.java b/api/dialog/src/main/java/blackberry/ui/dialog/DateTimeAsyncFunction.java
new file mode 100644
index 0000000..c728e05
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/DateTimeAsyncFunction.java
@@ -0,0 +1,73 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package blackberry.ui.dialog;
+
+import blackberry.core.FunctionSignature;
+import blackberry.core.ScriptableFunctionBase;
+
+import net.rim.device.api.script.Scriptable;
+import net.rim.device.api.script.ScriptableFunction;
+import net.rim.device.api.ui.UiApplication;
+
+import blackberry.ui.dialog.DialogRunnableFactory;
+
+public class DateTimeAsyncFunction extends ScriptableFunctionBase {
+
+ public static final String NAME = "dateTimeAsync";
+
+ public static final int TYPE_DATE = 0;
+ public static final int TYPE_MONTH = 1;
+ public static final int TYPE_TIME = 2;
+ public static final int TYPE_DATETIME = 3;
+ public static final int TYPE_DATETIMELOCAL = 4;
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#execute(Object, Object[])
+ */
+ public Object execute(Object thiz, Object[] args) throws Exception {
+ String type = (String) args[0];
+ Scriptable options = (Scriptable) args[1];
+ ScriptableFunction callback = (ScriptableFunction) args[2] ;
+
+ String value = (String)options.getField("value");
+ String min = (String)options.getField("min");
+ String max = (String)options.getField("max");
+
+ Runnable dr = DialogRunnableFactory.getDateTimeRunnable(type, value, min, max, callback, thiz);
+
+ // queue
+ UiApplication.getUiApplication().invokeLater(dr);
+
+ // return value
+ return Scriptable.UNDEFINED;
+ }
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#getFunctionSignatures()
+ */
+ protected FunctionSignature[] getFunctionSignatures() {
+ FunctionSignature fs = new FunctionSignature(3);
+ // type
+ fs.addParam(String.class, true);
+ // options
+ fs.addParam(Scriptable.class, true);
+ //callback
+ fs.addParam(ScriptableFunction.class, true);
+
+ return new FunctionSignature[] { fs };
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/DialogExtension.java b/api/dialog/src/main/java/blackberry/ui/dialog/DialogExtension.java
index 8a63bba..48abff4 100644
--- a/api/dialog/src/main/java/blackberry/ui/dialog/DialogExtension.java
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/DialogExtension.java
@@ -31,7 +31,7 @@
public class DialogExtension implements WidgetExtension {
public static final String FEATURE_DIALOG = "blackberry.ui.dialog";
-
+
/**
* @see net.rim.device.api.web.WidgetExtension#register(WidgetConfig, BrowserField)
*/
@@ -44,6 +44,7 @@ public void register( WidgetConfig widgetConfig, BrowserField browserField ) {
*/
public void loadFeature( final String feature, final String version, final Document document, final ScriptEngine scriptengine )
throws Exception {
+
if( feature.equals( FEATURE_DIALOG ) ) {
scriptengine.addExtension( feature, new DialogNamespace() );
}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/DialogNamespace.java b/api/dialog/src/main/java/blackberry/ui/dialog/DialogNamespace.java
index cbf405f..5eff632 100644
--- a/api/dialog/src/main/java/blackberry/ui/dialog/DialogNamespace.java
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/DialogNamespace.java
@@ -17,6 +17,7 @@
import java.util.Hashtable;
+import net.rim.device.api.script.ScriptEngine;
import net.rim.device.api.script.Scriptable;
import net.rim.device.api.ui.component.Dialog;
@@ -52,6 +53,9 @@ public DialogNamespace() {
_fields.put( StandardAskFunction.NAME, new StandardAskFunction() );
_fields.put( CustomAskFunction.NAME, new CustomAskFunction() );
+ _fields.put( SelectAsyncFunction.NAME, new SelectAsyncFunction() );
+ _fields.put( DateTimeAsyncFunction.NAME, new DateTimeAsyncFunction() );
+ _fields.put( ColorPickerAsyncFunction.NAME, new ColorPickerAsyncFunction() );
_fields.put( D_OK, new Integer( Dialog.D_OK ) );
_fields.put( D_SAVE, new Integer( Dialog.D_SAVE ) );
_fields.put( D_DELETE, new Integer( Dialog.D_DELETE ) );
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/DialogRunnableFactory.java b/api/dialog/src/main/java/blackberry/ui/dialog/DialogRunnableFactory.java
new file mode 100644
index 0000000..c505e79
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/DialogRunnableFactory.java
@@ -0,0 +1,109 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package blackberry.ui.dialog;
+
+import java.util.Vector;
+
+import net.rim.device.api.system.DeviceInfo;
+import net.rim.device.api.script.ScriptableFunction;
+import net.rim.device.api.script.ScriptableImpl;
+
+import blackberry.ui.dialog.datetime.DateTimeDialog;
+import blackberry.ui.dialog.IWebWorksDialog;
+import blackberry.ui.dialog.select.SelectDialog;
+import blackberry.ui.dialog.color.ColorPickerDialog;
+
+public class DialogRunnableFactory {
+
+ public static Runnable getDateTimeRunnable( String type, String value, String min, String max, ScriptableFunction callback,
+ Object thiz ) {
+ IWebWorksDialog d = new DateTimeDialog( type, value, min, max );
+ return new DialogRunnable( d, callback, thiz );
+ }
+
+ public static Runnable getColorPickerRunnable( int initialColor, ScriptableFunction callback, Object thiz ) {
+ ColorPickerDialog d = new ColorPickerDialog( initialColor );
+ return new DialogRunnable( d, callback, thiz );
+ }
+
+ public static Runnable getSelectRunnable(boolean allowMultiple, String[] labels, boolean[] enabled, boolean[] selected, int[] types, ScriptableFunction callback, Object thiz) {
+ IWebWorksDialog d = new SelectDialog(allowMultiple, labels, enabled, selected, types);
+ return new DialogRunnable(d, callback, thiz);
+ }
+
+ private static class DialogRunnable implements Runnable {
+ private IWebWorksDialog _dialog;
+ private ScriptableFunction _callback;
+ private Object _context;
+
+ /**
+ * Constructs a DialogRunnable
object.
+ *
+ * @param dialog
+ * The dialog
+ * @param callback
+ * The callback
+ * @param context
+ * The context in which the callback executes (its "this" object)
+ */
+ DialogRunnable( IWebWorksDialog dialog, ScriptableFunction callback, Object context ) {
+ _dialog = dialog;
+ _callback = callback;
+ _context = context;
+ }
+
+
+ /**
+ * Run the dialog.
+ *
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ if(_dialog.show()) {
+ Object dialogValue = _dialog.getSelectedValue();
+ Object retVal;
+
+ boolean isFive = "5".equals(DeviceInfo.getSoftwareVersion().substring(0, 1));
+
+ //we'll accept Vector-type dialog return values for arrays
+ //otherwise get object's string as all ecma primitives will return a valid string representation of themselves
+ try {
+ if (dialogValue instanceof Vector) {
+ Vector v = (Vector)dialogValue;
+ if(isFive) {
+ ScriptableImpl s = new ScriptableImpl();
+ for(int i = 0; i < v.size(); i++) {
+ s.putElement(i, v.elementAt(i));
+ }
+ retVal = s;
+ } else {
+ Object[] s = new Object[v.size()];
+ v.copyInto(s);
+ retVal = s;
+ }
+ } else {
+ retVal = dialogValue.toString();
+ }
+
+ _callback.invoke(null, new Object[] { retVal });
+ } catch (Exception e) {
+ throw new RuntimeException("Invoke callback failed: " + e.getMessage());
+ }
+ }
+ }
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/IWebWorksDialog.java b/api/dialog/src/main/java/blackberry/ui/dialog/IWebWorksDialog.java
new file mode 100644
index 0000000..47e21b1
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/IWebWorksDialog.java
@@ -0,0 +1,21 @@
+/*
+* Copyright 2010-2011 Research In Motion Limited.
+*
+* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package blackberry.ui.dialog;
+
+public interface IWebWorksDialog {
+ boolean show();
+ Object getSelectedValue();
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/SelectAsyncFunction.java b/api/dialog/src/main/java/blackberry/ui/dialog/SelectAsyncFunction.java
new file mode 100644
index 0000000..dd7329d
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/SelectAsyncFunction.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package blackberry.ui.dialog;
+
+import net.rim.device.api.script.ScriptEngine;
+import net.rim.device.api.script.Scriptable;
+import net.rim.device.api.script.ScriptableFunction;
+import net.rim.device.api.ui.UiApplication;
+import blackberry.common.util.json4j.JSONArray;
+import blackberry.core.FunctionSignature;
+import blackberry.core.ScriptableFunctionBase;
+
+import blackberry.ui.dialog.DialogRunnableFactory;
+import blackberry.ui.dialog.select.SelectDialog;
+
+/**
+ * Implementation of asynchronous selection dialog
+ *
+ * @author jachoi
+ *
+ */
+public class SelectAsyncFunction extends ScriptableFunctionBase {
+
+ public static final String NAME = "selectAsync";
+
+ public static final int POPUP_ITEM_TYPE_OPTION = 0;
+ public static final int POPUP_ITEM_TYPE_GROUP = 1;
+ public static final int POPUP_ITEM_TYPE_SEPARATOR = 2;
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#execute(Object, Object[])
+ */
+ public Object execute( Object thiz, Object[] args ) throws Exception {
+ boolean allowMultiple = ( (Boolean) args[ 0 ] ).booleanValue();
+ Scriptable choices = (Scriptable) args[ 1 ];
+ ScriptableFunction callback = (ScriptableFunction) args[ 2 ];
+
+ int numChoices = choices.getElementCount();
+ String[] labels = new String[ numChoices ];
+ boolean[] enabled = new boolean[ numChoices ];
+ boolean[] selected = new boolean[ numChoices ];
+ int[] types = new int[ numChoices ];
+
+ populateChoiceStateArrays( choices, labels, enabled, selected, types, allowMultiple );
+
+ Runnable dr = DialogRunnableFactory.getSelectRunnable(allowMultiple, labels, enabled, selected, types, callback, thiz);
+
+ // queue
+ UiApplication.getUiApplication().invokeLater(dr);
+
+ // return value
+ return Scriptable.UNDEFINED;
+ }
+
+ private void populateChoiceStateArrays( Scriptable fromScriptableChoices, String[] labels, boolean[] enabled,
+ boolean[] selected, int[] type, boolean allowMultiple ) {
+ try {
+
+ boolean firstSelected = false;
+ boolean canSelect = true;
+
+ for( int i = 0; i < fromScriptableChoices.getElementCount(); i++ ) {
+ Scriptable choice = (Scriptable) fromScriptableChoices.getElement( i );
+ labels[ i ] = (String) choice.getField( "label" );
+ enabled[ i ] = ( (Boolean) choice.getField( "enabled" ) ).booleanValue();
+
+ type[ i ] = ( (String) choice.getField( "type" ) ).equals( "group" ) ? POPUP_ITEM_TYPE_GROUP
+ : POPUP_ITEM_TYPE_OPTION;
+
+ canSelect = (type[ i ] != POPUP_ITEM_TYPE_GROUP) && (allowMultiple || !firstSelected);
+ selected[ i ] = canSelect && enabled[ i ] && ( (Boolean) choice.getField( "selected" ) ).booleanValue();
+ firstSelected = firstSelected || selected[ i ];
+ }
+ } catch( Exception e ) {
+ throw new RuntimeException( e.getMessage() );
+ }
+ }
+
+ /**
+ * @see blackberry.core.ScriptableFunctionBase#getFunctionSignatures()
+ */
+ protected FunctionSignature[] getFunctionSignatures() {
+ FunctionSignature fs = new FunctionSignature( 3 );
+ // allowMultiple
+ fs.addParam( Boolean.class, true );
+ // choices
+ fs.addParam( Scriptable.class, true );
+ // callback
+ fs.addParam( ScriptableFunction.class, true );
+
+ return new FunctionSignature[] { fs };
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/color/ColorPickerDialog.java b/api/dialog/src/main/java/blackberry/ui/dialog/color/ColorPickerDialog.java
new file mode 100644
index 0000000..e7e4885
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/color/ColorPickerDialog.java
@@ -0,0 +1,694 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package blackberry.ui.dialog.color;
+
+import blackberry.ui.dialog.IWebWorksDialog;
+import net.rim.device.api.system.Bitmap;
+import net.rim.device.api.system.Characters;
+import net.rim.device.api.system.KeypadListener;
+import net.rim.device.api.ui.Color;
+import net.rim.device.api.ui.Field;
+import net.rim.device.api.ui.FieldChangeListener;
+import net.rim.device.api.ui.Graphics;
+import net.rim.device.api.ui.TouchEvent;
+import net.rim.device.api.ui.UiApplication;
+import net.rim.device.api.ui.component.ButtonField;
+import net.rim.device.api.ui.container.HorizontalFieldManager;
+import net.rim.device.api.ui.container.PopupScreen;
+import net.rim.device.api.ui.container.VerticalFieldManager;
+import net.rim.device.api.util.MathUtilities;
+import net.rim.device.api.util.NumberUtilities;
+
+/**
+ * Implementation of color picker dialog
+ *
+ * @author jachoi
+ *
+ */
+public class ColorPickerDialog extends Field implements IWebWorksDialog {
+ private int _selectedColor;
+
+ public ColorPickerDialog( int initialColor ) {
+ super( Field.FOCUSABLE );
+ _selectedColor = initialColor;
+ setPadding( 0, 0, 0, 0 );
+ }
+
+ public void setColor( int color ) {
+ _selectedColor = color;
+ }
+
+ public int getPreferredWidth() {
+ return (int) Math.ceil( getFont().getHeight() * 1.618 );
+ }
+
+ public int getPreferredHeight() {
+ return getFont().getHeight();
+ }
+
+ protected void layout( int width, int height ) {
+ setExtent( getPreferredWidth(), getPreferredHeight() );
+ }
+
+ protected void paint( Graphics g ) {
+ int oldColor = g.getColor();
+ try {
+ // Color
+ g.setColor( _selectedColor );
+ g.fillRect( 0, 0, getWidth(), getHeight() );
+
+ // Border
+ g.setStrokeWidth( 1 );
+ g.setColor( 0x000000 );
+ g.drawRect( 0, 0, getWidth(), getHeight() );
+ } finally {
+ g.setColor( oldColor );
+ }
+ }
+
+ protected void drawFocus( Graphics g, boolean on ) {
+ int oldColor = g.getColor();
+ try {
+ g.setColor( 0x0000FF );
+ g.drawRect( 0, 0, getWidth(), getHeight() );
+ g.drawRect( 1, 1, getWidth() - 2, getHeight() - 2 );
+ } finally {
+ g.setColor( oldColor );
+ }
+ }
+
+ private String colorToString( int color ) throws IllegalArgumentException {
+ StringBuffer sb = new StringBuffer( 7 );
+ sb.append( "#" );
+ NumberUtilities.appendNumber( sb, color & 0x00FFFFFF, 16, 6 );
+ return sb.toString();
+ }
+
+ public boolean show() {
+ ColorPickerPopup picker = new ColorPickerPopup( _selectedColor );
+ boolean result = picker.doModal();
+ if( result ) {
+ _selectedColor = picker.getSelectedColor();
+ invalidate();
+ fieldChangeNotify( 0 );
+ }
+ return result;
+ }
+
+ public Object getSelectedValue() {
+ return colorToString( _selectedColor );
+ }
+
+ protected void paintBackground( Graphics g ) {
+ }
+
+ public void setDirty( boolean dirty ) {
+ // We never want to be dirty or muddy
+ }
+
+ public void setMuddy( boolean muddy ) {
+ // We never want to be dirty or muddy
+ }
+}
+
+class BaseColorChooser extends Field {
+ private static final int FIELD_HEIGHT = 100;
+ private static final int FIELD_WIDTH = 40;
+ private static final int NUM_COLOURS = 7;
+ private static final int FRAME_THICKNESS = 2;
+ private static final int FRAME_HEIGHT = 10;
+
+ private int _selectedColor;
+
+ private int[] _xcoords;
+ private int[] _ycoords;
+ private int[] _colors;
+ private Bitmap _rainbow;
+
+ private boolean _editing;
+ private int _y;
+
+ BaseColorChooser() {
+ _y = FRAME_THICKNESS;
+ int yStep = FIELD_HEIGHT / ( NUM_COLOURS - 1 );
+
+ _xcoords = new int[] { 0, 0, 0, 0, 0, 0, 0, FIELD_WIDTH, FIELD_WIDTH, FIELD_WIDTH, FIELD_WIDTH, FIELD_WIDTH, FIELD_WIDTH,
+ FIELD_WIDTH };
+ _ycoords = new int[] { 0, yStep, 2 * yStep, 3 * yStep, 4 * yStep, 5 * yStep, FIELD_HEIGHT, FIELD_HEIGHT, 5 * yStep,
+ 4 * yStep, 3 * yStep, 2 * yStep, yStep, 0 };
+ _colors = new int[] { 0xff0000, 0xff00ff, 0x0000ff, 0x00ffff, 0x00ff00, 0xffff00, 0xff0000, 0xff0000, 0xffff00, 0x00ff00,
+ 0x00ffff, 0x0000ff, 0xff00ff, 0xff0000 };
+ }
+
+ public int getPreferredWidth() {
+ return FIELD_WIDTH;
+ }
+
+ public int getPreferredHeight() {
+ return FIELD_HEIGHT;
+ }
+
+ public int getSelectedColor() {
+ return _selectedColor;
+ }
+
+ protected void layout( int width, int height ) {
+ width = getPreferredWidth();
+ height = getPreferredHeight();
+
+ _rainbow = new Bitmap( width, height );
+ Graphics rainbowGraphics = Graphics.create( _rainbow );
+ rainbowGraphics.drawShadedFilledPath( _xcoords, _ycoords, null, _colors, null );
+
+ setExtent( width, height );
+ }
+
+ protected void paint( Graphics g ) {
+ int oldColor = g.getColor();
+ try {
+ // Rainbow
+ g.drawBitmap( 0, 0, _rainbow.getWidth(), _rainbow.getHeight(), _rainbow, 0, 0 );
+
+ // Border
+ g.setColor( 0x000000 );
+ g.drawRect( 0, 0, FIELD_WIDTH, FIELD_HEIGHT );
+ if( g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS ) ) {
+ g.setColor( Color.WHITE );
+ g.drawRect( 1, 1, FIELD_WIDTH - 2, FIELD_HEIGHT - 2 );
+ }
+
+ int frameY = _y - ( FRAME_HEIGHT >> 1 );
+
+ // draw the selector shadow
+ frameY++;
+ g.setColor( 0x000000 );
+ g.fillRect( 0, frameY, FIELD_WIDTH, FRAME_THICKNESS ); // top
+ g.fillRect( 0, frameY + FRAME_HEIGHT - FRAME_THICKNESS, FIELD_WIDTH, FRAME_THICKNESS ); // bottom
+ frameY--;
+
+ // draw selector foreground
+ g.setColor( Color.WHITE );
+ g.fillRect( 0, frameY, FIELD_WIDTH, FRAME_THICKNESS ); // top
+ g.fillRect( 0, frameY + FRAME_HEIGHT - FRAME_THICKNESS, FIELD_WIDTH, FRAME_THICKNESS ); // bottom
+ g.fillRect( 0, frameY, FRAME_THICKNESS, FRAME_HEIGHT ); // left
+ g.fillRect( FIELD_WIDTH - FRAME_THICKNESS, frameY, FRAME_THICKNESS, FRAME_HEIGHT ); // right
+ } finally {
+ g.setColor( oldColor );
+ }
+ }
+
+ protected void paintBackground( Graphics g ) {
+ }
+
+ protected void drawFocus( Graphics g, boolean on ) {
+ boolean oldDrawStyleFocus = g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS );
+ try {
+ g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, true );
+ paint( g );
+ } finally {
+ g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, oldDrawStyleFocus );
+ }
+ }
+
+ public boolean isFocusable() {
+ return true;
+ }
+
+ protected boolean keyChar( char key, int status, int time ) {
+ if( key == Characters.ESCAPE ) {
+ if( _editing ) {
+ return handleClick();
+ }
+ } else if( key == Characters.ENTER ) {
+ return handleClick();
+ }
+ return super.keyChar( key, status, time );
+ }
+
+ protected boolean navigationMovement( int dx, int dy, int status, int time ) {
+ return handleMovement( dx, dy );
+ }
+
+ protected boolean trackwheelRoll( int amount, int status, int time ) {
+ if( ( status & KeypadListener.STATUS_ALT ) != 0 ) {
+ return handleMovement( amount, 0 );
+ } else {
+ return handleMovement( 0, amount );
+ }
+ }
+
+ private boolean handleMovement( int dx, int dy ) {
+ if( _editing ) {
+ int yMovement = dy * FIELD_HEIGHT / 20;
+
+ _y = MathUtilities.clamp( 0, _y + yMovement, FIELD_HEIGHT - 1 );
+
+ int[] argbData = new int[ 1 ];
+ _rainbow.getARGB( argbData, 0, 1, 0, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ return true;
+ }
+ return false;
+ }
+
+ protected boolean navigationClick( int status, int time ) {
+ return handleClick();
+ }
+
+ protected boolean trackwheelClick( int status, int time ) {
+ return handleClick();
+ }
+
+ private boolean handleClick() {
+ _editing = !_editing;
+ invalidate( 0, 0, getWidth(), getHeight() );
+ return true;
+ }
+
+ protected boolean touchEvent( TouchEvent message ) {
+ if( message == null ) {
+ throw new IllegalArgumentException( "ColorPickerField.touchEvent: TouchEvent message is null." );
+ }
+ boolean isConsumed = false;
+ boolean isOutOfBounds = false;
+ int x = message.getX( 1 );
+ int y = message.getY( 1 );
+ int[] argbData = new int[ 1 ];
+ // Check to ensure point is within this field
+ if( x <= 0 || y <= 0 || x > ( FIELD_WIDTH - 1 ) || y > ( FIELD_HEIGHT - 1 ) ) {
+ isOutOfBounds = true;
+ }
+ switch( message.getEvent() ) {
+ case TouchEvent.CLICK:
+ case TouchEvent.MOVE:
+ if( isOutOfBounds ) {
+ return true; // consume
+ }
+ _editing = true; // Pressed effect
+ // update color
+ _y = y;
+ _rainbow.getARGB( argbData, 0, 1, 0, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ isConsumed = true;
+ break;
+ case TouchEvent.UNCLICK:
+ if( isOutOfBounds ) {
+ _editing = false; // Reset presssed effect
+ return true;
+ }
+
+ // A field change notification is only sent on UNCLICK to allow for recovery
+ // should the user cancel, i.e. click and move off the button
+
+ _editing = false; // Reset pressed effect
+
+ // update color
+ _y = y;
+ _rainbow.getARGB( argbData, 0, 1, 0, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ isConsumed = true;
+
+ break;
+ }
+ return isConsumed;
+ }
+
+}
+
+class TintChooser extends Field {
+ private static final int FIELD_HEIGHT = 100;
+ private static final int FIELD_WIDTH = 100;
+ private static final int FRAME_SIZE = 10;
+ private static final int FRAME_THICKNESS = 2;
+
+ private int _baseColor;
+ private int _selectedColor;
+
+ private int[] _xcoords;
+ private int[] _ycoords;
+ private int[] _colors;
+ private Bitmap _backgroundBitmap;
+
+ private boolean _editing;
+
+ private int _x;
+ private int _y;
+
+ TintChooser( int baseColor ) {
+ _baseColor = baseColor;
+
+ // init cursor position
+ _x = FIELD_WIDTH - FRAME_SIZE / 2;
+ _y = FRAME_SIZE;
+ }
+
+ public int getPreferredWidth() {
+ return FIELD_WIDTH;
+ }
+
+ public int getPreferredHeight() {
+ return FIELD_HEIGHT;
+ }
+
+ protected void layout( int width, int height ) {
+ width = getPreferredWidth();
+ height = getPreferredHeight();
+
+ updateBitmap();
+
+ setExtent( width, height );
+ }
+
+ public void setColor( int newColor ) {
+ _baseColor = newColor;
+ updateBitmap();
+ invalidate();
+ }
+
+ private void updateBitmap() {
+ int width = getPreferredWidth();
+ int height = getPreferredHeight();
+
+ _xcoords = new int[] { 0, 0, width, width };
+ _ycoords = new int[] { 0, height, height, 0 };
+ _colors = new int[] { 0xFFFFFF, 0x000000, 0x000000, _baseColor };
+
+ // make new bitmap
+ _backgroundBitmap = new Bitmap( width, height );// Bitmap.ROWWISE_MONOCHROME , width, height);// Bitmap.DEFAULT_TYPE,
+ // width, height );
+ Graphics bitmapGraphics = Graphics.create( _backgroundBitmap );
+ bitmapGraphics.drawShadedFilledPath( _xcoords, _ycoords, null, _colors, null );
+
+ // Update selected color
+ int[] argbData = new int[ 1 ];
+ _backgroundBitmap.getARGB( argbData, 0, 1, _x, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+ }
+
+ protected void paint( Graphics g ) {
+ // Rainbow
+ g.drawBitmap( 0, 0, _backgroundBitmap.getWidth(), _backgroundBitmap.getHeight(), _backgroundBitmap, 0, 0 );
+
+ // Border
+ g.setColor( 0x000000 );
+ g.drawRect( 0, 0, FIELD_WIDTH, FIELD_HEIGHT );
+ if( g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS ) ) {
+ g.setColor( Color.WHITE );
+ g.drawRect( 1, 1, FIELD_WIDTH - 2, FIELD_HEIGHT - 2 );
+ }
+
+ // Selector
+ int frameX = _x;
+ int frameY = _y;
+
+ int oldColor = g.getColor();
+ try {
+ // draw the selector
+ g.setColor( 0x000000 );
+ frameX++;
+ frameY++;
+
+ // Shadow Left, Right, Top, Bottom
+ g.fillRect( frameX - FRAME_SIZE / 2, frameY - FRAME_THICKNESS / 2, FRAME_SIZE / 2 - FRAME_THICKNESS, FRAME_THICKNESS );
+ g.fillRect( frameX + FRAME_THICKNESS, frameY - FRAME_THICKNESS / 2, FRAME_SIZE / 2 - FRAME_THICKNESS, FRAME_THICKNESS );
+ g.fillRect( frameX - FRAME_THICKNESS / 2, frameY - FRAME_SIZE / 2, FRAME_THICKNESS, FRAME_SIZE / 2 - FRAME_THICKNESS );
+ g.fillRect( frameX - FRAME_THICKNESS / 2, frameY + FRAME_THICKNESS, FRAME_THICKNESS, FRAME_SIZE / 2 - FRAME_THICKNESS );
+
+ frameX--;
+ frameY--;
+
+ g.setColor( Color.WHITE );
+ // Left, Right, Top, Bottom
+ g.fillRect( frameX - FRAME_SIZE / 2, frameY - FRAME_THICKNESS / 2, FRAME_SIZE / 2 - FRAME_THICKNESS, FRAME_THICKNESS );
+ g.fillRect( frameX + FRAME_THICKNESS, frameY - FRAME_THICKNESS / 2, FRAME_SIZE / 2 - FRAME_THICKNESS, FRAME_THICKNESS );
+ g.fillRect( frameX - FRAME_THICKNESS / 2, frameY - FRAME_SIZE / 2, FRAME_THICKNESS, FRAME_SIZE / 2 - FRAME_THICKNESS );
+ g.fillRect( frameX - FRAME_THICKNESS / 2, frameY + FRAME_THICKNESS, FRAME_THICKNESS, FRAME_SIZE / 2 - FRAME_THICKNESS );
+ } finally {
+ g.setColor( oldColor );
+ }
+ }
+
+ protected void paintBackground( Graphics g ) {
+ }
+
+ protected void drawFocus( Graphics g, boolean on ) {
+ boolean oldDrawStyleFocus = g.isDrawingStyleSet( Graphics.DRAWSTYLE_FOCUS );
+ try {
+ g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, true );
+ paint( g );
+ } finally {
+ g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, oldDrawStyleFocus );
+ }
+ }
+
+ public boolean isFocusable() {
+ return true;
+ }
+
+ protected boolean keyChar( char key, int status, int time ) {
+ if( key == Characters.ESCAPE ) {
+ if( _editing ) {
+ return handleClick();
+ }
+ } else if( key == Characters.ENTER ) {
+ return handleClick();
+ }
+ return super.keyChar( key, status, time );
+ }
+
+ protected boolean navigationMovement( int dx, int dy, int status, int time ) {
+ return handleMovement( dx, dy );
+ }
+
+ protected boolean trackwheelRoll( int amount, int status, int time ) {
+ if( ( status & KeypadListener.STATUS_ALT ) != 0 ) {
+ return handleMovement( amount, 0 );
+ } else {
+ return handleMovement( 0, amount );
+ }
+ }
+
+ private boolean handleMovement( int dx, int dy ) {
+ if( _editing ) {
+ int xMovement = dx * FIELD_WIDTH / 20;
+ int yMovement = dy * FIELD_HEIGHT / 20;
+
+ _x = MathUtilities.clamp( 0, _x + xMovement, FIELD_WIDTH - 1 );
+ _y = MathUtilities.clamp( 0, _y + yMovement, FIELD_HEIGHT - 1 );
+
+ int[] argbData = new int[ 1 ];
+ _backgroundBitmap.getARGB( argbData, 0, 1, _x, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ return true;
+ }
+ return false;
+ }
+
+ public int getSelectedColor() {
+ return _selectedColor;
+ }
+
+ protected boolean navigationClick( int status, int time ) {
+ return handleClick();
+ }
+
+ protected boolean trackwheelClick( int status, int time ) {
+ return handleClick();
+ }
+
+ private boolean handleClick() {
+ _editing = !_editing;
+ invalidate( 0, 0, getWidth(), getHeight() );
+ return true;
+ }
+
+ protected boolean touchEvent( TouchEvent message ) {
+ if( message == null ) {
+ throw new IllegalArgumentException( "ButtonField.touchEvent: TouchEvent message is null." );
+ }
+ boolean isConsumed = false;
+ boolean isOutOfBounds = false;
+ int x = message.getX( 1 );
+ int y = message.getY( 1 );
+ // Check to ensure point is within this field
+ if( x <= 0 || y <= 0 || x > ( FIELD_WIDTH - 1 ) || y > ( FIELD_HEIGHT - 1 ) ) {
+ isOutOfBounds = true;
+ }
+ int[] argbData = new int[ 1 ];
+ switch( message.getEvent() ) {
+ case TouchEvent.CLICK:
+ case TouchEvent.MOVE:
+ if( isOutOfBounds ) {
+ return true; // consume
+ }
+ _editing = true; // Pressed effect
+ // update color
+ _x = x;
+ _y = y;
+ _backgroundBitmap.getARGB( argbData, 0, 1, _x, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ isConsumed = true;
+ break;
+ case TouchEvent.UNCLICK:
+ if( isOutOfBounds ) {
+ _editing = false; // Reset presssed effect
+ return true;
+ }
+
+ // A field change notification is only sent on UNCLICK to allow for recovery
+ // should the user cancel, i.e. click and move off the button
+
+ _editing = false; // Reset pressed effect
+
+ // update state
+ _x = x;
+ _y = y;
+ _backgroundBitmap.getARGB( argbData, 0, 1, _x, _y, 1, 1 );
+ _selectedColor = argbData[ 0 ];
+ invalidate( 0, 0, getWidth(), getHeight() );
+ fieldChangeNotify( FieldChangeListener.PROGRAMMATIC );
+ isConsumed = true;
+ break;
+ }
+ return isConsumed;
+ }
+}
+
+class ColorPreviewField extends Field {
+ private static final int FIELD_WIDTH = 40;
+ private static final int FIELD_HEIGHT = 30;
+
+ private int _color;
+
+ ColorPreviewField( int color ) {
+ _color = color;
+ }
+
+ public int getPreferredWidth() {
+ return FIELD_WIDTH;
+ }
+
+ public int getPreferredHeight() {
+ return FIELD_HEIGHT;
+ }
+
+ protected void layout( int width, int height ) {
+ setExtent( getPreferredWidth(), getPreferredHeight() );
+ }
+
+ public void setColor( int color ) {
+ _color = color;
+ invalidate();
+ }
+
+ protected void paint( Graphics g ) {
+ int oldColor = g.getColor();
+ try {
+ g.setColor( _color );
+ g.fillRect( 0, 0, FIELD_WIDTH, FIELD_HEIGHT );
+
+ g.setColor( 0x000000 );
+ g.drawRect( 0, 0, FIELD_WIDTH, FIELD_HEIGHT );
+ } finally {
+ g.setColor( oldColor );
+ }
+ }
+}
+
+class ColorPickerPopup extends PopupScreen implements FieldChangeListener {
+ private BaseColorChooser _baseColorChooser;
+ private TintChooser _tintChooser;
+ private ColorPreviewField _previewField;
+ private ButtonField _okButton;
+
+ private final int PADDING = 4;
+ private final int PADDING_BOTTOM = 39;
+ private final String OK = "OK";
+
+ public ColorPickerPopup( int initialColor ) {
+ super( new HorizontalFieldManager() );
+ setPadding( PADDING, PADDING, PADDING, PADDING );
+ _baseColorChooser = new BaseColorChooser();
+ _baseColorChooser.setPadding( PADDING, PADDING, PADDING, PADDING );
+ _baseColorChooser.setChangeListener( this );
+ add( _baseColorChooser );
+
+ _tintChooser = new TintChooser( initialColor );
+ _tintChooser.setPadding( PADDING, PADDING, PADDING, PADDING );
+ _tintChooser.setChangeListener( this );
+ add( _tintChooser );
+
+ VerticalFieldManager previewPane = new VerticalFieldManager();
+
+ _previewField = new ColorPreviewField( initialColor );
+ _previewField.setPadding( PADDING, PADDING, PADDING + PADDING_BOTTOM, PADDING );
+ previewPane.add( _previewField );
+
+ _okButton = new ButtonField( OK );
+ _okButton.setChangeListener( this );
+ previewPane.add( _okButton );
+
+ add( previewPane );
+ }
+
+ public void fieldChanged( Field field, int context ) {
+ field.setDirty( false ); // don't want the save dialog
+ if( field == _baseColorChooser ) {
+ // Get color from base chooser
+ // Update the tint chooser
+ // Update the result color
+ _tintChooser.setColor( _baseColorChooser.getSelectedColor() );
+ _previewField.setColor( _tintChooser.getSelectedColor() );
+ } else if( field == _tintChooser ) {
+ // Update the result color
+ _previewField.setColor( _tintChooser.getSelectedColor() );
+ } else if( field == _okButton ) {
+ close();
+ }
+ }
+
+ protected boolean keyChar( char key, int status, int time ) {
+ if( key == Characters.ESCAPE ) {
+ close();
+ return true;
+ } else if( key == Characters.ENTER ) {
+ close();
+ return true;
+ }
+ return super.keyChar( key, status, time );
+ }
+
+ public int getSelectedColor() {
+ return _tintChooser.getSelectedColor();
+ }
+
+ public boolean doModal() {
+ UiApplication.getUiApplication().pushModalScreen( this );
+ return true;
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/datetime/DateTimeDialog.java b/api/dialog/src/main/java/blackberry/ui/dialog/datetime/DateTimeDialog.java
new file mode 100644
index 0000000..8650e02
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/datetime/DateTimeDialog.java
@@ -0,0 +1,536 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package blackberry.ui.dialog.datetime;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import net.rim.device.api.i18n.SimpleDateFormat;
+import net.rim.device.api.ui.picker.DateTimePicker;
+
+import blackberry.ui.dialog.IWebWorksDialog;
+
+public class DateTimeDialog implements IWebWorksDialog {
+
+ private Html5DateTimeObject _HTML5Calendar;
+ private DateTimePicker _dateTimePicker = null;
+
+ public DateTimeDialog ( String type, String value, String min, String max ) {
+ if("date".equals(type)) {
+ _HTML5Calendar = new HTML5Date ( value );
+ } else if("month".equals(type)) {
+ _HTML5Calendar = new HTML5Month( value );
+ } else if("time".equals(type)) {
+ _HTML5Calendar = new HTML5Time( value );
+ } else if("datetime".equals(type)) {
+ _HTML5Calendar = new HTML5DateTimeGlobal( value );
+ } else if("local".equals(type)) {
+ _HTML5Calendar = new HTML5DateTimeLocal( value );
+ } else {
+ throw new IllegalArgumentException("Invalid date type.");
+ }
+
+ if ( _HTML5Calendar != null ) {
+ _HTML5Calendar.createDateTimePickerInstance();
+ if ( min != null && min.length() != 0 ) {
+ _HTML5Calendar.setMin( min );
+ }
+ if ( max != null && max.length() != 0 ) {
+ _HTML5Calendar.setMax( max );
+ }
+ }
+ }
+
+ public boolean show() {
+ return _dateTimePicker.doModal();
+ }
+
+ public Object getSelectedValue() {
+ SimpleDateFormat sdf = new SimpleDateFormat( _HTML5Calendar.getFormat().toString() );
+ StringBuffer sb = sdf.format( _dateTimePicker.getDateTime(), new StringBuffer(16), null );
+
+ return sb.toString();
+ }
+
+ private static int parseInt( String s, int from, int to ) {
+ return net.rim.device.api.util.NumberUtilities.parseInt( s, from, to, 10 );
+ }
+
+ private static void setMonth( Calendar calendar, int year, int month ) {
+ calendar.set(Calendar.DAY_OF_MONTH, 0);
+ calendar.set(Calendar.YEAR, year);
+ calendar.set(Calendar.MONTH, month);
+ }
+
+ private static void setTime( Calendar calendar, int hour, int minutes, int seconds, int milli) {
+ calendar.set(Calendar.HOUR_OF_DAY, hour);
+ calendar.set(Calendar.MINUTE, minutes);
+ calendar.set(Calendar.SECOND, seconds);
+ calendar.set(Calendar.MILLISECOND, milli);
+ }
+
+ public class HTML5Month extends Html5DateTimeObject {
+
+ public HTML5Month( String value ) {
+ if ( value != null && value.length() != 0 ) {
+ _html5Calendar = parse( value );
+ } else {
+ _html5Calendar = Calendar.getInstance();
+ }
+ }
+
+ public HTML5Month( ) {
+ }
+
+ public StringBuffer getFormat() {
+ if ( _format == null ) {
+ return new StringBuffer("yyyy-MM");
+ }
+ return _format;
+ }
+
+ public void createDateTimePickerInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ _dateTimePicker = DateTimePicker.createInstance( _html5Calendar, getFormat().toString(), null );
+ }
+
+ public void setMin( String value ) {
+ Calendar minCalendar = parse( value );
+ if ( minCalendar != null ) {
+ _dateTimePicker.setMinimumDate( minCalendar );
+ }
+ }
+
+ public void setMax( String value ) {
+ Calendar maxCalendar = parse( value );
+ if ( maxCalendar != null ) {
+ _dateTimePicker.setMaximumDate( maxCalendar );
+ }
+ }
+
+ protected Calendar parse( String text ) {
+ try {
+ _format = new StringBuffer( 7 );
+ int year = parseInt( text, 0, 4);
+ if( year <= 0 ) { throw new IllegalArgumentException(); }
+
+ if ( text.length() < 5 || text.charAt(4) != '-' ) { throw new IllegalArgumentException(); }
+
+ int month = parseInt( text, 5, 7 );
+ if( month <= 0 || month > 12 ) { throw new IllegalArgumentException(); }
+
+ Calendar calendar = getInstance();
+ setMonth( calendar, year, month );
+ _format.append( "yyyy-MM" );
+ //clear time so that it doesn't interfere when setting setMinimumCalendar and setMaximumCalendar
+ setTime( calendar, 0, 0, 0, 0 );
+
+ return calendar;
+ } catch (Exception e) {
+ _format = null;
+ return null;
+ }
+ }
+ }
+
+ public class HTML5Date extends Html5DateTimeObject {
+ private final int MONTH_LENGTH[] = {31,28,31,30,31,30,31,31,30,31,30,31};
+ private final int LEAP_MONTH_LENGTH[] = {31,29,31,30,31,30,31,31,30,31,30,31};
+
+ public HTML5Date( String value ) {
+ if ( value != null && value.length() != 0 ) {
+ _html5Calendar = parse( value );
+ } else {
+ _html5Calendar = Calendar.getInstance();
+ }
+ }
+
+ public HTML5Date() {
+ }
+
+ public StringBuffer getFormat() {
+ if ( _format == null ) {
+ return new StringBuffer("yyyy-MM-dd");
+ }
+ return _format;
+ }
+
+ public void createDateTimePickerInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ _dateTimePicker = DateTimePicker.createInstance( _html5Calendar, getFormat().toString(), null );
+ }
+
+ public void setMin( String value ) {
+ Calendar minCalendar = parse( value );
+ if ( minCalendar != null ) {
+ _dateTimePicker.setMinimumDate( minCalendar );
+ }
+ }
+
+ public void setMax( String value ) {
+ Calendar maxCalendar = parse( value );
+ if ( maxCalendar != null ) {
+ _dateTimePicker.setMaximumDate( maxCalendar );
+ }
+ }
+
+ protected Calendar parse( String text ) {
+ try {
+ int len = text.length();
+ //parse month
+ HTML5Month month = new HTML5Month();
+ Calendar calendar = month.parse( text );
+ _format = month.getFormat();
+
+ if ( text.length() < 8 || text.charAt(7) != '-' ) { throw new IllegalArgumentException() ;}
+
+ //parse day
+ int day = parseInt( text, 8, len );
+
+ if ( day < 1 || day > 31 ) { throw new IllegalArgumentException(); }
+
+ //combine month and day
+ //calendar.set( Calendar.DAY_OF_MONTH, 0 );
+ //((GregorianCalendar) calendar).roll( Calendar.DAY_OF_MONTH, day );
+
+ int mth = calendar.get(Calendar.MONTH);
+ System.out.println(Calendar.OCTOBER);
+
+ int min = 0;
+ int max = monthLength(mth, calendar.get(Calendar.YEAR));
+ // These are the standard roll instructions. These work for all
+ // simple cases, that is, cases in which the limits are fixed, such
+ // as the hour, the month, and the era.
+ int gap = max - min + 1;
+ int value = (day - min) % gap;
+ if (value < 0) value += gap;
+ value += min;
+
+ calendar.set( Calendar.DAY_OF_MONTH, value );
+
+ _format.append("-dd");
+ return calendar;
+ } catch (IllegalArgumentException e) {
+ _format = null;
+ return null;
+ }
+ }
+
+ private final int monthLength(int month, int year) {
+ return isLeapYear(year) ? LEAP_MONTH_LENGTH[month] : MONTH_LENGTH[month];
+ }
+
+ private boolean isLeapYear(int year) {
+ return ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)));
+ }
+ }
+
+ public class HTML5Time extends Html5DateTimeObject {
+
+ public HTML5Time( String value ) {
+ if ( value != null && value.length() != 0 ) {
+ _html5Calendar = parse( value );
+ } else {
+ _html5Calendar = Calendar.getInstance();
+ }
+ }
+
+ public HTML5Time() {
+ }
+
+ public StringBuffer getFormat() {
+ if ( _format == null ) {
+ return new StringBuffer("HH:mm:ss");
+ }
+ return _format;
+ }
+
+ public void createDateTimePickerInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ _dateTimePicker = DateTimePicker.createInstance( _html5Calendar, null, getFormat().toString() );
+ }
+
+ public void setMin( String value ) {
+ Calendar minCalendar = parse ( value );
+ if ( minCalendar != null ) {
+ _dateTimePicker.setMinimumDate( minCalendar );
+ }
+ }
+
+ public void setMax( String value ) {
+ Calendar maxCalendar = parse ( value );
+ if ( maxCalendar != null ) {
+ _dateTimePicker.setMaximumDate( maxCalendar );
+ }
+ }
+
+ public void step( double value ) {
+ //DateTimePickerController only accepts Calendar.HOUR,
+ //or Calendar.MINUTE or Calendar.SECOND
+ //and the value comes in second increments
+ if (value >= 3600) {
+ _dateTimePicker.setIncrement( Calendar.HOUR, ((int) value)/3600 );
+ }
+ else if (value >= 60) {
+ _dateTimePicker.setIncrement( Calendar.MINUTE, ((int) value)/60 );
+ }
+ else {
+ _dateTimePicker.setIncrement( Calendar.SECOND, (int) value );
+ }
+ }
+
+ protected Calendar parse( String text ) {
+ try {
+ _format = new StringBuffer( 5 );
+ int hour = parseInt( text, 0, 2 );
+ if( hour < 0 || hour > 23 ) { throw new IllegalArgumentException(); }
+
+ if ( text.length() < 3 || text.charAt(2) != ':' ) { throw new IllegalArgumentException(); }
+
+ int minutes = parseInt( text, 3, 5 );
+ if( minutes < 0 || minutes > 59 ) { throw new IllegalArgumentException(); }
+
+ Calendar calendar = getInstance();
+ int seconds = 0;
+
+ _format.append("HH:mm");
+
+ if ( text.length() > 5 ) { //parse seconds
+ if ( text.charAt(5) != ':' ) { throw new IllegalArgumentException(); }
+ seconds = parseInt( text, 6, 8 );
+ if( seconds < 0 || seconds > 59 ) { throw new IllegalArgumentException(); }
+
+ _format.append(":ss");
+
+ //parse milliseconds
+ if ( text.length() > 8 && text.charAt(8) == '.' ) {
+ _format.append(".");
+ StringBuffer sb = new StringBuffer();
+ for ( int i=9; i < text.length() ; i++ ) {
+ sb.append( text.charAt(i) );
+ _format.append("S");
+ }
+ int fracSeconds = parseInt( sb.toString(), 0, sb.toString().length() );
+ setTime( calendar, hour, minutes, seconds, fracSeconds );
+
+ } else { //no milliseconds
+ setTime( calendar, hour, minutes, seconds, 0 );
+ }
+ return calendar;
+
+ } else { // no seconds
+ setTime( calendar, hour, minutes, 0, 0 );
+ return calendar;
+ }
+ } catch (Exception e) {
+ _format = null;
+ return null;
+ }
+ }
+ }
+
+ public class HTML5DateTimeLocal extends Html5DateTimeObject {
+
+ public HTML5DateTimeLocal( String value ) {
+ if ( value != null && value.length() != 0 ) {
+ _html5Calendar = parse( value );
+ } else {
+ _html5Calendar = Calendar.getInstance();
+ }
+ }
+
+ public HTML5DateTimeLocal() {
+ }
+
+ public StringBuffer getFormat() {
+ if ( _format == null ) {
+ return new StringBuffer("yyyy-MM-dd'T'HH:mm");
+ }
+ return _format;
+ }
+
+ public void createDateTimePickerInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ _dateTimePicker = DateTimePicker.createInstance( _html5Calendar );
+ }
+
+ public void setMin( String value ) {
+ Calendar minCalendar = parse ( value );
+ if ( minCalendar != null ) {
+ _dateTimePicker.setMinimumDate( minCalendar );
+ }
+ }
+
+ public void setMax( String value ) {
+ Calendar maxCalendar = parse( value );
+ if ( maxCalendar != null ) {
+ _dateTimePicker.setMaximumDate( maxCalendar );
+ }
+ }
+
+ protected Calendar parse( String text ) {
+ try {
+ int len = text.length();
+ //parse date
+ HTML5Date date = new HTML5Date();
+ Calendar calendar = date.parse( text.substring( 0, 10 ) );
+ _format = date.getFormat();
+
+ //check for T
+ if ( text.indexOf( 'T',10 ) == -1 ) { throw new IllegalArgumentException(); }
+
+ _format.append("'T'");
+
+ //parse time
+ HTML5Time htime = new HTML5Time();
+ Calendar cTime = htime.parse( text.substring( 11, len ) );
+ _format.append( htime.getFormat() );
+
+ //combine date and time
+ setTime( calendar, cTime.get(Calendar.HOUR_OF_DAY) , cTime.get(Calendar.MINUTE), cTime.get(Calendar.SECOND), cTime.get(Calendar.MILLISECOND) );
+ return calendar;
+
+ } catch (IllegalArgumentException e) {
+ _format = null;
+ return null;
+ }
+ }
+ }
+
+ public class HTML5DateTimeGlobal extends Html5DateTimeObject {
+
+ public HTML5DateTimeGlobal( String value ) {
+ if ( value != null && value.length() != 0 ) {
+ _html5Calendar = parse( value );
+ } else {
+ _html5Calendar = Calendar.getInstance();
+ }
+ }
+
+ public HTML5DateTimeGlobal() {
+ }
+
+ public StringBuffer getFormat() {
+ if ( _format == null ) {
+ return new StringBuffer("yyyy-MM-dd'T'HH:mm'Z'");
+ }
+ return _format;
+ }
+
+ public void setMin( String value ) {
+ Calendar minCalendar = parse ( value );
+ if ( minCalendar != null ) {
+ _dateTimePicker.setMinimumDate( minCalendar );
+ }
+ }
+
+ public void setMax( String value ) {
+ Calendar maxCalendar = parse ( value );
+ if ( maxCalendar != null ) {
+ _dateTimePicker.setMaximumDate( maxCalendar );
+ }
+ }
+
+ public void createDateTimePickerInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ _dateTimePicker = DateTimePicker.createInstance( _html5Calendar );
+ }
+
+ protected Calendar parse ( String text ) {
+ try {
+ Calendar calendar;
+ int len = text.length();
+
+ if( text.charAt( len - 1 ) == 'Z' ) {
+ HTML5DateTimeLocal dtl = new HTML5DateTimeLocal();
+ calendar = dtl.parse( text.substring( 0, len - 1 ));
+ _format = dtl.getFormat();
+ _format.append("'Z'");
+ return calendar;
+ } else { // Time zone adjustment
+ int signloc = text.indexOf( '-', 10 );
+ if ( signloc == -1 ) {
+ signloc = text.indexOf( '+', 10 );
+ }
+
+ if ( signloc == -1 ) { throw new IllegalArgumentException(); }
+ String sign = text.substring ( signloc, signloc + 1 );
+
+ HTML5DateTimeLocal dtl = new HTML5DateTimeLocal();
+ calendar = dtl.parse( text.substring( 0, signloc) );
+ _format = dtl.getFormat();
+
+ HTML5Time htime = new HTML5Time();
+ Calendar timeShift = htime.parse( text.substring( len - 5, len ));
+ _format.append( htime.getFormat() );
+
+ int hour = timeShift.get( Calendar.HOUR_OF_DAY );
+ int minute = timeShift.get( Calendar.MINUTE );
+ if ( sign.charAt(0) == '-' ) {
+ hour = timeShift.get( Calendar.HOUR_OF_DAY ) * -1;
+ minute = timeShift.get( Calendar.MINUTE ) * -1;
+ }
+
+ long currentTime = calendar.getTime().getTime();
+ long adjustedTime = currentTime + (hour * 60 * 60 * 1000 + minute * 60 * 1000);
+
+ calendar.setTime(new Date(adjustedTime));
+
+ return calendar;
+ }
+ } catch (IllegalArgumentException e) {
+ _format = null;
+ return null;
+ }
+ }
+ }
+}
+
+abstract class Html5DateTimeObject {
+
+ protected Calendar _html5Calendar;
+ protected StringBuffer _format;
+
+ Html5DateTimeObject() {
+ _html5Calendar = Calendar.getInstance();
+ }
+
+ public Calendar getInstance() {
+ if ( _html5Calendar == null ) {
+ _html5Calendar = Calendar.getInstance();
+ }
+ return _html5Calendar;
+ }
+
+ protected abstract Calendar parse( String text );
+ public abstract void setMin( String value );
+ public abstract void setMax( String value );
+ public void step( double value ){
+ }
+ public abstract StringBuffer getFormat();
+ public abstract void createDateTimePickerInstance();
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/select/GPATools.java b/api/dialog/src/main/java/blackberry/ui/dialog/select/GPATools.java
new file mode 100644
index 0000000..6082928
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/select/GPATools.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package blackberry.ui.dialog.select;
+
+import net.rim.device.api.system.Bitmap;
+import net.rim.device.api.ui.Color;
+import net.rim.device.api.ui.Graphics;
+/**
+ *
+ * @author Patchou
+ * @version 1.01
+ *
+ */
+public class GPATools
+{
+ /**
+ * Resizes a bitmap with an alpha channel (transparency) without the artifacts introduced
+ * by scaleInto()
.
+ *
+ * @param bmpSrc Source Bitmap
+ * @param nWidth New Width
+ * @param nHeight New Height
+ * @param nFilterType Filter quality to use. Can be Bitmap.FILTER_LANCZOS
,
+ * Bitmap.FILTER_BILINEAR
or
+ * Bitmap.FILTER_BOX
.
+ * @param nAspectRatio Specifies how the picture is resized. Can be
+ * Bitmap.SCALE_TO_FIT
,
+ * Bitmap.SCALE_TO_FILL
or
+ * Bitmap.SCALE_STRETCH
.
+ * @return The resized Bitmap in a new object.
+ */
+ public static Bitmap ResizeTransparentBitmap(Bitmap bmpSrc, int nWidth, int nHeight, int nFilterType, int nAspectRatio)
+ {
+ if(bmpSrc == null)
+ return null;
+
+ //Get the original dimensions of the bitmap
+ int nOriginWidth = bmpSrc.getWidth();
+ int nOriginHeight = bmpSrc.getHeight();
+ if(nWidth == nOriginWidth && nHeight == nOriginHeight)
+ return bmpSrc;
+
+ //Prepare a drawing bitmap and graphic object
+ Bitmap bmpOrigin = new Bitmap(nOriginWidth, nOriginHeight);
+ Graphics graph = Graphics.create(bmpOrigin);
+
+ //Create a line of transparent pixels for later use
+ int[] aEmptyLine = new int[nWidth];
+ for(int x = 0; x < nWidth; x++)
+ aEmptyLine[x] = 0x00000000;
+ //Create two scaled bitmaps
+ Bitmap[] bmpScaled = new Bitmap[2];
+ for(int i = 0; i < 2; i++)
+ {
+ //Draw the bitmap on a white background first, then on a black background
+ graph.setColor((i == 0) ? Color.WHITE : Color.BLACK);
+ graph.fillRect(0, 0, nOriginWidth, nOriginHeight);
+ graph.drawBitmap(0, 0, nOriginWidth, nOriginHeight, bmpSrc, 0, 0);
+
+ //Create a new bitmap with the desired size
+ bmpScaled[i] = new Bitmap(nWidth, nHeight);
+ if(nAspectRatio == Bitmap.SCALE_TO_FIT)
+ {
+ //Set the alpha channel of all pixels to 0 to ensure transparency is
+ //applied around the picture, if needed by the transformation
+ for(int y = 0; y < nHeight; y++)
+ bmpScaled[i].setARGB(aEmptyLine, 0, nWidth, 0, y, nWidth, 1);
+ }
+
+ //Scale the bitmap
+ bmpOrigin.scaleInto(bmpScaled[i], nFilterType, nAspectRatio);
+ }
+
+ //Prepare objects for final iteration
+ Bitmap bmpFinal = bmpScaled[0];
+ int[][] aPixelLine = new int[2][nWidth];
+
+ //Iterate every line of the two scaled bitmaps
+ for(int y = 0; y < nHeight; y++)
+ {
+ bmpScaled[0].getARGB(aPixelLine[0], 0, nWidth, 0, y, nWidth, 1);
+ bmpScaled[1].getARGB(aPixelLine[1], 0, nWidth, 0, y, nWidth, 1);
+
+ //Check every pixel one by one
+ for(int x = 0; x < nWidth; x++)
+ {
+ //If the pixel was untouched (alpha channel still at 0), keep it transparent
+ if(((aPixelLine[0][x] >> 24) & 0xff) == 0)
+ aPixelLine[0][x] = 0x00000000;
+ else
+ {
+ //Compute the alpha value based on the difference of intensity
+ //in the red channel
+ int nAlpha = ((aPixelLine[1][x] >> 16) & 0xff) -
+ ((aPixelLine[0][x] >> 16) & 0xff) + 255;
+ if(nAlpha == 0)
+ aPixelLine[0][x] = 0x00000000; //Completely transparent
+ else if(nAlpha >= 255)
+ aPixelLine[0][x] |= 0xff000000; //Completely opaque
+ else
+ {
+ //Compute the value of the each channel one by one
+ int nRed = ((aPixelLine[0][x] >> 16 ) & 0xff);
+ int nGreen = ((aPixelLine[0][x] >> 8 ) & 0xff);
+ int nBlue = (aPixelLine[0][x] & 0xff);
+
+ nRed = (int)(255 + (255.0 * ((double)(nRed-255)/(double)nAlpha)));
+ nGreen = (int)(255 + (255.0 * ((double)(nGreen-255)/(double)nAlpha)));
+ nBlue = (int)(255 + (255.0 * ((double)(nBlue-255)/(double)nAlpha)));
+
+ if(nRed < 0) nRed = 0;
+ if(nGreen < 0) nGreen = 0;
+ if(nBlue < 0) nBlue = 0;
+ aPixelLine[0][x] = nBlue | (nGreen<<8) | (nRed<<16) | (nAlpha<<24);
+ }
+ }
+ }
+
+ //Change the pixels of this line to their final value
+ bmpFinal.setARGB(aPixelLine[0], 0, nWidth, 0, y, nWidth, 1);
+ }
+ return bmpFinal;
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/select/SelectDialog.java b/api/dialog/src/main/java/blackberry/ui/dialog/select/SelectDialog.java
new file mode 100644
index 0000000..2d69752
--- /dev/null
+++ b/api/dialog/src/main/java/blackberry/ui/dialog/select/SelectDialog.java
@@ -0,0 +1,351 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package blackberry.ui.dialog.select;
+
+import java.util.Vector;
+
+import net.rim.device.api.system.Bitmap;
+import net.rim.device.api.system.Characters;
+import net.rim.device.api.system.Display;
+import net.rim.device.api.ui.Color;
+import net.rim.device.api.ui.DrawStyle;
+import net.rim.device.api.ui.Field;
+import net.rim.device.api.ui.FieldChangeListener;
+import net.rim.device.api.ui.Font;
+import net.rim.device.api.ui.Graphics;
+import net.rim.device.api.ui.TouchEvent;
+import net.rim.device.api.ui.TouchGesture;
+import net.rim.device.api.ui.UiApplication;
+import net.rim.device.api.ui.component.ButtonField;
+import net.rim.device.api.ui.component.ListField;
+import net.rim.device.api.ui.component.ListFieldCallback;
+import net.rim.device.api.ui.component.SeparatorField;
+import net.rim.device.api.ui.container.PopupScreen;
+import net.rim.device.api.ui.container.VerticalFieldManager;
+
+import blackberry.ui.dialog.SelectAsyncFunction;
+import blackberry.ui.dialog.IWebWorksDialog;
+
+/**
+ * Implementation of selection dialog
+ *
+ * @author jachoi
+ *
+ */
+public class SelectDialog extends PopupScreen implements FieldChangeListener, IWebWorksDialog {
+
+ private ButtonField _doneButton;
+ private VerticalFieldManager _vfm;
+ private SelectListField _list;
+
+ private ListItem[] _listItems;
+ private Vector _response;
+
+ private int _choiceLength;
+ private boolean _allowMultiple;
+ private int _selectedIndex;
+
+ private boolean _dialogAccepted;
+
+ public SelectDialog( boolean allowMultiple, String[] labels, boolean[] enableds, boolean[] selecteds, int[] types ) {
+ super( new VerticalFieldManager( VERTICAL_SCROLL | VERTICAL_SCROLLBAR ) );
+ _choiceLength = labels.length;
+ _allowMultiple = allowMultiple;
+ _response = new Vector();
+ _selectedIndex = -1;
+ _dialogAccepted = false;
+
+ _listItems = new ListItem[ _choiceLength ];
+ int indexAssignment = 0;
+ for( int index = 0; index < _choiceLength; index++ ) {
+ if( _selectedIndex == -1 && selecteds[ index ] && enableds[ index ] ) {
+ _selectedIndex = index;
+ }
+ if( types[ index ] == SelectAsyncFunction.POPUP_ITEM_TYPE_OPTION ) {
+ _listItems[ index ] = new ListItem( labels[ index ], enableds[ index ], selecteds[ index ], types[ index ],
+ indexAssignment );
+ indexAssignment++;
+ } else {
+ _listItems[ index ] = new ListItem( labels[ index ], enableds[ index ], selecteds[ index ], types[ index ], -1 );
+ }
+ }
+
+ _list = new SelectListField();
+ _list.setChangeListener( this );
+ _vfm = new VerticalFieldManager( NO_HORIZONTAL_SCROLL | NO_HORIZONTAL_SCROLLBAR | VERTICAL_SCROLL | VERTICAL_SCROLLBAR );
+ _vfm.add( _list );
+ add( _vfm );
+
+ if( _allowMultiple ) {
+ _doneButton = new ButtonField( "Done", Field.FIELD_HCENTER );
+ _doneButton.setChangeListener( this );
+
+ add( new SeparatorField() );
+ add( _doneButton );
+ }
+ }
+
+ public boolean show() {
+ UiApplication.getUiApplication().pushModalScreen( this );
+ return _dialogAccepted;
+ }
+
+ private void close(boolean changeAccepted) {
+ _dialogAccepted = changeAccepted;
+ super.close();
+ }
+
+ public Object getSelectedValue() {
+ return _response;
+ }
+
+ public void fieldChanged( Field field, int arg1 ) {
+ for( int index = 0; index < _listItems.length; index++ ) {
+ if( _listItems[ index ].isSelected() ) {
+ _response.addElement( new Integer( _listItems[ index ].getIndex() ) );
+ }
+ }
+
+ close( true );
+ }
+
+ private void updateCurrentSelection( char keyChar ) {
+ // Ensure we were passed a valid key to locate.
+ if( keyChar == '\u0000' ) {
+ return;
+ } else {
+ int lastFieldIndex = _choiceLength - 1;
+ int indexWithFocus = _list.getSelectedIndex();
+
+ for( int i = indexWithFocus == lastFieldIndex ? 0 : indexWithFocus + 1; i != indexWithFocus; i++ ) {
+ String label = _listItems[ i ].toString();
+ if( label.indexOf( keyChar ) == 0 || label.substring( 0, 1 ).toLowerCase().indexOf( keyChar ) == 0 ) {
+ _list.setSelectedIndex( i );
+ break;
+ }
+ // Wrap around.
+ if( i == _choiceLength - 1 ) {
+ i = -1;
+ }
+ }
+ }
+ }
+
+ /* @Override */
+ protected boolean touchEvent( TouchEvent message ) {
+ switch( message.getEvent() ) {
+ case TouchEvent.GESTURE:
+ if( _allowMultiple && message.getGesture().getEvent() == TouchGesture.NAVIGATION_SWIPE ) {
+ int swipeDirection = message.getGesture().getSwipeDirection();
+ Field field = getLeafFieldWithFocus();
+ if( field instanceof ListField ) {
+ switch( swipeDirection ) {
+ case TouchGesture.SWIPE_EAST:
+ _doneButton.setFocus();
+ return true;
+ }
+ } else if( field instanceof ButtonField ) {
+ switch( swipeDirection ) {
+ case TouchGesture.SWIPE_NORTH:
+ case TouchGesture.SWIPE_WEST:
+ _list.setFocus();
+ _list.setSelectedIndex( _list._previousSelected );
+ return true;
+ }
+ }
+ }
+ }
+ return super.touchEvent( message );
+ }
+
+ /* @Override */
+ protected boolean keyChar( char c, int status, int time ) {
+ switch( c ) {
+ case Characters.ENTER:
+ Field field = getLeafFieldWithFocus();
+ if( field == _doneButton ) {
+ fieldChanged( _doneButton, -1 );
+ } else {
+ _list.invokeAction( Field.ACTION_INVOKE );
+ }
+ return true;
+ case Characters.ESCAPE:
+ close(false);
+ return true;
+ default:
+ updateCurrentSelection( c );
+ break;
+ }
+ return super.keyChar( c, status, time );
+ }
+
+ private final class SelectListField extends ListField implements ListFieldCallback {
+ private static final int PADDING = 10;
+ public int _previousSelected = -1;
+
+ SelectListField() {
+ setCallback( this );
+ setSize( _choiceLength );
+ setSelectedIndex( _selectedIndex );
+ }
+
+ protected void onUnfocus() {
+ _previousSelected = this.getSelectedIndex();
+ super.onUnfocus();
+ }
+
+ protected boolean invokeAction( int action ) {
+ if( action == Field.ACTION_INVOKE ) {
+ int selectedIndex = getSelectedIndex();
+ ListItem listItem = (ListItem) get( this, selectedIndex );
+
+ if( !listItem.isEnabled() || listItem.getType() == SelectAsyncFunction.POPUP_ITEM_TYPE_GROUP
+ || listItem.getType() == SelectAsyncFunction.POPUP_ITEM_TYPE_SEPARATOR ) {
+ return true;
+ }
+
+ if( !_allowMultiple ) {
+ if( _selectedIndex != -1 ) {
+ _listItems[ _selectedIndex ].setSelected( false );
+ }
+ listItem.setSelected( true );
+ _selectedIndex = selectedIndex;
+ fieldChanged( null, -1 );
+ } else {
+ listItem.setSelected( !listItem.isSelected() );
+ invalidate();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void drawListRow( ListField listField, Graphics graphics, int index, int y, int w ) {
+ Object obj = get( listField, index );
+ if( obj instanceof ListItem ) {
+ paintListItem( (ListItem) obj, listField, graphics, index, y, w );
+ }
+ }
+
+ private void paintListItem( ListItem listItem, ListField listField, Graphics graphics, int index, int y, int width ) {
+ String text = listItem.toString().trim();
+
+ int type = listItem.getType();
+ Font font = graphics.getFont();
+ final int checkboxSize = font.getHeight() - 6;
+ final int textStart = PADDING + checkboxSize + 10;
+
+ Bitmap checkWhite = GPATools.ResizeTransparentBitmap( Bitmap.getBitmapResource( "chk-white.png" ), checkboxSize,
+ checkboxSize, Bitmap.FILTER_BOX, Bitmap.SCALE_TO_FILL );
+ Bitmap checkBlue = GPATools.ResizeTransparentBitmap( Bitmap.getBitmapResource( "chk-blue.png" ), checkboxSize,
+ checkboxSize, Bitmap.FILTER_BILINEAR, Bitmap.SCALE_TO_FILL );
+ Bitmap boxEmpty = GPATools.ResizeTransparentBitmap( Bitmap.getBitmapResource( "box-empty.png" ), checkboxSize,
+ checkboxSize, Bitmap.FILTER_BILINEAR, Bitmap.SCALE_TO_FILL );
+
+ switch( type ) {
+ case SelectAsyncFunction.POPUP_ITEM_TYPE_SEPARATOR:
+ graphics.setColor( Color.GRAY );
+ int lineY = y + listField.getRowHeight() / 3;
+ graphics.drawLine( PADDING, lineY, width - PADDING, lineY );
+ break;
+ case SelectAsyncFunction.POPUP_ITEM_TYPE_GROUP:
+ graphics.setColor( Color.GRAY );
+ font = font.derive( Font.BOLD );
+ graphics.setFont( font );
+ graphics.drawText( text, PADDING, y, DrawStyle.ELLIPSIS, width - PADDING ); // no fudge added to y coordinate
+ break;
+ case SelectAsyncFunction.POPUP_ITEM_TYPE_OPTION:
+ boolean enabled = listItem.isEnabled();
+ if( !enabled ) {
+ graphics.setColor( Color.GRAY );
+ }
+
+ if( _allowMultiple ) {
+ graphics.drawBitmap( PADDING, y + 3, checkboxSize, checkboxSize, boxEmpty, 0, 0 );
+ }
+
+ if( listItem.isSelected() ) {
+ if( _allowMultiple ) {
+ graphics.drawBitmap( PADDING, y + 3, checkboxSize, checkboxSize, checkBlue, 0, 0 );
+ } else {
+ graphics.drawBitmap( PADDING, y + 3, checkboxSize, checkboxSize, checkWhite, 0, 0 );
+ }
+ }
+
+ graphics.drawText( text, textStart, y, DrawStyle.ELLIPSIS, width - textStart ); // no fudge added to y
+ // coordinate
+ break;
+ default:
+ }
+ }
+
+ public Object get( ListField list, int index ) {
+ return _listItems[ index ];
+ }
+
+ public int getPreferredWidth( ListField arg0 ) {
+ return Display.getWidth();
+ }
+
+ public int indexOfList( ListField arg0, String arg1, int arg2 ) {
+ return -1;
+ }
+ }
+
+ /*
+ * Store choice information.
+ */
+ private static final class ListItem {
+ private final String _label;
+ private boolean _selected;
+ private boolean _enabled;
+ private int _type;
+ private int _index;
+
+ public ListItem( String label, boolean enabled, boolean selected, int type, int index ) {
+ _label = label;
+ _selected = selected;
+ _enabled = enabled;
+ _type = type;
+ _index = index;
+ }
+
+ /* @Override */
+ public String toString() {
+ return _label;
+ }
+
+ public void setSelected( boolean value ) {
+ _selected = value;
+ }
+
+ public boolean isSelected() {
+ return _selected;
+ }
+
+ public boolean isEnabled() {
+ return _enabled;
+ }
+
+ public int getType() {
+ return _type;
+ }
+
+ public int getIndex() {
+ return _index;
+ }
+ }
+}
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/select/box-empty.png b/api/dialog/src/main/java/blackberry/ui/dialog/select/box-empty.png
new file mode 100644
index 0000000..16f0b0d
Binary files /dev/null and b/api/dialog/src/main/java/blackberry/ui/dialog/select/box-empty.png differ
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-blue.png b/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-blue.png
new file mode 100644
index 0000000..6d2a1d0
Binary files /dev/null and b/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-blue.png differ
diff --git a/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-white.png b/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-white.png
new file mode 100644
index 0000000..531c8df
Binary files /dev/null and b/api/dialog/src/main/java/blackberry/ui/dialog/select/chk-white.png differ
diff --git a/api/system.event/js/common/system_event_dispatcher.js b/api/system.event/js/common/system_event_dispatcher.js
index faaf52a..f66272d 100644
--- a/api/system.event/js/common/system_event_dispatcher.js
+++ b/api/system.event/js/common/system_event_dispatcher.js
@@ -13,62 +13,94 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-(function () {
- var OK = 0;
- var FUNCTION_ON_COVERAGE_CHANGE = "onCoverageChange";
- var FUNCTION_ON_HARDWARE_KEY = "onHardwareKey";
-
- var _callbacks = {};
-
- function SystemEventDispatcher() {
- };
-
- function poll(evt, args, handler) {
- if (evt == FUNCTION_ON_HARDWARE_KEY) {
- var keyCallbacks = _callbacks[evt];
- keyCallbacks = keyCallbacks || {};
- keyCallbacks[args["get"]["key"]] = handler;
- _callbacks[evt] = keyCallbacks;
- } else {
- _callbacks[evt] = handler;
- }
-
- blackberry.transport.poll("blackberry/system/event/" + evt, args, function(response) {
- if (response.code < OK) {
- // do not invoke callback unless return code is OK
+(function () {
+ var OK = 0,
+ CHANNEL_CLOSED = 1,
+ _polling = false,
+ FUNCTION_ON_COVERAGE_CHANGE = "onCoverageChange",
+ FUNCTION_ON_HARDWARE_KEY = "onHardwareKey",
+ _callbacks = {};
+
+ function poll() {
+
+ blackberry.transport.poll("blackberry/system/event/poll", {}, function(response) {
+ // do not invoke callback unless return code is OK (negative codes for errors, or channel closed from Java side)
+ // stop polling if response code is not OK
+ if (response.code < OK || response.code === CHANNEL_CLOSED) {
+ _polling = false;
return false;
}
-
- var func;
-
- if (evt == FUNCTION_ON_HARDWARE_KEY) {
- func = _callbacks[evt][response.data["key"]];
- } else {
- func = _callbacks[evt];
- }
-
- if (func) {
+
+ var event = response.data.event,
+ func = (event === FUNCTION_ON_HARDWARE_KEY) ? _callbacks[event][response.data.arg] : _callbacks[event];
+
+ if (typeof(func) !== "undefined") {
func();
}
return !!func;
});
- };
-
- function initPoll(evt, args, handler) {
- args = args || {};
-
- args["monitor"] = (handler ? true : false);
-
- poll(evt, { "get" : args }, handler);
- };
+
+ }
+
+ function registerForEvent(evt, args) {
+ blackberry.transport.call(
+ "blackberry/system/event/register",
+ { get : { event : evt, arg : args } },
+ function(response) {
+ if(response.code < OK) {
+ throw new Error("Unable to register event handler for " + evt + ". Implementation returned: " + response.code);
+ }
+ }
+ );
+
+ if(!_polling) {
+ _polling = true;
+ poll();
+ }
+ }
+
+ function unregisterForEvent(evt, args) {
+ blackberry.transport.call(
+ "blackberry/system/event/unregister",
+ { get : { event : evt, arg : args } },
+ function(response) {
+ if(response.code < OK) {
+ throw new Error("Unable to unregister event handler for " + evt + ". Implementation returned: " + response.code);
+ }
+ }
+ );
+ }
+
+ function SystemEventDispatcher() {
+ _callbacks[FUNCTION_ON_COVERAGE_CHANGE] = {};
+ _callbacks[FUNCTION_ON_HARDWARE_KEY] = {};
+ }
SystemEventDispatcher.prototype.onCoverageChange = function(onSystemEvent) {
- initPoll(FUNCTION_ON_COVERAGE_CHANGE, {}, onSystemEvent);
+ var listen = (typeof(onSystemEvent) === "function"),
+ alreadyListening = (typeof(_callbacks[FUNCTION_ON_COVERAGE_CHANGE]) === "function");
+
+ if(listen) {
+ //Update the callback reference
+ _callbacks[FUNCTION_ON_COVERAGE_CHANGE] = onSystemEvent;
+
+ //If we are already listening, don't re-register
+ if(!alreadyListening) {
+ //Start listening for this event
+ registerForEvent(FUNCTION_ON_COVERAGE_CHANGE);
+ }
+ } else {
+ //Update the callback reference
+ _callbacks[FUNCTION_ON_COVERAGE_CHANGE] = undefined;
+ if(alreadyListening) {
+ unregisterForEvent(FUNCTION_ON_COVERAGE_CHANGE);
+ }
+ }
};
- SystemEventDispatcher.prototype.onHardwareKey = function(key, onSystemEvent) {
+ SystemEventDispatcher.prototype.onHardwareKey = function(onSystemEvent, key) {
switch (key) {
case blackberry.system.event.KEY_BACK:
case blackberry.system.event.KEY_MENU:
@@ -82,9 +114,27 @@
default:
throw new Error("key parameter must be one of the pre-defined KEY_* constants");
}
-
- initPoll(FUNCTION_ON_HARDWARE_KEY, { "key" : key }, onSystemEvent);
+
+ var listen = (typeof(onSystemEvent) === "function"),
+ alreadyListening = (typeof(_callbacks[FUNCTION_ON_HARDWARE_KEY][key]) === "function");
+
+ if(listen) {
+ //Update the callback reference
+ _callbacks[FUNCTION_ON_HARDWARE_KEY][key] = onSystemEvent;
+
+ //Only register with the implementation if we're not already listening
+ if(!alreadyListening) {
+ //Start listening for this event
+ registerForEvent(FUNCTION_ON_HARDWARE_KEY, key);
+ }
+ } else {
+ //Update the callback reference
+ _callbacks[FUNCTION_ON_HARDWARE_KEY][key] = undefined;
+ if(alreadyListening) {
+ unregisterForEvent(FUNCTION_ON_HARDWARE_KEY, key);
+ }
+ }
};
blackberry.Loader.javascriptLoaded("blackberry.system.event", SystemEventDispatcher);
-})();
+}());
diff --git a/api/system.event/js/common/system_event_ns.js b/api/system.event/js/common/system_event_ns.js
index b93db80..6b8d2e2 100644
--- a/api/system.event/js/common/system_event_ns.js
+++ b/api/system.event/js/common/system_event_ns.js
@@ -18,7 +18,7 @@
function SystemEvent(disp) {
this.onCoverageChange = function(onSystemEvent) { return disp.onCoverageChange(onSystemEvent); };
- this.onHardwareKey = function(key, onSystemEvent) { return disp.onHardwareKey(key, onSystemEvent); };
+ this.onHardwareKey = function(key, onSystemEvent) { return disp.onHardwareKey(onSystemEvent, key); };
}
SystemEvent.prototype.__defineGetter__("KEY_BACK", function() { return 0; });
diff --git a/api/system.event/src/main/java/blackberry/system/event/CoverageChangeHandler.java b/api/system.event/src/main/java/blackberry/system/event/CoverageChangeHandler.java
new file mode 100644
index 0000000..a3a8337
--- /dev/null
+++ b/api/system.event/src/main/java/blackberry/system/event/CoverageChangeHandler.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package blackberry.system.event;
+
+import blackberry.system.event.ISystemEventListener;
+
+import net.rim.device.api.system.CoverageInfo;
+import net.rim.device.api.system.CoverageStatusListener;
+
+/**
+ * Coverage listener implementation. Proxy for system coverage listener that
+ * notifies manager generically of coverage change events.
+ *
+ * @author ababut
+ */
+public class CoverageChangeHandler {
+ private ISystemEventListener _manager;
+
+ private CoverageStatusListener _currentCoverageMonitor;
+
+ CoverageChangeHandler(ISystemEventListener manager) {
+ _manager = manager;
+ }
+
+ /**
+ * Creates a listener if not present and registers it.
+ *
+ */
+ public void listen() {
+ if( _currentCoverageMonitor == null ) {
+ _currentCoverageMonitor = new CoverageStatusListener() {
+ public void coverageStatusChanged( int newCoverage ) {
+ //Notify manager of coverage changed event
+ //TODO: Add new coverage to the event argument if JS cares about it
+ _manager.onSystemEvent(_manager.EVENT_COV_CHANGE, "");
+ }
+ };
+
+ CoverageInfo.addListener(_currentCoverageMonitor);
+ }
+ }
+
+ /**
+ * Removes system listener if present.
+ *
+ */
+ public void stopListening() {
+ if(_currentCoverageMonitor != null) {
+ CoverageInfo.removeListener(_currentCoverageMonitor);
+ //Explicitly null it out to avoid memory leaks
+ _currentCoverageMonitor = null;
+ }
+ }
+
+ /**
+ * Indicates listener status
+ *
+ * @return true if listener is active
+ */
+ public boolean isListening() {
+ return (_currentCoverageMonitor != null);
+ }
+}
diff --git a/api/system.event/src/main/java/blackberry/system/event/EventQueue.java b/api/system.event/src/main/java/blackberry/system/event/EventQueue.java
new file mode 100644
index 0000000..82a27f1
--- /dev/null
+++ b/api/system.event/src/main/java/blackberry/system/event/EventQueue.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package blackberry.system.event;
+
+import java.util.Vector;
+import blackberry.system.event.SystemEventReturnValue;
+
+ /** Thread safe queue implementation based on Vector.
+ *
+ * @author ababut
+ */
+public class EventQueue {
+ private Vector _queue;
+ private Object _lock;
+
+ EventQueue() {
+ _queue = new Vector();
+ _lock = new Object();
+ }
+
+ /**
+ * Queues a SystemReturnValue object and signals the lock that there are items
+ * waiting.
+ *
+ * @param event the event to queue up
+ */
+ public void enqueue(SystemEventReturnValue event) {
+ synchronized(_lock) {
+ _queue.addElement(event);
+ _lock.notify();
+ }
+ }
+
+ /**
+ * Removes first SystemReturnValue object in queue. If queue is empty, wait
+ * on lock until signalled.
+ *
+ * @param event the event to queue up
+ */
+ public SystemEventReturnValue dequeueWaitIfEmpty() {
+ SystemEventReturnValue result = null;
+
+ if(_queue.isEmpty()) {
+ try {
+ synchronized(_lock) {
+ _lock.wait();
+ }
+ } catch(InterruptedException e) {
+ System.out.println("InterrupedException while waiting on event queue");
+ throw new RuntimeException("Polling thread interrupted while waiting.");
+ }
+
+ }
+
+ synchronized(_lock) {
+ result = (SystemEventReturnValue)_queue.elementAt(0);
+ _queue.removeElementAt(0);
+ }
+
+ return result;
+ }
+}
diff --git a/api/system.event/src/main/java/blackberry/system/event/ISystemEventExtensionConstants.java b/api/system.event/src/main/java/blackberry/system/event/ISystemEventExtensionConstants.java
deleted file mode 100644
index dd5ddb7..0000000
--- a/api/system.event/src/main/java/blackberry/system/event/ISystemEventExtensionConstants.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2010-2011 Research In Motion Limited.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package blackberry.system.event;
-
-/**
- * interface ISystemEventExtensionConstants
contains constants
- * which are need by SystemEventExtension
- * @author rtse
- */
-public interface ISystemEventExtensionConstants {
- // Feature name
- public final static String FEATURE_ID = "blackberry.system.event";
-
- public static final String REQ_FUNCTION_ON_HARDWARE_KEY = "onHardwareKey";
- public static final String REQ_FUNCTION_ON_COVERAGE_CHANGE = "onCoverageChange";
-
- public static final String ARG_MONITOR = "monitor";
- public static final String ARG_KEY = "key";
-
- public static final String KEY_BACK = "KEY_BACK";
- public static final String KEY_MENU = "KEY_MENU";
- public static final String KEY_CONVENIENCE_1 = "KEY_CONVENIENCE_1";
- public static final String KEY_CONVENIENCE_2 = "KEY_CONVENIENCE_2";
- public static final String KEY_STARTCALL = "KEY_STARTCALL";
- public static final String KEY_ENDCALL = "KEY_ENDCALL";
- public static final String KEY_VOLUME_UP = "KEY_VOLUMEUP";
- public static final String KEY_VOLUME_DOWN = "KEY_VOLUMEDOWN";
-
- public static final int IKEY_BACK = 0;
- public static final int IKEY_MENU = 1;
- public static final int IKEY_CONVENIENCE_1 = 2;
- public static final int IKEY_CONVENIENCE_2 = 3;
- public static final int IKEY_STARTCALL = 4;
- public static final int IKEY_ENDCALL = 5;
- public static final int IKEY_VOLUME_DOWN = 6;
- public static final int IKEY_VOLUME_UP = 7;
-}
diff --git a/api/system.event/src/main/java/blackberry/system/event/ISystemEventListener.java b/api/system.event/src/main/java/blackberry/system/event/ISystemEventListener.java
new file mode 100644
index 0000000..d471140
--- /dev/null
+++ b/api/system.event/src/main/java/blackberry/system/event/ISystemEventListener.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package blackberry.system.event;
+
+ /** Interface implemented by the class that will generically signalled that
+ * an event has occurred. Contains several constants for convenience.
+ *
+ * @author ababut
+ */
+public interface ISystemEventListener {
+
+ static final String EVENT_COV_CHANGE = "onCoverageChange";
+ static final String EVENT_HARDWARE_KEY = "onHardwareKey";
+
+ void onSystemEvent(String event, String eventArg);
+
+}
diff --git a/api/system.event/src/main/java/blackberry/system/event/KeyPressHandler.java b/api/system.event/src/main/java/blackberry/system/event/KeyPressHandler.java
new file mode 100644
index 0000000..7020a1b
--- /dev/null
+++ b/api/system.event/src/main/java/blackberry/system/event/KeyPressHandler.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package blackberry.system.event;
+
+import net.rim.device.api.system.Application;
+import net.rim.device.api.system.KeyListener;
+import net.rim.device.api.ui.Keypad;
+
+/**
+ * Key listener implementation. Proxy for system key listener that
+ * notifies manager generically of relevant key events.
+ *
+ * @author ababut
+ */
+class KeyPressHandler {
+ private static final int IKEY_BACK = 0;
+ private static final int IKEY_MENU = 1;
+ private static final int IKEY_CONVENIENCE_1 = 2;
+ private static final int IKEY_CONVENIENCE_2 = 3;
+ private static final int IKEY_STARTCALL = 4;
+ private static final int IKEY_ENDCALL = 5;
+ private static final int IKEY_VOLUME_DOWN = 6;
+ private static final int IKEY_VOLUME_UP = 7;
+
+ private ISystemEventListener _manager;
+
+ private KeyListener _keyMonitor;
+
+ private boolean[] _listenerForKey = new boolean[] { false, false, false, false, false, false, false, false};
+
+ KeyPressHandler(ISystemEventListener manager) {
+ _manager = manager;
+ }
+
+ /**
+ * Creates a listener if not present and registers it. Listener is active if
+ * we are listening for at least one key.
+ *
+ * @param forKey the key code to listen for
+ */
+ public void listen(String forKey) {
+ int keyToListenFor = Integer.parseInt(forKey);
+
+ if(keyToListenFor < 0 || keyToListenFor > _listenerForKey.length) {
+ throw new IllegalArgumentException("Invalid key code requested [" + keyToListenFor + "]");
+ }
+
+ if(_keyMonitor == null) {
+
+ //Anonymous implementation of the net.rim.device.api.system.KeyListener interface
+ _keyMonitor = new KeyListener() {
+
+ /**
+ * @see net.rim.device.api.system.KeyListener#keyDown(int, int)
+ */
+ public boolean keyDown( int keycode, int time ) {
+ int keyPressed = Keypad.key( keycode );
+ int event;
+
+ switch( keyPressed ) {
+ case Keypad.KEY_CONVENIENCE_1:
+ event = IKEY_CONVENIENCE_1;
+ break;
+ case Keypad.KEY_CONVENIENCE_2:
+ event = IKEY_CONVENIENCE_2;
+ break;
+ case Keypad.KEY_MENU:
+ event = IKEY_MENU;
+ break;
+ case Keypad.KEY_SEND:
+ event = IKEY_STARTCALL;
+ break;
+ case Keypad.KEY_END:
+ event = IKEY_ENDCALL;
+ break;
+ case Keypad.KEY_ESCAPE:
+ event = IKEY_BACK;
+ break;
+ case Keypad.KEY_VOLUME_DOWN:
+ event = IKEY_VOLUME_DOWN;
+ break;
+ case Keypad.KEY_VOLUME_UP:
+ event = IKEY_VOLUME_UP;
+ break;
+ default:
+ return false;
+ }
+
+ //If we're listening for this hardware key, queue up an event for it
+ if(_listenerForKey[event]) {
+ _manager.onSystemEvent(_manager.EVENT_HARDWARE_KEY, String.valueOf(event));
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @see net.rim.device.api.system.KeyListener#keyChar(char, int, int)
+ */
+ public boolean keyChar( char arg0, int arg1, int arg2 ) {
+ return false;
+ }
+
+ /**
+ * @see net.rim.device.api.system.KeyListener#keyRepeat(int, int)
+ */
+ public boolean keyRepeat( int arg0, int arg1 ) {
+ return false;
+ }
+
+ /**
+ * @see net.rim.device.api.system.KeyListener#keyStatus(int, int)
+ */
+ public boolean keyStatus( int arg0, int arg1 ) {
+ return false;
+ }
+
+ /**
+ * @see net.rim.device.api.system.KeyListener#keyUp(int, int)
+ */
+ public boolean keyUp( int arg0, int arg1 ) {
+ return false;
+ }
+ };
+
+ Application.getApplication().addKeyListener(_keyMonitor);
+ }
+
+ //Mark our event as listening
+ _listenerForKey[keyToListenFor] = true;
+ }
+
+ /**
+ * Unregisters a listener for a given key.
+ *
+ * @param forKey the key code to stop listening for
+ */
+ public void stopListening(String forKey) {
+ int keyToStop = Integer.parseInt(forKey);
+
+ if(keyToStop < 0 || keyToStop > _listenerForKey.length) {
+ throw new IllegalArgumentException("Invalid key code requested [" + keyToStop + "]");
+ }
+
+ //Mark key as not listening
+ _listenerForKey[keyToStop] = false;
+
+ //De-register application listener if we are no longer listening for any keys
+ if(!isListening()) {
+ Application.getApplication().removeKeyListener(_keyMonitor);
+ _keyMonitor = null;
+ }
+ }
+
+ /**
+ * Unregisters all active listeners.
+ */
+ public void stopListeningToAll() {
+ for(int i = _listenerForKey.length - 1; i >= 0; i--) {
+ if (_listenerForKey[i]) stopListening(String.valueOf(i));
+ }
+ }
+
+ /**
+ * Indicates listener status
+ *
+ * @return true if listener is active
+ */
+ public boolean isListening() {
+ for(int i = _listenerForKey.length - 1; i >= 0; i--) {
+ if (_listenerForKey[i]) return true;
+ }
+
+ return false;
+ }
+}
diff --git a/api/system.event/src/main/java/blackberry/system/event/SystemEventExtension.java b/api/system.event/src/main/java/blackberry/system/event/SystemEventExtension.java
index be6de94..87b76c5 100644
--- a/api/system.event/src/main/java/blackberry/system/event/SystemEventExtension.java
+++ b/api/system.event/src/main/java/blackberry/system/event/SystemEventExtension.java
@@ -13,304 +13,119 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package blackberry.system.event;
-import java.util.Vector;
-
import org.w3c.dom.Document;
import net.rim.device.api.browser.field2.BrowserField;
import net.rim.device.api.script.ScriptEngine;
-import net.rim.device.api.system.CoverageInfo;
-import net.rim.device.api.system.CoverageStatusListener;
-import net.rim.device.api.system.KeyListener;
-import net.rim.device.api.ui.Keypad;
-import net.rim.device.api.util.IntEnumeration;
-import net.rim.device.api.util.IntHashtable;
+
import net.rim.device.api.util.SimpleSortingVector;
import net.rim.device.api.web.WidgetConfig;
import net.rim.device.api.web.WidgetException;
import blackberry.common.util.JSUtilities;
-import blackberry.common.util.json4j.JSONObject;
+
import blackberry.core.IJSExtension;
import blackberry.core.JSExtensionRequest;
import blackberry.core.JSExtensionResponse;
-import blackberry.core.JSExtensionReturnValue;
+
+import blackberry.system.event.SystemEventManager;
+import blackberry.system.event.SystemEventReturnValue;
/**
* JavaScript extension for blackberry.system.event
*
* Uses long-polling to handle callbacks.
*
- * When user starts listening for an event (by specifying a callback function), the following happens:
+ * When a callback is registered in JavaScript, the following sequence of events takes place:
*
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +Sum | +$180 | + + +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
Month | +Savings | +
---|---|
January | +$100 | +
February | +$80 | +
Sum | +$180 | +
dp.SyntaxHighlighter Version: {V}©2004-2005 Alex Gorbatchev. All right reserved. |
' + code + ''; + + if (print) { + YAHOO.lang.later(1000, win, function() { + win.focus(); + win.print(); + win.focus(); + }); + } + }, + handleClick = function(e) { + var tar = Event.getTarget(e); + if (tar.tagName.toLowerCase() == 'a') { + var type = tar.innerHTML.replace(/ /g, ''); + switch (type) { + case 'print': + openWindow(tar.parentNode.parentNode, true); + break; + case 'viewplain': + openWindow(tar.parentNode.parentNode); + break; + case 'togglelinenumbers': + if (Dom.hasClass(tar.parentNode.parentNode, 'yui-syntax-highlight-linenumbers')) { + Dom.removeClass(tar.parentNode.parentNode, 'yui-syntax-highlight-linenumbers') + } else { + Dom.addClass(tar.parentNode.parentNode, 'yui-syntax-highlight-linenumbers') + } + break; + case 'copy': + break; + } + } + Event.stopEvent(e); + }, + init = function() { + items = Dom.getElementsByClassName('yui-syntax-highlight'); + for (var i = 0; i < items.length; i++) { + var header = document.createElement('div'); + header.className = 'syn-header hidden'; + header.innerHTML = 'view plain | print | toggle line numbers'; + Event.on(header, 'click', handleClick); + items[i].insertBefore(header, items[i].firstChild); + Event.on(items[i], 'mouseenter', function(e) { + var tar = Dom.getElementsByClassName('syn-header', 'div', Event.getTarget(e)); + Dom.removeClass(tar, 'hidden'); + }); + Event.on(items[i], 'mouseleave', function(e) { + var tar = Dom.getElementsByClassName('syn-header', 'div', Event.getTarget(e)); + Dom.addClass(tar, 'hidden'); + }); + } + }; + + + var loader = new YAHOO.util.YUILoader({ + require: ["event-mouseenter"], + base: '../../../2.x/build/', + onSuccess: init, + timeout: 10000 + }); + loader.insert(); + + +})(); + +/* +if (YUI) { + YUI(yuiConfig).use('node', 'event-mouseenter', 'later', function(Y) { + var items = Y.all('.yui-syntax-highlight'), + openWindow = function(node, print) { + var n = Y.get('#' + node.get('id') + '-plain'), + code = n.get('value'), win = null, + h = n.get('offsetHeight'); + + code = code.replace(//g, '>'); + win = window.open('', "codeview", "status=0,scrollbars=1,width=600,height=400,menubar=0,toolbar=0,directories=0"); + win.document.body.innerHTML = '
' + code + ''; + + if (print) { + Y.later(1000, win, function() { + win.focus(); + win.print(); + win.focus(); + }); + } + }, + handleClick = function(e) { + if (e.target.get('tagName').toLowerCase() == 'a') { + var type = e.target.get('innerHTML').replace(/ /g, ''); + switch (type) { + case 'print': + openWindow(e.target.get('parentNode.parentNode'), true); + break; + case 'viewplain': + openWindow(e.target.get('parentNode.parentNode')); + break; + case 'togglelinenumbers': + e.target.get('parentNode.parentNode').toggleClass('yui-syntax-highlight-linenumbers'); + break; + case 'copy': + break; + } + } + e.halt(); + }; + + + + items.each(function(i) { + //var header = Y.Node.create(' '); + var header = Y.Node.create(' '); + header.on('click', handleClick); + i.insertBefore(header, i.get('firstChild')); + i.on('mouseenter', function() { + header.removeClass('hidden'); + }); + i.on('mouseleave', function() { + header.addClass('hidden'); + }); + }); + }); +} +*/ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui-candy.jpg b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui-candy.jpg new file mode 100644 index 0000000..6c61b95 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui-candy.jpg differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.css new file mode 100644 index 0000000..20c5497 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.css @@ -0,0 +1,416 @@ +/* +Copyright (c) 2007, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.4.0 +*/ +html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}legend{color:#000;} + +body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;} + +body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.301em;min-width:750px;}#doc2{width:73.074em;*width:71.313em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.117em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.3207em;*width:12.0106em;}.yui-t1 #yui-main .yui-b{margin-left:13.3207em;*margin-left:13.0106em;}.yui-t2 .yui-b{float:left;width:13.8456em;*width:13.512em;}.yui-t2 #yui-main .yui-b{margin-left:14.8456em;*margin-left:14.512em;}.yui-t3 .yui-b{float:left;width:23.0759em;*width:22.52em;}.yui-t3 #yui-main .yui-b{margin-left:24.0759em;*margin-left:23.52em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.512em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.512em;}.yui-t5 .yui-b{float:right;width:18.4608em;*width:18.016em;}.yui-t5 #yui-main .yui-b{margin-right:19.4608em;*margin-right:19.016em;}.yui-t6 .yui-b{float:right;width:23.0759em;*width:22.52em;}.yui-t6 #yui-main .yui-b{margin-right:24.0759em;*margin-right:23.52em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gb .yui-u,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;margin-left:2%;width:32%;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:.8%;}.yui-gb .yui-u{float:right;}.yui-gb div.first{margin-left:0;float:left;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-g div.first,.yui-gc div.first,.yui-gc div.first div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first{float:left;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g div.first{*margin:0;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-gc div.first,.yui-gc div.first,.yui-gd .yui-g,.yui-gd .yui-u{width:66%;}.yui-gd div.first,.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf div.first{width:24%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first {float:left;}.yui-ge div.first,.yui-gf .yui-g,.yui-gf .yui-u{width:74.2%;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}.yui-gb .yui-u{float:left;} + +blockquote,ul,ol,dl { + margin:1em; +} +ol,ul,dl { + margin-left:2em; +} +ol li { + list-style: decimal outside; +} +ul li { + list-style: disc outside; +} + +/*begin YDN/YUI styles*/ +#bd {padding-top:1em;} +.yui-gb:after{clear:none;} +#doc3 {min-width:950px;} +h1, h2, h3, h4, h5, h6 {font-weight:bold; color:#E76300;} +h1, h2, h3, h4, h5, h6, p {line-height:1.2em; font-size:100%; margin:1em 0 0 0;} +h1.first-content, h2.first-content, h3.first-content {margin-top:0; padding-top:0; border:none;} /*if an h is the first thing on the page or in a section, it should be flush with the top border of its content area; otherwise, its content area should be padded to create space.*/ +p { margin-bottom:1em } +h1 { font-size: 136%; padding:0; padding-top:18px} +.wiki h1 { font-size: 120%; padding:0; margin-bottom:1em} +h2 { font-size: 110%; margin-top:1.5em; margin-bottom:.2em; padding:1em 0 0 0; border-top:1px dashed #C3D2DC;} +h2.first { border-top:none; margin-top:0; margin-bottom:.2em;} +#doc3 h2.first { float:none; /*float specified to resolve conflict on generic float declaration for .first in grids*/} +h4 {margin-top:1em; color: #000;} +ul, ol, dl, dd {margin-left:30px;} +dt { font-weight:bold; } +ul, ol {margin-bottom:.7em;} +ul {list-style:disc;} +ol {list-style:decimal;} +strong {font-weight:bold;} +em {font-style:italic;} + +a, a code {color:#0000de;} +a:visited, a:visited code {color:#639;} +a:active, a:active code {color: #f00;} + +h1 a { color:#E76300; } +h1 a:visited {color:#E76300} + +#logo_pane { display: none; } + +#ygma { margin:.5em auto 1em auto; } + +#bd ol {} +#bd ol li p { margin-left:0} +#bd ol li ol {list-style:lower-alpha} +#bd ol li ol li {margin-bottom:1em} +#bd ol li ol li ol{list-style:lower-roman} +#bd ol li ol li ol li {margin-bottom:1em} + +#bd p.errormessage {background:url(http://l.yimg.com/a/i/us/search/gr/alertbubble.gif) 0 0 no-repeat; padding-left:30px; margin:2em 2em 2em 1em; font-weight:bold} + +/*formerly #bd targeting*/ +ul {margin-top:2px; } +ul.topspace { margin-top:1em } +ul li { margin:0 17px 0 7px; } +ul li ul { margin-top:0em } +ul.plain {margin-top: 0; list-style: none;} +ul.plain ul {margin-top: 0; list-style: none;} +ul.jump {list-style: none; margin-top: 1em;} +ul.jump li {margin-top: .5em;} + +/*#bd table { margin:10px 17px; width:720px; }*/ +/*#bd th { background:#B6CDE1; padding:2px; color:#fff; vertical-align:top} +#bd td { padding:2px; vertical-align:top} +#bd td.even { background:red; }*/ + +h2.classname { border-top:none; margin-top:0; margin-bottom:.2em; font-size: 130%; color:#000000} +h3.breadcrumb { border-top:none; margin-top:0; margin-bottom:.2em; font-size: 80%; color:#000000} +h3.methods { border-top:none; margin-top:0; margin-bottom:.2em; font-size: 100%; color:#000000} + +.screenshot {border:thin solid #999999; margin:8px;} + +#toc {background-color:#ecf5fa; padding:0; border:1px solid #89d } +#toc ul {margin:0; padding:0;} +#toc ul li {list-style:none; padding:0; margin:0; font-size:85%; } +#toc ul li.selected { font-weight:bold; color:#fff; background:#f82; padding:0; } +#toc ul li.selected a { color:#fff; } +#toc ul li a { display:block; padding:2px 2px 2px 10px; text-decoration:none; } +#toc ul li a:hover { color:#fff; background:#e60; } +#toc ul li em { display:none; } +#toc ul li.sect { font-weight:bold; color:#fff; background:#89d; padding:2px 0; text-indent:2px; margin-top:2px;} +#toc ul li.first {margin-top:0;} + +#ft { margin-top:4em } +#ft p { padding-bottom:2em; margin:0; text-align:center; font-size:80%; line-height:1.4em} +#ft p.first { padding:1em 0 0 0; margin:0; } + +#pagetitle {background: url(http://l.yimg.com/a/i/ydn/bg_hd.gif) 0 0 repeat-x #B6CDE1; border: 1px solid #93B2CC; } +#pagetitle h1 {text-indent:15px; padding:4px 0 2px 0; margin:0; color:#000; font-size:120%; font-weight:bold; position:relative; left:-1px; top:-1px; margin-right:-2px;} +#pagetitle h1 em {color:#FF9933; font-size:60%; font-weight:bold; font-style:normal; position:relative; top:-6px} + +#ygunav {background:#eee; border-bottom:2px solid #ccc; padding:0 10px;font-size:78%;text-align:right;margin-bottom:6px;height:2.5em;line-height:2.5em;} +html>body #ygunav {overflow:hidden;} +#ygunav strong {font-family:verdana;} +#ygunav p {display:inline;margin:0;padding:0;} +#ygunav p em {float:left;text-align:left;font-style:normal; padding-top:.7em} +* html #ygunav p em {margin-top:1px;} +#ygunav p em i {visibility:hidden;} +#ygunav a {color:#000;} +#ygunav form {display:inline;margin:0 0 0 1em;} +#ygsp {width:8em;font-size:110%;padding:0;vertical-align:middle;} +#ygunav .ygbt {background:#dcdcdc;font:110% verdana;position:relative;top:1px;} +* html #ygunav .ygbt {top:4px;} +* html>body #ygunav .ygbt {line-height:0;top:-4px;} +#ygunav label {color:#666;font-family:tahoma;top:1px;} + +#bd ol.getstarted { margin:0; padding:0; } +#bd ol.getstarted li { font-weight:bold; color:#668AA8; margin-bottom:1em; padding-left:20px; list-style-type:none;} +#bd ol.getstarted li p { color:#000; font-weight:normal; margin:0 0 0 20px; padding:0 } + +/* removing +#bd p {margin-bottom:8px;} +*/ + +#promo {zoom:1;border: 1px solid #B6CDE1; padding:1em; /*position:relative;*/ background-color:#FFF5DF;} +/*#promo ul {margin-bottom:0;}*/ +#promo h1 {margin-top:0; padding-top:0} +#promo h2 {line-height:1.2em; color:#668AA8; margin-top:0; padding-top:0; border:none; font-size:100%} +#promo p {line-height:1.2em; font-weight:400;} +#promo h1 em {float:right; top:0; right:0; font-style:normal; font-size:80%} +#promo h4 { color:#E76300; } +#promo.component div {width:48%; float:left;} +#promo:after {content:'.';visibility:hidden;clear:left;height:0;display:block;} +#promo p#api {margin-top:.2em;} +#promo #download img {float:left; padding:0 0.5em 0.5em 0;} +#promo #blog {clear:left;} + + +code {font-family:"Courier New"; font-size: 100%; font-weight:bolder;} + +div.apisummary {height:auto; margin:10px 0; width:auto; zoom:1;} +div.apisummary table {font-size:inherit;font:100%; border-collapse:separate; border:1px solid #666666; border-left:none;} +#doc3 div.apisummary table td, #doc3 div.apisummary table th {padding:.35em; vertical-align:top;} +div.apisummary table th { background:#B6CDE1; color:#fff; vertical-align:top; font-weight:bold;} +div.apisummary table td { border-top:1px solid #666666;} +div.apisummary table td, div.apisummary table th { border-left:1px solid #666666;} +div.apisummary table tr { background-color:#ddd;} +div.apisummary table tr.odd { background-color:#fff; } +div.apisummary table tfoot tr { background-color:#fff; } + +dl#menuwidgets dt {font-weight:bold;} +dl#menuwidgets {margin:0 0 0 1.5em;} +img.example {clear:right;margin-bottom:10px;margin-left:10px;border:0;float:right;border:1px solid #999;} + +/*YUI theater box on main page top right corner*/ +#yui-theater {width:316px; overflow:hidden;} +#yui-theater h3 {margin:0; padding:0; color:#E76300; font-size:100%; font-weight:bold; font-stretch:expanded;} +#yui-theater h2 {margin:0 0 10px 0; padding:0; border:none; color:#000; font-size:122%; font-weight:bold;} +#yui-theater p {margin:7px 0 0 0;} +#yui-theater div {float:right; font-size:85%;} + +/*rss reader styles*/ +p.loading-content {background-image:url(http://l.yimg.com/a/i/ydn/yuiweb/img/busy_arrow.gif); background-position:top left; background-repeat:no-repeat; height:20px;padding:4px 0 0 25px; margin:0;} +#doc3 ul.yuirssreader {margin:0; padding:0;} +#doc3 ul.yuirssreader li {list-style-type:none;padding:5px 0 0 12px; margin:0;} +#doc3 ul.yuirssreader li p {margin:0; padding:0;} +ul.yuirssreader cite {color:#666666; margin:0;} +span.yuirssreader-date {font-size:77%; color:#E76300;} +img.rssbadge {display:inline;border:none !important;} + +#index-secondary {width:316px;float:right;margin-left:10px;} +#index-main {margin-right:331px;} +#index-main #promo li {list-style-type:none;font-size:92%;margin-top:2px;} +#index-main #promo ul {margin:0;} + +/*styles for right gutter on component pages*/ +#cheatsheet h3 {margin-top:0;} +#cheatsheet img, #componentvideo img {margin:.5em 0 .2em 0; border:1px solid #999;} +#cheatsheet p {margin:0; font-size:77%;} +#cheatsheet h4, .example-container h4, #examples h4 {margin:0.2em 0 .1em 0; color:#668AA8; font-size:92%;} +#examples ul, #morereading ul, #module ul {font-size:85%; list-style:circle; margin:0 0 1em 10px;} +#examples p, #componentvideo p {font-size:85%; margin:0 0 .2em 0;} +#examples li.selected {font-weight:bold;} + +/*styles for example pages*/ +.example .promo {background-color:#89d;border-color:#666666; padding:1em;} +.example .promo h1, .example .promo h2, .example .promo h3 {color:#FFCC66;} +.example .promo h1 {font-size:159%; padding-top:0; margin-top:0;} +.exampleIntro, .exampleIntro p, .exampleIntro a, .exampleIntro a code {color:#fff;} +.example .promo p {margin-top:.7em;} + +.example cite.byline {display:block; padding:0.5em; background-color:#eee; border:1px solid #000;margin-bottom:5px} + +firstContent {margin-top:0; padding-top:0;} +#logger {margin-top:1em;} +.example-container {background-color:#F1F6F7;} + +.example-container .bd {padding:1em; position:relative; z-index:1; zoom:1;} +.example-container .bd .bd {padding:0; position:static;} /* Reset to defaults to ensure styles are only applied to the top-level .bd of .example-container */ +.example-container>.bd:after {content:'.';visibility:hidden;clear:left;height:0;display:block;} +.example-container .exampleHd {background: url(example-hd-bg.gif) 0 0 repeat-x #4E4D4C; } +.example-container h3 {margin:.2em 0 .4em 0;} +.example .example-container h1, .example .example-container h2, .example .example-container h3, .example .example-container h4, .example .example-container h5, .example .example-container h6 {color:#E76300; font-weight:bold;} +.example-container a {color:#000;} +.example-container a:visited, .example-container a:visited code {color:#000;} +.example-container a:active, .example-container a:active code {color: #000;} + +#loggerGloss {margin-top:.5em; font-size:85%;} +#loggerDiv {font-size:77%;text-align:left;margin-top:.5em; visibility:hidden; height:280px; } /*gets turned on by script when loaded */ +#loggerDiv.yui-log {padding:.4em;width:96%;background-color:#FBE7D9;border:1px solid #666;font-family:monospace;z-index:9000;} +#loggerDiv.yui-log p {margin:1px;padding:.1em;} +#loggerDiv.yui-log .yui-log-hd {margin:0; padding:0; background-color:#CECCCC;} +#loggerDiv.yui-log .yui-log-hd h4 {display:none;} +#loggerDiv.yui-log .yui-log-bd {width:100%;height:20em;background-color:#FFF;border:1px solid #ECECEC;overflow-y:auto;overflow-x:hidden;} +#loggerDiv.yui-log .yui-log-bd pre {border-top:1px solid #ECECEC;} +#loggerDiv.yui-log .yui-log-bd code p {margin:1px 0;} +#loggerDiv.yui-log .yui-log-ft .yui-log-categoryfilters {margin-top:.5em;clear:right;} +#loggerDiv.yui-log .yui-log-ft .yui-log-sourcefilters {margin-top:.5em;border:none; clear:both;} +#loggerDiv.yui-log .yui-log-btns {margin-top:.2em;padding:.2em;background: url(bg_hd.gif) 0 0 repeat-x #CECCCC; text-align:right; float:none; position:static;} +#loggerDiv.yui-log .yui-log-filtergrp {margin-right:.3em; float:left; display:block} +#loggerDiv.yui-log .yui-log-ft {margin-top:.3em;margin-bottom:.3em; font-family:verdana; zoom:1;} +/*bug in Safari when this is applied to .yui-log-ft:*/ +#loggerDiv.yui-log:after {content:'.';visibility:hidden;clear:both;height:0;display:block;} +.example-container.newWindow {text-align:center;} +p.newWindowButton {text-align:right; margin-top:0; padding:.5em;} +.bd p.newWindowButton {text-align:center;} /*when new window is required and button appears in middle of example body*/ +p.loggerButton {text-align:center;} +#loggerLink a, #newWindowLink a {font-size:115%; font-weight:bold; color:#000099;} +#newWindowLink a {font-size:107%;} +#loggerModule {padding-bottom:.2em;} + +/*right column navigation on example rosters*/ +#exampleToc {background-color:#ecf5fa; padding:0; border:1px solid #89d; margin-top:.5em;} +#exampleToc ul {margin:0; padding:0; font-size:85%; } +#exampleToc ul li {list-style:none; padding:0; margin:0; } +#exampleToc ul li.selected { font-weight:bold; color:#fff; background:#000099; padding:0; } +#exampleToc ul li.selected a { color:#fff; } +#exampleToc ul li a { display:block; padding:2px 2px 2px 10px; text-decoration:none; } +#exampleToc ul li a:hover { color:#fff; background:#e60; } +#exampleToc ul li.selected a code { color:#fff; } + +/*theater page styles*/ +.theater h1 {border-bottom:1px dashed #CCC; margin-bottom:1em;padding-bottom:.2em;} +.theater img {border:1px solid #666;} +.theater img.last {border:1px solid #666;} +.theater p.details {font-size:77%; color:#666; margin:.2em 0 0 0; padding:0;} +.theater p.description, #doc3 .theater ul li {font-size:85%; margin:0; padding:0; color:#333;} + +#readmePanel .hd { font-weight:bold; font-size:129%; color:#fff; background:#89d; } +#readmePanel .bd {text-align:left; overflow:auto;} +#readmePanel .ft {text-align:right; background-color:#E7E7E7; font-size:85%;} +/* Browser specific (not valid) styles to make preformatted text wrap */ +#readmePanel .bd pre { + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ + font-size: 100%; + color:#000033;} + +/*ed eliot's server-side delicious badge css*/ + #delicious-badge {margin-top:.6em; font: 85% Arial, sans-serif; border: 1px solid #b1b1b1; } +#delicious-badge .bookmark { background: url(http://images.del.icio.us/static/img/delicious.small.gif) no-repeat left center; padding-left: 15px; font-weight: bold; } +#delicious-badge p, #delicious-badge div { padding: 7px; margin: 0; text-align: center; } +#delicious-badge a { color: #00f; text-decoration: none; } +#delicious-badge div { background: #eee; } +#delicious-badge div span { font-weight: bold; color: #000; } +#delicious-badge ul, #delicious-badge li { display: inline; list-style: none; padding: 0; margin: 0; } +#delicious-badge li { margin-left: 5px; } +#delicious-badge li span { position: absolute; left: -999px; width: 999px; } +#delicious-badge .saved-by { color: #999; } +#delicious-badge .saved-by span { background: #00f; padding: 3px; color: #fff; } +#delicious-badge .be-first { font-size: 85%; color: #999; } +#delicious-badge .tag-size-1 { font-size: 100%; } +#delicious-badge .tag-size-2 { font-size: 107%; } +#delicious-badge .tag-size-3 { font-size: 114%; } +#delicious-badge .tag-size-4 { font-size: 122%; } +#delicious-badge .tag-size-5 { font-size: 129%; } + +/*faq page:*/ +.yui-ge .yui-g {width:98%;} +.yui-ge .yui-g .yui-u {width:48.1%;} +#questions {margin:1em 0 2em 0; padding:0.5em; border:1px solid #838383; background-color:#E6E6E6;} +#questions ul {margin:0; list-style:none;} +#yui-main #questions li {padding-bottom:.2em; font-size:85%; margin:0;} +#questions li a {display:block; padding:.6em; text-decoration:none;} +#questions li a:hover {background-color:#F6F6F6;} + +/*for notes on file includes*/ +#configuratorBadge {display:block; float:left; margin:0 .5em .5em 0;} +.include-notice {clear:left; border:1px solid #6F7EA1; background:#eee; font:77% verdana; padding:.7em;} +.include-notice p.firstP {margin-top:0;} +.include-notice p.lastP {margin-bottom:0;} +.include-notice strong {color:#990000;} +.configurator-notice p {font-size:85%;} + +/*for site search suggest via autocomplete*/ +#ygunav {overflow:visible !important;} +#sitesearch {float:right; width:40em; position:relative; text-align:right;} +#searchinput {width:15em; font-size:11px; font-weight:bold; position:relative; top:2px;} + +/*RSS links*/ +#yuiblogTitle a, #ydnJsTitle a, #delicious a, #yui-theater h3 a { color: #E76300; text-decoration: none; } +#yuiblogTitle a:hover, #ydnJsTitle a:hover, #delicious a:hover, #yui-theater h3 a:hover { text-decoration: underline; } + + +/* New syntax Highlighter Core */ +.yui-syntax-highlight { + background-color: #F5F5F5; + border: 1px solid #D9D9D9; + padding: .75em; + overflow-x: auto; + position: relative; + margin-bottom: 15px; + _width: 97%; + _margin-bottom: 1.5em; +} + +.yui-syntax-highlight .numbers { + display: none; +} + +.yui-syntax-highlight-linenumbers .numbers { + display: block; +} + +.yui-syntax-highlight-linenumbers .nonumbers { + display: none; +} + +.yui-syntax-highlight ol { + margin-top: 0; + margin-left: 2em; +} + +.yui-syntax-highlight ol li { + margin-bottom: 0; +} + +.yui-syntax-highlight textarea { + display: none; +} + +.yui-syntax-highlight .syn-header { + position: absolute; + right: 5px; + top: 0; +} +.yui-syntax-highlight .hidden { + visibility: hidden; + position: absolute; + top: 0; + left: 0; + height: 0px; + width: 0px; +} + +/* HTML Colors */ +.yui-syntax-highlight .html4strict {font-family:monospace;} +.yui-syntax-highlight .html4strict .imp {font-weight: bold; color: red;} +.yui-syntax-highlight .html4strict .kw2 {color: #000000; font-weight: bold;} +.yui-syntax-highlight .html4strict .kw3 {color: #000066;} +.yui-syntax-highlight .html4strict .es0 {color: #000099; font-weight: bold;} +.yui-syntax-highlight .html4strict .br0 {color: #66cc66;} +.yui-syntax-highlight .html4strict .sy0 {color: #66cc66;} +.yui-syntax-highlight .html4strict .st0 {color: #ff0000;} +.yui-syntax-highlight .html4strict .nu0 {color: #cc66cc;} +.yui-syntax-highlight .html4strict .sc-1 {color: #808080; font-style: italic;} +.yui-syntax-highlight .html4strict .sc0 {color: #00bbdd;} +.yui-syntax-highlight .html4strict .sc1 {color: #ddbb00;} +.yui-syntax-highlight .html4strict .sc2 {color: #009900;} +.yui-syntax-highlight .html4strict span.xtra { display:block; } + +/* Javascript Colors */ +.yui-syntax-highlight .javascript {font-family:monospace;} +.yui-syntax-highlight .javascript .imp {font-weight: bold; color: red;} +.yui-syntax-highlight .javascript .kw1 {color: #000066; font-weight: bold;} +.yui-syntax-highlight .javascript .kw2 {color: #003366; font-weight: bold;} +.yui-syntax-highlight .javascript .kw3 {color: #000066;} +.yui-syntax-highlight .javascript .co1 {color: #006600; font-style: italic;} +.yui-syntax-highlight .javascript .co2 {color: #009966; font-style: italic;} +.yui-syntax-highlight .javascript .coMULTI {color: #006600; font-style: italic;} +.yui-syntax-highlight .javascript .es0 {color: #000099; font-weight: bold;} +.yui-syntax-highlight .javascript .br0 {color: #009900;} +.yui-syntax-highlight .javascript .sy0 {color: #339933;} +.yui-syntax-highlight .javascript .st0 {color: #3366CC;} +.yui-syntax-highlight .javascript .nu0 {color: #CC0000;} +.yui-syntax-highlight .javascript .me1 {color: #660066;} +.yui-syntax-highlight .javascript span.xtra { display:block; } + +/* CSS Colors */ +.yui-syntax-highlight .css {font-family:monospace;} +.yui-syntax-highlight .css .imp {font-weight: bold; color: red;} +.yui-syntax-highlight .css .kw1 {color: #000000; font-weight: bold;} +.yui-syntax-highlight .css .kw2 {color: #993333;} +.yui-syntax-highlight .css .co1 {color: #a1a100;} +.yui-syntax-highlight .css .co2 {color: #ff0000; font-style: italic;} +.yui-syntax-highlight .css .coMULTI {color: #808080; font-style: italic;} +.yui-syntax-highlight .css .es0 {color: #000099; font-weight: bold;} +.yui-syntax-highlight .css .br0 {color: #00AA00;} +.yui-syntax-highlight .css .sy0 {color: #00AA00;} +.yui-syntax-highlight .css .st0 {color: #ff0000;} +.yui-syntax-highlight .css .nu0 {color: #cc66cc;} +.yui-syntax-highlight .css .re0 {color: #cc00cc;} +.yui-syntax-highlight .css .re1 {color: #6666ff;} +.yui-syntax-highlight .css .re2 {color: #3333ff;} +.yui-syntax-highlight .css .re3 {color: #933;} +.yui-syntax-highlight .css span.xtra { display:block; } + diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.gif new file mode 100644 index 0000000..5033ff5 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yui.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yuiDistribution.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yuiDistribution.css new file mode 100644 index 0000000..e69de29 diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yuilib.jpg b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yuilib.jpg new file mode 100644 index 0000000..88b8255 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/assets/yuilib.jpg differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/ajax-loader.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/ajax-loader.gif new file mode 100644 index 0000000..fe2cd23 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/ajax-loader.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/asc.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/asc.gif new file mode 100644 index 0000000..a1fe738 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/asc.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/autocomplete.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/autocomplete.css new file mode 100644 index 0000000..54541c5 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/autocomplete.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%}.yui-skin-sam .yui-ac-input{position:absolute;width:100%}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#b3d4ff}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426fd9;color:#FFF} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-h.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-h.png new file mode 100644 index 0000000..5f69f4e Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-h.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-v.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-v.png new file mode 100644 index 0000000..658574a Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/back-v.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-h.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-h.png new file mode 100644 index 0000000..fea13b1 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-h.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-v.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-v.png new file mode 100644 index 0000000..2efd664 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bar-v.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-h.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-h.gif new file mode 100644 index 0000000..9962889 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-h.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-v.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-v.gif new file mode 100644 index 0000000..8e287cd Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/bg-v.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/blankimage.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/blankimage.png new file mode 100644 index 0000000..b87bb24 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/blankimage.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/button.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/button.css new file mode 100644 index 0000000..c54fc72 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/button.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;_margin:0;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a,.yui-skin-sam .yui-button a:visited{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-right:20px;background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700px;}.yui-skin-sam .yui-button-active .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a,.yui-skin-sam .yui-button-disabled a:visited{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/calendar.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/calendar.css new file mode 100644 index 0000000..df1d705 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/calendar.css @@ -0,0 +1,8 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-calcontainer{position:relative;float:left;_overflow:hidden}.yui-calcontainer iframe{position:absolute;border:0;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative}.yui-calcontainer .title{position:relative;z-index:1}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar{position:relative}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar .calheader{position:relative;width:100%;text-align:center}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none}.yui-calcontainer .yui-cal-nav{position:absolute;z-index:3;top:0;display:none}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:0;background-color:transparent;cursor:pointer}.yui-calendar .calbody a:hover{background:inherit}p#clear{clear:left;padding-top:10px}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:0;padding:10px 5px 10px 5px;margin:0}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #ccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px}.yui-skin-sam .yui-calcontainer.withtitle{padding-top:0}.yui-skin-sam .yui-calcontainer .calclose{background:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:0;vertical-align:middle;padding:0}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center}.yui-skin-sam .yui-calendar .calheader img{border:0}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:0}.yui-skin-sam .yui-calendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:0}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #ccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap}.yui-skin-sam .yui-calendar td.calcell a{color:#06c;display:block;height:100%;text-decoration:none}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#ccc;color:#a6a6a6;cursor:default}.yui-skin-sam .yui-calendar td.calcell.oom a{color:#a6a6a6}.yui-skin-sam .yui-calendar td.calcell.selected{background-color:#fff;color:#000}.yui-skin-sam .yui-calendar td.calcell.selected a{background-color:#b3d4ff;color:#000}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#cf9}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#9cf}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#fcc}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#cf9}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#a0a0a0;cursor:pointer}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#edf5ff;border-top:1px solid black;display:none}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold} +.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#ffee69;border:1px solid #000}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/carousel.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/carousel.css new file mode 100644 index 0000000..b3d86a6 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/carousel.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-carousel{visibility:hidden;overflow:hidden;position:relative;text-align:left;zoom:1;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;text-align:center;}.yui-carousel-element li{border:1px solid #ccc;list-style:none;margin:1px;overflow:hidden;padding:0;position:absolute;text-align:center;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-carousel-min-width{min-width:115px;}.yui-carousel-element{overflow:hidden;position:relative;margin:0 auto;padding:0;text-align:left;*margin:0;}.yui-carousel-horizontal .yui-carousel-element{width:320000px;}.yui-carousel-vertical .yui-carousel-element{height:320000px;}.yui-skin-sam .yui-carousel-nav select{position:static;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{border:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input,.yui-skin-sam .yui-carousel-button button{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0 -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button{background-position:0 -750px;}.yui-skin-sam span.yui-carousel-first-button-disabled{background-position:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;height:19px;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul{*margin-left:-170px;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{position:static;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{background:url(sprite.png) no-repeat 0 -650px;cursor:pointer;float:left;height:9px;list-style:none;margin:10px 0 0 5px;overflow:hidden;padding:0;width:9px;}.yui-skin-sam .yui-carousel-nav ul:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.yui-skin-sam .yui-carousel-nav ul li a{display:block;width:100%;height:100%;text-indent:-10000px;text-align:left;overflow:hidden;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected{background-position:0 -700px;}.yui-skin-sam .yui-carousel-item-loading{background:url(ajax-loader.gif) no-repeat 50% 50%;position:absolute;text-indent:-150px;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check0.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check0.gif new file mode 100644 index 0000000..193028b Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check0.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check1.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check1.gif new file mode 100644 index 0000000..7d9ceba Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check1.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check2.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check2.gif new file mode 100644 index 0000000..1813175 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/check2.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/colorpicker.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/colorpicker.css new file mode 100644 index 0000000..77ac7c1 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/colorpicker.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-picker-panel{background:#e3e3e3;border-color:#888}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px}.yui-picker{position:relative}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute}.yui-picker-hue-bg{-moz-outline:0;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px}.yui-picker-bg{-moz-outline:0;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png)}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale')}.yui-picker-mask{position:absolute;z-index:1;top:0;left:0}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace}.yui-picker-controls .hd{background:transparent;border-width:0!important}.yui-picker-controls .bd{height:100px;border-width:0!important}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0}.yui-picker-controls li{padding:2px;list-style:none;margin:0}.yui-picker-controls input{font-size:.85em;width:2.4em}.yui-picker-hex-controls{clear:both;padding:2px}.yui-picker-hex-controls input{width:4.6em}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/container.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/container.css new file mode 100644 index 0000000..e4db6e3 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/container.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2}.yui-panel{position:relative}.yui-panel-container form{margin:0}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0}.mask.block-scrollbars{overflow:auto}.masked select,.drag select,.hide-select select{_visibility:hidden}.yui-panel-container select{_visibility:inherit}.hide-scrollbars,.hide-scrollbars *{overflow:hidden}.hide-scrollbars select{display:none}.show-scrollbars{overflow:auto}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px}.yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none}.yui-tt-shadow{position:absolute}.yui-override-padding{padding:0!important}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none}.yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px}.yui-skin-sam .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#f2f2f2}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px}.yui-skin-sam .yui-panel .bd{padding:10px}.yui-skin-sam .yui-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%}.yui-skin-sam .container-close{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(sprite.png) no-repeat 0 -300px;cursor:pointer}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12)}.yui-skin-sam .yui-dialog .ft{border-top:0;padding:0 10px 10px 10px;font-size:100%}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304369}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1250px}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;padding:2px 5px;border-color:#d4c237 #A6982b #a6982b #A6982B;border-width:1px;border-style:solid;background-color:#ffee69}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12)} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/datatable.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/datatable.css new file mode 100644 index 0000000..91d07c3 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/datatable.css @@ -0,0 +1,8 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500}.yui-dt-tmp{position:absolute;left:-9000px}.yui-dt-scrollable .yui-dt-bd{overflow:auto}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px}.yui-dt-scrollable tbody{-moz-outline:0}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer}.yui-skin-sam thead .yui-dt-draggable{cursor:move}.yui-dt-coltarget{position:absolute;z-index:999}.yui-dt-hd{zoom:1}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none}.yui-dt-editor,.yui-dt-editor-shim{position:absolute;z-index:9000}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7f7f7f}.yui-skin-sam .yui-dt thead{border-spacing:0}.yui-skin-sam .yui-dt caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center}.yui-skin-sam .yui-dt th{background:#d8d8da url(sprite.png) repeat-x 0 0}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7f7f7f}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb;text-align:left}.yui-skin-sam .yui-dt-list td{border-right:0}.yui-skin-sam .yui-dt-resizer{width:6px}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-dt-message{background-color:#FFF}.yui-skin-sam .yui-dt-scrollable table{border:0}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7f7f7f;border-top:1px solid #7f7f7f;border-right:1px solid #7f7f7f}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7f7f7f;border-bottom:1px solid #7f7f7f;border-right:1px solid #7f7f7f;background-color:#FFF}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7f7f7f}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:url(dt-arrow-dn.png) no-repeat right}tbody .yui-dt-editable{cursor:pointer}.yui-dt-editor{text-align:left;background-color:#f2f2f2;border:1px solid #808080;padding:6px}.yui-dt-editor label{padding-left:4px;padding-right:6px}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584e0;border:1px solid #304369;color:#FFF}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000}.yui-skin-sam tr.yui-dt-even{background-color:#FFF}.yui-skin-sam tr.yui-dt-odd{background-color:#edf5ff}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#dbeaff}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#b2d2ff}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#b2d2ff}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#b2d2ff}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#b2d2ff}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446cd7}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426fd9;color:#FFF}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446cd7;color:#FFF}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446cd7} +.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426fd9;color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446cd7;color:#FFF}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none}.yui-skin-sam a.yui-dt-page{border:1px solid #cbcbcb;padding:2px 6px;text-decoration:none;background-color:#fff}.yui-skin-sam .yui-dt-selected{border:1px solid #fff;background-color:#fff} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/desc.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/desc.gif new file mode 100644 index 0000000..c114f29 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/desc.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-dn.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-dn.png new file mode 100644 index 0000000..85fda0b Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-dn.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-up.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-up.png new file mode 100644 index 0000000..1c67431 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/dt-arrow-up.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-knob.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-knob.gif new file mode 100644 index 0000000..03feab3 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-knob.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite-active.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite-active.gif new file mode 100644 index 0000000..3e9d420 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite-active.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite.gif new file mode 100644 index 0000000..02042fa Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor-sprite.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor.css new file mode 100644 index 0000000..d3cde1c --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/editor.css @@ -0,0 +1,10 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-skin-sam .yui-toolbar-container .yui-button button,.yui-skin-sam .yui-toolbar-container .yui-button a,.yui-skin-sam .yui-toolbar-container .yui-button a:visited{font-size:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a:visited,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a:visited{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{font-size:0;line-height:0;padding:0;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointer;}.yui-toolbar-container .yui-button .first-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block;right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;float:none;} +.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bottom:1px dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .collapsed{background:url(sprite.png) no-repeat 0 -350px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;} +.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;} +.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/header_background.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/header_background.png new file mode 100644 index 0000000..3ef7909 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/header_background.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/hue_bg.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/hue_bg.png new file mode 100644 index 0000000..d9bcdeb Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/hue_bg.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/imagecropper.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/imagecropper.css new file mode 100644 index 0000000..87a081a --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/imagecropper.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-crop{position:relative;}.yui-crop .yui-crop-mask{position:absolute;top:0;left:0;height:100%;width:100%;}.yui-crop .yui-resize{position:absolute;top:10px;left:10px;border:0;}.yui-crop .yui-crop-resize-mask{position:absolute;top:0;left:0;height:100%;width:100%;background-position:-10px -10px;overflow:hidden;}.yui-skin-sam .yui-crop .yui-crop-mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);}.yui-skin-sam .yui-crop .yui-resize{border:1px dashed #fff;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout.css new file mode 100644 index 0000000..de790e9 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-layout-loading{visibility:hidden;}body.yui-layout{overflow:hidden;position:relative;padding:0;margin:0;}.yui-layout-doc{position:relative;overflow:hidden;padding:0;margin:0;}.yui-layout-unit{height:50px;width:50px;padding:0;margin:0;float:none;z-index:0;}.yui-layout-unit-top{position:absolute;top:0;left:0;width:100%;}.yui-layout-unit-left{position:absolute;top:0;left:0;}.yui-layout-unit-right{position:absolute;top:0;right:0;}.yui-layout-unit-bottom{position:absolute;bottom:0;left:0;width:100%;}.yui-layout-unit-center{position:absolute;top:0;left:0;width:100%;}.yui-layout div.yui-layout-hd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout div.yui-layout-bd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout .yui-layout-noscroll div.yui-layout-bd{overflow:hidden;}.yui-layout .yui-layout-scroll div.yui-layout-bd{overflow:auto;}.yui-layout div.yui-layout-ft{position:absolute;bottom:0;left:0;width:100%;zoom:1;}.yui-layout .yui-layout-unit div.yui-layout-hd h2{text-align:left;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .close{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse-close{right:25px;}.yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#c0c0c0;display:none;}.yui-layout .yui-layout-clip .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-wrap{height:100%;width:100%;position:absolute;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy{border:none;font-size:0;margin:0;padding:0;}.yui-skin-sam .yui-layout .yui-resize-resizing .yui-resize-handle{display:none;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy div{position:absolute;border:1px solid #808080;background-color:#EDF5FF;}.yui-skin-sam .yui-layout .yui-resize .yui-resize-handle-active{zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-l{width:5px;height:100%;top:0;left:0;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-r{width:5px;top:0;right:0;height:100%;position:absolute;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-b{width:100%;bottom:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-t{width:100%;top:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-layout-unit-left div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -160px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-left .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -140px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-right div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -200px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-right .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -120px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-top div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -220px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-top .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -240px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-bottom div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -260px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-bottom .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -180px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd .close{background:transparent url(layout_sprite.png) no-repeat -20px -100px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-hd{background:url(sprite.png) repeat-x 0 -1400px;border:1px solid #808080;}.yui-skin-sam .yui-layout{background-color:#EDF5FF;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd h2{font-weight:bold;color:#fff;padding:3px;margin:0;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd{border:1px solid #808080;border-bottom:none;border-top:none;*border-bottom-width:0;*border-top-width:0;background-color:#f2f2f2;text-align:left;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-noft{border-bottom:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-nohd{border-top:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#EDF5FF;display:none;border:1px solid #808080;}.yui-skin-sam .yui-layout div.yui-layout-ft{border:1px solid #808080;border-top:none;*border-top-width:0;background-color:#f2f2f2;}.yui-skin-sam .yui-layout-unit .yui-resize-handle{background-color:transparent;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r{right:0;top:0;background-image:none;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-l{left:0;top:0;background-image:none;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-b{right:0;bottom:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-l .yui-layout-resize-knob{position:absolute;height:16px;width:6px;top:45%;left:0;display:block;background:transparent url(layout_sprite.png) no-repeat 0 -5px;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-b .yui-layout-resize-knob{position:absolute;height:6px;width:16px;left:45%;background:transparent url(layout_sprite.png) no-repeat -20px 0;zoom:1;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout_sprite.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout_sprite.png new file mode 100644 index 0000000..d6fce3c Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/layout_sprite.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/loading.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/loading.gif new file mode 100644 index 0000000..0bbf3bc Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/loading.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/logger.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/logger.css new file mode 100644 index 0000000..bc5397e --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/logger.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-log{padding:1em;width:31em;background-color:#AAA;color:#000;border:1px solid black;font-family:monospace;font-size:77%;text-align:left;z-index:9000}.yui-skin-sam .yui-log-container{position:absolute;top:1em;right:1em}.yui-skin-sam .yui-log input{margin:0;padding:0;font-family:arial;font-size:100%;font-weight:normal}.yui-skin-sam .yui-log .yui-log-btns{position:relative;float:right;bottom:.25em}.yui-skin-sam .yui-log .yui-log-hd{margin-top:1em;padding:.5em;background-color:#575757}.yui-skin-sam .yui-log .yui-log-hd h4{margin:0;padding:0;font-size:108%;font-weight:bold;color:#FFF}.yui-skin-sam .yui-log .yui-log-bd{width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto}.yui-skin-sam .yui-log p{margin:1px;padding:.1em}.yui-skin-sam .yui-log pre{margin:0;padding:0}.yui-skin-sam .yui-log pre.yui-log-verbose{white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.yui-skin-sam .yui-log .yui-log-ft{margin-top:.5em}.yui-skin-sam .yui-log .yui-log-ft .yui-log-sourcefilters{width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em}.yui-skin-sam .yui-log .yui-log-filtergrp{margin-right:.5em}.yui-skin-sam .yui-log .info{background-color:#a7cc25}.yui-skin-sam .yui-log .warn{background-color:#f58516}.yui-skin-sam .yui-log .error{background-color:#e32f0b}.yui-skin-sam .yui-log .time{background-color:#a6c9d7}.yui-skin-sam .yui-log .window{background-color:#f2e886} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow-disabled.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow-disabled.png new file mode 100644 index 0000000..8cef2ab Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow-disabled.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow.png new file mode 100644 index 0000000..f03dfee Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu-button-arrow.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu.css new file mode 100644 index 0000000..744ef09 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menu.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scrollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-overlay.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubaritemlabel:visited{color:#000;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-selected{border-color:#7D98B8;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled,.yui-skin-sam .yuimenubaritemlabel-disabled:visited{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel:visited{color:#000;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yuimenuitem-checked{background-image:url(menuitem_checkbox.png);background-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled,.yui-skin-sam .yuimenuitemlabel-disabled:visited{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator.png new file mode 100644 index 0000000..030941c Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png new file mode 100644 index 0000000..6c16122 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox.png new file mode 100644 index 0000000..1437a4f Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox_disabled.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox_disabled.png new file mode 100644 index 0000000..5d5b998 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_checkbox_disabled.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator.png new file mode 100644 index 0000000..ea4f660 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator_disabled.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator_disabled.png new file mode 100644 index 0000000..427d60a Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/menuitem_submenuindicator_disabled.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/paginator.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/paginator.css new file mode 100644 index 0000000..57a10bc --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/paginator.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-pg-container{display:block;margin:6px 0;white-space:nowrap}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous,.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last,.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-pages,.yui-skin-sam .yui-pg-page{display:inline-block;font-family:arial,helvetica,clean,sans-serif;padding:3px 6px;zoom:1}.yui-skin-sam .yui-pg-pages{padding:0}.yui-skin-sam .yui-pg-current{padding:3px 0}.yui-skin-sam a.yui-pg-first:link,.yui-skin-sam a.yui-pg-first:visited,.yui-skin-sam a.yui-pg-first:active,.yui-skin-sam a.yui-pg-first:hover,.yui-skin-sam a.yui-pg-previous:link,.yui-skin-sam a.yui-pg-previous:visited,.yui-skin-sam a.yui-pg-previous:active,.yui-skin-sam a.yui-pg-previous:hover,.yui-skin-sam a.yui-pg-next:link,.yui-skin-sam a.yui-pg-next:visited,.yui-skin-sam a.yui-pg-next:active,.yui-skin-sam a.yui-pg-next:hover,.yui-skin-sam a.yui-pg-last:link,.yui-skin-sam a.yui-pg-last:visited,.yui-skin-sam a.yui-pg-last:active,.yui-skin-sam a.yui-pg-last:hover,.yui-skin-sam a.yui-pg-page:link,.yui-skin-sam a.yui-pg-page:visited,.yui-skin-sam a.yui-pg-page:active,.yui-skin-sam a.yui-pg-page:hover{color:#06c;text-decoration:underline;outline:0}.yui-skin-sam span.yui-pg-first,.yui-skin-sam span.yui-pg-previous,.yui-skin-sam span.yui-pg-next,.yui-skin-sam span.yui-pg-last{color:#a6a6a6}.yui-skin-sam .yui-pg-page{background-color:#fff;border:1px solid #cbcbcb;padding:2px 6px;text-decoration:none}.yui-skin-sam .yui-pg-current-page{background-color:transparent;border:0;font-weight:bold;padding:3px 6px}.yui-skin-sam .yui-pg-page{margin-left:1px;margin-right:1px}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous{padding-left:0}.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last{padding-right:0}.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-rpp-options{margin-left:1em;margin-right:1em} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/picker_mask.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/picker_mask.png new file mode 100644 index 0000000..f8d9193 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/picker_mask.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/profilerviewer.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/profilerviewer.css new file mode 100644 index 0000000..8b3bfb4 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/profilerviewer.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-pv{background-color:#4a4a4a;font-family:arial;position:relative;width:99%;z-index:1000;margin-bottom:1em;overflow:hidden;}.yui-skin-sam .yui-pv .hd{background:url(header_background.png) repeat-x;min-height:30px;overflow:hidden;zoom:1;padding:2px 0;}.yui-skin-sam .yui-pv .hd h4{padding:8px 10px;margin:0;font:bold 14px arial;color:#fff;}.yui-skin-sam .yui-pv .hd a{background:#3f6bc3;font:bold 11px arial;color:#fff;padding:4px;margin:3px 10px 0 0;border:1px solid #3f567d;cursor:pointer;display:block;float:right;}.yui-skin-sam .yui-pv .hd span{display:none;}.yui-skin-sam .yui-pv .hd span.yui-pv-busy{height:18px;width:18px;background:url(wait.gif) no-repeat;overflow:hidden;display:block;float:right;margin:4px 10px 0 0;}.yui-skin-sam .yui-pv .hd:after,.yui-pv .bd:after,.yui-skin-sam .yui-pv-chartlegend dl:after{content:'.';visibility:hidden;clear:left;height:0;display:block;}.yui-skin-sam .yui-pv .bd{position:relative;zoom:1;overflow-x:auto;overflow-y:hidden;}.yui-skin-sam .yui-pv .yui-pv-table{padding:0 10px;margin:5px 0 10px 0;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td{color:#eeee5c;font:12px arial;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd{background:#929292;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even{background:#58637a;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc{background:#384970;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc{background:#6F6E6E;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th{background-image:none;background:#2E2D2D;}.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner{background:transparent url(asc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner{background:transparent url(desc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a{color:#fff;font:bold 12px arial;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc{background:#333;}.yui-skin-sam .yui-pv-chartcontainer{padding:0 10px;}.yui-skin-sam .yui-pv-chart{height:250px;clear:right;margin:5px 0 0 0;color:#fff;}.yui-skin-sam .yui-pv-chartlegend div{float:right;margin:0 0 0 10px;_width:250px;}.yui-skin-sam .yui-pv-chartlegend dl{border:1px solid #999;padding:.2em 0 .2em .5em;zoom:1;margin:5px 0;}.yui-skin-sam .yui-pv-chartlegend dt{float:left;display:block;height:.7em;width:.7em;padding:0;}.yui-skin-sam .yui-pv-chartlegend dd{float:left;display:block;color:#fff;margin:0 1em 0 .5em;padding:0;font:11px arial;}.yui-skin-sam .yui-pv-minimized{height:35px;}.yui-skin-sam .yui-pv-minimized .bd{top:-3000px;}.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh{display:none;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/progressbar.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/progressbar.css new file mode 100644 index 0000000..b44a87d --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/progressbar.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-pb-bar,.yui-pb-mask{width:100%;height:100%}.yui-pb{position:relative;top:0;left:0;width:200px;height:20px;padding:0;border:0;margin:0;text-align:left}.yui-pb-mask{position:absolute;top:0;left:0;z-index:2}.yui-pb-mask div{width:50%;height:50%;background-repeat:no-repeat;padding:0;position:absolute}.yui-pb-tl{background-position:top left}.yui-pb-tr{background-position:top right;left:50%}.yui-pb-bl{background-position:bottom left;top:50%}.yui-pb-br{background-position:bottom right;left:50%;top:50%}.yui-pb-bar{margin:0;position:absolute;left:0;top:0;z-index:1}.yui-pb-ltr .yui-pb-bar{_position:static}.yui-pb-rtl .yui-pb-bar{background-position:right}.yui-pb-btt .yui-pb-bar{background-position:left bottom}.yui-pb-bar{background-color:blue}.yui-pb{border:thin solid #808080}.yui-skin-sam .yui-pb{background-color:transparent;border:solid #808080;border-width:1px 0}.yui-skin-sam .yui-pb-rtl,.yui-skin-sam .yui-pb-ltr{background-image:url(back-h.png);background-repeat:repeat-x}.yui-skin-sam .yui-pb-ttb,.yui-skin-sam .yui-pb-btt{background-image:url(back-v.png);background-repeat:repeat-y}.yui-skin-sam .yui-pb-bar{background-color:transparent}.yui-skin-sam .yui-pb-ltr .yui-pb-bar,.yui-skin-sam .yui-pb-rtl .yui-pb-bar{background-image:url(bar-h.png);background-repeat:repeat-x}.yui-skin-sam .yui-pb-ttb .yui-pb-bar,.yui-skin-sam .yui-pb-btt .yui-pb-bar{background-image:url(bar-v.png);background-repeat:repeat-y}.yui-skin-sam .yui-pb-mask{border:solid #808080;border-width:0 1px;margin:0 -1px}.yui-skin-sam .yui-pb-caption{color:#000;text-align:center;margin:0 auto}.yui-skin-sam .yui-pb-range{color:#a6a6a6} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/resize.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/resize.css new file mode 100644 index 0000000..e332fe9 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/resize.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font-weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle{background-color:#F2F2F2;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;zoom:1;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transparent url(layout_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{height:6px;width:6px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r{right:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b{bottom:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br{right:-8px;bottom:-8px;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/simpleeditor.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/simpleeditor.css new file mode 100644 index 0000000..bf4016e --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/simpleeditor.css @@ -0,0 +1,10 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-skin-sam .yui-toolbar-container .yui-button button,.yui-skin-sam .yui-toolbar-container .yui-button a,.yui-skin-sam .yui-toolbar-container .yui-button a:visited{font-size:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a:visited,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a:visited{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{font-size:0;line-height:0;padding:0;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointer;}.yui-toolbar-container .yui-button .first-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block;right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;float:none;} +.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bottom:1px dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .collapsed{background:url(sprite.png) no-repeat 0 -350px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;} +.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;} +.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;} \ No newline at end of file diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/skin.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/skin.css new file mode 100644 index 0000000..f3a6af6 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/skin.css @@ -0,0 +1,35 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%}.yui-skin-sam .yui-ac-input{position:absolute;width:100%}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#b3d4ff}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426fd9;color:#FFF} +.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;_margin:0;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a,.yui-skin-sam .yui-button a:visited{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-right:20px;background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700px;}.yui-skin-sam .yui-button-active .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a,.yui-skin-sam .yui-button-disabled a:visited{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);} +.yui-calcontainer{position:relative;float:left;_overflow:hidden}.yui-calcontainer iframe{position:absolute;border:0;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative}.yui-calcontainer .title{position:relative;z-index:1}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar{position:relative}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden}.yui-calendar .calheader{position:relative;width:100%;text-align:center}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none}.yui-calcontainer .yui-cal-nav{position:absolute;z-index:3;top:0;display:none}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:0;background-color:transparent;cursor:pointer}.yui-calendar .calbody a:hover{background:inherit}p#clear{clear:left;padding-top:10px}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:0;padding:10px 5px 10px 5px;margin:0}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #ccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px}.yui-skin-sam .yui-calcontainer.withtitle{padding-top:0}.yui-skin-sam .yui-calcontainer .calclose{background:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:0;vertical-align:middle;padding:0}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center}.yui-skin-sam .yui-calendar .calheader img{border:0}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:0}.yui-skin-sam .yui-calendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:0}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #ccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap}.yui-skin-sam .yui-calendar td.calcell a{color:#06c;display:block;height:100%;text-decoration:none}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#ccc;color:#a6a6a6;cursor:default}.yui-skin-sam .yui-calendar td.calcell.oom a{color:#a6a6a6}.yui-skin-sam .yui-calendar td.calcell.selected{background-color:#fff;color:#000}.yui-skin-sam .yui-calendar td.calcell.selected a{background-color:#b3d4ff;color:#000}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#cf9}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#9cf}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#fcc}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#cf9}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#a0a0a0;cursor:pointer}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#edf5ff;border-top:1px solid black;display:none}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold} +.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#ffee69;border:1px solid #000}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff} +.yui-carousel{visibility:hidden;overflow:hidden;position:relative;text-align:left;zoom:1;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;text-align:center;}.yui-carousel-element li{border:1px solid #ccc;list-style:none;margin:1px;overflow:hidden;padding:0;position:absolute;text-align:center;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-carousel-min-width{min-width:115px;}.yui-carousel-element{overflow:hidden;position:relative;margin:0 auto;padding:0;text-align:left;*margin:0;}.yui-carousel-horizontal .yui-carousel-element{width:320000px;}.yui-carousel-vertical .yui-carousel-element{height:320000px;}.yui-skin-sam .yui-carousel-nav select{position:static;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{border:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input,.yui-skin-sam .yui-carousel-button button{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0 -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button{background-position:0 -750px;}.yui-skin-sam span.yui-carousel-first-button-disabled{background-position:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;height:19px;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul{*margin-left:-170px;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{position:static;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{background:url(sprite.png) no-repeat 0 -650px;cursor:pointer;float:left;height:9px;list-style:none;margin:10px 0 0 5px;overflow:hidden;padding:0;width:9px;}.yui-skin-sam .yui-carousel-nav ul:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.yui-skin-sam .yui-carousel-nav ul li a{display:block;width:100%;height:100%;text-indent:-10000px;text-align:left;overflow:hidden;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected{background-position:0 -700px;}.yui-skin-sam .yui-carousel-item-loading{background:url(ajax-loader.gif) no-repeat 50% 50%;position:absolute;text-indent:-150px;} +.yui-picker-panel{background:#e3e3e3;border-color:#888}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px}.yui-picker{position:relative}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute}.yui-picker-hue-bg{-moz-outline:0;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px}.yui-picker-bg{-moz-outline:0;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png)}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale')}.yui-picker-mask{position:absolute;z-index:1;top:0;left:0}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace}.yui-picker-controls .hd{background:transparent;border-width:0!important}.yui-picker-controls .bd{height:100px;border-width:0!important}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0}.yui-picker-controls li{padding:2px;list-style:none;margin:0}.yui-picker-controls input{font-size:.85em;width:2.4em}.yui-picker-hex-controls{clear:both;padding:2px}.yui-picker-hex-controls input{width:4.6em}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000} +.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2}.yui-panel{position:relative}.yui-panel-container form{margin:0}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0}.mask.block-scrollbars{overflow:auto}.masked select,.drag select,.hide-select select{_visibility:hidden}.yui-panel-container select{_visibility:inherit}.hide-scrollbars,.hide-scrollbars *{overflow:hidden}.hide-scrollbars select{display:none}.show-scrollbars{overflow:auto}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px}.yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none}.yui-tt-shadow{position:absolute}.yui-override-padding{padding:0!important}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none}.yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px}.yui-skin-sam .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#f2f2f2}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px}.yui-skin-sam .yui-panel .bd{padding:10px}.yui-skin-sam .yui-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%}.yui-skin-sam .container-close{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(sprite.png) no-repeat 0 -300px;cursor:pointer}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12)}.yui-skin-sam .yui-dialog .ft{border-top:0;padding:0 10px 10px 10px;font-size:100%}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304369}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1250px}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;padding:2px 5px;border-color:#d4c237 #A6982b #a6982b #A6982B;border-width:1px;border-style:solid;background-color:#ffee69}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12)} +.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500}.yui-dt-tmp{position:absolute;left:-9000px}.yui-dt-scrollable .yui-dt-bd{overflow:auto}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px}.yui-dt-scrollable tbody{-moz-outline:0}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer}.yui-skin-sam thead .yui-dt-draggable{cursor:move}.yui-dt-coltarget{position:absolute;z-index:999}.yui-dt-hd{zoom:1}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none}.yui-dt-editor,.yui-dt-editor-shim{position:absolute;z-index:9000}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7f7f7f}.yui-skin-sam .yui-dt thead{border-spacing:0}.yui-skin-sam .yui-dt caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center}.yui-skin-sam .yui-dt th{background:#d8d8da url(sprite.png) repeat-x 0 0}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7f7f7f}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb;text-align:left}.yui-skin-sam .yui-dt-list td{border-right:0}.yui-skin-sam .yui-dt-resizer{width:6px}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui-skin-sam .yui-dt-message{background-color:#FFF}.yui-skin-sam .yui-dt-scrollable table{border:0}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7f7f7f;border-top:1px solid #7f7f7f;border-right:1px solid #7f7f7f}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7f7f7f;border-bottom:1px solid #7f7f7f;border-right:1px solid #7f7f7f;background-color:#FFF}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7f7f7f}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:url(dt-arrow-dn.png) no-repeat right}tbody .yui-dt-editable{cursor:pointer}.yui-dt-editor{text-align:left;background-color:#f2f2f2;border:1px solid #808080;padding:6px}.yui-dt-editor label{padding-left:4px;padding-right:6px}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584e0;border:1px solid #304369;color:#FFF}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000}.yui-skin-sam tr.yui-dt-even{background-color:#FFF}.yui-skin-sam tr.yui-dt-odd{background-color:#edf5ff}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#dbeaff}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#edf5ff}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#b2d2ff}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#b2d2ff}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#b2d2ff}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#b2d2ff}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446cd7}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426fd9;color:#FFF}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446cd7;color:#FFF}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446cd7} +.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426fd9;color:#FFF}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446cd7;color:#FFF}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none}.yui-skin-sam a.yui-dt-page{border:1px solid #cbcbcb;padding:2px 6px;text-decoration:none;background-color:#fff}.yui-skin-sam .yui-dt-selected{border:1px solid #fff;background-color:#fff} +.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-skin-sam .yui-toolbar-container .yui-button button,.yui-skin-sam .yui-toolbar-container .yui-button a,.yui-skin-sam .yui-toolbar-container .yui-button a:visited{font-size:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a:visited,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a:visited{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{font-size:0;line-height:0;padding:0;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointer;}.yui-toolbar-container .yui-button .first-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block;right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;float:none;} +.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bottom:1px dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .collapsed{background:url(sprite.png) no-repeat 0 -350px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;} +.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;} +.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;} +.yui-crop{position:relative;}.yui-crop .yui-crop-mask{position:absolute;top:0;left:0;height:100%;width:100%;}.yui-crop .yui-resize{position:absolute;top:10px;left:10px;border:0;}.yui-crop .yui-crop-resize-mask{position:absolute;top:0;left:0;height:100%;width:100%;background-position:-10px -10px;overflow:hidden;}.yui-skin-sam .yui-crop .yui-crop-mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);}.yui-skin-sam .yui-crop .yui-resize{border:1px dashed #fff;} +.yui-layout-loading{visibility:hidden;}body.yui-layout{overflow:hidden;position:relative;padding:0;margin:0;}.yui-layout-doc{position:relative;overflow:hidden;padding:0;margin:0;}.yui-layout-unit{height:50px;width:50px;padding:0;margin:0;float:none;z-index:0;}.yui-layout-unit-top{position:absolute;top:0;left:0;width:100%;}.yui-layout-unit-left{position:absolute;top:0;left:0;}.yui-layout-unit-right{position:absolute;top:0;right:0;}.yui-layout-unit-bottom{position:absolute;bottom:0;left:0;width:100%;}.yui-layout-unit-center{position:absolute;top:0;left:0;width:100%;}.yui-layout div.yui-layout-hd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout div.yui-layout-bd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout .yui-layout-noscroll div.yui-layout-bd{overflow:hidden;}.yui-layout .yui-layout-scroll div.yui-layout-bd{overflow:auto;}.yui-layout div.yui-layout-ft{position:absolute;bottom:0;left:0;width:100%;zoom:1;}.yui-layout .yui-layout-unit div.yui-layout-hd h2{text-align:left;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .close{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse-close{right:25px;}.yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#c0c0c0;display:none;}.yui-layout .yui-layout-clip .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-wrap{height:100%;width:100%;position:absolute;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy{border:none;font-size:0;margin:0;padding:0;}.yui-skin-sam .yui-layout .yui-resize-resizing .yui-resize-handle{display:none;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy div{position:absolute;border:1px solid #808080;background-color:#EDF5FF;}.yui-skin-sam .yui-layout .yui-resize .yui-resize-handle-active{zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-l{width:5px;height:100%;top:0;left:0;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-r{width:5px;top:0;right:0;height:100%;position:absolute;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-b{width:100%;bottom:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-t{width:100%;top:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-layout-unit-left div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -160px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-left .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -140px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-right div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -200px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-right .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -120px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-top div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -220px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-top .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -240px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-bottom div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -260px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-bottom .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -180px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd .close{background:transparent url(layout_sprite.png) no-repeat -20px -100px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-hd{background:url(sprite.png) repeat-x 0 -1400px;border:1px solid #808080;}.yui-skin-sam .yui-layout{background-color:#EDF5FF;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd h2{font-weight:bold;color:#fff;padding:3px;margin:0;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd{border:1px solid #808080;border-bottom:none;border-top:none;*border-bottom-width:0;*border-top-width:0;background-color:#f2f2f2;text-align:left;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-noft{border-bottom:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-nohd{border-top:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#EDF5FF;display:none;border:1px solid #808080;}.yui-skin-sam .yui-layout div.yui-layout-ft{border:1px solid #808080;border-top:none;*border-top-width:0;background-color:#f2f2f2;}.yui-skin-sam .yui-layout-unit .yui-resize-handle{background-color:transparent;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r{right:0;top:0;background-image:none;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-l{left:0;top:0;background-image:none;zoom:1;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-b{right:0;bottom:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-l .yui-layout-resize-knob{position:absolute;height:16px;width:6px;top:45%;left:0;display:block;background:transparent url(layout_sprite.png) no-repeat 0 -5px;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-b .yui-layout-resize-knob{position:absolute;height:6px;width:16px;left:45%;background:transparent url(layout_sprite.png) no-repeat -20px 0;zoom:1;} +.yui-skin-sam .yui-log{padding:1em;width:31em;background-color:#AAA;color:#000;border:1px solid black;font-family:monospace;font-size:77%;text-align:left;z-index:9000}.yui-skin-sam .yui-log-container{position:absolute;top:1em;right:1em}.yui-skin-sam .yui-log input{margin:0;padding:0;font-family:arial;font-size:100%;font-weight:normal}.yui-skin-sam .yui-log .yui-log-btns{position:relative;float:right;bottom:.25em}.yui-skin-sam .yui-log .yui-log-hd{margin-top:1em;padding:.5em;background-color:#575757}.yui-skin-sam .yui-log .yui-log-hd h4{margin:0;padding:0;font-size:108%;font-weight:bold;color:#FFF}.yui-skin-sam .yui-log .yui-log-bd{width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto}.yui-skin-sam .yui-log p{margin:1px;padding:.1em}.yui-skin-sam .yui-log pre{margin:0;padding:0}.yui-skin-sam .yui-log pre.yui-log-verbose{white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.yui-skin-sam .yui-log .yui-log-ft{margin-top:.5em}.yui-skin-sam .yui-log .yui-log-ft .yui-log-sourcefilters{width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em}.yui-skin-sam .yui-log .yui-log-filtergrp{margin-right:.5em}.yui-skin-sam .yui-log .info{background-color:#a7cc25}.yui-skin-sam .yui-log .warn{background-color:#f58516}.yui-skin-sam .yui-log .error{background-color:#e32f0b}.yui-skin-sam .yui-log .time{background-color:#a6c9d7}.yui-skin-sam .yui-log .window{background-color:#f2e886} +.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scrollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-overlay.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubaritemlabel:visited{color:#000;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-selected{border-color:#7D98B8;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled,.yui-skin-sam .yuimenubaritemlabel-disabled:visited{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel:visited{color:#000;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yuimenuitem-checked{background-image:url(menuitem_checkbox.png);background-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled,.yui-skin-sam .yuimenuitemlabel-disabled:visited{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);} +.yui-skin-sam .yui-pg-container{display:block;margin:6px 0;white-space:nowrap}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous,.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last,.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-pages,.yui-skin-sam .yui-pg-page{display:inline-block;font-family:arial,helvetica,clean,sans-serif;padding:3px 6px;zoom:1}.yui-skin-sam .yui-pg-pages{padding:0}.yui-skin-sam .yui-pg-current{padding:3px 0}.yui-skin-sam a.yui-pg-first:link,.yui-skin-sam a.yui-pg-first:visited,.yui-skin-sam a.yui-pg-first:active,.yui-skin-sam a.yui-pg-first:hover,.yui-skin-sam a.yui-pg-previous:link,.yui-skin-sam a.yui-pg-previous:visited,.yui-skin-sam a.yui-pg-previous:active,.yui-skin-sam a.yui-pg-previous:hover,.yui-skin-sam a.yui-pg-next:link,.yui-skin-sam a.yui-pg-next:visited,.yui-skin-sam a.yui-pg-next:active,.yui-skin-sam a.yui-pg-next:hover,.yui-skin-sam a.yui-pg-last:link,.yui-skin-sam a.yui-pg-last:visited,.yui-skin-sam a.yui-pg-last:active,.yui-skin-sam a.yui-pg-last:hover,.yui-skin-sam a.yui-pg-page:link,.yui-skin-sam a.yui-pg-page:visited,.yui-skin-sam a.yui-pg-page:active,.yui-skin-sam a.yui-pg-page:hover{color:#06c;text-decoration:underline;outline:0}.yui-skin-sam span.yui-pg-first,.yui-skin-sam span.yui-pg-previous,.yui-skin-sam span.yui-pg-next,.yui-skin-sam span.yui-pg-last{color:#a6a6a6}.yui-skin-sam .yui-pg-page{background-color:#fff;border:1px solid #cbcbcb;padding:2px 6px;text-decoration:none}.yui-skin-sam .yui-pg-current-page{background-color:transparent;border:0;font-weight:bold;padding:3px 6px}.yui-skin-sam .yui-pg-page{margin-left:1px;margin-right:1px}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous{padding-left:0}.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last{padding-right:0}.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-rpp-options{margin-left:1em;margin-right:1em} +.yui-skin-sam .yui-pv{background-color:#4a4a4a;font-family:arial;position:relative;width:99%;z-index:1000;margin-bottom:1em;overflow:hidden;}.yui-skin-sam .yui-pv .hd{background:url(header_background.png) repeat-x;min-height:30px;overflow:hidden;zoom:1;padding:2px 0;}.yui-skin-sam .yui-pv .hd h4{padding:8px 10px;margin:0;font:bold 14px arial;color:#fff;}.yui-skin-sam .yui-pv .hd a{background:#3f6bc3;font:bold 11px arial;color:#fff;padding:4px;margin:3px 10px 0 0;border:1px solid #3f567d;cursor:pointer;display:block;float:right;}.yui-skin-sam .yui-pv .hd span{display:none;}.yui-skin-sam .yui-pv .hd span.yui-pv-busy{height:18px;width:18px;background:url(wait.gif) no-repeat;overflow:hidden;display:block;float:right;margin:4px 10px 0 0;}.yui-skin-sam .yui-pv .hd:after,.yui-pv .bd:after,.yui-skin-sam .yui-pv-chartlegend dl:after{content:'.';visibility:hidden;clear:left;height:0;display:block;}.yui-skin-sam .yui-pv .bd{position:relative;zoom:1;overflow-x:auto;overflow-y:hidden;}.yui-skin-sam .yui-pv .yui-pv-table{padding:0 10px;margin:5px 0 10px 0;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td{color:#eeee5c;font:12px arial;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd{background:#929292;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even{background:#58637a;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc{background:#384970;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc{background:#6F6E6E;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th{background-image:none;background:#2E2D2D;}.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner{background:transparent url(asc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner{background:transparent url(desc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a{color:#fff;font:bold 12px arial;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc{background:#333;}.yui-skin-sam .yui-pv-chartcontainer{padding:0 10px;}.yui-skin-sam .yui-pv-chart{height:250px;clear:right;margin:5px 0 0 0;color:#fff;}.yui-skin-sam .yui-pv-chartlegend div{float:right;margin:0 0 0 10px;_width:250px;}.yui-skin-sam .yui-pv-chartlegend dl{border:1px solid #999;padding:.2em 0 .2em .5em;zoom:1;margin:5px 0;}.yui-skin-sam .yui-pv-chartlegend dt{float:left;display:block;height:.7em;width:.7em;padding:0;}.yui-skin-sam .yui-pv-chartlegend dd{float:left;display:block;color:#fff;margin:0 1em 0 .5em;padding:0;font:11px arial;}.yui-skin-sam .yui-pv-minimized{height:35px;}.yui-skin-sam .yui-pv-minimized .bd{top:-3000px;}.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh{display:none;} +.yui-pb-bar,.yui-pb-mask{width:100%;height:100%}.yui-pb{position:relative;top:0;left:0;width:200px;height:20px;padding:0;border:0;margin:0;text-align:left}.yui-pb-mask{position:absolute;top:0;left:0;z-index:2}.yui-pb-mask div{width:50%;height:50%;background-repeat:no-repeat;padding:0;position:absolute}.yui-pb-tl{background-position:top left}.yui-pb-tr{background-position:top right;left:50%}.yui-pb-bl{background-position:bottom left;top:50%}.yui-pb-br{background-position:bottom right;left:50%;top:50%}.yui-pb-bar{margin:0;position:absolute;left:0;top:0;z-index:1}.yui-pb-ltr .yui-pb-bar{_position:static}.yui-pb-rtl .yui-pb-bar{background-position:right}.yui-pb-btt .yui-pb-bar{background-position:left bottom}.yui-pb-bar{background-color:blue}.yui-pb{border:thin solid #808080}.yui-skin-sam .yui-pb{background-color:transparent;border:solid #808080;border-width:1px 0}.yui-skin-sam .yui-pb-rtl,.yui-skin-sam .yui-pb-ltr{background-image:url(back-h.png);background-repeat:repeat-x}.yui-skin-sam .yui-pb-ttb,.yui-skin-sam .yui-pb-btt{background-image:url(back-v.png);background-repeat:repeat-y}.yui-skin-sam .yui-pb-bar{background-color:transparent}.yui-skin-sam .yui-pb-ltr .yui-pb-bar,.yui-skin-sam .yui-pb-rtl .yui-pb-bar{background-image:url(bar-h.png);background-repeat:repeat-x}.yui-skin-sam .yui-pb-ttb .yui-pb-bar,.yui-skin-sam .yui-pb-btt .yui-pb-bar{background-image:url(bar-v.png);background-repeat:repeat-y}.yui-skin-sam .yui-pb-mask{border:solid #808080;border-width:0 1px;margin:0 -1px}.yui-skin-sam .yui-pb-caption{color:#000;text-align:center;margin:0 auto}.yui-skin-sam .yui-pb-range{color:#a6a6a6} +.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font-weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle{background-color:#F2F2F2;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;zoom:1;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transparent url(layout_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{height:6px;width:6px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r{right:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b{bottom:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br{right:-8px;bottom:-8px;} +.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-skin-sam .yui-toolbar-container .yui-button button,.yui-skin-sam .yui-toolbar-container .yui-button a,.yui-skin-sam .yui-toolbar-container .yui-button a:visited{font-size:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a:visited,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton button,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a:visited{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{font-size:0;line-height:0;padding:0;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointer;}.yui-toolbar-container .yui-button .first-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block;right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;float:none;} +.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bottom:1px dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .collapsed{background:url(sprite.png) no-repeat 0 -350px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;} +.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;} +.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}.yui-h-slider,.yui-v-slider,.yui-region-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb,.yui-region-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}.yui-skin-sam .yui-region-slider{height:228px;width:228px;} +.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 .5em 0 0}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 .5em}.yui-navset .yui-content .yui-hidden{border:0;height:0;width:0;padding:0;position:absolute;left:-999999px;overflow:hidden;visibility:hidden}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em}.yui-navset-right{padding:0 6em 0 0}.yui-navset-top,.yui-navset-bottom{padding:auto}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none}.yui-navset li em{font-style:normal}.yui-navset{position:relative;zoom:1}.yui-navset .yui-content,.yui-navset .yui-content div{zoom:1}.yui-navset .yui-content:after{content:'';display:block;clear:both}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block}.yui-navset .yui-nav a{position:relative}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block}.yui-navset-bottom .yui-nav li a{vertical-align:text-top}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto}.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto}.yui-skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;zoom:1}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 .16em 0 0;padding:1px 0 0;zoom:1}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 .16em -1px 0}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;padding:.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:.35em .75em}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px}.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 .16em;padding:0 0 0 1px}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px .16em 0}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 .16em -1px}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:.2em .75em;top:auto;left:-1px}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px .16em 0 0}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px} +.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356} +table.ygtvtable{margin-bottom:0;border:0;border-collapse:collapse}td.ygtvcell{border:0;padding:0}a.ygtvspacer{text-decoration:none;outline-style:none;display:block}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;cursor:pointer}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat}.ygtvtmh,.ygtvtmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat}.ygtvtph,.ygtvtphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;cursor:pointer}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0 no-repeat}.ygtvlmh,.ygtvlmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat}.ygtvlp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat}.ygtvlph,.ygtvlphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;cursor:pointer}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat}.ygtvblankdepthcell{width:18px;height:22px}* html .ygtvchildren{height:2%}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;cursor:pointer}.ygtvcontent{cursor:default}.ygtvspacer{height:22px;width:18px}.ygtvfocus{background-color:#c0e0e0;border:0}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0}.ygtvfocus a{outline-style:none}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat}.ygtvok:hover{background:url(treeview-sprite.gif) 0 -8844px no-repeat}.ygtvcancel{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8866px no-repeat}.ygtv-label-editor{background-color:#f2f2f2;border:1px solid silver;position:absolute;display:none;overflow:hidden;margin:auto;z-index:9000}.ygtv-edit-TextNode{width:190px}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:0}.ygtv-edit-TextNode .ygtv-button-container{float:right}.ygtv-edit-TextNode .ygtv-input input{width:140px}.ygtv-edit-DateNode .ygtvcancel{border:0}.ygtv-edit-DateNode .ygtvok{display:none}.ygtv-edit-DateNode .ygtv-button-container{text-align:right;margin:auto}.ygtv-highlight .ygtv-highlight1,.ygtv-highlight .ygtv-highlight1 .ygtvlabel{background-color:blue;color:white}.ygtv-highlight .ygtv-highlight2,.ygtv-highlight .ygtv-highlight2 .ygtvlabel{background-color:silver}.ygtv-highlight .ygtv-highlight0 .ygtvfocus .ygtvlabel,.ygtv-highlight .ygtv-highlight1 .ygtvfocus .ygtvlabel,.ygtv-highlight .ygtv-highlight2 .ygtvfocus .ygtvlabel{background-color:#c0e0e0}.ygtv-highlight .ygtvcontent{padding-right:1em}.ygtv-checkbox .ygtv-highlight0 .ygtvcontent{padding-left:1em;background:url(check0.gif) no-repeat}.ygtv-checkbox .ygtv-highlight0 .ygtvfocus.ygtvcontent,.ygtv-checkbox .ygtv-highlight1 .ygtvfocus.ygtvcontent,.ygtv-checkbox .ygtv-highlight2 .ygtvfocus.ygtvcontent{background-color:#c0e0e0}.ygtv-checkbox .ygtv-highlight1 .ygtvcontent{padding-left:1em;background:url(check1.gif) no-repeat}.ygtv-checkbox .ygtv-highlight2 .ygtvcontent{padding-left:1em;background:url(check2.gif) no-repeat} + diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/slider.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/slider.css new file mode 100644 index 0000000..3947edc --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/slider.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-h-slider,.yui-v-slider,.yui-region-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb,.yui-region-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}.yui-skin-sam .yui-region-slider{height:228px;width:228px;} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-active.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-active.png new file mode 100644 index 0000000..fa58c50 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-active.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-disabled.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-disabled.png new file mode 100644 index 0000000..0a6a82c Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-disabled.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-focus.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-focus.png new file mode 100644 index 0000000..167d71e Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-focus.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-hover.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-hover.png new file mode 100644 index 0000000..167d71e Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow-hover.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow.png new file mode 100644 index 0000000..b33a93f Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/split-button-arrow.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.png b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.png new file mode 100644 index 0000000..73634d6 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.png differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.psd b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.psd new file mode 100644 index 0000000..fff2c34 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/sprite.psd differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/tabview.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/tabview.css new file mode 100644 index 0000000..9c3a358 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/tabview.css @@ -0,0 +1,8 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 .5em 0 0}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 .5em}.yui-navset .yui-content .yui-hidden{border:0;height:0;width:0;padding:0;position:absolute;left:-999999px;overflow:hidden;visibility:hidden}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em}.yui-navset-right{padding:0 6em 0 0}.yui-navset-top,.yui-navset-bottom{padding:auto}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none}.yui-navset li em{font-style:normal}.yui-navset{position:relative;zoom:1}.yui-navset .yui-content,.yui-navset .yui-content div{zoom:1}.yui-navset .yui-content:after{content:'';display:block;clear:both}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block}.yui-navset .yui-nav a{position:relative}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block}.yui-navset-bottom .yui-nav li a{vertical-align:text-top}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto}.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto}.yui-skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;zoom:1}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 .16em 0 0;padding:1px 0 0;zoom:1}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 .16em -1px 0}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;padding:.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:.35em .75em}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px}.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 .16em;padding:0 0 0 1px}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px .16em 0}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 .16em -1px}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:.2em .75em;top:auto;left:-1px}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px .16em 0 0}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px} +.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-loading.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-loading.gif new file mode 100644 index 0000000..0bbf3bc Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-loading.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-sprite.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-sprite.gif new file mode 100644 index 0000000..8fb3f01 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview-sprite.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview.css new file mode 100644 index 0000000..8fa8da8 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/treeview.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +table.ygtvtable{margin-bottom:0;border:0;border-collapse:collapse}td.ygtvcell{border:0;padding:0}a.ygtvspacer{text-decoration:none;outline-style:none;display:block}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;cursor:pointer}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat}.ygtvtmh,.ygtvtmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat}.ygtvtph,.ygtvtphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;cursor:pointer}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0 no-repeat}.ygtvlmh,.ygtvlmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat}.ygtvlp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat}.ygtvlph,.ygtvlphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;cursor:pointer}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat}.ygtvblankdepthcell{width:18px;height:22px}* html .ygtvchildren{height:2%}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;cursor:pointer}.ygtvcontent{cursor:default}.ygtvspacer{height:22px;width:18px}.ygtvfocus{background-color:#c0e0e0;border:0}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0}.ygtvfocus a{outline-style:none}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat}.ygtvok:hover{background:url(treeview-sprite.gif) 0 -8844px no-repeat}.ygtvcancel{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8866px no-repeat}.ygtv-label-editor{background-color:#f2f2f2;border:1px solid silver;position:absolute;display:none;overflow:hidden;margin:auto;z-index:9000}.ygtv-edit-TextNode{width:190px}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:0}.ygtv-edit-TextNode .ygtv-button-container{float:right}.ygtv-edit-TextNode .ygtv-input input{width:140px}.ygtv-edit-DateNode .ygtvcancel{border:0}.ygtv-edit-DateNode .ygtvok{display:none}.ygtv-edit-DateNode .ygtv-button-container{text-align:right;margin:auto}.ygtv-highlight .ygtv-highlight1,.ygtv-highlight .ygtv-highlight1 .ygtvlabel{background-color:blue;color:white}.ygtv-highlight .ygtv-highlight2,.ygtv-highlight .ygtv-highlight2 .ygtvlabel{background-color:silver}.ygtv-highlight .ygtv-highlight0 .ygtvfocus .ygtvlabel,.ygtv-highlight .ygtv-highlight1 .ygtvfocus .ygtvlabel,.ygtv-highlight .ygtv-highlight2 .ygtvfocus .ygtvlabel{background-color:#c0e0e0}.ygtv-highlight .ygtvcontent{padding-right:1em}.ygtv-checkbox .ygtv-highlight0 .ygtvcontent{padding-left:1em;background:url(check0.gif) no-repeat}.ygtv-checkbox .ygtv-highlight0 .ygtvfocus.ygtvcontent,.ygtv-checkbox .ygtv-highlight1 .ygtvfocus.ygtvcontent,.ygtv-checkbox .ygtv-highlight2 .ygtvfocus.ygtvcontent{background-color:#c0e0e0}.ygtv-checkbox .ygtv-highlight1 .ygtvcontent{padding-left:1em;background:url(check1.gif) no-repeat}.ygtv-checkbox .ygtv-highlight2 .ygtvcontent{padding-left:1em;background:url(check2.gif) no-repeat} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/wait.gif b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/wait.gif new file mode 100644 index 0000000..471c1a4 Binary files /dev/null and b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/wait.gif differ diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/yuitest.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/yuitest.css new file mode 100644 index 0000000..7cfa36b --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/assets/skins/sam/yuitest.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ + diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base-min.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base-min.css new file mode 100644 index 0000000..f71b9a5 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base-min.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +body{margin:10px}h1{font-size:138.5%}h2{font-size:123.1%}h3{font-size:108%}h1,h2,h3{margin:1em 0}h1,h2,h3,h4,h5,h6,strong,dt{font-weight:bold}optgroup{font-weight:normal}abbr,acronym{border-bottom:1px dotted #000;cursor:help}em{font-style:italic}del{text-decoration:line-through}blockquote,ul,ol,dl{margin:1em}ol,ul,dl{margin-left:2em}ol{list-style:decimal outside}ul{list-style:disc outside}dl dd{margin-left:1em}th,td{border:1px solid #000;padding:.5em}th{font-weight:bold;text-align:center}caption{margin-bottom:.5em;text-align:center}sup{vertical-align:super}sub{vertical-align:sub}p,fieldset,table,pre{margin-bottom:1em}button,input[type="checkbox"],input[type="radio"],input[type="reset"],input[type="submit"]{padding:1px}img{-ms-interpolation-mode:bicubic} \ No newline at end of file diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base.css b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base.css new file mode 100644 index 0000000..557c75e --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/base/base.css @@ -0,0 +1,137 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +/** + * YUI Base + * @module base + * @namespace yui- + * @requires reset, fonts +*/ + +body { + /* For breathing room between content and viewport. */ + margin:10px; +} + +h1 { + /* 18px via YUI Fonts CSS foundation. */ + font-size: 138.5%; +} + +h2 { + /* 16px via YUI Fonts CSS foundation. */ + font-size: 123.1%; +} + +h3 { + /* 14px via YUI Fonts CSS foundation. */ + font-size: 108%; +} + +h1,h2,h3 { + /* Top & bottom margin based on font size. */ + margin: 1em 0; +} + +h1,h2,h3,h4,h5,h6,strong,dt { + /* Bringing boldness back to headers and the strong element. */ + font-weight: bold; +} +optgroup { + font-weight:normal; +} + +abbr,acronym { + /* Indicating to users that more info is available. */ + border-bottom: 1px dotted #000; + cursor: help; +} + +em { + /* Bringing italics back to the em element. */ + font-style: italic; +} + +del { + /* Striking deleted phrases. */ + text-decoration: line-through; +} + +blockquote,ul,ol,dl { + /* Giving blockquotes and lists room to breath. */ + margin: 1em; +} + +ol,ul,dl { + /* Bringing lists on to the page with breathing room. */ + margin-left: 2em; +} + +ol { + /* Giving OL's LIs generated numbers. */ + list-style: decimal outside; +} + +ul { + /* Giving UL's LIs generated disc markers. */ + list-style: disc outside; +} + +dl dd { + /* Giving DD default indent. */ + margin-left: 1em; +} + +th,td { + /* Borders and padding to make the table readable. */ + border: 1px solid #000; + padding: .5em; +} + +th { + /* Distinguishing table headers from data cells. */ + font-weight: bold; + text-align: center; +} + +caption { + /* Coordinated margin to match cell's padding. */ + margin-bottom: .5em; + /* Centered so it doesn't blend in to other content. */ + text-align: center; +} + +sup { + /* to preserve line-height and selector appearance */ + vertical-align: super; +} + +sub { + /* to preserve line-height and selector appearance */ + vertical-align: sub; +} + +p, +fieldset, +table, +pre { + /* So things don't run into each other. */ + margin-bottom: 1em; +} +/* Opera requires 1px of padding to render with contemporary native chrome */ +button, +input[type="checkbox"], +input[type="radio"], +input[type="reset"], +input[type="submit"] { + padding:1px; +} + +/* make IE scale images properly */ +/* see http://code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */ + img { + -ms-interpolation-mode:bicubic; +} diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-debug.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-debug.js new file mode 100644 index 0000000..02afc59 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-debug.js @@ -0,0 +1,1885 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +/** + * The dom module provides helper methods for manipulating Dom elements. + * @module dom + * + */ + +(function() { + // for use with generateId (global to save state if Dom is overwritten) + YAHOO.env._id_counter = YAHOO.env._id_counter || 0; + + // internal shorthand + var Y = YAHOO.util, + lang = YAHOO.lang, + UA = YAHOO.env.ua, + trim = YAHOO.lang.trim, + propertyCache = {}, // for faster hyphen converts + reCache = {}, // cache className regexes + RE_TABLE = /^t(?:able|d|h)$/i, // for _calcBorders + RE_COLOR = /color$/i, + + // DOM aliases + document = window.document, + documentElement = document.documentElement, + + // string constants + OWNER_DOCUMENT = 'ownerDocument', + DEFAULT_VIEW = 'defaultView', + DOCUMENT_ELEMENT = 'documentElement', + COMPAT_MODE = 'compatMode', + OFFSET_LEFT = 'offsetLeft', + OFFSET_TOP = 'offsetTop', + OFFSET_PARENT = 'offsetParent', + PARENT_NODE = 'parentNode', + NODE_TYPE = 'nodeType', + TAG_NAME = 'tagName', + SCROLL_LEFT = 'scrollLeft', + SCROLL_TOP = 'scrollTop', + GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect', + GET_COMPUTED_STYLE = 'getComputedStyle', + CURRENT_STYLE = 'currentStyle', + CSS1_COMPAT = 'CSS1Compat', + _BACK_COMPAT = 'BackCompat', + _CLASS = 'class', // underscore due to reserved word + CLASS_NAME = 'className', + EMPTY = '', + SPACE = ' ', + C_START = '(?:^|\\s)', + C_END = '(?= |$)', + G = 'g', + POSITION = 'position', + FIXED = 'fixed', + RELATIVE = 'relative', + LEFT = 'left', + TOP = 'top', + MEDIUM = 'medium', + BORDER_LEFT_WIDTH = 'borderLeftWidth', + BORDER_TOP_WIDTH = 'borderTopWidth', + + // brower detection + isOpera = UA.opera, + isSafari = UA.webkit, + isGecko = UA.gecko, + isIE = UA.ie; + + /** + * Provides helper methods for DOM elements. + * @namespace YAHOO.util + * @class Dom + * @requires yahoo, event + */ + Y.Dom = { + CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8 + 'for': 'htmlFor', + 'class': CLASS_NAME + } : { // w3c + 'htmlFor': 'for', + 'className': _CLASS + }, + + DOT_ATTRIBUTES: { + checked: true + }, + + /** + * Returns an HTMLElement reference. + * @method get + * @param {String | HTMLElement |Array} el Accepts a string to use as an ID for getting a DOM reference, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements. + */ + get: function(el) { + var id, nodes, c, i, len, attr, ret = null; + + if (el) { + if (typeof el == 'string' || typeof el == 'number') { // id + id = el + ''; + el = document.getElementById(el); + attr = (el) ? el.attributes : null; + if (el && attr && attr.id && attr.id.value === id) { // IE: avoid false match on "name" attribute + return el; + } else if (el && document.all) { // filter by name + el = null; + nodes = document.all[id]; + if (nodes && nodes.length) { + for (i = 0, len = nodes.length; i < len; ++i) { + if (nodes[i].id === id) { + return nodes[i]; + } + } + } + } + } else if (Y.Element && el instanceof Y.Element) { + el = el.get('element'); + } else if (!el.nodeType && 'length' in el) { // array-like + c = []; + for (i = 0, len = el.length; i < len; ++i) { + c[c.length] = Y.Dom.get(el[i]); + } + + el = c; + } + + ret = el; + } + + return ret; + }, + + getComputedStyle: function(el, property) { + if (window[GET_COMPUTED_STYLE]) { + return el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null)[property]; + } else if (el[CURRENT_STYLE]) { + return Y.Dom.IE_ComputedStyle.get(el, property); + } + }, + + /** + * Normalizes currentStyle and ComputedStyle. + * @method getStyle + * @param {String | HTMLElement |Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @param {String} property The style property whose value is returned. + * @return {String | Array} The current value of the style property for the element(s). + */ + getStyle: function(el, property) { + return Y.Dom.batch(el, Y.Dom._getStyle, property); + }, + + // branching at load instead of runtime + _getStyle: function() { + if (window[GET_COMPUTED_STYLE]) { // W3C DOM method + return function(el, property) { + property = (property === 'float') ? property = 'cssFloat' : + Y.Dom._toCamel(property); + + var value = el.style[property], + computed; + + if (!value) { + computed = el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null); + if (computed) { // test computed before touching for safari + value = computed[property]; + } + } + + return value; + }; + } else if (documentElement[CURRENT_STYLE]) { + return function(el, property) { + var value; + + switch(property) { + case 'opacity' :// IE opacity uses filter + value = 100; + try { // will error if no DXImageTransform + value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity; + + } catch(e) { + try { // make sure its in the document + value = el.filters('alpha').opacity; + } catch(err) { + YAHOO.log('getStyle: IE filter failed', + 'error', 'Dom'); + } + } + return value / 100; + case 'float': // fix reserved word + property = 'styleFloat'; // fall through + default: + property = Y.Dom._toCamel(property); + value = el[CURRENT_STYLE] ? el[CURRENT_STYLE][property] : null; + return ( el.style[property] || value ); + } + }; + } + }(), + + /** + * Wrapper for setting style properties of HTMLElements. Normalizes "opacity" across modern browsers. + * @method setStyle + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @param {String} property The style property to be set. + * @param {String} val The value to apply to the given property. + */ + setStyle: function(el, property, val) { + Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val }); + }, + + _setStyle: function() { + if (!window.getComputedStyle && document.documentElement.currentStyle) { + return function(el, args) { + var property = Y.Dom._toCamel(args.prop), + val = args.val; + + if (el) { + switch (property) { + case 'opacity': + // remove filter if unsetting or full opacity + if (val === '' || val === null || val === 1) { + el.style.removeAttribute('filter'); + } else if ( lang.isString(el.style.filter) ) { // in case not appended + el.style.filter = 'alpha(opacity=' + val * 100 + ')'; + + if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) { + el.style.zoom = 1; // when no layout or cant tell + } + } + break; + case 'float': + property = 'styleFloat'; + default: + el.style[property] = val; + } + } else { + YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom'); + } + }; + } else { + return function(el, args) { + var property = Y.Dom._toCamel(args.prop), + val = args.val; + if (el) { + if (property == 'float') { + property = 'cssFloat'; + } + el.style[property] = val; + } else { + YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom'); + } + }; + } + + }(), + + /** + * Gets the current position of an element based on page coordinates. + * Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method getXY + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM + * reference, or an Array of IDs and/or HTMLElements + * @return {Array} The XY position of the element(s) + */ + getXY: function(el) { + return Y.Dom.batch(el, Y.Dom._getXY); + }, + + _canPosition: function(el) { + return ( Y.Dom._getStyle(el, 'display') !== 'none' && Y.Dom._inDoc(el) ); + }, + + _getXY: function(node) { + var scrollLeft, scrollTop, box, doc, + clientTop, clientLeft, + round = Math.round, // TODO: round? + xy = false; + + if (Y.Dom._canPosition(node)) { + box = node[GET_BOUNDING_CLIENT_RECT](); + doc = node[OWNER_DOCUMENT]; + scrollLeft = Y.Dom.getDocumentScrollLeft(doc); + scrollTop = Y.Dom.getDocumentScrollTop(doc); + xy = [box[LEFT], box[TOP]]; + + // remove IE default documentElement offset (border) + if (clientTop || clientLeft) { + xy[0] -= clientLeft; + xy[1] -= clientTop; + } + + if ((scrollTop || scrollLeft)) { + xy[0] += scrollLeft; + xy[1] += scrollTop; + } + + // gecko may return sub-pixel (non-int) values + xy[0] = round(xy[0]); + xy[1] = round(xy[1]); + } else { + YAHOO.log('getXY failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom'); + } + + return xy; + }, + + /** + * Gets the current X position of an element based on page coordinates. The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method getX + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements + * @return {Number | Array} The X position of the element(s) + */ + getX: function(el) { + var f = function(el) { + return Y.Dom.getXY(el)[0]; + }; + + return Y.Dom.batch(el, f, Y.Dom, true); + }, + + /** + * Gets the current Y position of an element based on page coordinates. Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method getY + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements + * @return {Number | Array} The Y position of the element(s) + */ + getY: function(el) { + var f = function(el) { + return Y.Dom.getXY(el)[1]; + }; + + return Y.Dom.batch(el, f, Y.Dom, true); + }, + + /** + * Set the position of an html element in page coordinates, regardless of how the element is positioned. + * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method setXY + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements + * @param {Array} pos Contains X & Y values for new position (coordinates are page-based) + * @param {Boolean} noRetry By default we try and set the position a second time if the first fails + */ + setXY: function(el, pos, noRetry) { + Y.Dom.batch(el, Y.Dom._setXY, { pos: pos, noRetry: noRetry }); + }, + + _setXY: function(node, args) { + var pos = Y.Dom._getStyle(node, POSITION), + setStyle = Y.Dom.setStyle, + xy = args.pos, + noRetry = args.noRetry, + + delta = [ // assuming pixels; if not we will have to retry + parseInt( Y.Dom.getComputedStyle(node, LEFT), 10 ), + parseInt( Y.Dom.getComputedStyle(node, TOP), 10 ) + ], + + currentXY, + newXY; + + currentXY = Y.Dom._getXY(node); + + if (!xy || currentXY === false) { // has to be part of doc to have xy + YAHOO.log('xy failed: node not available', 'error', 'Node'); + return false; + } + + if (pos == 'static') { // default to relative + pos = RELATIVE; + setStyle(node, POSITION, pos); + } + + if ( isNaN(delta[0]) ) {// in case of 'auto' + delta[0] = (pos == RELATIVE) ? 0 : node[OFFSET_LEFT]; + } + if ( isNaN(delta[1]) ) { // in case of 'auto' + delta[1] = (pos == RELATIVE) ? 0 : node[OFFSET_TOP]; + } + + if (xy[0] !== null) { // from setX + setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px'); + } + + if (xy[1] !== null) { // from setY + setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px'); + } + + if (!noRetry) { + newXY = Y.Dom._getXY(node); + + // if retry is true, try one more time if we miss + if ( (xy[0] !== null && newXY[0] != xy[0]) || + (xy[1] !== null && newXY[1] != xy[1]) ) { + Y.Dom._setXY(node, { pos: xy, noRetry: true }); + } + } + + YAHOO.log('setXY setting position to ' + xy, 'info', 'Node'); + }, + + /** + * Set the X position of an html element in page coordinates, regardless of how the element is positioned. + * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method setX + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @param {Int} x The value to use as the X coordinate for the element(s). + */ + setX: function(el, x) { + Y.Dom.setXY(el, [x, null]); + }, + + /** + * Set the Y position of an html element in page coordinates, regardless of how the element is positioned. + * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false). + * @method setY + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @param {Int} x To use as the Y coordinate for the element(s). + */ + setY: function(el, y) { + Y.Dom.setXY(el, [null, y]); + }, + + /** + * Returns the region position of the given element. + * The element must be part of the DOM tree to have a region (display:none or elements not appended return false). + * @method getRegion + * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements. + * @return {Region | Array} A Region or array of Region instances containing "top, left, bottom, right" member data. + */ + getRegion: function(el) { + var f = function(el) { + var region = false; + if ( Y.Dom._canPosition(el) ) { + region = Y.Region.getRegion(el); + YAHOO.log('getRegion returning ' + region, 'info', 'Dom'); + } else { + YAHOO.log('getRegion failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom'); + } + + return region; + }; + + return Y.Dom.batch(el, f, Y.Dom, true); + }, + + /** + * Returns the width of the client (viewport). + * @method getClientWidth + * @deprecated Now using getViewportWidth. This interface left intact for back compat. + * @return {Int} The width of the viewable area of the page. + */ + getClientWidth: function() { + return Y.Dom.getViewportWidth(); + }, + + /** + * Returns the height of the client (viewport). + * @method getClientHeight + * @deprecated Now using getViewportHeight. This interface left intact for back compat. + * @return {Int} The height of the viewable area of the page. + */ + getClientHeight: function() { + return Y.Dom.getViewportHeight(); + }, + + /** + * Returns an array of HTMLElements with the given class. + * For optimized performance, include a tag and/or root node when possible. + * Note: This method operates against a live collection, so modifying the + * collection in the callback (removing/appending nodes, etc.) will have + * side effects. Instead you should iterate the returned nodes array, + * as you would with the native "getElementsByTagName" method. + * @method getElementsByClassName + * @param {String} className The class name to match against + * @param {String} tag (optional) The tag name of the elements being collected + * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point. + * This element is not included in the className scan. + * @param {Function} apply (optional) A function to apply to each element when found + * @param {Any} o (optional) An optional arg that is passed to the supplied method + * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o" + * @return {Array} An array of elements that have the given class name + */ + getElementsByClassName: function(className, tag, root, apply, o, overrides) { + tag = tag || '*'; + root = (root) ? Y.Dom.get(root) : null || document; + if (!root) { + return []; + } + + var nodes = [], + elements = root.getElementsByTagName(tag), + hasClass = Y.Dom.hasClass; + + for (var i = 0, len = elements.length; i < len; ++i) { + if ( hasClass(elements[i], className) ) { + nodes[nodes.length] = elements[i]; + } + } + + if (apply) { + Y.Dom.batch(nodes, apply, o, overrides); + } + + return nodes; + }, + + /** + * Determines whether an HTMLElement has the given className. + * @method hasClass + * @param {String | HTMLElement | Array} el The element or collection to test + * @param {String | RegExp} className the class name to search for, or a regular + * expression to match against + * @return {Boolean | Array} A boolean value or array of boolean values + */ + hasClass: function(el, className) { + return Y.Dom.batch(el, Y.Dom._hasClass, className); + }, + + _hasClass: function(el, className) { + var ret = false, + current; + + if (el && className) { + current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY; + if (current) { // convert line breaks, tabs and other delims to spaces + current = current.replace(/\s+/g, SPACE); + } + + if (className.exec) { + ret = className.test(current); + } else { + ret = className && (SPACE + current + SPACE). + indexOf(SPACE + className + SPACE) > -1; + } + } else { + YAHOO.log('hasClass called with invalid arguments', 'warn', 'Dom'); + } + + return ret; + }, + + /** + * Adds a class name to a given element or collection of elements. + * @method addClass + * @param {String | HTMLElement | Array} el The element or collection to add the class to + * @param {String} className the class name to add to the class attribute + * @return {Boolean | Array} A pass/fail boolean or array of booleans + */ + addClass: function(el, className) { + return Y.Dom.batch(el, Y.Dom._addClass, className); + }, + + _addClass: function(el, className) { + var ret = false, + current; + + if (el && className) { + current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY; + if ( !Y.Dom._hasClass(el, className) ) { + Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className)); + ret = true; + } + } else { + YAHOO.log('addClass called with invalid arguments', 'warn', 'Dom'); + } + + return ret; + }, + + /** + * Removes a class name from a given element or collection of elements. + * @method removeClass + * @param {String | HTMLElement | Array} el The element or collection to remove the class from + * @param {String} className the class name to remove from the class attribute + * @return {Boolean | Array} A pass/fail boolean or array of booleans + */ + removeClass: function(el, className) { + return Y.Dom.batch(el, Y.Dom._removeClass, className); + }, + + _removeClass: function(el, className) { + var ret = false, + current, + newClass, + attr; + + if (el && className) { + current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY; + Y.Dom.setAttribute(el, CLASS_NAME, current.replace(Y.Dom._getClassRegex(className), EMPTY)); + + newClass = Y.Dom._getAttribute(el, CLASS_NAME); + if (current !== newClass) { // else nothing changed + Y.Dom.setAttribute(el, CLASS_NAME, trim(newClass)); // trim after comparing to current class + ret = true; + + if (Y.Dom._getAttribute(el, CLASS_NAME) === '') { // remove class attribute if empty + attr = (el.hasAttribute && el.hasAttribute(_CLASS)) ? _CLASS : CLASS_NAME; + YAHOO.log('removeClass removing empty class attribute', 'info', 'Dom'); + el.removeAttribute(attr); + } + } + + } else { + YAHOO.log('removeClass called with invalid arguments', 'warn', 'Dom'); + } + + return ret; + }, + + /** + * Replace a class with another class for a given element or collection of elements. + * If no oldClassName is present, the newClassName is simply added. + * @method replaceClass + * @param {String | HTMLElement | Array} el The element or collection to remove the class from + * @param {String} oldClassName the class name to be replaced + * @param {String} newClassName the class name that will be replacing the old class name + * @return {Boolean | Array} A pass/fail boolean or array of booleans + */ + replaceClass: function(el, oldClassName, newClassName) { + return Y.Dom.batch(el, Y.Dom._replaceClass, { from: oldClassName, to: newClassName }); + }, + + _replaceClass: function(el, classObj) { + var className, + from, + to, + ret = false, + current; + + if (el && classObj) { + from = classObj.from; + to = classObj.to; + + if (!to) { + ret = false; + } else if (!from) { // just add if no "from" + ret = Y.Dom._addClass(el, classObj.to); + } else if (from !== to) { // else nothing to replace + // May need to lead with DBLSPACE? + current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY; + className = (SPACE + current.replace(Y.Dom._getClassRegex(from), SPACE + to). + replace(/\s+/g, SPACE)). // normalize white space + split(Y.Dom._getClassRegex(to)); + + // insert to into what would have been the first occurrence slot + className.splice(1, 0, SPACE + to); + Y.Dom.setAttribute(el, CLASS_NAME, trim(className.join(EMPTY))); + ret = true; + } + } else { + YAHOO.log('replaceClass called with invalid arguments', 'warn', 'Dom'); + } + + return ret; + }, + + /** + * Returns an ID and applies it to the element "el", if provided. + * @method generateId + * @param {String | HTMLElement | Array} el (optional) An optional element array of elements to add an ID to (no ID is added if one is already present). + * @param {String} prefix (optional) an optional prefix to use (defaults to "yui-gen"). + * @return {String | Array} The generated ID, or array of generated IDs (or original ID if already present on an element) + */ + generateId: function(el, prefix) { + prefix = prefix || 'yui-gen'; + + var f = function(el) { + if (el && el.id) { // do not override existing ID + YAHOO.log('generateId returning existing id ' + el.id, 'info', 'Dom'); + return el.id; + } + + var id = prefix + YAHOO.env._id_counter++; + YAHOO.log('generateId generating ' + id, 'info', 'Dom'); + + if (el) { + if (el[OWNER_DOCUMENT] && el[OWNER_DOCUMENT].getElementById(id)) { // in case one already exists + // use failed id plus prefix to help ensure uniqueness + return Y.Dom.generateId(el, id + prefix); + } + el.id = id; + } + + return id; + }; + + // batch fails when no element, so just generate and return single ID + return Y.Dom.batch(el, f, Y.Dom, true) || f.apply(Y.Dom, arguments); + }, + + /** + * Determines whether an HTMLElement is an ancestor of another HTML element in the DOM hierarchy. + * @method isAncestor + * @param {String | HTMLElement} haystack The possible ancestor + * @param {String | HTMLElement} needle The possible descendent + * @return {Boolean} Whether or not the haystack is an ancestor of needle + */ + isAncestor: function(haystack, needle) { + haystack = Y.Dom.get(haystack); + needle = Y.Dom.get(needle); + + var ret = false; + + if ( (haystack && needle) && (haystack[NODE_TYPE] && needle[NODE_TYPE]) ) { + if (haystack.contains && haystack !== needle) { // contains returns true when equal + ret = haystack.contains(needle); + } + else if (haystack.compareDocumentPosition) { // gecko + ret = !!(haystack.compareDocumentPosition(needle) & 16); + } + } else { + YAHOO.log('isAncestor failed; invalid input: ' + haystack + ',' + needle, 'error', 'Dom'); + } + YAHOO.log('isAncestor(' + haystack + ',' + needle + ' returning ' + ret, 'info', 'Dom'); + return ret; + }, + + /** + * Determines whether an HTMLElement is present in the current document. + * @method inDocument + * @param {String | HTMLElement} el The element to search for + * @param {Object} doc An optional document to search, defaults to element's owner document + * @return {Boolean} Whether or not the element is present in the current document + */ + inDocument: function(el, doc) { + return Y.Dom._inDoc(Y.Dom.get(el), doc); + }, + + _inDoc: function(el, doc) { + var ret = false; + if (el && el[TAG_NAME]) { + doc = doc || el[OWNER_DOCUMENT]; + ret = Y.Dom.isAncestor(doc[DOCUMENT_ELEMENT], el); + } else { + YAHOO.log('inDocument failed: invalid input', 'error', 'Dom'); + } + return ret; + }, + + /** + * Returns an array of HTMLElements that pass the test applied by supplied boolean method. + * For optimized performance, include a tag and/or root node when possible. + * Note: This method operates against a live collection, so modifying the + * collection in the callback (removing/appending nodes, etc.) will have + * side effects. Instead you should iterate the returned nodes array, + * as you would with the native "getElementsByTagName" method. + * @method getElementsBy + * @param {Function} method - A boolean method for testing elements which receives the element as its only argument. + * @param {String} tag (optional) The tag name of the elements being collected + * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point + * @param {Function} apply (optional) A function to apply to each element when found + * @param {Any} o (optional) An optional arg that is passed to the supplied method + * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o" + * @return {Array} Array of HTMLElements + */ + getElementsBy: function(method, tag, root, apply, o, overrides, firstOnly) { + tag = tag || '*'; + root = (root) ? Y.Dom.get(root) : null || document; + + var ret = (firstOnly) ? null : [], + elements; + + // in case Dom.get() returns null + if (root) { + elements = root.getElementsByTagName(tag); + for (var i = 0, len = elements.length; i < len; ++i) { + if ( method(elements[i]) ) { + if (firstOnly) { + ret = elements[i]; + break; + } else { + ret[ret.length] = elements[i]; + } + } + } + + if (apply) { + Y.Dom.batch(ret, apply, o, overrides); + } + } + + YAHOO.log('getElementsBy returning ' + ret, 'info', 'Dom'); + + return ret; + }, + + /** + * Returns the first HTMLElement that passes the test applied by the supplied boolean method. + * @method getElementBy + * @param {Function} method - A boolean method for testing elements which receives the element as its only argument. + * @param {String} tag (optional) The tag name of the elements being collected + * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point + * @return {HTMLElement} + */ + getElementBy: function(method, tag, root) { + return Y.Dom.getElementsBy(method, tag, root, null, null, null, true); + }, + + /** + * Runs the supplied method against each item in the Collection/Array. + * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ). + * @method batch + * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to + * @param {Function} method The method to apply to the element(s) + * @param {Any} o (optional) An optional arg that is passed to the supplied method + * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o" + * @return {Any | Array} The return value(s) from the supplied method + */ + batch: function(el, method, o, overrides) { + var collection = [], + scope = (overrides) ? o : null; + + el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible + if (el && method) { + if (el[TAG_NAME] || el.length === undefined) { // element or not array-like + return method.call(scope, el, o); + } + + for (var i = 0; i < el.length; ++i) { + collection[collection.length] = method.call(scope || el[i], el[i], o); + } + } else { + YAHOO.log('batch called with invalid arguments', 'warn', 'Dom'); + return false; + } + return collection; + }, + + /** + * Returns the height of the document. + * @method getDocumentHeight + * @return {Int} The height of the actual document (which includes the body and its margin). + */ + getDocumentHeight: function() { + var scrollHeight = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollHeight : documentElement.scrollHeight, + h = Math.max(scrollHeight, Y.Dom.getViewportHeight()); + + YAHOO.log('getDocumentHeight returning ' + h, 'info', 'Dom'); + return h; + }, + + /** + * Returns the width of the document. + * @method getDocumentWidth + * @return {Int} The width of the actual document (which includes the body and its margin). + */ + getDocumentWidth: function() { + var scrollWidth = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollWidth : documentElement.scrollWidth, + w = Math.max(scrollWidth, Y.Dom.getViewportWidth()); + YAHOO.log('getDocumentWidth returning ' + w, 'info', 'Dom'); + return w; + }, + + /** + * Returns the current height of the viewport. + * @method getViewportHeight + * @return {Int} The height of the viewable area of the page (excludes scrollbars). + */ + getViewportHeight: function() { + var height = self.innerHeight, // Safari, Opera + mode = document[COMPAT_MODE]; + + if ( (mode || isIE) && !isOpera ) { // IE, Gecko + height = (mode == CSS1_COMPAT) ? + documentElement.clientHeight : // Standards + document.body.clientHeight; // Quirks + } + + YAHOO.log('getViewportHeight returning ' + height, 'info', 'Dom'); + return height; + }, + + /** + * Returns the current width of the viewport. + * @method getViewportWidth + * @return {Int} The width of the viewable area of the page (excludes scrollbars). + */ + + getViewportWidth: function() { + var width = self.innerWidth, // Safari + mode = document[COMPAT_MODE]; + + if (mode || isIE) { // IE, Gecko, Opera + width = (mode == CSS1_COMPAT) ? + documentElement.clientWidth : // Standards + document.body.clientWidth; // Quirks + } + YAHOO.log('getViewportWidth returning ' + width, 'info', 'Dom'); + return width; + }, + + /** + * Returns the nearest ancestor that passes the test applied by supplied boolean method. + * For performance reasons, IDs are not accepted and argument validation omitted. + * @method getAncestorBy + * @param {HTMLElement} node The HTMLElement to use as the starting point + * @param {Function} method - A boolean method for testing elements which receives the element as its only argument. + * @return {Object} HTMLElement or null if not found + */ + getAncestorBy: function(node, method) { + while ( (node = node[PARENT_NODE]) ) { // NOTE: assignment + if ( Y.Dom._testElement(node, method) ) { + YAHOO.log('getAncestorBy returning ' + node, 'info', 'Dom'); + return node; + } + } + + YAHOO.log('getAncestorBy returning null (no ancestor passed test)', 'error', 'Dom'); + return null; + }, + + /** + * Returns the nearest ancestor with the given className. + * @method getAncestorByClassName + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @param {String} className + * @return {Object} HTMLElement + */ + getAncestorByClassName: function(node, className) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getAncestorByClassName failed: invalid node argument', 'error', 'Dom'); + return null; + } + var method = function(el) { return Y.Dom.hasClass(el, className); }; + return Y.Dom.getAncestorBy(node, method); + }, + + /** + * Returns the nearest ancestor with the given tagName. + * @method getAncestorByTagName + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @param {String} tagName + * @return {Object} HTMLElement + */ + getAncestorByTagName: function(node, tagName) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getAncestorByTagName failed: invalid node argument', 'error', 'Dom'); + return null; + } + var method = function(el) { + return el[TAG_NAME] && el[TAG_NAME].toUpperCase() == tagName.toUpperCase(); + }; + + return Y.Dom.getAncestorBy(node, method); + }, + + /** + * Returns the previous sibling that is an HTMLElement. + * For performance reasons, IDs are not accepted and argument validation omitted. + * Returns the nearest HTMLElement sibling if no method provided. + * @method getPreviousSiblingBy + * @param {HTMLElement} node The HTMLElement to use as the starting point + * @param {Function} method A boolean function used to test siblings + * that receives the sibling node being tested as its only argument + * @return {Object} HTMLElement or null if not found + */ + getPreviousSiblingBy: function(node, method) { + while (node) { + node = node.previousSibling; + if ( Y.Dom._testElement(node, method) ) { + return node; + } + } + return null; + }, + + /** + * Returns the previous sibling that is an HTMLElement + * @method getPreviousSibling + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @return {Object} HTMLElement or null if not found + */ + getPreviousSibling: function(node) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getPreviousSibling failed: invalid node argument', 'error', 'Dom'); + return null; + } + + return Y.Dom.getPreviousSiblingBy(node); + }, + + /** + * Returns the next HTMLElement sibling that passes the boolean method. + * For performance reasons, IDs are not accepted and argument validation omitted. + * Returns the nearest HTMLElement sibling if no method provided. + * @method getNextSiblingBy + * @param {HTMLElement} node The HTMLElement to use as the starting point + * @param {Function} method A boolean function used to test siblings + * that receives the sibling node being tested as its only argument + * @return {Object} HTMLElement or null if not found + */ + getNextSiblingBy: function(node, method) { + while (node) { + node = node.nextSibling; + if ( Y.Dom._testElement(node, method) ) { + return node; + } + } + return null; + }, + + /** + * Returns the next sibling that is an HTMLElement + * @method getNextSibling + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @return {Object} HTMLElement or null if not found + */ + getNextSibling: function(node) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getNextSibling failed: invalid node argument', 'error', 'Dom'); + return null; + } + + return Y.Dom.getNextSiblingBy(node); + }, + + /** + * Returns the first HTMLElement child that passes the test method. + * @method getFirstChildBy + * @param {HTMLElement} node The HTMLElement to use as the starting point + * @param {Function} method A boolean function used to test children + * that receives the node being tested as its only argument + * @return {Object} HTMLElement or null if not found + */ + getFirstChildBy: function(node, method) { + var child = ( Y.Dom._testElement(node.firstChild, method) ) ? node.firstChild : null; + return child || Y.Dom.getNextSiblingBy(node.firstChild, method); + }, + + /** + * Returns the first HTMLElement child. + * @method getFirstChild + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @return {Object} HTMLElement or null if not found + */ + getFirstChild: function(node, method) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getFirstChild failed: invalid node argument', 'error', 'Dom'); + return null; + } + return Y.Dom.getFirstChildBy(node); + }, + + /** + * Returns the last HTMLElement child that passes the test method. + * @method getLastChildBy + * @param {HTMLElement} node The HTMLElement to use as the starting point + * @param {Function} method A boolean function used to test children + * that receives the node being tested as its only argument + * @return {Object} HTMLElement or null if not found + */ + getLastChildBy: function(node, method) { + if (!node) { + YAHOO.log('getLastChild failed: invalid node argument', 'error', 'Dom'); + return null; + } + var child = ( Y.Dom._testElement(node.lastChild, method) ) ? node.lastChild : null; + return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method); + }, + + /** + * Returns the last HTMLElement child. + * @method getLastChild + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @return {Object} HTMLElement or null if not found + */ + getLastChild: function(node) { + node = Y.Dom.get(node); + return Y.Dom.getLastChildBy(node); + }, + + /** + * Returns an array of HTMLElement childNodes that pass the test method. + * @method getChildrenBy + * @param {HTMLElement} node The HTMLElement to start from + * @param {Function} method A boolean function used to test children + * that receives the node being tested as its only argument + * @return {Array} A static array of HTMLElements + */ + getChildrenBy: function(node, method) { + var child = Y.Dom.getFirstChildBy(node, method), + children = child ? [child] : []; + + Y.Dom.getNextSiblingBy(child, function(node) { + if ( !method || method(node) ) { + children[children.length] = node; + } + return false; // fail test to collect all children + }); + + return children; + }, + + /** + * Returns an array of HTMLElement childNodes. + * @method getChildren + * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point + * @return {Array} A static array of HTMLElements + */ + getChildren: function(node) { + node = Y.Dom.get(node); + if (!node) { + YAHOO.log('getChildren failed: invalid node argument', 'error', 'Dom'); + } + + return Y.Dom.getChildrenBy(node); + }, + + /** + * Returns the left scroll value of the document + * @method getDocumentScrollLeft + * @param {HTMLDocument} document (optional) The document to get the scroll value of + * @return {Int} The amount that the document is scrolled to the left + */ + getDocumentScrollLeft: function(doc) { + doc = doc || document; + return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft); + }, + + /** + * Returns the top scroll value of the document + * @method getDocumentScrollTop + * @param {HTMLDocument} document (optional) The document to get the scroll value of + * @return {Int} The amount that the document is scrolled to the top + */ + getDocumentScrollTop: function(doc) { + doc = doc || document; + return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop); + }, + + /** + * Inserts the new node as the previous sibling of the reference node + * @method insertBefore + * @param {String | HTMLElement} newNode The node to be inserted + * @param {String | HTMLElement} referenceNode The node to insert the new node before + * @return {HTMLElement} The node that was inserted (or null if insert fails) + */ + insertBefore: function(newNode, referenceNode) { + newNode = Y.Dom.get(newNode); + referenceNode = Y.Dom.get(referenceNode); + + if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) { + YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom'); + return null; + } + + return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode); + }, + + /** + * Inserts the new node as the next sibling of the reference node + * @method insertAfter + * @param {String | HTMLElement} newNode The node to be inserted + * @param {String | HTMLElement} referenceNode The node to insert the new node after + * @return {HTMLElement} The node that was inserted (or null if insert fails) + */ + insertAfter: function(newNode, referenceNode) { + newNode = Y.Dom.get(newNode); + referenceNode = Y.Dom.get(referenceNode); + + if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) { + YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom'); + return null; + } + + if (referenceNode.nextSibling) { + return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode.nextSibling); + } else { + return referenceNode[PARENT_NODE].appendChild(newNode); + } + }, + + /** + * Creates a Region based on the viewport relative to the document. + * @method getClientRegion + * @return {Region} A Region object representing the viewport which accounts for document scroll + */ + getClientRegion: function() { + var t = Y.Dom.getDocumentScrollTop(), + l = Y.Dom.getDocumentScrollLeft(), + r = Y.Dom.getViewportWidth() + l, + b = Y.Dom.getViewportHeight() + t; + + return new Y.Region(t, r, b, l); + }, + + /** + * Provides a normalized attribute interface. + * @method setAttribute + * @param {String | HTMLElement} el The target element for the attribute. + * @param {String} attr The attribute to set. + * @param {String} val The value of the attribute. + */ + setAttribute: function(el, attr, val) { + Y.Dom.batch(el, Y.Dom._setAttribute, { attr: attr, val: val }); + }, + + _setAttribute: function(el, args) { + var attr = Y.Dom._toCamel(args.attr), + val = args.val; + + if (el && el.setAttribute) { + // set as DOM property, except for BUTTON, which errors on property setter + if (Y.Dom.DOT_ATTRIBUTES[attr] && el.tagName && el.tagName != 'BUTTON') { + el[attr] = val; + } else { + attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr; + el.setAttribute(attr, val); + } + } else { + YAHOO.log('setAttribute method not available for ' + el, 'error', 'Dom'); + } + }, + + /** + * Provides a normalized attribute interface. + * @method getAttribute + * @param {String | HTMLElement} el The target element for the attribute. + * @param {String} attr The attribute to get. + * @return {String} The current value of the attribute. + */ + getAttribute: function(el, attr) { + return Y.Dom.batch(el, Y.Dom._getAttribute, attr); + }, + + + _getAttribute: function(el, attr) { + var val; + attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr; + + if (Y.Dom.DOT_ATTRIBUTES[attr]) { + val = el[attr]; + } else if (el && 'getAttribute' in el) { + if (/^(?:href|src)$/.test(attr)) { // use IE flag to return exact value + val = el.getAttribute(attr, 2); + } else { + val = el.getAttribute(attr); + } + } else { + YAHOO.log('getAttribute method not available for ' + el, 'error', 'Dom'); + } + + return val; + }, + + _toCamel: function(property) { + var c = propertyCache; + + function tU(x,l) { + return l.toUpperCase(); + } + + return c[property] || (c[property] = property.indexOf('-') === -1 ? + property : + property.replace( /-([a-z])/gi, tU )); + }, + + _getClassRegex: function(className) { + var re; + if (className !== undefined) { // allow empty string to pass + if (className.exec) { // already a RegExp + re = className; + } else { + re = reCache[className]; + if (!re) { + // escape special chars (".", "[", etc.) + className = className.replace(Y.Dom._patterns.CLASS_RE_TOKENS, '\\$1'); + className = className.replace(/\s+/g, SPACE); // convert line breaks and other delims + re = reCache[className] = new RegExp(C_START + className + C_END, G); + } + } + } + return re; + }, + + _patterns: { + ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards, + CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g + }, + + + _testElement: function(node, method) { + return node && node[NODE_TYPE] == 1 && ( !method || method(node) ); + }, + + _calcBorders: function(node, xy2) { + var t = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0, + l = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0; + if (isGecko) { + if (RE_TABLE.test(node[TAG_NAME])) { + t = 0; + l = 0; + } + } + xy2[0] += l; + xy2[1] += t; + return xy2; + } + }; + + var _getComputedStyle = Y.Dom[GET_COMPUTED_STYLE]; + // fix opera computedStyle default color unit (convert to rgb) + if (UA.opera) { + Y.Dom[GET_COMPUTED_STYLE] = function(node, att) { + var val = _getComputedStyle(node, att); + if (RE_COLOR.test(att)) { + val = Y.Dom.Color.toRGB(val); + } + + return val; + }; + + } + + // safari converts transparent to rgba(), others use "transparent" + if (UA.webkit) { + Y.Dom[GET_COMPUTED_STYLE] = function(node, att) { + var val = _getComputedStyle(node, att); + + if (val === 'rgba(0, 0, 0, 0)') { + val = 'transparent'; + } + + return val; + }; + + } + + if (UA.ie && UA.ie >= 8) { + Y.Dom.DOT_ATTRIBUTES.type = true; // IE 8 errors on input.setAttribute('type') + } +})(); +/** + * A region is a representation of an object on a grid. It is defined + * by the top, right, bottom, left extents, so is rectangular by default. If + * other shapes are required, this class could be extended to support it. + * @namespace YAHOO.util + * @class Region + * @param {Int} t the top extent + * @param {Int} r the right extent + * @param {Int} b the bottom extent + * @param {Int} l the left extent + * @constructor + */ +YAHOO.util.Region = function(t, r, b, l) { + + /** + * The region's top extent + * @property top + * @type Int + */ + this.top = t; + + /** + * The region's top extent + * @property y + * @type Int + */ + this.y = t; + + /** + * The region's top extent as index, for symmetry with set/getXY + * @property 1 + * @type Int + */ + this[1] = t; + + /** + * The region's right extent + * @property right + * @type int + */ + this.right = r; + + /** + * The region's bottom extent + * @property bottom + * @type Int + */ + this.bottom = b; + + /** + * The region's left extent + * @property left + * @type Int + */ + this.left = l; + + /** + * The region's left extent + * @property x + * @type Int + */ + this.x = l; + + /** + * The region's left extent as index, for symmetry with set/getXY + * @property 0 + * @type Int + */ + this[0] = l; + + /** + * The region's total width + * @property width + * @type Int + */ + this.width = this.right - this.left; + + /** + * The region's total height + * @property height + * @type Int + */ + this.height = this.bottom - this.top; +}; + +/** + * Returns true if this region contains the region passed in + * @method contains + * @param {Region} region The region to evaluate + * @return {Boolean} True if the region is contained with this region, + * else false + */ +YAHOO.util.Region.prototype.contains = function(region) { + return ( region.left >= this.left && + region.right <= this.right && + region.top >= this.top && + region.bottom <= this.bottom ); + + // this.logger.debug("does " + this + " contain " + region + " ... " + ret); +}; + +/** + * Returns the area of the region + * @method getArea + * @return {Int} the region's area + */ +YAHOO.util.Region.prototype.getArea = function() { + return ( (this.bottom - this.top) * (this.right - this.left) ); +}; + +/** + * Returns the region where the passed in region overlaps with this one + * @method intersect + * @param {Region} region The region that intersects + * @return {Region} The overlap region, or null if there is no overlap + */ +YAHOO.util.Region.prototype.intersect = function(region) { + var t = Math.max( this.top, region.top ), + r = Math.min( this.right, region.right ), + b = Math.min( this.bottom, region.bottom ), + l = Math.max( this.left, region.left ); + + if (b >= t && r >= l) { + return new YAHOO.util.Region(t, r, b, l); + } else { + return null; + } +}; + +/** + * Returns the region representing the smallest region that can contain both + * the passed in region and this region. + * @method union + * @param {Region} region The region that to create the union with + * @return {Region} The union region + */ +YAHOO.util.Region.prototype.union = function(region) { + var t = Math.min( this.top, region.top ), + r = Math.max( this.right, region.right ), + b = Math.max( this.bottom, region.bottom ), + l = Math.min( this.left, region.left ); + + return new YAHOO.util.Region(t, r, b, l); +}; + +/** + * toString + * @method toString + * @return string the region properties + */ +YAHOO.util.Region.prototype.toString = function() { + return ( "Region {" + + "top: " + this.top + + ", right: " + this.right + + ", bottom: " + this.bottom + + ", left: " + this.left + + ", height: " + this.height + + ", width: " + this.width + + "}" ); +}; + +/** + * Returns a region that is occupied by the DOM element + * @method getRegion + * @param {HTMLElement} el The element + * @return {Region} The region that the element occupies + * @static + */ +YAHOO.util.Region.getRegion = function(el) { + var p = YAHOO.util.Dom.getXY(el), + t = p[1], + r = p[0] + el.offsetWidth, + b = p[1] + el.offsetHeight, + l = p[0]; + + return new YAHOO.util.Region(t, r, b, l); +}; + +///////////////////////////////////////////////////////////////////////////// + + +/** + * A point is a region that is special in that it represents a single point on + * the grid. + * @namespace YAHOO.util + * @class Point + * @param {Int} x The X position of the point + * @param {Int} y The Y position of the point + * @constructor + * @extends YAHOO.util.Region + */ +YAHOO.util.Point = function(x, y) { + if (YAHOO.lang.isArray(x)) { // accept input from Dom.getXY, Event.getXY, etc. + y = x[1]; // dont blow away x yet + x = x[0]; + } + + YAHOO.util.Point.superclass.constructor.call(this, y, x, y, x); +}; + +YAHOO.extend(YAHOO.util.Point, YAHOO.util.Region); + +(function() { +/** + * Internal methods used to add style management functionality to DOM. + * @module dom + * @class IEStyle + * @namespace YAHOO.util.Dom + */ + +var Y = YAHOO.util, + CLIENT_TOP = 'clientTop', + CLIENT_LEFT = 'clientLeft', + PARENT_NODE = 'parentNode', + RIGHT = 'right', + HAS_LAYOUT = 'hasLayout', + PX = 'px', + OPACITY = 'opacity', + AUTO = 'auto', + BORDER_LEFT_WIDTH = 'borderLeftWidth', + BORDER_TOP_WIDTH = 'borderTopWidth', + BORDER_RIGHT_WIDTH = 'borderRightWidth', + BORDER_BOTTOM_WIDTH = 'borderBottomWidth', + VISIBLE = 'visible', + TRANSPARENT = 'transparent', + HEIGHT = 'height', + WIDTH = 'width', + STYLE = 'style', + CURRENT_STYLE = 'currentStyle', + +// IE getComputedStyle +// TODO: unit-less lineHeight (e.g. 1.22) + re_size = /^width|height$/, + re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i, + + ComputedStyle = { + /** + * @method get + * @description Method used by DOM to get style information for IE + * @param {HTMLElement} el The element to check + * @param {String} property The property to check + * @returns {String} The computed style + */ + get: function(el, property) { + var value = '', + current = el[CURRENT_STYLE][property]; + + if (property === OPACITY) { + value = Y.Dom.getStyle(el, OPACITY); + } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert + value = current; + } else if (Y.Dom.IE_COMPUTED[property]) { // use compute function + value = Y.Dom.IE_COMPUTED[property](el, property); + } else if (re_unit.test(current)) { // convert to pixel + value = Y.Dom.IE.ComputedStyle.getPixel(el, property); + } else { + value = current; + } + + return value; + }, + /** + * @method getOffset + * @description Determine the offset of an element + * @param {HTMLElement} el The element to check + * @param {String} prop The property to check. + * @return {String} The offset + */ + getOffset: function(el, prop) { + var current = el[CURRENT_STYLE][prop], // value of "width", "top", etc. + capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc. + offset = 'offset' + capped, // "offsetWidth", "offsetTop", etc. + pixel = 'pixel' + capped, // "pixelWidth", "pixelTop", etc. + value = '', + actual; + + if (current == AUTO) { + actual = el[offset]; // offsetHeight/Top etc. + if (actual === undefined) { // likely "right" or "bottom" + value = 0; + } + + value = actual; + if (re_size.test(prop)) { // account for box model diff + el[STYLE][prop] = actual; + if (el[offset] > actual) { + // the difference is padding + border (works in Standards & Quirks modes) + value = actual - (el[offset] - actual); + } + el[STYLE][prop] = AUTO; // revert to auto + } + } else { // convert units to px + if (!el[STYLE][pixel] && !el[STYLE][prop]) { // need to map style.width to currentStyle (no currentStyle.pixelWidth) + el[STYLE][prop] = current; // no style.pixelWidth if no style.width + } + value = el[STYLE][pixel]; + } + return value + PX; + }, + /** + * @method getBorderWidth + * @description Try to determine the width of an elements border + * @param {HTMLElement} el The element to check + * @param {String} property The property to check + * @return {String} The elements border width + */ + getBorderWidth: function(el, property) { + // clientHeight/Width = paddingBox (e.g. offsetWidth - borderWidth) + // clientTop/Left = borderWidth + var value = null; + if (!el[CURRENT_STYLE][HAS_LAYOUT]) { // TODO: unset layout? + el[STYLE].zoom = 1; // need layout to measure client + } + + switch(property) { + case BORDER_TOP_WIDTH: + value = el[CLIENT_TOP]; + break; + case BORDER_BOTTOM_WIDTH: + value = el.offsetHeight - el.clientHeight - el[CLIENT_TOP]; + break; + case BORDER_LEFT_WIDTH: + value = el[CLIENT_LEFT]; + break; + case BORDER_RIGHT_WIDTH: + value = el.offsetWidth - el.clientWidth - el[CLIENT_LEFT]; + break; + } + return value + PX; + }, + /** + * @method getPixel + * @description Get the pixel value from a style property + * @param {HTMLElement} node The element to check + * @param {String} att The attribute to check + * @return {String} The pixel value + */ + getPixel: function(node, att) { + // use pixelRight to convert to px + var val = null, + styleRight = node[CURRENT_STYLE][RIGHT], + current = node[CURRENT_STYLE][att]; + + node[STYLE][RIGHT] = current; + val = node[STYLE].pixelRight; + node[STYLE][RIGHT] = styleRight; // revert + + return val + PX; + }, + + /** + * @method getMargin + * @description Get the margin value from a style property + * @param {HTMLElement} node The element to check + * @param {String} att The attribute to check + * @return {String} The margin value + */ + getMargin: function(node, att) { + var val; + if (node[CURRENT_STYLE][att] == AUTO) { + val = 0 + PX; + } else { + val = Y.Dom.IE.ComputedStyle.getPixel(node, att); + } + return val; + }, + + /** + * @method getVisibility + * @description Get the visibility of an element + * @param {HTMLElement} node The element to check + * @param {String} att The attribute to check + * @return {String} The value + */ + getVisibility: function(node, att) { + var current; + while ( (current = node[CURRENT_STYLE]) && current[att] == 'inherit') { // NOTE: assignment in test + node = node[PARENT_NODE]; + } + return (current) ? current[att] : VISIBLE; + }, + + /** + * @method getColor + * @description Get the color of an element + * @param {HTMLElement} node The element to check + * @param {String} att The attribute to check + * @return {String} The value + */ + getColor: function(node, att) { + return Y.Dom.Color.toRGB(node[CURRENT_STYLE][att]) || TRANSPARENT; + }, + + /** + * @method getBorderColor + * @description Get the bordercolor of an element + * @param {HTMLElement} node The element to check + * @param {String} att The attribute to check + * @return {String} The value + */ + getBorderColor: function(node, att) { + var current = node[CURRENT_STYLE], + val = current[att] || current.color; + return Y.Dom.Color.toRGB(Y.Dom.Color.toHex(val)); + } + + }, + +//fontSize: getPixelFont, + IEComputed = {}; + +IEComputed.top = IEComputed.right = IEComputed.bottom = IEComputed.left = + IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset; + +IEComputed.color = ComputedStyle.getColor; + +IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] = + IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] = + ComputedStyle.getBorderWidth; + +IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom = + IEComputed.marginLeft = ComputedStyle.getMargin; + +IEComputed.visibility = ComputedStyle.getVisibility; +IEComputed.borderColor = IEComputed.borderTopColor = + IEComputed.borderRightColor = IEComputed.borderBottomColor = + IEComputed.borderLeftColor = ComputedStyle.getBorderColor; + +Y.Dom.IE_COMPUTED = IEComputed; +Y.Dom.IE_ComputedStyle = ComputedStyle; +})(); +(function() { +/** + * Add style management functionality to DOM. + * @module dom + * @class Color + * @namespace YAHOO.util.Dom + */ + +var TO_STRING = 'toString', + PARSE_INT = parseInt, + RE = RegExp, + Y = YAHOO.util; + +Y.Dom.Color = { + /** + * @property KEYWORDS + * @type Object + * @description Color keywords used when converting to Hex + */ + KEYWORDS: { + black: '000', + silver: 'c0c0c0', + gray: '808080', + white: 'fff', + maroon: '800000', + red: 'f00', + purple: '800080', + fuchsia: 'f0f', + green: '008000', + lime: '0f0', + olive: '808000', + yellow: 'ff0', + navy: '000080', + blue: '00f', + teal: '008080', + aqua: '0ff' + }, + /** + * @property re_RGB + * @private + * @type Regex + * @description Regex to parse rgb(0,0,0) formatted strings + */ + re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i, + /** + * @property re_hex + * @private + * @type Regex + * @description Regex to parse #123456 formatted strings + */ + re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i, + /** + * @property re_hex3 + * @private + * @type Regex + * @description Regex to parse #123 formatted strings + */ + re_hex3: /([0-9A-F])/gi, + /** + * @method toRGB + * @description Converts a hex or color string to an rgb string: rgb(0,0,0) + * @param {String} val The string to convert to RGB notation. + * @returns {String} The converted string + */ + toRGB: function(val) { + if (!Y.Dom.Color.re_RGB.test(val)) { + val = Y.Dom.Color.toHex(val); + } + + if(Y.Dom.Color.re_hex.exec(val)) { + val = 'rgb(' + [ + PARSE_INT(RE.$1, 16), + PARSE_INT(RE.$2, 16), + PARSE_INT(RE.$3, 16) + ].join(', ') + ')'; + } + return val; + }, + /** + * @method toHex + * @description Converts an rgb or color string to a hex string: #123456 + * @param {String} val The string to convert to hex notation. + * @returns {String} The converted string + */ + toHex: function(val) { + val = Y.Dom.Color.KEYWORDS[val] || val; + if (Y.Dom.Color.re_RGB.exec(val)) { + val = [ + Number(RE.$1).toString(16), + Number(RE.$2).toString(16), + Number(RE.$3).toString(16) + ]; + + for (var i = 0; i < val.length; i++) { + if (val[i].length < 2) { + val[i] = '0' + val[i]; + } + } + + val = val.join(''); + } + + if (val.length < 6) { + val = val.replace(Y.Dom.Color.re_hex3, '$1$1'); + } + + if (val !== 'transparent' && val.indexOf('#') < 0) { + val = '#' + val; + } + + return val.toUpperCase(); + } +}; +}()); +YAHOO.register("dom", YAHOO.util.Dom, {version: "2.9.0", build: "2800"}); diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-min.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-min.js new file mode 100644 index 0000000..194f1e8 --- /dev/null +++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/dom/dom-min.js @@ -0,0 +1,9 @@ +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var e=YAHOO.util,k=YAHOO.lang,L=YAHOO.env.ua,a=YAHOO.lang.trim,B={},F={},m=/^t(?:able|d|h)$/i,w=/color$/i,j=window.document,v=j.documentElement,C="ownerDocument",M="defaultView",U="documentElement",S="compatMode",z="offsetLeft",o="offsetTop",T="offsetParent",x="parentNode",K="nodeType",c="tagName",n="scrollLeft",H="scrollTop",p="getBoundingClientRect",V="getComputedStyle",y="currentStyle",l="CSS1Compat",A="BackCompat",E="class",f="className",i="",b=" ",R="(?:^|\\s)",J="(?= |$)",t="g",O="position",D="fixed",u="relative",I="left",N="top",Q="medium",P="borderLeftWidth",q="borderTopWidth",d=L.opera,h=L.webkit,g=L.gecko,s=L.ie;e.Dom={CUSTOM_ATTRIBUTES:(!v.hasAttribute)?{"for":"htmlFor","class":f}:{"htmlFor":"for","className":E},DOT_ATTRIBUTES:{checked:true},get:function(aa){var ac,X,ab,Z,W,G,Y=null;if(aa){if(typeof aa=="string"||typeof aa=="number"){ac=aa+"";aa=j.getElementById(aa);G=(aa)?aa.attributes:null;if(aa&&G&&G.id&&G.id.value===ac){return aa;}else{if(aa&&j.all){aa=null;X=j.all[ac];if(X&&X.length){for(Z=0,W=X.length;Z
delegate
method that
+ * facilitates easy creation of delegated event listeners. (Note: Using CSS
+ * selectors as the filtering criteria for delegated event listeners requires
+ * inclusion of the Selector Utility.)
+ *
+ * @module event-delegate
+ * @title Event Utility Event Delegation Module
+ * @namespace YAHOO.util
+ * @requires event
+ */
+
+(function () {
+
+ var Event = YAHOO.util.Event,
+ Lang = YAHOO.lang,
+ delegates = [],
+
+
+ getMatch = function(el, selector, container) {
+
+ var returnVal;
+
+ if (!el || el === container) {
+ returnVal = false;
+ }
+ else {
+ returnVal = YAHOO.util.Selector.test(el, selector) ? el: getMatch(el.parentNode, selector, container);
+ }
+
+ return returnVal;
+
+ };
+
+
+ Lang.augmentObject(Event, {
+
+ /**
+ * Creates a delegate function used to call event listeners specified
+ * via the YAHOO.util.Event.delegate
method.
+ *
+ * @method _createDelegate
+ *
+ * @param {Function} fn The method (event listener) to call.
+ * @param {Function|string} filter Function or CSS selector used to
+ * determine for what element(s) the event listener should be called.
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener.
+ * @param {Boolean|object} overrideContext If true, the value of the
+ * obj parameter becomes the execution context
+ * of the listener. If an object, this object
+ * becomes the execution context.
+ * @return {Function} Function that will call the event listener
+ * specified by the YAHOO.util.Event.delegate
method.
+ * @private
+ * @for Event
+ * @static
+ */
+ _createDelegate: function (fn, filter, obj, overrideContext) {
+
+ return function (event) {
+
+ var container = this,
+ target = Event.getTarget(event),
+ selector = filter,
+
+ // The user might have specified the document object
+ // as the delegation container, in which case it is not
+ // nessary to scope the provided CSS selector(s) to the
+ // delegation container
+ bDocument = (container.nodeType === 9),
+
+ matchedEl,
+ context,
+ sID,
+ sIDSelector;
+
+
+ if (Lang.isFunction(filter)) {
+ matchedEl = filter(target);
+ }
+ else if (Lang.isString(filter)) {
+
+ if (!bDocument) {
+
+ sID = container.id;
+
+ if (!sID) {
+ sID = Event.generateId(container);
+ }
+
+ // Scope all selectors to the container
+ sIDSelector = ("#" + sID + " ");
+ selector = (sIDSelector + filter).replace(/,/gi, ("," + sIDSelector));
+
+ }
+
+
+ if (YAHOO.util.Selector.test(target, selector)) {
+ matchedEl = target;
+ }
+ else if (YAHOO.util.Selector.test(target, ((selector.replace(/,/gi, " *,")) + " *"))) {
+
+ // The target is a descendant of an element matching
+ // the selector, so crawl up to find the ancestor that
+ // matches the selector
+
+ matchedEl = getMatch(target, selector, container);
+
+ }
+
+ }
+
+
+ if (matchedEl) {
+
+ // The default context for delegated listeners is the
+ // element that matched the filter.
+
+ context = matchedEl;
+
+ if (overrideContext) {
+ if (overrideContext === true) {
+ context = obj;
+ } else {
+ context = overrideContext;
+ }
+ }
+
+ // Call the listener passing in the container and the
+ // element that matched the filter in case the user
+ // needs those.
+
+ return fn.call(context, event, matchedEl, container, obj);
+
+ }
+
+ };
+
+ },
+
+
+ /**
+ * Appends a delegated event listener. Delegated event listeners
+ * receive three arguments by default: the DOM event, the element
+ * specified by the filtering function or CSS selector, and the
+ * container element (the element to which the event listener is
+ * bound). (Note: Using the delegate method requires the event-delegate
+ * module. Using CSS selectors as the filtering criteria for delegated
+ * event listeners requires inclusion of the Selector Utility.)
+ *
+ * @method delegate
+ *
+ * @param {String|HTMLElement|Array|NodeList} container An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {String} type The type of event listener to append
+ * @param {Function} fn The method the event invokes
+ * @param {Function|string} filter Function or CSS selector used to
+ * determine for what element(s) the event listener should be called.
+ * When a function is specified, the function should return an
+ * HTML element. Using a CSS Selector requires the inclusion of the
+ * CSS Selector Utility.
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener
+ * @param {Boolean|object} overrideContext If true, the value of the obj parameter becomes
+ * the execution context of the listener. If an
+ * object, this object becomes the execution
+ * context.
+ * @return {Boolean} Returns true if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @static
+ * @for Event
+ */
+ delegate: function (container, type, fn, filter, obj, overrideContext) {
+
+ var sType = type,
+ fnMouseDelegate,
+ fnDelegate;
+
+
+ if (Lang.isString(filter) && !YAHOO.util.Selector) {
+ YAHOO.log("Using a CSS selector to define the filtering criteria for a delegated listener requires the Selector Utility.", "error", "Event");
+ return false;
+ }
+
+
+ if (type == "mouseenter" || type == "mouseleave") {
+
+ if (!Event._createMouseDelegate) {
+ YAHOO.log("Delegating a " + type + " event requires the event-mouseenter module.", "error", "Event");
+ return false;
+ }
+
+ // Look up the real event--either mouseover or mouseout
+ sType = Event._getType(type);
+
+ fnMouseDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
+
+ fnDelegate = Event._createDelegate(function (event, matchedEl, container) {
+
+ return fnMouseDelegate.call(matchedEl, event, container);
+
+ }, filter, obj, overrideContext);
+
+ }
+ else {
+
+ fnDelegate = Event._createDelegate(fn, filter, obj, overrideContext);
+
+ }
+
+ delegates.push([container, sType, fn, fnDelegate]);
+
+ return Event.on(container, sType, fnDelegate);
+
+ },
+
+
+ /**
+ * Removes a delegated event listener.
+ *
+ * @method removeDelegate
+ *
+ * @param {String|HTMLElement|Array|NodeList} container An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {String} type The type of event to remove.
+ * @param {Function} fn The method the event invokes. If fn is
+ * undefined, then all event listeners for the type of event are
+ * removed.
+ * @return {boolean} Returns true if the unbind was successful, false
+ * otherwise.
+ * @static
+ * @for Event
+ */
+ removeDelegate: function (container, type, fn) {
+
+ var sType = type,
+ returnVal = false,
+ index,
+ cacheItem;
+
+ // Look up the real event--either mouseover or mouseout
+ if (type == "mouseenter" || type == "mouseleave") {
+ sType = Event._getType(type);
+ }
+
+ index = Event._getCacheIndex(delegates, container, sType, fn);
+
+ if (index >= 0) {
+ cacheItem = delegates[index];
+ }
+
+
+ if (container && cacheItem) {
+
+ returnVal = Event.removeListener(cacheItem[0], cacheItem[1], cacheItem[3]);
+
+ if (returnVal) {
+ delete delegates[index][2];
+ delete delegates[index][3];
+ delegates.splice(index, 1);
+ }
+
+ }
+
+ return returnVal;
+
+ }
+
+ });
+
+}());
+YAHOO.register("event-delegate", YAHOO.util.Event, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate-min.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate-min.js
new file mode 100644
index 0000000..5163f7a
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate-min.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+(function(){var A=YAHOO.util.Event,C=YAHOO.lang,B=[],D=function(H,E,F){var G;if(!H||H===F){G=false;}else{G=YAHOO.util.Selector.test(H,E)?H:D(H.parentNode,E,F);}return G;};C.augmentObject(A,{_createDelegate:function(F,E,G,H){return function(I){var J=this,N=A.getTarget(I),L=E,P=(J.nodeType===9),Q,K,O,M;if(C.isFunction(E)){Q=E(N);}else{if(C.isString(E)){if(!P){O=J.id;if(!O){O=A.generateId(J);}M=("#"+O+" ");L=(M+E).replace(/,/gi,(","+M));}if(YAHOO.util.Selector.test(N,L)){Q=N;}else{if(YAHOO.util.Selector.test(N,((L.replace(/,/gi," *,"))+" *"))){Q=D(N,L,J);}}}}if(Q){K=Q;if(H){if(H===true){K=G;}else{K=H;}}return F.call(K,I,Q,J,G);}};},delegate:function(F,J,L,G,H,I){var E=J,K,M;if(C.isString(G)&&!YAHOO.util.Selector){return false;}if(J=="mouseenter"||J=="mouseleave"){if(!A._createMouseDelegate){return false;}E=A._getType(J);K=A._createMouseDelegate(L,H,I);M=A._createDelegate(function(P,O,N){return K.call(O,P,N);},G,H,I);}else{M=A._createDelegate(L,G,H,I);}B.push([F,E,L,M]);return A.on(F,E,M);},removeDelegate:function(F,J,I){var K=J,H=false,G,E;if(J=="mouseenter"||J=="mouseleave"){K=A._getType(J);}G=A._getCacheIndex(B,F,K,I);if(G>=0){E=B[G];}if(F&&E){H=A.removeListener(E[0],E[1],E[3]);if(H){delete B[G][2];delete B[G][3];B.splice(G,1);}}return H;}});}());YAHOO.register("event-delegate",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
\ No newline at end of file
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate.js
new file mode 100644
index 0000000..974bf34
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-delegate/event-delegate.js
@@ -0,0 +1,281 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+/**
+ * Augments the Event Utility with a delegate
method that
+ * facilitates easy creation of delegated event listeners. (Note: Using CSS
+ * selectors as the filtering criteria for delegated event listeners requires
+ * inclusion of the Selector Utility.)
+ *
+ * @module event-delegate
+ * @title Event Utility Event Delegation Module
+ * @namespace YAHOO.util
+ * @requires event
+ */
+
+(function () {
+
+ var Event = YAHOO.util.Event,
+ Lang = YAHOO.lang,
+ delegates = [],
+
+
+ getMatch = function(el, selector, container) {
+
+ var returnVal;
+
+ if (!el || el === container) {
+ returnVal = false;
+ }
+ else {
+ returnVal = YAHOO.util.Selector.test(el, selector) ? el: getMatch(el.parentNode, selector, container);
+ }
+
+ return returnVal;
+
+ };
+
+
+ Lang.augmentObject(Event, {
+
+ /**
+ * Creates a delegate function used to call event listeners specified
+ * via the YAHOO.util.Event.delegate
method.
+ *
+ * @method _createDelegate
+ *
+ * @param {Function} fn The method (event listener) to call.
+ * @param {Function|string} filter Function or CSS selector used to
+ * determine for what element(s) the event listener should be called.
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener.
+ * @param {Boolean|object} overrideContext If true, the value of the
+ * obj parameter becomes the execution context
+ * of the listener. If an object, this object
+ * becomes the execution context.
+ * @return {Function} Function that will call the event listener
+ * specified by the YAHOO.util.Event.delegate
method.
+ * @private
+ * @for Event
+ * @static
+ */
+ _createDelegate: function (fn, filter, obj, overrideContext) {
+
+ return function (event) {
+
+ var container = this,
+ target = Event.getTarget(event),
+ selector = filter,
+
+ // The user might have specified the document object
+ // as the delegation container, in which case it is not
+ // nessary to scope the provided CSS selector(s) to the
+ // delegation container
+ bDocument = (container.nodeType === 9),
+
+ matchedEl,
+ context,
+ sID,
+ sIDSelector;
+
+
+ if (Lang.isFunction(filter)) {
+ matchedEl = filter(target);
+ }
+ else if (Lang.isString(filter)) {
+
+ if (!bDocument) {
+
+ sID = container.id;
+
+ if (!sID) {
+ sID = Event.generateId(container);
+ }
+
+ // Scope all selectors to the container
+ sIDSelector = ("#" + sID + " ");
+ selector = (sIDSelector + filter).replace(/,/gi, ("," + sIDSelector));
+
+ }
+
+
+ if (YAHOO.util.Selector.test(target, selector)) {
+ matchedEl = target;
+ }
+ else if (YAHOO.util.Selector.test(target, ((selector.replace(/,/gi, " *,")) + " *"))) {
+
+ // The target is a descendant of an element matching
+ // the selector, so crawl up to find the ancestor that
+ // matches the selector
+
+ matchedEl = getMatch(target, selector, container);
+
+ }
+
+ }
+
+
+ if (matchedEl) {
+
+ // The default context for delegated listeners is the
+ // element that matched the filter.
+
+ context = matchedEl;
+
+ if (overrideContext) {
+ if (overrideContext === true) {
+ context = obj;
+ } else {
+ context = overrideContext;
+ }
+ }
+
+ // Call the listener passing in the container and the
+ // element that matched the filter in case the user
+ // needs those.
+
+ return fn.call(context, event, matchedEl, container, obj);
+
+ }
+
+ };
+
+ },
+
+
+ /**
+ * Appends a delegated event listener. Delegated event listeners
+ * receive three arguments by default: the DOM event, the element
+ * specified by the filtering function or CSS selector, and the
+ * container element (the element to which the event listener is
+ * bound). (Note: Using the delegate method requires the event-delegate
+ * module. Using CSS selectors as the filtering criteria for delegated
+ * event listeners requires inclusion of the Selector Utility.)
+ *
+ * @method delegate
+ *
+ * @param {String|HTMLElement|Array|NodeList} container An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {String} type The type of event listener to append
+ * @param {Function} fn The method the event invokes
+ * @param {Function|string} filter Function or CSS selector used to
+ * determine for what element(s) the event listener should be called.
+ * When a function is specified, the function should return an
+ * HTML element. Using a CSS Selector requires the inclusion of the
+ * CSS Selector Utility.
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener
+ * @param {Boolean|object} overrideContext If true, the value of the obj parameter becomes
+ * the execution context of the listener. If an
+ * object, this object becomes the execution
+ * context.
+ * @return {Boolean} Returns true if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @static
+ * @for Event
+ */
+ delegate: function (container, type, fn, filter, obj, overrideContext) {
+
+ var sType = type,
+ fnMouseDelegate,
+ fnDelegate;
+
+
+ if (Lang.isString(filter) && !YAHOO.util.Selector) {
+ return false;
+ }
+
+
+ if (type == "mouseenter" || type == "mouseleave") {
+
+ if (!Event._createMouseDelegate) {
+ return false;
+ }
+
+ // Look up the real event--either mouseover or mouseout
+ sType = Event._getType(type);
+
+ fnMouseDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
+
+ fnDelegate = Event._createDelegate(function (event, matchedEl, container) {
+
+ return fnMouseDelegate.call(matchedEl, event, container);
+
+ }, filter, obj, overrideContext);
+
+ }
+ else {
+
+ fnDelegate = Event._createDelegate(fn, filter, obj, overrideContext);
+
+ }
+
+ delegates.push([container, sType, fn, fnDelegate]);
+
+ return Event.on(container, sType, fnDelegate);
+
+ },
+
+
+ /**
+ * Removes a delegated event listener.
+ *
+ * @method removeDelegate
+ *
+ * @param {String|HTMLElement|Array|NodeList} container An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {String} type The type of event to remove.
+ * @param {Function} fn The method the event invokes. If fn is
+ * undefined, then all event listeners for the type of event are
+ * removed.
+ * @return {boolean} Returns true if the unbind was successful, false
+ * otherwise.
+ * @static
+ * @for Event
+ */
+ removeDelegate: function (container, type, fn) {
+
+ var sType = type,
+ returnVal = false,
+ index,
+ cacheItem;
+
+ // Look up the real event--either mouseover or mouseout
+ if (type == "mouseenter" || type == "mouseleave") {
+ sType = Event._getType(type);
+ }
+
+ index = Event._getCacheIndex(delegates, container, sType, fn);
+
+ if (index >= 0) {
+ cacheItem = delegates[index];
+ }
+
+
+ if (container && cacheItem) {
+
+ returnVal = Event.removeListener(cacheItem[0], cacheItem[1], cacheItem[3]);
+
+ if (returnVal) {
+ delete delegates[index][2];
+ delete delegates[index][3];
+ delegates.splice(index, 1);
+ }
+
+ }
+
+ return returnVal;
+
+ }
+
+ });
+
+}());
+YAHOO.register("event-delegate", YAHOO.util.Event, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-debug.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-debug.js
new file mode 100644
index 0000000..c265487
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-debug.js
@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+/**
+ * Augments the Event Utility with support for the mouseenter and mouseleave
+ * events: A mouseenter event fires the first time the mouse enters an
+ * element; a mouseleave event first the first time the mouse leaves an
+ * element.
+ *
+ * @module event-mouseenter
+ * @title Event Utility mouseenter and mouseout Module
+ * @namespace YAHOO.util
+ * @requires event
+ */
+
+(function () {
+
+ var Event = YAHOO.util.Event,
+ Lang = YAHOO.lang,
+
+ addListener = Event.addListener,
+ removeListener = Event.removeListener,
+ getListeners = Event.getListeners,
+
+ delegates = [],
+
+ specialTypes = {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ },
+
+ remove = function(el, type, fn) {
+
+ var index = Event._getCacheIndex(delegates, el, type, fn),
+ cacheItem,
+ returnVal;
+
+ if (index >= 0) {
+ cacheItem = delegates[index];
+ }
+
+ if (el && cacheItem) {
+
+ // removeListener will translate the value of type
+ returnVal = removeListener.call(Event, cacheItem[0], type, cacheItem[3]);
+
+ if (returnVal) {
+ delete delegates[index][2];
+ delete delegates[index][3];
+ delegates.splice(index, 1);
+ }
+
+ }
+
+ return returnVal;
+
+ };
+
+
+ Lang.augmentObject(Event._specialTypes, specialTypes);
+
+ Lang.augmentObject(Event, {
+
+ /**
+ * Creates a delegate function used to call mouseover and mouseleave
+ * event listeners specified via the
+ * YAHOO.util.Event.addListener
+ * or YAHOO.util.Event.on
method.
+ *
+ * @method _createMouseDelegate
+ *
+ * @param {Function} fn The method (event listener) to call
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener
+ * @param {Boolean|object} overrideContext If true, the value of the
+ * obj parameter becomes the execution context
+ * of the listener. If an object, this object
+ * becomes the execution context.
+ * @return {Function} Function that will call the event listener
+ * specified by either the YAHOO.util.Event.addListener
+ * or YAHOO.util.Event.on
method.
+ * @private
+ * @static
+ * @for Event
+ */
+ _createMouseDelegate: function (fn, obj, overrideContext) {
+
+ return function (event, container) {
+
+ var el = this,
+ relatedTarget = Event.getRelatedTarget(event),
+ context,
+ args;
+
+ if (el != relatedTarget && !YAHOO.util.Dom.isAncestor(el, relatedTarget)) {
+
+ context = el;
+
+ if (overrideContext) {
+ if (overrideContext === true) {
+ context = obj;
+ } else {
+ context = overrideContext;
+ }
+ }
+
+ // The default args passed back to a mouseenter or
+ // mouseleave listener are: the event, and any object
+ // the user passed when subscribing
+
+ args = [event, obj];
+
+ // Add the element and delegation container as arguments
+ // when delegating mouseenter and mouseleave
+
+ if (container) {
+ args.splice(1, 0, el, container);
+ }
+
+ return fn.apply(context, args);
+
+ }
+
+ };
+
+ },
+
+ addListener: function (el, type, fn, obj, overrideContext) {
+
+ var fnDelegate,
+ returnVal;
+
+ if (specialTypes[type]) {
+
+ fnDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
+
+ fnDelegate.mouseDelegate = true;
+
+ delegates.push([el, type, fn, fnDelegate]);
+
+ // addListener will translate the value of type
+ returnVal = addListener.call(Event, el, type, fnDelegate);
+
+ }
+ else {
+ returnVal = addListener.apply(Event, arguments);
+ }
+
+ return returnVal;
+
+ },
+
+ removeListener: function (el, type, fn) {
+
+ var returnVal;
+
+ if (specialTypes[type]) {
+ returnVal = remove.apply(Event, arguments);
+ }
+ else {
+ returnVal = removeListener.apply(Event, arguments);
+ }
+
+ return returnVal;
+
+ },
+
+ getListeners: function (el, type) {
+
+ // If the user specified the type as mouseover or mouseout,
+ // need to filter out those used by mouseenter and mouseleave.
+ // If the user specified the type as mouseenter or mouseleave,
+ // need to filter out the true mouseover and mouseout listeners.
+
+ var listeners = [],
+ elListeners,
+ bMouseOverOrOut = (type === "mouseover" || type === "mouseout"),
+ bMouseDelegate,
+ i,
+ l;
+
+ if (type && (bMouseOverOrOut || specialTypes[type])) {
+
+ elListeners = getListeners.call(Event, el, this._getType(type));
+
+ if (elListeners) {
+
+ for (i=elListeners.length-1; i>-1; i--) {
+
+ l = elListeners[i];
+ bMouseDelegate = l.fn.mouseDelegate;
+
+ if ((specialTypes[type] && bMouseDelegate) || (bMouseOverOrOut && !bMouseDelegate)) {
+ listeners.push(l);
+ }
+
+ }
+
+ }
+
+ }
+ else {
+ listeners = getListeners.apply(Event, arguments);
+ }
+
+ return (listeners && listeners.length) ? listeners : null;
+
+ }
+
+ }, true);
+
+ Event.on = Event.addListener;
+
+}());
+YAHOO.register("event-mouseenter", YAHOO.util.Event, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-min.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-min.js
new file mode 100644
index 0000000..4a4e951
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter-min.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+(function(){var b=YAHOO.util.Event,g=YAHOO.lang,e=b.addListener,f=b.removeListener,c=b.getListeners,d=[],h={mouseenter:"mouseover",mouseleave:"mouseout"},a=function(n,m,l){var j=b._getCacheIndex(d,n,m,l),i,k;if(j>=0){i=d[j];}if(n&&i){k=f.call(b,i[0],m,i[3]);if(k){delete d[j][2];delete d[j][3];d.splice(j,1);}}return k;};g.augmentObject(b._specialTypes,h);g.augmentObject(b,{_createMouseDelegate:function(i,j,k){return function(q,m){var p=this,l=b.getRelatedTarget(q),o,n;if(p!=l&&!YAHOO.util.Dom.isAncestor(p,l)){o=p;if(k){if(k===true){o=j;}else{o=k;}}n=[q,j];if(m){n.splice(1,0,p,m);}return i.apply(o,n);}};},addListener:function(m,l,k,n,o){var i,j;if(h[l]){i=b._createMouseDelegate(k,n,o);i.mouseDelegate=true;d.push([m,l,k,i]);j=e.call(b,m,l,i);}else{j=e.apply(b,arguments);}return j;},removeListener:function(l,k,j){var i;if(h[k]){i=a.apply(b,arguments);}else{i=f.apply(b,arguments);}return i;},getListeners:function(p,o){var n=[],r,m=(o==="mouseover"||o==="mouseout"),q,k,j;if(o&&(m||h[o])){r=c.call(b,p,this._getType(o));if(r){for(k=r.length-1;k>-1;k--){j=r[k];q=j.fn.mouseDelegate;if((h[o]&&q)||(m&&!q)){n.push(j);}}}}else{n=c.apply(b,arguments);}return(n&&n.length)?n:null;}},true);b.on=b.addListener;}());YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
\ No newline at end of file
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter.js
new file mode 100644
index 0000000..c265487
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-mouseenter/event-mouseenter.js
@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+/**
+ * Augments the Event Utility with support for the mouseenter and mouseleave
+ * events: A mouseenter event fires the first time the mouse enters an
+ * element; a mouseleave event first the first time the mouse leaves an
+ * element.
+ *
+ * @module event-mouseenter
+ * @title Event Utility mouseenter and mouseout Module
+ * @namespace YAHOO.util
+ * @requires event
+ */
+
+(function () {
+
+ var Event = YAHOO.util.Event,
+ Lang = YAHOO.lang,
+
+ addListener = Event.addListener,
+ removeListener = Event.removeListener,
+ getListeners = Event.getListeners,
+
+ delegates = [],
+
+ specialTypes = {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ },
+
+ remove = function(el, type, fn) {
+
+ var index = Event._getCacheIndex(delegates, el, type, fn),
+ cacheItem,
+ returnVal;
+
+ if (index >= 0) {
+ cacheItem = delegates[index];
+ }
+
+ if (el && cacheItem) {
+
+ // removeListener will translate the value of type
+ returnVal = removeListener.call(Event, cacheItem[0], type, cacheItem[3]);
+
+ if (returnVal) {
+ delete delegates[index][2];
+ delete delegates[index][3];
+ delegates.splice(index, 1);
+ }
+
+ }
+
+ return returnVal;
+
+ };
+
+
+ Lang.augmentObject(Event._specialTypes, specialTypes);
+
+ Lang.augmentObject(Event, {
+
+ /**
+ * Creates a delegate function used to call mouseover and mouseleave
+ * event listeners specified via the
+ * YAHOO.util.Event.addListener
+ * or YAHOO.util.Event.on
method.
+ *
+ * @method _createMouseDelegate
+ *
+ * @param {Function} fn The method (event listener) to call
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the listener
+ * @param {Boolean|object} overrideContext If true, the value of the
+ * obj parameter becomes the execution context
+ * of the listener. If an object, this object
+ * becomes the execution context.
+ * @return {Function} Function that will call the event listener
+ * specified by either the YAHOO.util.Event.addListener
+ * or YAHOO.util.Event.on
method.
+ * @private
+ * @static
+ * @for Event
+ */
+ _createMouseDelegate: function (fn, obj, overrideContext) {
+
+ return function (event, container) {
+
+ var el = this,
+ relatedTarget = Event.getRelatedTarget(event),
+ context,
+ args;
+
+ if (el != relatedTarget && !YAHOO.util.Dom.isAncestor(el, relatedTarget)) {
+
+ context = el;
+
+ if (overrideContext) {
+ if (overrideContext === true) {
+ context = obj;
+ } else {
+ context = overrideContext;
+ }
+ }
+
+ // The default args passed back to a mouseenter or
+ // mouseleave listener are: the event, and any object
+ // the user passed when subscribing
+
+ args = [event, obj];
+
+ // Add the element and delegation container as arguments
+ // when delegating mouseenter and mouseleave
+
+ if (container) {
+ args.splice(1, 0, el, container);
+ }
+
+ return fn.apply(context, args);
+
+ }
+
+ };
+
+ },
+
+ addListener: function (el, type, fn, obj, overrideContext) {
+
+ var fnDelegate,
+ returnVal;
+
+ if (specialTypes[type]) {
+
+ fnDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
+
+ fnDelegate.mouseDelegate = true;
+
+ delegates.push([el, type, fn, fnDelegate]);
+
+ // addListener will translate the value of type
+ returnVal = addListener.call(Event, el, type, fnDelegate);
+
+ }
+ else {
+ returnVal = addListener.apply(Event, arguments);
+ }
+
+ return returnVal;
+
+ },
+
+ removeListener: function (el, type, fn) {
+
+ var returnVal;
+
+ if (specialTypes[type]) {
+ returnVal = remove.apply(Event, arguments);
+ }
+ else {
+ returnVal = removeListener.apply(Event, arguments);
+ }
+
+ return returnVal;
+
+ },
+
+ getListeners: function (el, type) {
+
+ // If the user specified the type as mouseover or mouseout,
+ // need to filter out those used by mouseenter and mouseleave.
+ // If the user specified the type as mouseenter or mouseleave,
+ // need to filter out the true mouseover and mouseout listeners.
+
+ var listeners = [],
+ elListeners,
+ bMouseOverOrOut = (type === "mouseover" || type === "mouseout"),
+ bMouseDelegate,
+ i,
+ l;
+
+ if (type && (bMouseOverOrOut || specialTypes[type])) {
+
+ elListeners = getListeners.call(Event, el, this._getType(type));
+
+ if (elListeners) {
+
+ for (i=elListeners.length-1; i>-1; i--) {
+
+ l = elListeners[i];
+ bMouseDelegate = l.fn.mouseDelegate;
+
+ if ((specialTypes[type] && bMouseDelegate) || (bMouseOverOrOut && !bMouseDelegate)) {
+ listeners.push(l);
+ }
+
+ }
+
+ }
+
+ }
+ else {
+ listeners = getListeners.apply(Event, arguments);
+ }
+
+ return (listeners && listeners.length) ? listeners : null;
+
+ }
+
+ }, true);
+
+ Event.on = Event.addListener;
+
+}());
+YAHOO.register("event-mouseenter", YAHOO.util.Event, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-debug.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-debug.js
new file mode 100644
index 0000000..46e6b37
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-debug.js
@@ -0,0 +1,624 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+
+/**
+ * DOM event simulation utility
+ * @module event-simulate
+ * @namespace YAHOO.util
+ * @requires yahoo,dom,event
+ */
+
+/**
+ * The UserAction object provides functions that simulate events occurring in
+ * the browser. Since these are simulated events, they do not behave exactly
+ * as regular, user-initiated events do, but can be used to test simple
+ * user interactions safely.
+ *
+ * @namespace YAHOO.util
+ * @class UserAction
+ * @static
+ */
+YAHOO.util.UserAction = {
+
+ //--------------------------------------------------------------------------
+ // Generic event methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * Simulates a key event using the given event information to populate
+ * the generated event object. This method does browser-equalizing
+ * calculations to account for differences in the DOM and IE event models
+ * as well as different browser quirks. Note: keydown causes Safari 2.x to
+ * crash.
+ * @method simulateKeyEvent
+ * @private
+ * @static
+ * @param {HTMLElement} target The target of the given event.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: keyup, keydown, and keypress.
+ * @param {Boolean} bubbles (Optional) Indicates if the event can be
+ * bubbled up. DOM Level 3 specifies that all key events bubble by
+ * default. The default is true.
+ * @param {Boolean} cancelable (Optional) Indicates if the event can be
+ * canceled using preventDefault(). DOM Level 3 specifies that all
+ * key events can be cancelled. The default
+ * is true.
+ * @param {Window} view (Optional) The view containing the target. This is
+ * typically the window object. The default is window.
+ * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
+ * is pressed while the event is firing. The default is false.
+ * @param {int} keyCode (Optional) The code for the key that is in use.
+ * The default is 0.
+ * @param {int} charCode (Optional) The Unicode code for the character
+ * associated with the key being used. The default is 0.
+ */
+ simulateKeyEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ bubbles /*:Boolean*/, cancelable /*:Boolean*/,
+ view /*:Window*/,
+ ctrlKey /*:Boolean*/, altKey /*:Boolean*/,
+ shiftKey /*:Boolean*/, metaKey /*:Boolean*/,
+ keyCode /*:int*/, charCode /*:int*/) /*:Void*/
+ {
+ //check target
+ target = YAHOO.util.Dom.get(target);
+ if (!target){
+ throw new Error("simulateKeyEvent(): Invalid target.");
+ }
+
+ //check event type
+ if (YAHOO.lang.isString(type)){
+ type = type.toLowerCase();
+ switch(type){
+ case "keyup":
+ case "keydown":
+ case "keypress":
+ break;
+ case "textevent": //DOM Level 3
+ type = "keypress";
+ break;
+ // @TODO was the fallthrough intentional, if so throw error
+ default:
+ throw new Error("simulateKeyEvent(): Event type '" + type + "' not supported.");
+ }
+ } else {
+ throw new Error("simulateKeyEvent(): Event type must be a string.");
+ }
+
+ //setup default values
+ if (!YAHOO.lang.isBoolean(bubbles)){
+ bubbles = true; //all key events bubble
+ }
+ if (!YAHOO.lang.isBoolean(cancelable)){
+ cancelable = true; //all key events can be cancelled
+ }
+ if (!YAHOO.lang.isObject(view)){
+ view = window; //view is typically window
+ }
+ if (!YAHOO.lang.isBoolean(ctrlKey)){
+ ctrlKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(altKey)){
+ altKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(shiftKey)){
+ shiftKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(metaKey)){
+ metaKey = false;
+ }
+ if (!YAHOO.lang.isNumber(keyCode)){
+ keyCode = 0;
+ }
+ if (!YAHOO.lang.isNumber(charCode)){
+ charCode = 0;
+ }
+
+ //try to create a mouse event
+ var customEvent /*:MouseEvent*/ = null;
+
+ //check for DOM-compliant browsers first
+ if (YAHOO.lang.isFunction(document.createEvent)){
+
+ try {
+
+ //try to create key event
+ customEvent = document.createEvent("KeyEvents");
+
+ /*
+ * Interesting problem: Firefox implemented a non-standard
+ * version of initKeyEvent() based on DOM Level 2 specs.
+ * Key event was removed from DOM Level 2 and re-introduced
+ * in DOM Level 3 with a different interface. Firefox is the
+ * only browser with any implementation of Key Events, so for
+ * now, assume it's Firefox if the above line doesn't error.
+ */
+ //TODO: Decipher between Firefox's implementation and a correct one.
+ customEvent.initKeyEvent(type, bubbles, cancelable, view, ctrlKey,
+ altKey, shiftKey, metaKey, keyCode, charCode);
+
+ } catch (ex /*:Error*/){
+
+ /*
+ * If it got here, that means key events aren't officially supported.
+ * Safari/WebKit is a real problem now. WebKit 522 won't let you
+ * set keyCode, charCode, or other properties if you use a
+ * UIEvent, so we first must try to create a generic event. The
+ * fun part is that this will throw an error on Safari 2.x. The
+ * end result is that we need another try...catch statement just to
+ * deal with this mess.
+ */
+ try {
+
+ //try to create generic event - will fail in Safari 2.x
+ customEvent = document.createEvent("Events");
+
+ } catch (uierror /*:Error*/){
+
+ //the above failed, so create a UIEvent for Safari 2.x
+ customEvent = document.createEvent("UIEvents");
+
+ } finally {
+
+ customEvent.initEvent(type, bubbles, cancelable);
+
+ //initialize
+ customEvent.view = view;
+ customEvent.altKey = altKey;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.metaKey = metaKey;
+ customEvent.keyCode = keyCode;
+ customEvent.charCode = charCode;
+
+ }
+
+ }
+
+ //fire the event
+ target.dispatchEvent(customEvent);
+
+ } else if (YAHOO.lang.isObject(document.createEventObject)){ //IE
+
+ //create an IE event object
+ customEvent = document.createEventObject();
+
+ //assign available properties
+ customEvent.bubbles = bubbles;
+ customEvent.cancelable = cancelable;
+ customEvent.view = view;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.metaKey = metaKey;
+
+ /*
+ * IE doesn't support charCode explicitly. CharCode should
+ * take precedence over any keyCode value for accurate
+ * representation.
+ */
+ customEvent.keyCode = (charCode > 0) ? charCode : keyCode;
+
+ //fire the event
+ target.fireEvent("on" + type, customEvent);
+
+ } else {
+ throw new Error("simulateKeyEvent(): No event simulation framework present.");
+ }
+ },
+
+ /**
+ * Simulates a mouse event using the given event information to populate
+ * the generated event object. This method does browser-equalizing
+ * calculations to account for differences in the DOM and IE event models
+ * as well as different browser quirks.
+ * @method simulateMouseEvent
+ * @private
+ * @static
+ * @param {HTMLElement} target The target of the given event.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: click, dblclick, mousedown, mouseup, mouseout,
+ * mouseover, and mousemove.
+ * @param {Boolean} bubbles (Optional) Indicates if the event can be
+ * bubbled up. DOM Level 2 specifies that all mouse events bubble by
+ * default. The default is true.
+ * @param {Boolean} cancelable (Optional) Indicates if the event can be
+ * canceled using preventDefault(). DOM Level 2 specifies that all
+ * mouse events except mousemove can be cancelled. The default
+ * is true for all events except mousemove, for which the default
+ * is false.
+ * @param {Window} view (Optional) The view containing the target. This is
+ * typically the window object. The default is window.
+ * @param {int} detail (Optional) The number of times the mouse button has
+ * been used. The default value is 1.
+ * @param {int} screenX (Optional) The x-coordinate on the screen at which
+ * point the event occured. The default is 0.
+ * @param {int} screenY (Optional) The y-coordinate on the screen at which
+ * point the event occured. The default is 0.
+ * @param {int} clientX (Optional) The x-coordinate on the client at which
+ * point the event occured. The default is 0.
+ * @param {int} clientY (Optional) The y-coordinate on the client at which
+ * point the event occured. The default is 0.
+ * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
+ * is pressed while the event is firing. The default is false.
+ * @param {int} button (Optional) The button being pressed while the event
+ * is executing. The value should be 0 for the primary mouse button
+ * (typically the left button), 1 for the terciary mouse button
+ * (typically the middle button), and 2 for the secondary mouse button
+ * (typically the right button). The default is 0.
+ * @param {HTMLElement} relatedTarget (Optional) For mouseout events,
+ * this is the element that the mouse has moved to. For mouseover
+ * events, this is the element that the mouse has moved from. This
+ * argument is ignored for all other events. The default is null.
+ */
+ simulateMouseEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ bubbles /*:Boolean*/, cancelable /*:Boolean*/,
+ view /*:Window*/, detail /*:int*/,
+ screenX /*:int*/, screenY /*:int*/,
+ clientX /*:int*/, clientY /*:int*/,
+ ctrlKey /*:Boolean*/, altKey /*:Boolean*/,
+ shiftKey /*:Boolean*/, metaKey /*:Boolean*/,
+ button /*:int*/, relatedTarget /*:HTMLElement*/) /*:Void*/
+ {
+
+ //check target
+ target = YAHOO.util.Dom.get(target);
+ if (!target){
+ throw new Error("simulateMouseEvent(): Invalid target.");
+ }
+
+ relatedTarget = relatedTarget || null;
+
+ //check event type
+ if (YAHOO.lang.isString(type)){
+ type = type.toLowerCase();
+ switch(type){
+ case "mouseover":
+ case "mouseout":
+ case "mousedown":
+ case "mouseup":
+ case "click":
+ case "dblclick":
+ case "mousemove":
+ break;
+ default:
+ throw new Error("simulateMouseEvent(): Event type '" + type + "' not supported.");
+ }
+ } else {
+ throw new Error("simulateMouseEvent(): Event type must be a string.");
+ }
+
+ //setup default values
+ if (!YAHOO.lang.isBoolean(bubbles)){
+ bubbles = true; //all mouse events bubble
+ }
+ if (!YAHOO.lang.isBoolean(cancelable)){
+ cancelable = (type != "mousemove"); //mousemove is the only one that can't be cancelled
+ }
+ if (!YAHOO.lang.isObject(view)){
+ view = window; //view is typically window
+ }
+ if (!YAHOO.lang.isNumber(detail)){
+ detail = 1; //number of mouse clicks must be at least one
+ }
+ if (!YAHOO.lang.isNumber(screenX)){
+ screenX = 0;
+ }
+ if (!YAHOO.lang.isNumber(screenY)){
+ screenY = 0;
+ }
+ if (!YAHOO.lang.isNumber(clientX)){
+ clientX = 0;
+ }
+ if (!YAHOO.lang.isNumber(clientY)){
+ clientY = 0;
+ }
+ if (!YAHOO.lang.isBoolean(ctrlKey)){
+ ctrlKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(altKey)){
+ altKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(shiftKey)){
+ shiftKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(metaKey)){
+ metaKey = false;
+ }
+ if (!YAHOO.lang.isNumber(button)){
+ button = 0;
+ }
+
+ //try to create a mouse event
+ var customEvent /*:MouseEvent*/ = null;
+
+ //check for DOM-compliant browsers first
+ if (YAHOO.lang.isFunction(document.createEvent)){
+
+ customEvent = document.createEvent("MouseEvents");
+
+ //Safari 2.x (WebKit 418) still doesn't implement initMouseEvent()
+ if (customEvent.initMouseEvent){
+ customEvent.initMouseEvent(type, bubbles, cancelable, view, detail,
+ screenX, screenY, clientX, clientY,
+ ctrlKey, altKey, shiftKey, metaKey,
+ button, relatedTarget);
+ } else { //Safari
+
+ //the closest thing available in Safari 2.x is UIEvents
+ customEvent = document.createEvent("UIEvents");
+ customEvent.initEvent(type, bubbles, cancelable);
+ customEvent.view = view;
+ customEvent.detail = detail;
+ customEvent.screenX = screenX;
+ customEvent.screenY = screenY;
+ customEvent.clientX = clientX;
+ customEvent.clientY = clientY;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.metaKey = metaKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.button = button;
+ customEvent.relatedTarget = relatedTarget;
+ }
+
+ /*
+ * Check to see if relatedTarget has been assigned. Firefox
+ * versions less than 2.0 don't allow it to be assigned via
+ * initMouseEvent() and the property is readonly after event
+ * creation, so in order to keep YAHOO.util.getRelatedTarget()
+ * working, assign to the IE proprietary toElement property
+ * for mouseout event and fromElement property for mouseover
+ * event.
+ */
+ if (relatedTarget && !customEvent.relatedTarget){
+ if (type == "mouseout"){
+ customEvent.toElement = relatedTarget;
+ } else if (type == "mouseover"){
+ customEvent.fromElement = relatedTarget;
+ }
+ }
+
+ //fire the event
+ target.dispatchEvent(customEvent);
+
+ } else if (YAHOO.lang.isObject(document.createEventObject)){ //IE
+
+ //create an IE event object
+ customEvent = document.createEventObject();
+
+ //assign available properties
+ customEvent.bubbles = bubbles;
+ customEvent.cancelable = cancelable;
+ customEvent.view = view;
+ customEvent.detail = detail;
+ customEvent.screenX = screenX;
+ customEvent.screenY = screenY;
+ customEvent.clientX = clientX;
+ customEvent.clientY = clientY;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.metaKey = metaKey;
+ customEvent.shiftKey = shiftKey;
+
+ //fix button property for IE's wacky implementation
+ switch(button){
+ case 0:
+ customEvent.button = 1;
+ break;
+ case 1:
+ customEvent.button = 4;
+ break;
+ case 2:
+ //leave as is
+ break;
+ default:
+ customEvent.button = 0;
+ }
+
+ /*
+ * Have to use relatedTarget because IE won't allow assignment
+ * to toElement or fromElement on generic events. This keeps
+ * YAHOO.util.customEvent.getRelatedTarget() functional.
+ */
+ customEvent.relatedTarget = relatedTarget;
+
+ //fire the event
+ target.fireEvent("on" + type, customEvent);
+
+ } else {
+ throw new Error("simulateMouseEvent(): No event simulation framework present.");
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Mouse events
+ //--------------------------------------------------------------------------
+
+ /**
+ * Simulates a mouse event on a particular element.
+ * @param {HTMLElement} target The element to click on.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: click, dblclick, mousedown, mouseup, mouseout,
+ * mouseover, and mousemove.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseEvent
+ * @static
+ */
+ fireMouseEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ options /*:Object*/) /*:Void*/
+ {
+ options = options || {};
+ this.simulateMouseEvent(target, type, options.bubbles,
+ options.cancelable, options.view, options.detail, options.screenX,
+ options.screenY, options.clientX, options.clientY, options.ctrlKey,
+ options.altKey, options.shiftKey, options.metaKey, options.button,
+ options.relatedTarget);
+ },
+
+ /**
+ * Simulates a click on a particular element.
+ * @param {HTMLElement} target The element to click on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method click
+ * @static
+ */
+ click : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "click", options);
+ },
+
+ /**
+ * Simulates a double click on a particular element.
+ * @param {HTMLElement} target The element to double click on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method dblclick
+ * @static
+ */
+ dblclick : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireMouseEvent( target, "dblclick", options);
+ },
+
+ /**
+ * Simulates a mousedown on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mousedown
+ * @static
+ */
+ mousedown : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mousedown", options);
+ },
+
+ /**
+ * Simulates a mousemove on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mousemove
+ * @static
+ */
+ mousemove : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mousemove", options);
+ },
+
+ /**
+ * Simulates a mouseout event on a particular element. Use "relatedTarget"
+ * on the options object to specify where the mouse moved to.
+ * Quirks: Firefox less than 2.0 doesn't set relatedTarget properly, so
+ * toElement is assigned in its place. IE doesn't allow toElement to be
+ * be assigned, so relatedTarget is assigned in its place. Both of these
+ * concessions allow YAHOO.util.Event.getRelatedTarget() to work correctly
+ * in both browsers.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseout
+ * @static
+ */
+ mouseout : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseout", options);
+ },
+
+ /**
+ * Simulates a mouseover event on a particular element. Use "relatedTarget"
+ * on the options object to specify where the mouse moved from.
+ * Quirks: Firefox less than 2.0 doesn't set relatedTarget properly, so
+ * fromElement is assigned in its place. IE doesn't allow fromElement to be
+ * be assigned, so relatedTarget is assigned in its place. Both of these
+ * concessions allow YAHOO.util.Event.getRelatedTarget() to work correctly
+ * in both browsers.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseover
+ * @static
+ */
+ mouseover : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseover", options);
+ },
+
+ /**
+ * Simulates a mouseup on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseup
+ * @static
+ */
+ mouseup : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseup", options);
+ },
+
+ //--------------------------------------------------------------------------
+ // Key events
+ //--------------------------------------------------------------------------
+
+ /**
+ * Fires an event that normally would be fired by the keyboard (keyup,
+ * keydown, keypress). Make sure to specify either keyCode or charCode as
+ * an option.
+ * @private
+ * @param {String} type The type of event ("keyup", "keydown" or "keypress").
+ * @param {HTMLElement} target The target of the event.
+ * @param {Object} options Options for the event. Either keyCode or charCode
+ * are required.
+ * @method fireKeyEvent
+ * @static
+ */
+ fireKeyEvent : function (type /*:String*/, target /*:HTMLElement*/,
+ options /*:Object*/) /*:Void*/
+ {
+ options = options || {};
+ this.simulateKeyEvent(target, type, options.bubbles,
+ options.cancelable, options.view, options.ctrlKey,
+ options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode);
+ },
+
+ /**
+ * Simulates a keydown event on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keydown
+ * @static
+ */
+ keydown : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireKeyEvent("keydown", target, options);
+ },
+
+ /**
+ * Simulates a keypress on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keypress
+ * @static
+ */
+ keypress : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireKeyEvent("keypress", target, options);
+ },
+
+ /**
+ * Simulates a keyup event on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keyup
+ * @static
+ */
+ keyup : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireKeyEvent("keyup", target, options);
+ }
+
+
+};
+YAHOO.register("event-simulate", YAHOO.util.UserAction, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-min.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-min.js
new file mode 100644
index 0000000..63b9710
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate-min.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+YAHOO.util.UserAction={simulateKeyEvent:function(f,j,e,c,l,b,a,k,h,n,m){f=YAHOO.util.Dom.get(f);if(!f){throw new Error("simulateKeyEvent(): Invalid target.");}if(YAHOO.lang.isString(j)){j=j.toLowerCase();switch(j){case"keyup":case"keydown":case"keypress":break;case"textevent":j="keypress";break;default:throw new Error("simulateKeyEvent(): Event type '"+j+"' not supported.");}}else{throw new Error("simulateKeyEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(e)){e=true;}if(!YAHOO.lang.isBoolean(c)){c=true;}if(!YAHOO.lang.isObject(l)){l=window;}if(!YAHOO.lang.isBoolean(b)){b=false;}if(!YAHOO.lang.isBoolean(a)){a=false;}if(!YAHOO.lang.isBoolean(k)){k=false;}if(!YAHOO.lang.isBoolean(h)){h=false;}if(!YAHOO.lang.isNumber(n)){n=0;}if(!YAHOO.lang.isNumber(m)){m=0;}var i=null;if(YAHOO.lang.isFunction(document.createEvent)){try{i=document.createEvent("KeyEvents");i.initKeyEvent(j,e,c,l,b,a,k,h,n,m);}catch(g){try{i=document.createEvent("Events");}catch(d){i=document.createEvent("UIEvents");}finally{i.initEvent(j,e,c);i.view=l;i.altKey=a;i.ctrlKey=b;i.shiftKey=k;i.metaKey=h;i.keyCode=n;i.charCode=m;}}f.dispatchEvent(i);}else{if(YAHOO.lang.isObject(document.createEventObject)){i=document.createEventObject();i.bubbles=e;i.cancelable=c;i.view=l;i.ctrlKey=b;i.altKey=a;i.shiftKey=k;i.metaKey=h;i.keyCode=(m>0)?m:n;f.fireEvent("on"+j,i);}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}}},simulateMouseEvent:function(k,p,h,e,q,j,g,f,d,b,c,a,o,m,i,l){k=YAHOO.util.Dom.get(k);if(!k){throw new Error("simulateMouseEvent(): Invalid target.");}l=l||null;if(YAHOO.lang.isString(p)){p=p.toLowerCase();switch(p){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+p+"' not supported.");}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(h)){h=true;}if(!YAHOO.lang.isBoolean(e)){e=(p!="mousemove");}if(!YAHOO.lang.isObject(q)){q=window;}if(!YAHOO.lang.isNumber(j)){j=1;}if(!YAHOO.lang.isNumber(g)){g=0;}if(!YAHOO.lang.isNumber(f)){f=0;}if(!YAHOO.lang.isNumber(d)){d=0;}if(!YAHOO.lang.isNumber(b)){b=0;}if(!YAHOO.lang.isBoolean(c)){c=false;}if(!YAHOO.lang.isBoolean(a)){a=false;}if(!YAHOO.lang.isBoolean(o)){o=false;}if(!YAHOO.lang.isBoolean(m)){m=false;}if(!YAHOO.lang.isNumber(i)){i=0;}var n=null;if(YAHOO.lang.isFunction(document.createEvent)){n=document.createEvent("MouseEvents");if(n.initMouseEvent){n.initMouseEvent(p,h,e,q,j,g,f,d,b,c,a,o,m,i,l);}else{n=document.createEvent("UIEvents");n.initEvent(p,h,e);n.view=q;n.detail=j;n.screenX=g;n.screenY=f;n.clientX=d;n.clientY=b;n.ctrlKey=c;n.altKey=a;n.metaKey=m;n.shiftKey=o;n.button=i;n.relatedTarget=l;}if(l&&!n.relatedTarget){if(p=="mouseout"){n.toElement=l;}else{if(p=="mouseover"){n.fromElement=l;}}}k.dispatchEvent(n);}else{if(YAHOO.lang.isObject(document.createEventObject)){n=document.createEventObject();n.bubbles=h;n.cancelable=e;n.view=q;n.detail=j;n.screenX=g;n.screenY=f;n.clientX=d;n.clientY=b;n.ctrlKey=c;n.altKey=a;n.metaKey=m;n.shiftKey=o;switch(i){case 0:n.button=1;break;case 1:n.button=4;break;case 2:break;default:n.button=0;}n.relatedTarget=l;k.fireEvent("on"+p,n);}else{throw new Error("simulateMouseEvent(): No event simulation framework present.");}}},fireMouseEvent:function(c,b,a){a=a||{};this.simulateMouseEvent(c,b,a.bubbles,a.cancelable,a.view,a.detail,a.screenX,a.screenY,a.clientX,a.clientY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.button,a.relatedTarget);},click:function(b,a){this.fireMouseEvent(b,"click",a);},dblclick:function(b,a){this.fireMouseEvent(b,"dblclick",a);},mousedown:function(b,a){this.fireMouseEvent(b,"mousedown",a);},mousemove:function(b,a){this.fireMouseEvent(b,"mousemove",a);},mouseout:function(b,a){this.fireMouseEvent(b,"mouseout",a);},mouseover:function(b,a){this.fireMouseEvent(b,"mouseover",a);},mouseup:function(b,a){this.fireMouseEvent(b,"mouseup",a);},fireKeyEvent:function(b,c,a){a=a||{};this.simulateKeyEvent(c,b,a.bubbles,a.cancelable,a.view,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.keyCode,a.charCode);},keydown:function(b,a){this.fireKeyEvent("keydown",b,a);},keypress:function(b,a){this.fireKeyEvent("keypress",b,a);},keyup:function(b,a){this.fireKeyEvent("keyup",b,a);}};YAHOO.register("event-simulate",YAHOO.util.UserAction,{version:"2.9.0",build:"2800"});
\ No newline at end of file
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate.js
new file mode 100644
index 0000000..46e6b37
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event-simulate/event-simulate.js
@@ -0,0 +1,624 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+
+/**
+ * DOM event simulation utility
+ * @module event-simulate
+ * @namespace YAHOO.util
+ * @requires yahoo,dom,event
+ */
+
+/**
+ * The UserAction object provides functions that simulate events occurring in
+ * the browser. Since these are simulated events, they do not behave exactly
+ * as regular, user-initiated events do, but can be used to test simple
+ * user interactions safely.
+ *
+ * @namespace YAHOO.util
+ * @class UserAction
+ * @static
+ */
+YAHOO.util.UserAction = {
+
+ //--------------------------------------------------------------------------
+ // Generic event methods
+ //--------------------------------------------------------------------------
+
+ /**
+ * Simulates a key event using the given event information to populate
+ * the generated event object. This method does browser-equalizing
+ * calculations to account for differences in the DOM and IE event models
+ * as well as different browser quirks. Note: keydown causes Safari 2.x to
+ * crash.
+ * @method simulateKeyEvent
+ * @private
+ * @static
+ * @param {HTMLElement} target The target of the given event.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: keyup, keydown, and keypress.
+ * @param {Boolean} bubbles (Optional) Indicates if the event can be
+ * bubbled up. DOM Level 3 specifies that all key events bubble by
+ * default. The default is true.
+ * @param {Boolean} cancelable (Optional) Indicates if the event can be
+ * canceled using preventDefault(). DOM Level 3 specifies that all
+ * key events can be cancelled. The default
+ * is true.
+ * @param {Window} view (Optional) The view containing the target. This is
+ * typically the window object. The default is window.
+ * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
+ * is pressed while the event is firing. The default is false.
+ * @param {int} keyCode (Optional) The code for the key that is in use.
+ * The default is 0.
+ * @param {int} charCode (Optional) The Unicode code for the character
+ * associated with the key being used. The default is 0.
+ */
+ simulateKeyEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ bubbles /*:Boolean*/, cancelable /*:Boolean*/,
+ view /*:Window*/,
+ ctrlKey /*:Boolean*/, altKey /*:Boolean*/,
+ shiftKey /*:Boolean*/, metaKey /*:Boolean*/,
+ keyCode /*:int*/, charCode /*:int*/) /*:Void*/
+ {
+ //check target
+ target = YAHOO.util.Dom.get(target);
+ if (!target){
+ throw new Error("simulateKeyEvent(): Invalid target.");
+ }
+
+ //check event type
+ if (YAHOO.lang.isString(type)){
+ type = type.toLowerCase();
+ switch(type){
+ case "keyup":
+ case "keydown":
+ case "keypress":
+ break;
+ case "textevent": //DOM Level 3
+ type = "keypress";
+ break;
+ // @TODO was the fallthrough intentional, if so throw error
+ default:
+ throw new Error("simulateKeyEvent(): Event type '" + type + "' not supported.");
+ }
+ } else {
+ throw new Error("simulateKeyEvent(): Event type must be a string.");
+ }
+
+ //setup default values
+ if (!YAHOO.lang.isBoolean(bubbles)){
+ bubbles = true; //all key events bubble
+ }
+ if (!YAHOO.lang.isBoolean(cancelable)){
+ cancelable = true; //all key events can be cancelled
+ }
+ if (!YAHOO.lang.isObject(view)){
+ view = window; //view is typically window
+ }
+ if (!YAHOO.lang.isBoolean(ctrlKey)){
+ ctrlKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(altKey)){
+ altKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(shiftKey)){
+ shiftKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(metaKey)){
+ metaKey = false;
+ }
+ if (!YAHOO.lang.isNumber(keyCode)){
+ keyCode = 0;
+ }
+ if (!YAHOO.lang.isNumber(charCode)){
+ charCode = 0;
+ }
+
+ //try to create a mouse event
+ var customEvent /*:MouseEvent*/ = null;
+
+ //check for DOM-compliant browsers first
+ if (YAHOO.lang.isFunction(document.createEvent)){
+
+ try {
+
+ //try to create key event
+ customEvent = document.createEvent("KeyEvents");
+
+ /*
+ * Interesting problem: Firefox implemented a non-standard
+ * version of initKeyEvent() based on DOM Level 2 specs.
+ * Key event was removed from DOM Level 2 and re-introduced
+ * in DOM Level 3 with a different interface. Firefox is the
+ * only browser with any implementation of Key Events, so for
+ * now, assume it's Firefox if the above line doesn't error.
+ */
+ //TODO: Decipher between Firefox's implementation and a correct one.
+ customEvent.initKeyEvent(type, bubbles, cancelable, view, ctrlKey,
+ altKey, shiftKey, metaKey, keyCode, charCode);
+
+ } catch (ex /*:Error*/){
+
+ /*
+ * If it got here, that means key events aren't officially supported.
+ * Safari/WebKit is a real problem now. WebKit 522 won't let you
+ * set keyCode, charCode, or other properties if you use a
+ * UIEvent, so we first must try to create a generic event. The
+ * fun part is that this will throw an error on Safari 2.x. The
+ * end result is that we need another try...catch statement just to
+ * deal with this mess.
+ */
+ try {
+
+ //try to create generic event - will fail in Safari 2.x
+ customEvent = document.createEvent("Events");
+
+ } catch (uierror /*:Error*/){
+
+ //the above failed, so create a UIEvent for Safari 2.x
+ customEvent = document.createEvent("UIEvents");
+
+ } finally {
+
+ customEvent.initEvent(type, bubbles, cancelable);
+
+ //initialize
+ customEvent.view = view;
+ customEvent.altKey = altKey;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.metaKey = metaKey;
+ customEvent.keyCode = keyCode;
+ customEvent.charCode = charCode;
+
+ }
+
+ }
+
+ //fire the event
+ target.dispatchEvent(customEvent);
+
+ } else if (YAHOO.lang.isObject(document.createEventObject)){ //IE
+
+ //create an IE event object
+ customEvent = document.createEventObject();
+
+ //assign available properties
+ customEvent.bubbles = bubbles;
+ customEvent.cancelable = cancelable;
+ customEvent.view = view;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.metaKey = metaKey;
+
+ /*
+ * IE doesn't support charCode explicitly. CharCode should
+ * take precedence over any keyCode value for accurate
+ * representation.
+ */
+ customEvent.keyCode = (charCode > 0) ? charCode : keyCode;
+
+ //fire the event
+ target.fireEvent("on" + type, customEvent);
+
+ } else {
+ throw new Error("simulateKeyEvent(): No event simulation framework present.");
+ }
+ },
+
+ /**
+ * Simulates a mouse event using the given event information to populate
+ * the generated event object. This method does browser-equalizing
+ * calculations to account for differences in the DOM and IE event models
+ * as well as different browser quirks.
+ * @method simulateMouseEvent
+ * @private
+ * @static
+ * @param {HTMLElement} target The target of the given event.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: click, dblclick, mousedown, mouseup, mouseout,
+ * mouseover, and mousemove.
+ * @param {Boolean} bubbles (Optional) Indicates if the event can be
+ * bubbled up. DOM Level 2 specifies that all mouse events bubble by
+ * default. The default is true.
+ * @param {Boolean} cancelable (Optional) Indicates if the event can be
+ * canceled using preventDefault(). DOM Level 2 specifies that all
+ * mouse events except mousemove can be cancelled. The default
+ * is true for all events except mousemove, for which the default
+ * is false.
+ * @param {Window} view (Optional) The view containing the target. This is
+ * typically the window object. The default is window.
+ * @param {int} detail (Optional) The number of times the mouse button has
+ * been used. The default value is 1.
+ * @param {int} screenX (Optional) The x-coordinate on the screen at which
+ * point the event occured. The default is 0.
+ * @param {int} screenY (Optional) The y-coordinate on the screen at which
+ * point the event occured. The default is 0.
+ * @param {int} clientX (Optional) The x-coordinate on the client at which
+ * point the event occured. The default is 0.
+ * @param {int} clientY (Optional) The y-coordinate on the client at which
+ * point the event occured. The default is 0.
+ * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
+ * is pressed while the event is firing. The default is false.
+ * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
+ * is pressed while the event is firing. The default is false.
+ * @param {int} button (Optional) The button being pressed while the event
+ * is executing. The value should be 0 for the primary mouse button
+ * (typically the left button), 1 for the terciary mouse button
+ * (typically the middle button), and 2 for the secondary mouse button
+ * (typically the right button). The default is 0.
+ * @param {HTMLElement} relatedTarget (Optional) For mouseout events,
+ * this is the element that the mouse has moved to. For mouseover
+ * events, this is the element that the mouse has moved from. This
+ * argument is ignored for all other events. The default is null.
+ */
+ simulateMouseEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ bubbles /*:Boolean*/, cancelable /*:Boolean*/,
+ view /*:Window*/, detail /*:int*/,
+ screenX /*:int*/, screenY /*:int*/,
+ clientX /*:int*/, clientY /*:int*/,
+ ctrlKey /*:Boolean*/, altKey /*:Boolean*/,
+ shiftKey /*:Boolean*/, metaKey /*:Boolean*/,
+ button /*:int*/, relatedTarget /*:HTMLElement*/) /*:Void*/
+ {
+
+ //check target
+ target = YAHOO.util.Dom.get(target);
+ if (!target){
+ throw new Error("simulateMouseEvent(): Invalid target.");
+ }
+
+ relatedTarget = relatedTarget || null;
+
+ //check event type
+ if (YAHOO.lang.isString(type)){
+ type = type.toLowerCase();
+ switch(type){
+ case "mouseover":
+ case "mouseout":
+ case "mousedown":
+ case "mouseup":
+ case "click":
+ case "dblclick":
+ case "mousemove":
+ break;
+ default:
+ throw new Error("simulateMouseEvent(): Event type '" + type + "' not supported.");
+ }
+ } else {
+ throw new Error("simulateMouseEvent(): Event type must be a string.");
+ }
+
+ //setup default values
+ if (!YAHOO.lang.isBoolean(bubbles)){
+ bubbles = true; //all mouse events bubble
+ }
+ if (!YAHOO.lang.isBoolean(cancelable)){
+ cancelable = (type != "mousemove"); //mousemove is the only one that can't be cancelled
+ }
+ if (!YAHOO.lang.isObject(view)){
+ view = window; //view is typically window
+ }
+ if (!YAHOO.lang.isNumber(detail)){
+ detail = 1; //number of mouse clicks must be at least one
+ }
+ if (!YAHOO.lang.isNumber(screenX)){
+ screenX = 0;
+ }
+ if (!YAHOO.lang.isNumber(screenY)){
+ screenY = 0;
+ }
+ if (!YAHOO.lang.isNumber(clientX)){
+ clientX = 0;
+ }
+ if (!YAHOO.lang.isNumber(clientY)){
+ clientY = 0;
+ }
+ if (!YAHOO.lang.isBoolean(ctrlKey)){
+ ctrlKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(altKey)){
+ altKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(shiftKey)){
+ shiftKey = false;
+ }
+ if (!YAHOO.lang.isBoolean(metaKey)){
+ metaKey = false;
+ }
+ if (!YAHOO.lang.isNumber(button)){
+ button = 0;
+ }
+
+ //try to create a mouse event
+ var customEvent /*:MouseEvent*/ = null;
+
+ //check for DOM-compliant browsers first
+ if (YAHOO.lang.isFunction(document.createEvent)){
+
+ customEvent = document.createEvent("MouseEvents");
+
+ //Safari 2.x (WebKit 418) still doesn't implement initMouseEvent()
+ if (customEvent.initMouseEvent){
+ customEvent.initMouseEvent(type, bubbles, cancelable, view, detail,
+ screenX, screenY, clientX, clientY,
+ ctrlKey, altKey, shiftKey, metaKey,
+ button, relatedTarget);
+ } else { //Safari
+
+ //the closest thing available in Safari 2.x is UIEvents
+ customEvent = document.createEvent("UIEvents");
+ customEvent.initEvent(type, bubbles, cancelable);
+ customEvent.view = view;
+ customEvent.detail = detail;
+ customEvent.screenX = screenX;
+ customEvent.screenY = screenY;
+ customEvent.clientX = clientX;
+ customEvent.clientY = clientY;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.metaKey = metaKey;
+ customEvent.shiftKey = shiftKey;
+ customEvent.button = button;
+ customEvent.relatedTarget = relatedTarget;
+ }
+
+ /*
+ * Check to see if relatedTarget has been assigned. Firefox
+ * versions less than 2.0 don't allow it to be assigned via
+ * initMouseEvent() and the property is readonly after event
+ * creation, so in order to keep YAHOO.util.getRelatedTarget()
+ * working, assign to the IE proprietary toElement property
+ * for mouseout event and fromElement property for mouseover
+ * event.
+ */
+ if (relatedTarget && !customEvent.relatedTarget){
+ if (type == "mouseout"){
+ customEvent.toElement = relatedTarget;
+ } else if (type == "mouseover"){
+ customEvent.fromElement = relatedTarget;
+ }
+ }
+
+ //fire the event
+ target.dispatchEvent(customEvent);
+
+ } else if (YAHOO.lang.isObject(document.createEventObject)){ //IE
+
+ //create an IE event object
+ customEvent = document.createEventObject();
+
+ //assign available properties
+ customEvent.bubbles = bubbles;
+ customEvent.cancelable = cancelable;
+ customEvent.view = view;
+ customEvent.detail = detail;
+ customEvent.screenX = screenX;
+ customEvent.screenY = screenY;
+ customEvent.clientX = clientX;
+ customEvent.clientY = clientY;
+ customEvent.ctrlKey = ctrlKey;
+ customEvent.altKey = altKey;
+ customEvent.metaKey = metaKey;
+ customEvent.shiftKey = shiftKey;
+
+ //fix button property for IE's wacky implementation
+ switch(button){
+ case 0:
+ customEvent.button = 1;
+ break;
+ case 1:
+ customEvent.button = 4;
+ break;
+ case 2:
+ //leave as is
+ break;
+ default:
+ customEvent.button = 0;
+ }
+
+ /*
+ * Have to use relatedTarget because IE won't allow assignment
+ * to toElement or fromElement on generic events. This keeps
+ * YAHOO.util.customEvent.getRelatedTarget() functional.
+ */
+ customEvent.relatedTarget = relatedTarget;
+
+ //fire the event
+ target.fireEvent("on" + type, customEvent);
+
+ } else {
+ throw new Error("simulateMouseEvent(): No event simulation framework present.");
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Mouse events
+ //--------------------------------------------------------------------------
+
+ /**
+ * Simulates a mouse event on a particular element.
+ * @param {HTMLElement} target The element to click on.
+ * @param {String} type The type of event to fire. This can be any one of
+ * the following: click, dblclick, mousedown, mouseup, mouseout,
+ * mouseover, and mousemove.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseEvent
+ * @static
+ */
+ fireMouseEvent : function (target /*:HTMLElement*/, type /*:String*/,
+ options /*:Object*/) /*:Void*/
+ {
+ options = options || {};
+ this.simulateMouseEvent(target, type, options.bubbles,
+ options.cancelable, options.view, options.detail, options.screenX,
+ options.screenY, options.clientX, options.clientY, options.ctrlKey,
+ options.altKey, options.shiftKey, options.metaKey, options.button,
+ options.relatedTarget);
+ },
+
+ /**
+ * Simulates a click on a particular element.
+ * @param {HTMLElement} target The element to click on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method click
+ * @static
+ */
+ click : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "click", options);
+ },
+
+ /**
+ * Simulates a double click on a particular element.
+ * @param {HTMLElement} target The element to double click on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method dblclick
+ * @static
+ */
+ dblclick : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireMouseEvent( target, "dblclick", options);
+ },
+
+ /**
+ * Simulates a mousedown on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mousedown
+ * @static
+ */
+ mousedown : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mousedown", options);
+ },
+
+ /**
+ * Simulates a mousemove on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mousemove
+ * @static
+ */
+ mousemove : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mousemove", options);
+ },
+
+ /**
+ * Simulates a mouseout event on a particular element. Use "relatedTarget"
+ * on the options object to specify where the mouse moved to.
+ * Quirks: Firefox less than 2.0 doesn't set relatedTarget properly, so
+ * toElement is assigned in its place. IE doesn't allow toElement to be
+ * be assigned, so relatedTarget is assigned in its place. Both of these
+ * concessions allow YAHOO.util.Event.getRelatedTarget() to work correctly
+ * in both browsers.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseout
+ * @static
+ */
+ mouseout : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseout", options);
+ },
+
+ /**
+ * Simulates a mouseover event on a particular element. Use "relatedTarget"
+ * on the options object to specify where the mouse moved from.
+ * Quirks: Firefox less than 2.0 doesn't set relatedTarget properly, so
+ * fromElement is assigned in its place. IE doesn't allow fromElement to be
+ * be assigned, so relatedTarget is assigned in its place. Both of these
+ * concessions allow YAHOO.util.Event.getRelatedTarget() to work correctly
+ * in both browsers.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseover
+ * @static
+ */
+ mouseover : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseover", options);
+ },
+
+ /**
+ * Simulates a mouseup on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method mouseup
+ * @static
+ */
+ mouseup : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireMouseEvent(target, "mouseup", options);
+ },
+
+ //--------------------------------------------------------------------------
+ // Key events
+ //--------------------------------------------------------------------------
+
+ /**
+ * Fires an event that normally would be fired by the keyboard (keyup,
+ * keydown, keypress). Make sure to specify either keyCode or charCode as
+ * an option.
+ * @private
+ * @param {String} type The type of event ("keyup", "keydown" or "keypress").
+ * @param {HTMLElement} target The target of the event.
+ * @param {Object} options Options for the event. Either keyCode or charCode
+ * are required.
+ * @method fireKeyEvent
+ * @static
+ */
+ fireKeyEvent : function (type /*:String*/, target /*:HTMLElement*/,
+ options /*:Object*/) /*:Void*/
+ {
+ options = options || {};
+ this.simulateKeyEvent(target, type, options.bubbles,
+ options.cancelable, options.view, options.ctrlKey,
+ options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode);
+ },
+
+ /**
+ * Simulates a keydown event on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keydown
+ * @static
+ */
+ keydown : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireKeyEvent("keydown", target, options);
+ },
+
+ /**
+ * Simulates a keypress on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keypress
+ * @static
+ */
+ keypress : function (target /*:HTMLElement*/, options /*:Object*/) /*:Void*/ {
+ this.fireKeyEvent("keypress", target, options);
+ },
+
+ /**
+ * Simulates a keyup event on a particular element.
+ * @param {HTMLElement} target The element to act on.
+ * @param {Object} options Additional event options (use DOM standard names).
+ * @method keyup
+ * @static
+ */
+ keyup : function (target /*:HTMLElement*/, options /*Object*/) /*:Void*/ {
+ this.fireKeyEvent("keyup", target, options);
+ }
+
+
+};
+YAHOO.register("event-simulate", YAHOO.util.UserAction, {version: "2.9.0", build: "2800"});
diff --git a/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event/event-debug.js b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event/event-debug.js
new file mode 100644
index 0000000..3a5c7e5
--- /dev/null
+++ b/yui-tests/NavModeSmokeTestYUI2.0/yui2.9.0/build/event/event-debug.js
@@ -0,0 +1,2561 @@
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+
+/**
+ * The CustomEvent class lets you define events for your application
+ * that can be subscribed to by one or more independent component.
+ *
+ * @param {String} type The type of event, which is passed to the callback
+ * when the event fires
+ * @param {Object} context The context the event will fire from. "this" will
+ * refer to this object in the callback. Default value:
+ * the window object. The listener can override this.
+ * @param {boolean} silent pass true to prevent the event from writing to
+ * the debugsystem
+ * @param {int} signature the signature that the custom event subscriber
+ * will receive. YAHOO.util.CustomEvent.LIST or
+ * YAHOO.util.CustomEvent.FLAT. The default is
+ * YAHOO.util.CustomEvent.LIST.
+ * @param fireOnce {boolean} If configured to fire once, the custom event
+ * will only notify subscribers a single time regardless of how many times
+ * the event is fired. In addition, new subscribers will be notified
+ * immediately if the event has already been fired.
+ * @namespace YAHOO.util
+ * @class CustomEvent
+ * @constructor
+ */
+YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
+
+ /**
+ * The type of event, returned to subscribers when the event fires
+ * @property type
+ * @type string
+ */
+ this.type = type;
+
+ /**
+ * The context the event will fire from by default. Defaults to the window obj.
+ * @property scope
+ * @type object
+ */
+ this.scope = context || window;
+
+ /**
+ * By default all custom events are logged in the debug build. Set silent to true
+ * to disable debug output for this event.
+ * @property silent
+ * @type boolean
+ */
+ this.silent = silent;
+
+ /**
+ * If configured to fire once, the custom event will only notify subscribers
+ * a single time regardless of how many times the event is fired. In addition,
+ * new subscribers will be notified immediately if the event has already been
+ * fired.
+ * @property fireOnce
+ * @type boolean
+ * @default false
+ */
+ this.fireOnce = fireOnce;
+
+ /**
+ * Indicates whether or not this event has ever been fired.
+ * @property fired
+ * @type boolean
+ * @default false
+ */
+ this.fired = false;
+
+ /**
+ * For fireOnce events the arguments the event was fired with are stored
+ * so that new subscribers get the proper payload.
+ * @property firedWith
+ * @type Array
+ */
+ this.firedWith = null;
+
+ /**
+ * Custom events support two styles of arguments provided to the event
+ * subscribers.
+ * + * YAHOO.namespace("property.package"); + * YAHOO.namespace("YAHOO.property.package"); + *+ * Either of the above would create YAHOO.property, then + * YAHOO.property.package + * + * Be careful when naming packages. Reserved words may work in some browsers + * and not others. For instance, the following will fail in Safari: + *
+ * YAHOO.namespace("really.long.nested.namespace"); + *+ * This fails because "long" is a future reserved word in ECMAScript + * + * For implementation code that uses YUI, do not create your components + * in the namespaces defined by YUI ( + *
YAHOO.util
,
+ * YAHOO.widget
,
+ * YAHOO.lang
,
+ * YAHOO.tool
,
+ * YAHOO.example
,
+ * YAHOO.env
) -- create your own namespace (e.g., 'companyname').
+ *
+ * @method namespace
+ * @static
+ * @param {String*} arguments 1-n namespaces to create
+ * @return {Object} A reference to the last namespace object created
+ */
+YAHOO.namespace = function() {
+ var a=arguments, o=null, i, j, d;
+ for (i=0; i+ * Firefox 1.0.0.4: 1.7.8 <-- Reports 1.7 + * Firefox 1.5.0.9: 1.8.0.9 <-- 1.8 + * Firefox 2.0.0.3: 1.8.1.3 <-- 1.81 + * Firefox 3.0 <-- 1.9 + * Firefox 3.5 <-- 1.91 + *+ * @property gecko + * @type float + * @static + */ + gecko: 0, + + /** + * AppleWebKit version. KHTML browsers that are not WebKit browsers + * will evaluate to 1, other browsers 0. Example: 418.9 + *
+ * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the + * latest available for Mac OSX 10.3. + * Safari 2.0.2: 416 <-- hasOwnProperty introduced + * Safari 2.0.4: 418 <-- preventDefault fixed + * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run + * different versions of webkit + * Safari 2.0.4 (419.3): 419 <-- Tiger installations that have been + * updated, but not updated + * to the latest patch. + * Webkit 212 nightly: 522+ <-- Safari 3.0 precursor (with native + * SVG and many major issues fixed). + * Safari 3.0.4 (523.12) 523.12 <-- First Tiger release - automatic + * update from 2.x via the 10.4.11 OS patch. + * Webkit nightly 1/2008:525+ <-- Supports DOMContentLoaded event. + * yahoo.com user agent hack removed. + *+ * http://en.wikipedia.org/wiki/Safari_version_history + * @property webkit + * @type float + * @static + */ + webkit: 0, + + /** + * Chrome will be detected as webkit, but this property will also + * be populated with the Chrome version number + * @property chrome + * @type float + * @static + */ + chrome: 0, + + /** + * The mobile property will be set to a string containing any relevant + * user agent information when a modern mobile browser is detected. + * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series + * devices with the WebKit-based browser, and Opera Mini. + * @property mobile + * @type string + * @static + */ + mobile: null, + + /** + * Adobe AIR version number or 0. Only populated if webkit is detected. + * Example: 1.0 + * @property air + * @type float + */ + air: 0, + /** + * Detects Apple iPad's OS version + * @property ipad + * @type float + * @static + */ + ipad: 0, + /** + * Detects Apple iPhone's OS version + * @property iphone + * @type float + * @static + */ + iphone: 0, + /** + * Detects Apples iPod's OS version + * @property ipod + * @type float + * @static + */ + ipod: 0, + /** + * General truthy check for iPad, iPhone or iPod + * @property ios + * @type float + * @static + */ + ios: null, + /** + * Detects Googles Android OS version + * @property android + * @type float + * @static + */ + android: 0, + /** + * Detects Palms WebOS version + * @property webos + * @type float + * @static + */ + webos: 0, + + /** + * Google Caja version number or 0. + * @property caja + * @type float + */ + caja: nav && nav.cajaVersion, + + /** + * Set to true if the page appears to be in SSL + * @property secure + * @type boolean + * @static + */ + secure: false, + + /** + * The operating system. Currently only detecting windows or macintosh + * @property os + * @type string + * @static + */ + os: null + + }, + + ua = agent || (navigator && navigator.userAgent), + + loc = window && window.location, + + href = loc && loc.href, + + m; + + o.secure = href && (href.toLowerCase().indexOf("https") === 0); + + if (ua) { + + if ((/windows|win32/i).test(ua)) { + o.os = 'windows'; + } else if ((/macintosh/i).test(ua)) { + o.os = 'macintosh'; + } else if ((/rhino/i).test(ua)) { + o.os = 'rhino'; + } + + // Modern KHTML browsers should qualify as Safari X-Grade + if ((/KHTML/).test(ua)) { + o.webkit = 1; + } + // Modern WebKit browsers are at least X-Grade + m = ua.match(/AppleWebKit\/([^\s]*)/); + if (m && m[1]) { + o.webkit = numberify(m[1]); + + // Mobile browser check + if (/ Mobile\//.test(ua)) { + o.mobile = 'Apple'; // iPhone or iPod Touch + + m = ua.match(/OS ([^\s]*)/); + if (m && m[1]) { + m = numberify(m[1].replace('_', '.')); + } + o.ios = m; + o.ipad = o.ipod = o.iphone = 0; + + m = ua.match(/iPad|iPod|iPhone/); + if (m && m[0]) { + o[m[0].toLowerCase()] = o.ios; + } + } else { + m = ua.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/); + if (m) { + // Nokia N-series, Android, webOS, ex: NokiaN95 + o.mobile = m[0]; + } + if (/webOS/.test(ua)) { + o.mobile = 'WebOS'; + m = ua.match(/webOS\/([^\s]*);/); + if (m && m[1]) { + o.webos = numberify(m[1]); + } + } + if (/ Android/.test(ua)) { + o.mobile = 'Android'; + m = ua.match(/Android ([^\s]*);/); + if (m && m[1]) { + o.android = numberify(m[1]); + } + + } + } + + m = ua.match(/Chrome\/([^\s]*)/); + if (m && m[1]) { + o.chrome = numberify(m[1]); // Chrome + } else { + m = ua.match(/AdobeAIR\/([^\s]*)/); + if (m) { + o.air = m[0]; // Adobe AIR 1.0 or better + } + } + } + + if (!o.webkit) { // not webkit +// @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr) + m = ua.match(/Opera[\s\/]([^\s]*)/); + if (m && m[1]) { + o.opera = numberify(m[1]); + m = ua.match(/Version\/([^\s]*)/); + if (m && m[1]) { + o.opera = numberify(m[1]); // opera 10+ + } + m = ua.match(/Opera Mini[^;]*/); + if (m) { + o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316 + } + } else { // not opera or webkit + m = ua.match(/MSIE\s([^;]*)/); + if (m && m[1]) { + o.ie = numberify(m[1]); + } else { // not opera, webkit, or ie + m = ua.match(/Gecko\/([^\s]*)/); + if (m) { + o.gecko = 1; // Gecko detected, look for revision + m = ua.match(/rv:([^\s\)]*)/); + if (m && m[1]) { + o.gecko = numberify(m[1]); + } + } + } + } + } + } + + return o; +}; + +YAHOO.env.ua = YAHOO.env.parseUA(); + +/* + * Initializes the global by creating the default namespaces and applying + * any new configuration information that is detected. This is the setup + * for env. + * @method init + * @static + * @private + */ +(function() { + YAHOO.namespace("util", "widget", "example"); + /*global YAHOO_config*/ + if ("undefined" !== typeof YAHOO_config) { + var l=YAHOO_config.listener, ls=YAHOO.env.listeners,unique=true, i; + if (l) { + // if YAHOO is loaded multiple times we need to check to see if + // this is a new config object. If it is, add the new component + // load listener to the stack + for (i=0; i
& < > " ' / `
+ *
+ *
+ *
+ * This implementation is based on the
+ * OWASP
+ * HTML escaping recommendations. In addition to the characters
+ * in the OWASP recommendation, we also escape the `
+ * character, since IE interprets it as an attribute delimiter when used in
+ * innerHTML.
+ *
+ * YAHOO.namespace("property.package"); + * YAHOO.namespace("YAHOO.property.package"); + *+ * Either of the above would create YAHOO.property, then + * YAHOO.property.package + * + * Be careful when naming packages. Reserved words may work in some browsers + * and not others. For instance, the following will fail in Safari: + *
+ * YAHOO.namespace("really.long.nested.namespace"); + *+ * This fails because "long" is a future reserved word in ECMAScript + * + * For implementation code that uses YUI, do not create your components + * in the namespaces defined by YUI ( + *
YAHOO.util
,
+ * YAHOO.widget
,
+ * YAHOO.lang
,
+ * YAHOO.tool
,
+ * YAHOO.example
,
+ * YAHOO.env
) -- create your own namespace (e.g., 'companyname').
+ *
+ * @method namespace
+ * @static
+ * @param {String*} arguments 1-n namespaces to create
+ * @return {Object} A reference to the last namespace object created
+ */
+YAHOO.namespace = function() {
+ var a=arguments, o=null, i, j, d;
+ for (i=0; i+ * Firefox 1.0.0.4: 1.7.8 <-- Reports 1.7 + * Firefox 1.5.0.9: 1.8.0.9 <-- 1.8 + * Firefox 2.0.0.3: 1.8.1.3 <-- 1.81 + * Firefox 3.0 <-- 1.9 + * Firefox 3.5 <-- 1.91 + *+ * @property gecko + * @type float + * @static + */ + gecko: 0, + + /** + * AppleWebKit version. KHTML browsers that are not WebKit browsers + * will evaluate to 1, other browsers 0. Example: 418.9 + *
+ * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the + * latest available for Mac OSX 10.3. + * Safari 2.0.2: 416 <-- hasOwnProperty introduced + * Safari 2.0.4: 418 <-- preventDefault fixed + * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run + * different versions of webkit + * Safari 2.0.4 (419.3): 419 <-- Tiger installations that have been + * updated, but not updated + * to the latest patch. + * Webkit 212 nightly: 522+ <-- Safari 3.0 precursor (with native + * SVG and many major issues fixed). + * Safari 3.0.4 (523.12) 523.12 <-- First Tiger release - automatic + * update from 2.x via the 10.4.11 OS patch. + * Webkit nightly 1/2008:525+ <-- Supports DOMContentLoaded event. + * yahoo.com user agent hack removed. + *+ * http://en.wikipedia.org/wiki/Safari_version_history + * @property webkit + * @type float + * @static + */ + webkit: 0, + + /** + * Chrome will be detected as webkit, but this property will also + * be populated with the Chrome version number + * @property chrome + * @type float + * @static + */ + chrome: 0, + + /** + * The mobile property will be set to a string containing any relevant + * user agent information when a modern mobile browser is detected. + * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series + * devices with the WebKit-based browser, and Opera Mini. + * @property mobile + * @type string + * @static + */ + mobile: null, + + /** + * Adobe AIR version number or 0. Only populated if webkit is detected. + * Example: 1.0 + * @property air + * @type float + */ + air: 0, + /** + * Detects Apple iPad's OS version + * @property ipad + * @type float + * @static + */ + ipad: 0, + /** + * Detects Apple iPhone's OS version + * @property iphone + * @type float + * @static + */ + iphone: 0, + /** + * Detects Apples iPod's OS version + * @property ipod + * @type float + * @static + */ + ipod: 0, + /** + * General truthy check for iPad, iPhone or iPod + * @property ios + * @type float + * @static + */ + ios: null, + /** + * Detects Googles Android OS version + * @property android + * @type float + * @static + */ + android: 0, + /** + * Detects Palms WebOS version + * @property webos + * @type float + * @static + */ + webos: 0, + + /** + * Google Caja version number or 0. + * @property caja + * @type float + */ + caja: nav && nav.cajaVersion, + + /** + * Set to true if the page appears to be in SSL + * @property secure + * @type boolean + * @static + */ + secure: false, + + /** + * The operating system. Currently only detecting windows or macintosh + * @property os + * @type string + * @static + */ + os: null + + }, + + ua = agent || (navigator && navigator.userAgent), + + loc = window && window.location, + + href = loc && loc.href, + + m; + + o.secure = href && (href.toLowerCase().indexOf("https") === 0); + + if (ua) { + + if ((/windows|win32/i).test(ua)) { + o.os = 'windows'; + } else if ((/macintosh/i).test(ua)) { + o.os = 'macintosh'; + } else if ((/rhino/i).test(ua)) { + o.os = 'rhino'; + } + + // Modern KHTML browsers should qualify as Safari X-Grade + if ((/KHTML/).test(ua)) { + o.webkit = 1; + } + // Modern WebKit browsers are at least X-Grade + m = ua.match(/AppleWebKit\/([^\s]*)/); + if (m && m[1]) { + o.webkit = numberify(m[1]); + + // Mobile browser check + if (/ Mobile\//.test(ua)) { + o.mobile = 'Apple'; // iPhone or iPod Touch + + m = ua.match(/OS ([^\s]*)/); + if (m && m[1]) { + m = numberify(m[1].replace('_', '.')); + } + o.ios = m; + o.ipad = o.ipod = o.iphone = 0; + + m = ua.match(/iPad|iPod|iPhone/); + if (m && m[0]) { + o[m[0].toLowerCase()] = o.ios; + } + } else { + m = ua.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/); + if (m) { + // Nokia N-series, Android, webOS, ex: NokiaN95 + o.mobile = m[0]; + } + if (/webOS/.test(ua)) { + o.mobile = 'WebOS'; + m = ua.match(/webOS\/([^\s]*);/); + if (m && m[1]) { + o.webos = numberify(m[1]); + } + } + if (/ Android/.test(ua)) { + o.mobile = 'Android'; + m = ua.match(/Android ([^\s]*);/); + if (m && m[1]) { + o.android = numberify(m[1]); + } + + } + } + + m = ua.match(/Chrome\/([^\s]*)/); + if (m && m[1]) { + o.chrome = numberify(m[1]); // Chrome + } else { + m = ua.match(/AdobeAIR\/([^\s]*)/); + if (m) { + o.air = m[0]; // Adobe AIR 1.0 or better + } + } + } + + if (!o.webkit) { // not webkit +// @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr) + m = ua.match(/Opera[\s\/]([^\s]*)/); + if (m && m[1]) { + o.opera = numberify(m[1]); + m = ua.match(/Version\/([^\s]*)/); + if (m && m[1]) { + o.opera = numberify(m[1]); // opera 10+ + } + m = ua.match(/Opera Mini[^;]*/); + if (m) { + o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316 + } + } else { // not opera or webkit + m = ua.match(/MSIE\s([^;]*)/); + if (m && m[1]) { + o.ie = numberify(m[1]); + } else { // not opera, webkit, or ie + m = ua.match(/Gecko\/([^\s]*)/); + if (m) { + o.gecko = 1; // Gecko detected, look for revision + m = ua.match(/rv:([^\s\)]*)/); + if (m && m[1]) { + o.gecko = numberify(m[1]); + } + } + } + } + } + } + + return o; +}; + +YAHOO.env.ua = YAHOO.env.parseUA(); + +/* + * Initializes the global by creating the default namespaces and applying + * any new configuration information that is detected. This is the setup + * for env. + * @method init + * @static + * @private + */ +(function() { + YAHOO.namespace("util", "widget", "example"); + /*global YAHOO_config*/ + if ("undefined" !== typeof YAHOO_config) { + var l=YAHOO_config.listener, ls=YAHOO.env.listeners,unique=true, i; + if (l) { + // if YAHOO is loaded multiple times we need to check to see if + // this is a new config object. If it is, add the new component + // load listener to the stack + for (i=0; i
& < > " ' / `
+ *
+ *
+ *
+ * This implementation is based on the
+ * OWASP
+ * HTML escaping recommendations. In addition to the characters
+ * in the OWASP recommendation, we also escape the `
+ * character, since IE interprets it as an attribute delimiter when used in
+ * innerHTML.
+ *
"; + + }, + + //------------------------------------------------------------------------- + // Private Methods + //------------------------------------------------------------------------- + + /* + * Initializes the logger. + * @private + */ + init : function () { + + //attach to any available TestRunner + if (YAHOO.tool.TestRunner){ + this.setTestRunner(YAHOO.tool.TestRunner); + } + + //hide useless sources + this.hideSource("global"); + this.hideSource("LogReader"); + + //hide useless message categories + this.hideCategory("warn"); + this.hideCategory("window"); + this.hideCategory("time"); + + //reset the logger + this.clearConsole(); + }, + + /** + * Clears the reference to the TestRunner from previous operations. This + * unsubscribes all events and removes the object reference. + * @return {Void} + * @static + */ + clearTestRunner : function () /*:Void*/ { + if (this._runner){ + this._runner.unsubscribeAll(); + this._runner = null; + } + }, + + /** + * Sets the source test runner that the logger should monitor. + * @param {YAHOO.tool.TestRunner} testRunner The TestRunner to observe. + * @return {Void} + * @static + */ + setTestRunner : function (testRunner /*:YAHOO.tool.TestRunner*/) /*:Void*/ { + + if (this._runner){ + this.clearTestRunner(); + } + + this._runner = testRunner; + + //setup event _handlers + testRunner.subscribe(testRunner.TEST_PASS_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_FAIL_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_IGNORE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + }, + + //------------------------------------------------------------------------- + // Event Handlers + //------------------------------------------------------------------------- + + /** + * Handles all TestRunner events, outputting appropriate data into the console. + * @param {Object} data The event data object. + * @return {Void} + * @private + */ + _handleTestRunnerEvent : function (data /*:Object*/) /*:Void*/ { + + //shortcut variables + var TestRunner /*:Object*/ = YAHOO.tool.TestRunner; + + //data variables + var message /*:String*/ = ""; + var messageType /*:String*/ = ""; + + switch(data.type){ + case TestRunner.BEGIN_EVENT: + message = "Testing began at " + (new Date()).toString() + "."; + messageType = "info"; + break; + + case TestRunner.COMPLETE_EVENT: + message = "Testing completed at " + (new Date()).toString() + ".\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + + case TestRunner.TEST_FAIL_EVENT: + message = data.testName + ": " + data.error.getMessage(); + messageType = "fail"; + break; + + case TestRunner.TEST_IGNORE_EVENT: + message = data.testName + ": ignored."; + messageType = "ignore"; + break; + + case TestRunner.TEST_PASS_EVENT: + message = data.testName + ": passed."; + messageType = "pass"; + break; + + case TestRunner.TEST_SUITE_BEGIN_EVENT: + message = "Test suite \"" + data.testSuite.name + "\" started."; + messageType = "info"; + break; + + case TestRunner.TEST_SUITE_COMPLETE_EVENT: + message = "Test suite \"" + data.testSuite.name + "\" completed.\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + + case TestRunner.TEST_CASE_BEGIN_EVENT: + message = "Test case \"" + data.testCase.name + "\" started."; + messageType = "info"; + break; + + case TestRunner.TEST_CASE_COMPLETE_EVENT: + message = "Test case \"" + data.testCase.name + "\" completed.\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + default: + message = "Unexpected event " + data.type; + message = "info"; + } + + YAHOO.log(message, messageType, "TestRunner"); + } + +}); +YAHOO.namespace("tool.TestFormat"); + +(function(){ + + /** + * Returns test results formatted as a JSON string. Requires JSON utility. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method JSON + * @static + */ + YAHOO.tool.TestFormat.JSON = function(results) { + return YAHOO.lang.JSON.stringify(results); + }; + + /* (intentionally not documented) + * Simple escape function for XML attribute values. + * @param {String} text The text to escape. + * @return {String} The escaped text. + */ + function xmlEscape(text){ + return text.replace(/["'<>&]/g, function(c){ + switch(c){ + case "<": return "<"; + case ">": return ">"; + case "\"": return """; + case "'": return "'"; + case "&": return "&"; + } + }); + } + + /** + * Returns test results formatted as an XML string. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method XML + * @static + */ + YAHOO.tool.TestFormat.XML = function(results) { + + function serializeToXML(results){ + var l = YAHOO.lang, + xml = "<" + results.type + " name=\"" + xmlEscape(results.name) + "\""; + + if (l.isNumber(results.duration)){ + xml += " duration=\"" + results.duration + "\""; + } + + if (results.type == "test"){ + xml += " result=\"" + results.result + "\" message=\"" + xmlEscape(results.message) + "\">"; + } else { + xml += " passed=\"" + results.passed + "\" failed=\"" + results.failed + "\" ignored=\"" + results.ignored + "\" total=\"" + results.total + "\">"; + for (var prop in results) { + if (l.hasOwnProperty(results, prop) && l.isObject(results[prop]) && !l.isArray(results[prop])){ + xml += serializeToXML(results[prop]); + } + } + } + + xml += "" + results.type + ">"; + + return xml; + } + + return "" + serializeToXML(results); + + }; + + + /** + * Returns test results formatted in JUnit XML format. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method JUnitXML + * @static + */ + YAHOO.tool.TestFormat.JUnitXML = function(results) { + + + function serializeToJUnitXML(results){ + var l = YAHOO.lang, + xml = "", + prop; + + switch (results.type){ + //equivalent to testcase in JUnit + case "test": + if (results.result != "ignore"){ + xml = "" + category.toUpperCase() + " " + text + "
'+a.toUpperCase()+" "+c+"
";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(a){if(this._runner){this.clearTestRunner();}this._runner=a;a.subscribe(a.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);a.subscribe(a.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(d){var a=YAHOO.tool.TestRunner;var c="";var b="";switch(d.type){case a.BEGIN_EVENT:c="Testing began at "+(new Date()).toString()+".";b="info";break;case a.COMPLETE_EVENT:c="Testing completed at "+(new Date()).toString()+".\nPassed:"+d.results.passed+" Failed:"+d.results.failed+" Total:"+d.results.total;b="info";break;case a.TEST_FAIL_EVENT:c=d.testName+": "+d.error.getMessage();b="fail";break;case a.TEST_IGNORE_EVENT:c=d.testName+": ignored.";b="ignore";break;case a.TEST_PASS_EVENT:c=d.testName+": passed.";b="pass";break;case a.TEST_SUITE_BEGIN_EVENT:c='Test suite "'+d.testSuite.name+'" started.';b="info";break;case a.TEST_SUITE_COMPLETE_EVENT:c='Test suite "'+d.testSuite.name+'" completed.\nPassed:'+d.results.passed+" Failed:"+d.results.failed+" Total:"+d.results.total;b="info";break;case a.TEST_CASE_BEGIN_EVENT:c='Test case "'+d.testCase.name+'" started.';b="info";break;case a.TEST_CASE_COMPLETE_EVENT:c='Test case "'+d.testCase.name+'" completed.\nPassed:'+d.results.passed+" Failed:"+d.results.failed+" Total:"+d.results.total;b="info";break;default:c="Unexpected event "+d.type;c="info";}YAHOO.log(c,b,"TestRunner");}});YAHOO.namespace("tool.TestFormat");(function(){YAHOO.tool.TestFormat.JSON=function(b){return YAHOO.lang.JSON.stringify(b);};function a(b){return b.replace(/["'<>&]/g,function(d){switch(d){case"<":return"<";case">":return">";case'"':return""";case"'":return"'";case"&":return"&";}});}YAHOO.tool.TestFormat.XML=function(c){function b(f){var d=YAHOO.lang,e="<"+f.type+' name="'+a(f.name)+'"';if(d.isNumber(f.duration)){e+=' duration="'+f.duration+'"';}if(f.type=="test"){e+=' result="'+f.result+'" message="'+a(f.message)+'">';}else{e+=' passed="'+f.passed+'" failed="'+f.failed+'" ignored="'+f.ignored+'" total="'+f.total+'">';for(var g in f){if(d.hasOwnProperty(f,g)&&d.isObject(f[g])&&!d.isArray(f[g])){e+=b(f[g]);}}}e+=""+f.type+">";return e;}return''+b(c);};YAHOO.tool.TestFormat.JUnitXML=function(b){function c(f){var d=YAHOO.lang,e="",g;switch(f.type){case"test":if(f.result!="ignore"){e='"; + + }, + + //------------------------------------------------------------------------- + // Private Methods + //------------------------------------------------------------------------- + + /* + * Initializes the logger. + * @private + */ + init : function () { + + //attach to any available TestRunner + if (YAHOO.tool.TestRunner){ + this.setTestRunner(YAHOO.tool.TestRunner); + } + + //hide useless sources + this.hideSource("global"); + this.hideSource("LogReader"); + + //hide useless message categories + this.hideCategory("warn"); + this.hideCategory("window"); + this.hideCategory("time"); + + //reset the logger + this.clearConsole(); + }, + + /** + * Clears the reference to the TestRunner from previous operations. This + * unsubscribes all events and removes the object reference. + * @return {Void} + * @static + */ + clearTestRunner : function () /*:Void*/ { + if (this._runner){ + this._runner.unsubscribeAll(); + this._runner = null; + } + }, + + /** + * Sets the source test runner that the logger should monitor. + * @param {YAHOO.tool.TestRunner} testRunner The TestRunner to observe. + * @return {Void} + * @static + */ + setTestRunner : function (testRunner /*:YAHOO.tool.TestRunner*/) /*:Void*/ { + + if (this._runner){ + this.clearTestRunner(); + } + + this._runner = testRunner; + + //setup event _handlers + testRunner.subscribe(testRunner.TEST_PASS_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_FAIL_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_IGNORE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true); + testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true); + }, + + //------------------------------------------------------------------------- + // Event Handlers + //------------------------------------------------------------------------- + + /** + * Handles all TestRunner events, outputting appropriate data into the console. + * @param {Object} data The event data object. + * @return {Void} + * @private + */ + _handleTestRunnerEvent : function (data /*:Object*/) /*:Void*/ { + + //shortcut variables + var TestRunner /*:Object*/ = YAHOO.tool.TestRunner; + + //data variables + var message /*:String*/ = ""; + var messageType /*:String*/ = ""; + + switch(data.type){ + case TestRunner.BEGIN_EVENT: + message = "Testing began at " + (new Date()).toString() + "."; + messageType = "info"; + break; + + case TestRunner.COMPLETE_EVENT: + message = "Testing completed at " + (new Date()).toString() + ".\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + + case TestRunner.TEST_FAIL_EVENT: + message = data.testName + ": " + data.error.getMessage(); + messageType = "fail"; + break; + + case TestRunner.TEST_IGNORE_EVENT: + message = data.testName + ": ignored."; + messageType = "ignore"; + break; + + case TestRunner.TEST_PASS_EVENT: + message = data.testName + ": passed."; + messageType = "pass"; + break; + + case TestRunner.TEST_SUITE_BEGIN_EVENT: + message = "Test suite \"" + data.testSuite.name + "\" started."; + messageType = "info"; + break; + + case TestRunner.TEST_SUITE_COMPLETE_EVENT: + message = "Test suite \"" + data.testSuite.name + "\" completed.\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + + case TestRunner.TEST_CASE_BEGIN_EVENT: + message = "Test case \"" + data.testCase.name + "\" started."; + messageType = "info"; + break; + + case TestRunner.TEST_CASE_COMPLETE_EVENT: + message = "Test case \"" + data.testCase.name + "\" completed.\nPassed:" + + data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total; + messageType = "info"; + break; + default: + message = "Unexpected event " + data.type; + message = "info"; + } + + YAHOO.log(message, messageType, "TestRunner"); + } + +}); +YAHOO.namespace("tool.TestFormat"); + +(function(){ + + /** + * Returns test results formatted as a JSON string. Requires JSON utility. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method JSON + * @static + */ + YAHOO.tool.TestFormat.JSON = function(results) { + return YAHOO.lang.JSON.stringify(results); + }; + + /* (intentionally not documented) + * Simple escape function for XML attribute values. + * @param {String} text The text to escape. + * @return {String} The escaped text. + */ + function xmlEscape(text){ + return text.replace(/["'<>&]/g, function(c){ + switch(c){ + case "<": return "<"; + case ">": return ">"; + case "\"": return """; + case "'": return "'"; + case "&": return "&"; + } + }); + } + + /** + * Returns test results formatted as an XML string. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method XML + * @static + */ + YAHOO.tool.TestFormat.XML = function(results) { + + function serializeToXML(results){ + var l = YAHOO.lang, + xml = "<" + results.type + " name=\"" + xmlEscape(results.name) + "\""; + + if (l.isNumber(results.duration)){ + xml += " duration=\"" + results.duration + "\""; + } + + if (results.type == "test"){ + xml += " result=\"" + results.result + "\" message=\"" + xmlEscape(results.message) + "\">"; + } else { + xml += " passed=\"" + results.passed + "\" failed=\"" + results.failed + "\" ignored=\"" + results.ignored + "\" total=\"" + results.total + "\">"; + for (var prop in results) { + if (l.hasOwnProperty(results, prop) && l.isObject(results[prop]) && !l.isArray(results[prop])){ + xml += serializeToXML(results[prop]); + } + } + } + + xml += "" + results.type + ">"; + + return xml; + } + + return "" + serializeToXML(results); + + }; + + + /** + * Returns test results formatted in JUnit XML format. + * @param {Object} result The results object created by TestRunner. + * @return {String} An XML-formatted string of results. + * @namespace YAHOO.tool.TestFormat + * @method JUnitXML + * @static + */ + YAHOO.tool.TestFormat.JUnitXML = function(results) { + + + function serializeToJUnitXML(results){ + var l = YAHOO.lang, + xml = "", + prop; + + switch (results.type){ + //equivalent to testcase in JUnit + case "test": + if (results.result != "ignore"){ + xml = "" + category.toUpperCase() + " " + text + "
Thanks for downloading the YUI Library of JavaScript and CSS components. The files you've downloaded contain all of the source code for YUI (in the /build
directory) as well as functional examples for each component. They also contain documentation in the form of API docs. PDF cheatsheets for most components are available as an external download.
/build
directory) or directly from Yahoo! servers. The YUI Loader Utility is a client-side loading package that can dynamically pull in YUI scripts as needed, whether from your servers or from ours.Along with the source code for YUI, your download includes 342 functional examples and tutorials that demonstrate each component in action. Use the list below or the menu at left to review these YUI demos — they're the best way to get oriented to what YUI can do and to grab sample code that can help you get started. Remember that these examples and more, in addition to user's guides for each YUI component, can also be found on the YUI website (external link). (Note: Almost all examples in this distribution will work if you are browsing them from your filesystem, but some examples included here do need to be deployed on a PHP-enabled http server to function properly; if you don't have access to such a setup, just check out those examples on our website to see how they work.)
+ +The YUI Project also includes the YUI Compressor, a safe and powerful server-side JavaScript/CSS minifier. We use YUI Compressor to pack the YUI Library's -min
files, and you can use it on your own files as well. Check out the YUI Compressor page on the YUI website.
Copyright © 2011 Yahoo! Inc. All rights reserved.
+Privacy Policy - + Terms of Service - + Copyright Policy - + Job Openings
+