From b6e3541e7c39744a41ece2f1e71422059efd3433 Mon Sep 17 00:00:00 2001 From: aschoenebeck Date: Wed, 16 Jan 2013 18:48:26 +0100 Subject: [PATCH 001/107] Added Indexed Database API (http://www.w3.org/TR/IndexedDB). --- src/Libraries/Web/Html/Data/IDBCursor.cs | 50 +++++++++ .../Web/Html/Data/IDBCursorWithValue.cs | 20 ++++ src/Libraries/Web/Html/Data/IDBDatabase.cs | 60 +++++++++++ src/Libraries/Web/Html/Data/IDBEvent.cs | 36 +++++++ src/Libraries/Web/Html/Data/IDBFactory.cs | 29 +++++ src/Libraries/Web/Html/Data/IDBIndex.cs | 78 ++++++++++++++ .../Web/Html/Data/IDBIndexParameters.cs | 29 +++++ src/Libraries/Web/Html/Data/IDBObjectStore.cs | 101 ++++++++++++++++++ .../Web/Html/Data/IDBObjectStoreParameters.cs | 30 ++++++ .../Web/Html/Data/IDBOpenDBRequest.cs | 21 ++++ src/Libraries/Web/Html/Data/IDBRequest.cs | 45 ++++++++ src/Libraries/Web/Html/Data/IDBTransaction.cs | 45 ++++++++ src/Libraries/Web/Html/Window.cs | 8 ++ src/Libraries/Web/Web.csproj | 12 +++ 14 files changed, 564 insertions(+) create mode 100644 src/Libraries/Web/Html/Data/IDBCursor.cs create mode 100644 src/Libraries/Web/Html/Data/IDBCursorWithValue.cs create mode 100644 src/Libraries/Web/Html/Data/IDBDatabase.cs create mode 100644 src/Libraries/Web/Html/Data/IDBEvent.cs create mode 100644 src/Libraries/Web/Html/Data/IDBFactory.cs create mode 100644 src/Libraries/Web/Html/Data/IDBIndex.cs create mode 100644 src/Libraries/Web/Html/Data/IDBIndexParameters.cs create mode 100644 src/Libraries/Web/Html/Data/IDBObjectStore.cs create mode 100644 src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs create mode 100644 src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs create mode 100644 src/Libraries/Web/Html/Data/IDBRequest.cs create mode 100644 src/Libraries/Web/Html/Data/IDBTransaction.cs diff --git a/src/Libraries/Web/Html/Data/IDBCursor.cs b/src/Libraries/Web/Html/Data/IDBCursor.cs new file mode 100644 index 000000000..541cf4ecb --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBCursor.cs @@ -0,0 +1,50 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBCursor { + + protected IDBCursor() { + } + + [ScriptField] + public object Source { + get { return null; } + } + + [ScriptField] + public string Direction { + get { return null; } + } + + [ScriptField] + public object Key { + get { return null; } + } + + [ScriptField] + public object PrimaryKey { + get { return null; } + } + + public IDBRequest Update(object value) { + return null; + } + + public void Advance(long count) { + } + + public void Continue() { + } + + public void Continue(object key) { + } + + public IDBRequest Delete(object value) { + return null; + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBCursorWithValue.cs b/src/Libraries/Web/Html/Data/IDBCursorWithValue.cs new file mode 100644 index 000000000..e28c50eb1 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBCursorWithValue.cs @@ -0,0 +1,20 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBCursorWithValue : IDBCursor { + + private IDBCursorWithValue() { + } + + [ScriptField] + public object Value { + get { + return null; + } + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs new file mode 100644 index 000000000..16d3b77e0 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -0,0 +1,60 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class IDBDatabase { + + private IDBDatabase() { + } + + [ScriptField] + public string Name { + get { return default(string); } + } + + [ScriptField] + public long Version { + get { return default(long); } + } + + [ScriptField] + public string[] ObjectStoreNames { + get { return default(string[]); } + } + + public IDBObjectStore CreateObjectStore(string name) { + return default(IDBObjectStore); + } + + public IDBObjectStore CreateObjectStore(string name, IDBObjectStoreParameters optionalParameters) { + return default(IDBObjectStore); + } + + public void DeleteObjectStore(string name) { + } + + public IDBTransaction Transaction(string[] storenames) { + return default(IDBTransaction); + } + + public IDBTransaction Transaction(string[] storenames, string mode) { + return default(IDBTransaction); + } + + public void Close() { + } + + public IDBDatabaseDelegate Onabort; + + public IDBDatabaseDelegate Onerror; + + public IDBDatabaseVersionChangeDelegate Onversionchange; + } + + public delegate void IDBDatabaseDelegate(IDBEvent e); + + public delegate void IDBDatabaseVersionChangeDelegate(IDBVersionChangeEvent e); +} diff --git a/src/Libraries/Web/Html/Data/IDBEvent.cs b/src/Libraries/Web/Html/Data/IDBEvent.cs new file mode 100644 index 000000000..b45e9c74a --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBEvent.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBEvent { + + [ScriptField] + public string Type { + get { return null; } + } + + [ScriptField] + public T Target { + get { return default(T); } + } + } + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBVersionChangeEvent : IDBEvent { + + [ScriptField] + public long OldVersion { + get { return default(long); } + } + + [ScriptField] + public long NewVersion { + get { return default(long); } + } + } + +} diff --git a/src/Libraries/Web/Html/Data/IDBFactory.cs b/src/Libraries/Web/Html/Data/IDBFactory.cs new file mode 100644 index 000000000..bd51291a1 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBFactory.cs @@ -0,0 +1,29 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class IDBFactory { + + private IDBFactory() { + } + + public IDBOpenDBRequest Open(string name) { + return null; + } + + public IDBOpenDBRequest Open(string name, long version) { + return null; + } + + public IDBOpenDBRequest DeleteDatabase(string name) { + return null; + } + + public short Cmp(object first, object last) { + return default(short); + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBIndex.cs b/src/Libraries/Web/Html/Data/IDBIndex.cs new file mode 100644 index 000000000..621b468a4 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBIndex.cs @@ -0,0 +1,78 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class IDBIndex { + + private IDBIndex() { + } + + [ScriptField] + public string Name { + get { return default(string); } + } + + [ScriptField] + public IDBObjectStore ObjectStore { + get { return default(IDBObjectStore); } + } + + [ScriptField] + public string KeyPath { + get { return default(string); } + } + + [ScriptField] + public bool MultiEntry { + get { return default(bool); } + } + + [ScriptField] + public bool Unique { + get { return default(bool); } + } + + public IDBRequest OpenCursor() { + return null; + } + + public IDBRequest OpenCursor(object range) { + return null; + } + + public IDBRequest OpenCursor(object range, string direction) { + return null; + } + + public IDBRequest OpenKeyCursor() { + return null; + } + + public IDBRequest OpenKeyCursor(object range) { + return null; + } + + public IDBRequest OpenKeyCursor(object range, string direction) { + return null; + } + + public IDBRequest Get(object key) { + return null; + } + + public IDBRequest GetKey(object key) { + return null; + } + + public IDBRequest Count() { + return null; + } + + public IDBRequest Count(object key) { + return null; + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBIndexParameters.cs b/src/Libraries/Web/Html/Data/IDBIndexParameters.cs new file mode 100644 index 000000000..486aca654 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBIndexParameters.cs @@ -0,0 +1,29 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + [ScriptName("Object")] + public sealed class IDBIndexParameters { + + [ScriptField] + public bool Unique { + get { + return false; + } + set { + } + } + + [ScriptField] + public bool MultiEntry { + get { + return false; + } + set { + } + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBObjectStore.cs b/src/Libraries/Web/Html/Data/IDBObjectStore.cs new file mode 100644 index 000000000..2efe920c7 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBObjectStore.cs @@ -0,0 +1,101 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class IDBObjectStore { + + private IDBObjectStore() { + } + + [ScriptField] + public string Name { + get { return default(string); } + } + + [ScriptField] + public string KeyPath { + get { return default(string); } + } + + [ScriptField] + public string[] IndexNames { + get { return default(string[]); } + } + + [ScriptField] + public IDBTransaction Transaction { + get { return default(IDBTransaction); } + } + + [ScriptField] + public bool AutoIncremenent { + get { return default(bool); } + } + + public IDBRequest Put(object value) { + return null; + } + + public IDBRequest Put(object value, object key) { + return null; + } + + public IDBRequest Add(object value) { + return null; + } + + public IDBRequest Add(object value, object key) { + return null; + } + + public IDBRequest Delete(object key) { + return null; + } + + public IDBRequest Get(object key) { + return null; + } + + public IDBRequest Clear() { + return null; + } + + public IDBRequest OpenCursor() { + return null; + } + + public IDBRequest OpenCursor(object range) { + return null; + } + + public IDBRequest OpenCursor(object range, string direction) { + return null; + } + + public IDBIndex CreateIndex(string name, object keyPath) { + return default(IDBIndex); + } + + public IDBIndex CreateIndex(string name, object keyPath, IDBIndexParameters optionalParameters) { + return default(IDBIndex); + } + + public IDBIndex Index(string name) { + return default(IDBIndex); + } + + public void DeleteIndex(string indexName) { + } + + public IDBRequest Count() { + return null; + } + + public IDBRequest Count(object key) { + return null; + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs b/src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs new file mode 100644 index 000000000..70d3b82c3 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs @@ -0,0 +1,30 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + [ScriptName("Object")] + public sealed class IDBObjectStoreParameters { + + [ScriptField] + public string KeyPath { + get { + return null; + } + set { + } + } + + [ScriptField] + public bool AutoIncrement { + get { + return false; + } + set { + } + } + } +} + diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs new file mode 100644 index 000000000..1dc143abe --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -0,0 +1,21 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBOpenDBRequest : IDBRequest { + + protected IDBOpenDBRequest() { + } + + public IDBOpenDBRequestDelegate Onblocked; + + public IDBOpenDBRequestVersionChangeDelegate Onupgradeneeded; + } + + public delegate void IDBOpenDBRequestDelegate(IDBEvent e); + + public delegate void IDBOpenDBRequestVersionChangeDelegate(IDBVersionChangeEvent e); +} diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs new file mode 100644 index 000000000..a935e8ad8 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -0,0 +1,45 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBRequest { + + protected IDBRequest() { + } + + [ScriptField] + public object Result { + get { return null; } + } + + [ScriptField] + public object Error { + get { return null; } + } + + [ScriptField] + public object Source { + get { return null; } + } + + [ScriptField] + public IDBTransaction Transaction { + get { return null; } + } + + [ScriptField] + public string ReadyState { + get { return null; } + } + + public IDBRequestDelegate Onsuccess; + + public IDBRequestDelegate Onerror; + } + + public delegate void IDBRequestDelegate(IDBEvent e); + +} diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs new file mode 100644 index 000000000..336b1b340 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -0,0 +1,45 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class IDBTransaction { + + private IDBTransaction() { + } + + [ScriptField] + public string Mode { + get { return null; } + } + + [ScriptField] + public IDBDatabase Db { + get { return null; } + } + + [ScriptField] + public object Error { + get { return null; } + } + + public IDBObjectStore ObjectStore(string name) { + return null; + } + + public void Abort() { + } + + public IDBTransactionDelegate Onabort; + + public IDBTransactionDelegate Oncomplete; + + public IDBTransactionDelegate Onerror; + + } + + public delegate void IDBTransactionDelegate(IDBEvent e); + +} diff --git a/src/Libraries/Web/Html/Window.cs b/src/Libraries/Web/Html/Window.cs index 6362d7af1..68d8730e2 100644 --- a/src/Libraries/Web/Html/Window.cs +++ b/src/Libraries/Web/Html/Window.cs @@ -410,6 +410,14 @@ public static SqlDatabase OpenDatabase(string name, string version, string displ return null; } + [ScriptField] + public static IDBFactory IndexedDB { + get { + return null; + } + } + + public static void PostMessage(string message, string targetOrigin) { } diff --git a/src/Libraries/Web/Web.csproj b/src/Libraries/Web/Web.csproj index 317cb4c29..818731f3e 100644 --- a/src/Libraries/Web/Web.csproj +++ b/src/Libraries/Web/Web.csproj @@ -48,6 +48,18 @@ + + + + + + + + + + + + From 6e4c21a336ccfafa5c791816c155c73916901fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Thu, 17 Jan 2013 16:20:25 +0100 Subject: [PATCH 002/107] Renamed IndexedDB API events --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 9 ++++++--- src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs | 6 ++++-- src/Libraries/Web/Html/Data/IDBRequest.cs | 6 ++++-- src/Libraries/Web/Html/Data/IDBTransaction.cs | 9 ++++++--- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs index 16d3b77e0..8d5fe4bcd 100644 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -47,11 +47,14 @@ public IDBTransaction Transaction(string[] storenames, string mode) { public void Close() { } - public IDBDatabaseDelegate Onabort; + [ScriptName("onabort")] + public IDBDatabaseDelegate OnAbort; - public IDBDatabaseDelegate Onerror; + [ScriptName("onerror")] + public IDBDatabaseDelegate OnError; - public IDBDatabaseVersionChangeDelegate Onversionchange; + [ScriptName("onversionchange")] + public IDBDatabaseVersionChangeDelegate OnVersionChange; } public delegate void IDBDatabaseDelegate(IDBEvent e); diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs index 1dc143abe..e73b982bb 100644 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -10,9 +10,11 @@ public class IDBOpenDBRequest : IDBRequest { protected IDBOpenDBRequest() { } - public IDBOpenDBRequestDelegate Onblocked; + [ScriptName("onblocked")] + public IDBOpenDBRequestDelegate OnBlocked; - public IDBOpenDBRequestVersionChangeDelegate Onupgradeneeded; + [ScriptName("onupgradeneeded")] + public IDBOpenDBRequestVersionChangeDelegate OnUpgradeNeeded; } public delegate void IDBOpenDBRequestDelegate(IDBEvent e); diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs index a935e8ad8..f83966287 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -35,9 +35,11 @@ public string ReadyState { get { return null; } } - public IDBRequestDelegate Onsuccess; + [ScriptName("onsuccess")] + public IDBRequestDelegate OnSuccess; - public IDBRequestDelegate Onerror; + [ScriptName("onerror")] + public IDBRequestDelegate OnError; } public delegate void IDBRequestDelegate(IDBEvent e); diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs index 336b1b340..c00f6902c 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -32,11 +32,14 @@ public IDBObjectStore ObjectStore(string name) { public void Abort() { } - public IDBTransactionDelegate Onabort; + [ScriptName("onabort")] + public IDBTransactionDelegate OnAbort; - public IDBTransactionDelegate Oncomplete; + [ScriptName("oncomplete")] + public IDBTransactionDelegate OnComplete; - public IDBTransactionDelegate Onerror; + [ScriptName("onerror")] + public IDBTransactionDelegate OnError; } From 443347f84904f9be24abc8dc5eab3966d320ae00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Thu, 17 Jan 2013 17:33:22 +0100 Subject: [PATCH 003/107] Script Attributes on IndexedDB API delegates --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 5 +++++ src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs | 4 ++++ src/Libraries/Web/Html/Data/IDBRequest.cs | 2 ++ 3 files changed, 11 insertions(+) diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs index 8d5fe4bcd..de319c5f8 100644 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -57,7 +57,12 @@ public void Close() { public IDBDatabaseVersionChangeDelegate OnVersionChange; } + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBDatabaseDelegate(IDBEvent e); + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBDatabaseVersionChangeDelegate(IDBVersionChangeEvent e); + } diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs index e73b982bb..1e9035ae2 100644 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -17,7 +17,11 @@ protected IDBOpenDBRequest() { public IDBOpenDBRequestVersionChangeDelegate OnUpgradeNeeded; } + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBOpenDBRequestDelegate(IDBEvent e); + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBOpenDBRequestVersionChangeDelegate(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs index f83966287..752fe4229 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -42,6 +42,8 @@ public string ReadyState { public IDBRequestDelegate OnError; } + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBRequestDelegate(IDBEvent e); } From 605fb58a6d1f9c6660b315a97d2a08c4a9a989f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Thu, 17 Jan 2013 17:50:43 +0100 Subject: [PATCH 004/107] More Script Attributes on IndexedDB API delegates --- src/Libraries/Web/Html/Data/IDBTransaction.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs index c00f6902c..98bd891ef 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -43,6 +43,8 @@ public void Abort() { } + [ScriptIgnoreNamespace] + [ScriptImport] public delegate void IDBTransactionDelegate(IDBEvent e); } From c70faaf0a4003c0dd620e0b9b50347cfb6b17571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Fri, 18 Jan 2013 00:41:20 +0100 Subject: [PATCH 005/107] Using event registration for IndexedDB API callbacks --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 34 +++++++++++++----- .../Web/Html/Data/IDBOpenDBRequest.cs | 23 ++++++++---- src/Libraries/Web/Html/Data/IDBRequest.cs | 23 ++++++++---- src/Libraries/Web/Html/Data/IDBTransaction.cs | 36 +++++++++++++------ 4 files changed, 85 insertions(+), 31 deletions(-) diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs index de319c5f8..fbe84d35f 100644 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -35,7 +35,7 @@ public IDBObjectStore CreateObjectStore(string name, IDBObjectStoreParameters op public void DeleteObjectStore(string name) { } - + public IDBTransaction Transaction(string[] storenames) { return default(IDBTransaction); } @@ -47,22 +47,38 @@ public IDBTransaction Transaction(string[] storenames, string mode) { public void Close() { } - [ScriptName("onabort")] - public IDBDatabaseDelegate OnAbort; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBDatabaseCallback Abort { + add { + } + remove { + } + } - [ScriptName("onerror")] - public IDBDatabaseDelegate OnError; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBDatabaseCallback Error { + add { + } + remove { + } + } - [ScriptName("onversionchange")] - public IDBDatabaseVersionChangeDelegate OnVersionChange; + [ScriptEvent("addEventListener", "removeEventListener")] + [ScriptName("versionchange")] + public event IDBDatabaseVersionChangeCallback VersionChange { + add { + } + remove { + } + } } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseDelegate(IDBEvent e); + public delegate void IDBDatabaseCallback(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseVersionChangeDelegate(IDBVersionChangeEvent e); + public delegate void IDBDatabaseVersionChangeCallback(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs index 1e9035ae2..bab7e8191 100644 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -10,18 +10,29 @@ public class IDBOpenDBRequest : IDBRequest { protected IDBOpenDBRequest() { } - [ScriptName("onblocked")] - public IDBOpenDBRequestDelegate OnBlocked; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBOpenDBRequestCallback Blocked { + add { + } + remove { + } + } - [ScriptName("onupgradeneeded")] - public IDBOpenDBRequestVersionChangeDelegate OnUpgradeNeeded; + [ScriptEvent("addEventListener", "removeEventListener")] + [ScriptName("upgradeneeded")] + public event IDBOpenDBRequestVersionChangeCallback UpgradeNeeded { + add { + } + remove { + } + } } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestDelegate(IDBEvent e); + public delegate void IDBOpenDBRequestCallback(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestVersionChangeDelegate(IDBVersionChangeEvent e); + public delegate void IDBOpenDBRequestVersionChangeCallback(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs index 752fe4229..958f31e91 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -16,7 +16,8 @@ public object Result { } [ScriptField] - public object Error { + [ScriptName("error")] + public object ErrorObject { get { return null; } } @@ -35,15 +36,25 @@ public string ReadyState { get { return null; } } - [ScriptName("onsuccess")] - public IDBRequestDelegate OnSuccess; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBRequestCallback Success { + add { + } + remove { + } + } - [ScriptName("onerror")] - public IDBRequestDelegate OnError; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBRequestCallback Error { + add { + } + remove { + } + } } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBRequestDelegate(IDBEvent e); + public delegate void IDBRequestCallback(IDBEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs index 98bd891ef..7bd21b1e1 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -21,7 +21,8 @@ public IDBDatabase Db { } [ScriptField] - public object Error { + [ScriptName("error")] + public object ErrorObject { get { return null; } } @@ -29,22 +30,37 @@ public IDBObjectStore ObjectStore(string name) { return null; } - public void Abort() { + [ScriptName("abort")] + public void AbortTransaction() { } - [ScriptName("onabort")] - public IDBTransactionDelegate OnAbort; - - [ScriptName("oncomplete")] - public IDBTransactionDelegate OnComplete; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBTransactionCallback Abort{ + add { + } + remove { + } + } - [ScriptName("onerror")] - public IDBTransactionDelegate OnError; + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBTransactionCallback Complete { + add { + } + remove { + } + } + [ScriptEvent("addEventListener", "removeEventListener")] + public event IDBTransactionCallback Error { + add { + } + remove { + } + } } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBTransactionDelegate(IDBEvent e); + public delegate void IDBTransactionCallback(IDBEvent e); } From 5364bf01c3c8d89487cfd40672e94511c53ed548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Fri, 18 Jan 2013 11:04:42 +0100 Subject: [PATCH 006/107] Revert "Using event registration for IndexedDB API callbacks" This reverts commit c70faaf0a4003c0dd620e0b9b50347cfb6b17571. --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 34 +++++------------- .../Web/Html/Data/IDBOpenDBRequest.cs | 23 ++++-------- src/Libraries/Web/Html/Data/IDBRequest.cs | 23 ++++-------- src/Libraries/Web/Html/Data/IDBTransaction.cs | 36 ++++++------------- 4 files changed, 31 insertions(+), 85 deletions(-) diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs index fbe84d35f..de319c5f8 100644 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -35,7 +35,7 @@ public IDBObjectStore CreateObjectStore(string name, IDBObjectStoreParameters op public void DeleteObjectStore(string name) { } - + public IDBTransaction Transaction(string[] storenames) { return default(IDBTransaction); } @@ -47,38 +47,22 @@ public IDBTransaction Transaction(string[] storenames, string mode) { public void Close() { } - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBDatabaseCallback Abort { - add { - } - remove { - } - } + [ScriptName("onabort")] + public IDBDatabaseDelegate OnAbort; - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBDatabaseCallback Error { - add { - } - remove { - } - } + [ScriptName("onerror")] + public IDBDatabaseDelegate OnError; - [ScriptEvent("addEventListener", "removeEventListener")] - [ScriptName("versionchange")] - public event IDBDatabaseVersionChangeCallback VersionChange { - add { - } - remove { - } - } + [ScriptName("onversionchange")] + public IDBDatabaseVersionChangeDelegate OnVersionChange; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseCallback(IDBEvent e); + public delegate void IDBDatabaseDelegate(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseVersionChangeCallback(IDBVersionChangeEvent e); + public delegate void IDBDatabaseVersionChangeDelegate(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs index bab7e8191..1e9035ae2 100644 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -10,29 +10,18 @@ public class IDBOpenDBRequest : IDBRequest { protected IDBOpenDBRequest() { } - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBOpenDBRequestCallback Blocked { - add { - } - remove { - } - } + [ScriptName("onblocked")] + public IDBOpenDBRequestDelegate OnBlocked; - [ScriptEvent("addEventListener", "removeEventListener")] - [ScriptName("upgradeneeded")] - public event IDBOpenDBRequestVersionChangeCallback UpgradeNeeded { - add { - } - remove { - } - } + [ScriptName("onupgradeneeded")] + public IDBOpenDBRequestVersionChangeDelegate OnUpgradeNeeded; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestCallback(IDBEvent e); + public delegate void IDBOpenDBRequestDelegate(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestVersionChangeCallback(IDBVersionChangeEvent e); + public delegate void IDBOpenDBRequestVersionChangeDelegate(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs index 958f31e91..752fe4229 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -16,8 +16,7 @@ public object Result { } [ScriptField] - [ScriptName("error")] - public object ErrorObject { + public object Error { get { return null; } } @@ -36,25 +35,15 @@ public string ReadyState { get { return null; } } - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBRequestCallback Success { - add { - } - remove { - } - } + [ScriptName("onsuccess")] + public IDBRequestDelegate OnSuccess; - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBRequestCallback Error { - add { - } - remove { - } - } + [ScriptName("onerror")] + public IDBRequestDelegate OnError; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBRequestCallback(IDBEvent e); + public delegate void IDBRequestDelegate(IDBEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs index 7bd21b1e1..98bd891ef 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -21,8 +21,7 @@ public IDBDatabase Db { } [ScriptField] - [ScriptName("error")] - public object ErrorObject { + public object Error { get { return null; } } @@ -30,37 +29,22 @@ public IDBObjectStore ObjectStore(string name) { return null; } - [ScriptName("abort")] - public void AbortTransaction() { + public void Abort() { } - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBTransactionCallback Abort{ - add { - } - remove { - } - } + [ScriptName("onabort")] + public IDBTransactionDelegate OnAbort; - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBTransactionCallback Complete { - add { - } - remove { - } - } + [ScriptName("oncomplete")] + public IDBTransactionDelegate OnComplete; + + [ScriptName("onerror")] + public IDBTransactionDelegate OnError; - [ScriptEvent("addEventListener", "removeEventListener")] - public event IDBTransactionCallback Error { - add { - } - remove { - } - } } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBTransactionCallback(IDBEvent e); + public delegate void IDBTransactionDelegate(IDBEvent e); } From c9f43f6d36bebfcbaa38ac2b36b22ad29826fb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Fri, 18 Jan 2013 11:36:09 +0100 Subject: [PATCH 007/107] Reimplemented event registration for IndexedDB API callbacks The IndexedDB API specifies two methods for event registration on its interfaces. Direct callback funtions and the EventTarget scheme. To make the interface as standards conformant as possible, I derive classes providing callbacks from IDBEventTarget base class (proviedes add-/removeEventListener) and provide fields for direct callback functions. --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 12 ++++----- src/Libraries/Web/Html/Data/IDBEventTarget.cs | 26 +++++++++++++++++++ .../Web/Html/Data/IDBOpenDBRequest.cs | 8 +++--- src/Libraries/Web/Html/Data/IDBRequest.cs | 8 +++--- src/Libraries/Web/Html/Data/IDBTransaction.cs | 10 +++---- src/Libraries/Web/Web.csproj | 1 + 6 files changed, 46 insertions(+), 19 deletions(-) create mode 100644 src/Libraries/Web/Html/Data/IDBEventTarget.cs diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs index de319c5f8..0326b96ab 100644 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IDBDatabase.cs @@ -5,7 +5,7 @@ namespace System.Html.Data { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBDatabase { + public sealed class IDBDatabase : IDBEventTarget { private IDBDatabase() { } @@ -48,21 +48,21 @@ public void Close() { } [ScriptName("onabort")] - public IDBDatabaseDelegate OnAbort; + public IDBDatabaseCallback OnAbort; [ScriptName("onerror")] - public IDBDatabaseDelegate OnError; + public IDBDatabaseCallback OnError; [ScriptName("onversionchange")] - public IDBDatabaseVersionChangeDelegate OnVersionChange; + public IDBDatabaseVersionChangeCallback OnVersionChange; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseDelegate(IDBEvent e); + public delegate void IDBDatabaseCallback(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBDatabaseVersionChangeDelegate(IDBVersionChangeEvent e); + public delegate void IDBDatabaseVersionChangeCallback(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBEventTarget.cs b/src/Libraries/Web/Html/Data/IDBEventTarget.cs new file mode 100644 index 000000000..d52808d01 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IDBEventTarget.cs @@ -0,0 +1,26 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class IDBEventTarget { + + public void AddEventListener(string type, Action listener) { + } + + public void AddEventListener(string type, Action listener, bool useCapture) { + } + + public void RemoveEventListener(string type, Action listener) { + } + + public void RemoveEventListener(string type, Action listener, bool useCapture) { + } + + public bool DispatchEvent(IDBEvent e) { + return false; + } + } +} diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs index 1e9035ae2..5b8a3b0a8 100644 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs @@ -11,17 +11,17 @@ protected IDBOpenDBRequest() { } [ScriptName("onblocked")] - public IDBOpenDBRequestDelegate OnBlocked; + public IDBOpenDBRequestCallback OnBlocked; [ScriptName("onupgradeneeded")] - public IDBOpenDBRequestVersionChangeDelegate OnUpgradeNeeded; + public IDBOpenDBRequestVersionChangeCallback OnUpgradeNeeded; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestDelegate(IDBEvent e); + public delegate void IDBOpenDBRequestCallback(IDBEvent e); [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBOpenDBRequestVersionChangeDelegate(IDBVersionChangeEvent e); + public delegate void IDBOpenDBRequestVersionChangeCallback(IDBVersionChangeEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IDBRequest.cs index 752fe4229..63e3c848f 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IDBRequest.cs @@ -5,7 +5,7 @@ namespace System.Html.Data { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBRequest { + public class IDBRequest : IDBEventTarget { protected IDBRequest() { } @@ -36,14 +36,14 @@ public string ReadyState { } [ScriptName("onsuccess")] - public IDBRequestDelegate OnSuccess; + public IDBRequestCallback OnSuccess; [ScriptName("onerror")] - public IDBRequestDelegate OnError; + public IDBRequestCallback OnError; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBRequestDelegate(IDBEvent e); + public delegate void IDBRequestCallback(IDBEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IDBTransaction.cs index 98bd891ef..0c0b1b6ce 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IDBTransaction.cs @@ -5,7 +5,7 @@ namespace System.Html.Data { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBTransaction { + public sealed class IDBTransaction : IDBEventTarget { private IDBTransaction() { } @@ -33,18 +33,18 @@ public void Abort() { } [ScriptName("onabort")] - public IDBTransactionDelegate OnAbort; + public IDBTransactionCallback OnAbort; [ScriptName("oncomplete")] - public IDBTransactionDelegate OnComplete; + public IDBTransactionCallback OnComplete; [ScriptName("onerror")] - public IDBTransactionDelegate OnError; + public IDBTransactionCallback OnError; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBTransactionDelegate(IDBEvent e); + public delegate void IDBTransactionCallback(IDBEvent e); } diff --git a/src/Libraries/Web/Web.csproj b/src/Libraries/Web/Web.csproj index 818731f3e..d8370bcb2 100644 --- a/src/Libraries/Web/Web.csproj +++ b/src/Libraries/Web/Web.csproj @@ -52,6 +52,7 @@ + From c02333e7155ae628fcffce6a4f1663e565049bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=B6nebeck?= Date: Sat, 19 Jan 2013 01:44:11 +0100 Subject: [PATCH 008/107] Classes renamed and IndexedDB API namespace --- src/Libraries/Web/Html/Data/IDBDatabase.cs | 68 ------------------- .../Web/Html/Data/IDBOpenDBRequest.cs | 27 -------- .../{IDBCursor.cs => IndexedDB/DBCursor.cs} | 10 +-- .../DBCursorWithValue.cs} | 6 +- .../Web/Html/Data/IndexedDB/DBDatabase.cs | 68 +++++++++++++++++++ .../{IDBEvent.cs => IndexedDB/DBEvent.cs} | 6 +- .../DBEventTarget.cs} | 6 +- .../{IDBFactory.cs => IndexedDB/DBFactory.cs} | 12 ++-- .../{IDBIndex.cs => IndexedDB/DBIndex.cs} | 30 ++++---- .../DBIndexParameters.cs} | 4 +- .../DBObjectStore.cs} | 46 ++++++------- .../DBObjectStoreParameters.cs} | 4 +- .../Html/Data/IndexedDB/DBOpenDBRequest.cs | 27 ++++++++ .../{IDBRequest.cs => IndexedDB/DBRequest.cs} | 14 ++-- .../DBTransaction.cs} | 18 ++--- src/Libraries/Web/Html/Window.cs | 3 +- src/Libraries/Web/Web.csproj | 26 +++---- 17 files changed, 188 insertions(+), 187 deletions(-) delete mode 100644 src/Libraries/Web/Html/Data/IDBDatabase.cs delete mode 100644 src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs rename src/Libraries/Web/Html/Data/{IDBCursor.cs => IndexedDB/DBCursor.cs} (79%) rename src/Libraries/Web/Html/Data/{IDBCursorWithValue.cs => IndexedDB/DBCursorWithValue.cs} (66%) create mode 100644 src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs rename src/Libraries/Web/Html/Data/{IDBEvent.cs => IndexedDB/DBEvent.cs} (82%) rename src/Libraries/Web/Html/Data/{IDBEventTarget.cs => IndexedDB/DBEventTarget.cs} (81%) rename src/Libraries/Web/Html/Data/{IDBFactory.cs => IndexedDB/DBFactory.cs} (54%) rename src/Libraries/Web/Html/Data/{IDBIndex.cs => IndexedDB/DBIndex.cs} (57%) rename src/Libraries/Web/Html/Data/{IDBIndexParameters.cs => IndexedDB/DBIndexParameters.cs} (84%) rename src/Libraries/Web/Html/Data/{IDBObjectStore.cs => IndexedDB/DBObjectStore.cs} (50%) rename src/Libraries/Web/Html/Data/{IDBObjectStoreParameters.cs => IndexedDB/DBObjectStoreParameters.cs} (83%) create mode 100644 src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs rename src/Libraries/Web/Html/Data/{IDBRequest.cs => IndexedDB/DBRequest.cs} (69%) rename src/Libraries/Web/Html/Data/{IDBTransaction.cs => IndexedDB/DBTransaction.cs} (58%) diff --git a/src/Libraries/Web/Html/Data/IDBDatabase.cs b/src/Libraries/Web/Html/Data/IDBDatabase.cs deleted file mode 100644 index 0326b96ab..000000000 --- a/src/Libraries/Web/Html/Data/IDBDatabase.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace System.Html.Data { - - [ScriptIgnoreNamespace] - [ScriptImport] - public sealed class IDBDatabase : IDBEventTarget { - - private IDBDatabase() { - } - - [ScriptField] - public string Name { - get { return default(string); } - } - - [ScriptField] - public long Version { - get { return default(long); } - } - - [ScriptField] - public string[] ObjectStoreNames { - get { return default(string[]); } - } - - public IDBObjectStore CreateObjectStore(string name) { - return default(IDBObjectStore); - } - - public IDBObjectStore CreateObjectStore(string name, IDBObjectStoreParameters optionalParameters) { - return default(IDBObjectStore); - } - - public void DeleteObjectStore(string name) { - } - - public IDBTransaction Transaction(string[] storenames) { - return default(IDBTransaction); - } - - public IDBTransaction Transaction(string[] storenames, string mode) { - return default(IDBTransaction); - } - - public void Close() { - } - - [ScriptName("onabort")] - public IDBDatabaseCallback OnAbort; - - [ScriptName("onerror")] - public IDBDatabaseCallback OnError; - - [ScriptName("onversionchange")] - public IDBDatabaseVersionChangeCallback OnVersionChange; - } - - [ScriptIgnoreNamespace] - [ScriptImport] - public delegate void IDBDatabaseCallback(IDBEvent e); - - [ScriptIgnoreNamespace] - [ScriptImport] - public delegate void IDBDatabaseVersionChangeCallback(IDBVersionChangeEvent e); - -} diff --git a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs deleted file mode 100644 index 5b8a3b0a8..000000000 --- a/src/Libraries/Web/Html/Data/IDBOpenDBRequest.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace System.Html.Data { - - [ScriptIgnoreNamespace] - [ScriptImport] - public class IDBOpenDBRequest : IDBRequest { - - protected IDBOpenDBRequest() { - } - - [ScriptName("onblocked")] - public IDBOpenDBRequestCallback OnBlocked; - - [ScriptName("onupgradeneeded")] - public IDBOpenDBRequestVersionChangeCallback OnUpgradeNeeded; - } - - [ScriptIgnoreNamespace] - [ScriptImport] - public delegate void IDBOpenDBRequestCallback(IDBEvent e); - - [ScriptIgnoreNamespace] - [ScriptImport] - public delegate void IDBOpenDBRequestVersionChangeCallback(IDBVersionChangeEvent e); -} diff --git a/src/Libraries/Web/Html/Data/IDBCursor.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs similarity index 79% rename from src/Libraries/Web/Html/Data/IDBCursor.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs index 541cf4ecb..fd36fc4f4 100644 --- a/src/Libraries/Web/Html/Data/IDBCursor.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBCursor { + public class DBCursor { - protected IDBCursor() { + protected DBCursor() { } [ScriptField] @@ -30,7 +30,7 @@ public object PrimaryKey { get { return null; } } - public IDBRequest Update(object value) { + public DBRequest Update(object value) { return null; } @@ -43,7 +43,7 @@ public void Continue() { public void Continue(object key) { } - public IDBRequest Delete(object value) { + public DBRequest Delete(object value) { return null; } } diff --git a/src/Libraries/Web/Html/Data/IDBCursorWithValue.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs similarity index 66% rename from src/Libraries/Web/Html/Data/IDBCursorWithValue.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs index e28c50eb1..ddac8e28e 100644 --- a/src/Libraries/Web/Html/Data/IDBCursorWithValue.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBCursorWithValue : IDBCursor { + public class DBCursorWithValue : DBCursor { - private IDBCursorWithValue() { + private DBCursorWithValue() { } [ScriptField] diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs new file mode 100644 index 000000000..e4c86b936 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs @@ -0,0 +1,68 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data.IndexedDB { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class DBDatabase : DBEventTarget { + + private DBDatabase() { + } + + [ScriptField] + public string Name { + get { return default(string); } + } + + [ScriptField] + public long Version { + get { return default(long); } + } + + [ScriptField] + public string[] ObjectStoreNames { + get { return default(string[]); } + } + + public DBObjectStore CreateObjectStore(string name) { + return default(DBObjectStore); + } + + public DBObjectStore CreateObjectStore(string name, DBObjectStoreParameters optionalParameters) { + return default(DBObjectStore); + } + + public void DeleteObjectStore(string name) { + } + + public DBTransaction Transaction(string[] storenames) { + return default(DBTransaction); + } + + public DBTransaction Transaction(string[] storenames, string mode) { + return default(DBTransaction); + } + + public void Close() { + } + + [ScriptName("onabort")] + public DBDatabaseCallback OnAbort; + + [ScriptName("onerror")] + public DBDatabaseCallback OnError; + + [ScriptName("onversionchange")] + public DBDatabaseVersionChangeCallback OnVersionChange; + } + + [ScriptIgnoreNamespace] + [ScriptImport] + public delegate void DBDatabaseCallback(DBEvent e); + + [ScriptIgnoreNamespace] + [ScriptImport] + public delegate void DBDatabaseVersionChangeCallback(DBVersionChangeEvent e); + +} diff --git a/src/Libraries/Web/Html/Data/IDBEvent.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs similarity index 82% rename from src/Libraries/Web/Html/Data/IDBEvent.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs index b45e9c74a..080bd8ad7 100644 --- a/src/Libraries/Web/Html/Data/IDBEvent.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs @@ -1,11 +1,11 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBEvent { + public class DBEvent { [ScriptField] public string Type { @@ -20,7 +20,7 @@ public T Target { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBVersionChangeEvent : IDBEvent { + public class DBVersionChangeEvent : DBEvent { [ScriptField] public long OldVersion { diff --git a/src/Libraries/Web/Html/Data/IDBEventTarget.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs similarity index 81% rename from src/Libraries/Web/Html/Data/IDBEventTarget.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs index d52808d01..c9c7dd3a3 100644 --- a/src/Libraries/Web/Html/Data/IDBEventTarget.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs @@ -1,11 +1,11 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBEventTarget { + public class DBEventTarget { public void AddEventListener(string type, Action listener) { } @@ -19,7 +19,7 @@ public void RemoveEventListener(string type, Action listener) { public void RemoveEventListener(string type, Action listener, bool useCapture) { } - public bool DispatchEvent(IDBEvent e) { + public bool DispatchEvent(DBEvent e) { return false; } } diff --git a/src/Libraries/Web/Html/Data/IDBFactory.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs similarity index 54% rename from src/Libraries/Web/Html/Data/IDBFactory.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs index bd51291a1..dd6b2be3a 100644 --- a/src/Libraries/Web/Html/Data/IDBFactory.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs @@ -1,24 +1,24 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBFactory { + public sealed class DBFactory { - private IDBFactory() { + private DBFactory() { } - public IDBOpenDBRequest Open(string name) { + public DBOpenDBRequest Open(string name) { return null; } - public IDBOpenDBRequest Open(string name, long version) { + public DBOpenDBRequest Open(string name, long version) { return null; } - public IDBOpenDBRequest DeleteDatabase(string name) { + public DBOpenDBRequest DeleteDatabase(string name) { return null; } diff --git a/src/Libraries/Web/Html/Data/IDBIndex.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs similarity index 57% rename from src/Libraries/Web/Html/Data/IDBIndex.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs index 621b468a4..12b384559 100644 --- a/src/Libraries/Web/Html/Data/IDBIndex.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBIndex { + public sealed class DBIndex { - private IDBIndex() { + private DBIndex() { } [ScriptField] @@ -16,8 +16,8 @@ public string Name { } [ScriptField] - public IDBObjectStore ObjectStore { - get { return default(IDBObjectStore); } + public DBObjectStore ObjectStore { + get { return default(DBObjectStore); } } [ScriptField] @@ -35,43 +35,43 @@ public bool Unique { get { return default(bool); } } - public IDBRequest OpenCursor() { + public DBRequest OpenCursor() { return null; } - public IDBRequest OpenCursor(object range) { + public DBRequest OpenCursor(object range) { return null; } - public IDBRequest OpenCursor(object range, string direction) { + public DBRequest OpenCursor(object range, string direction) { return null; } - public IDBRequest OpenKeyCursor() { + public DBRequest OpenKeyCursor() { return null; } - public IDBRequest OpenKeyCursor(object range) { + public DBRequest OpenKeyCursor(object range) { return null; } - public IDBRequest OpenKeyCursor(object range, string direction) { + public DBRequest OpenKeyCursor(object range, string direction) { return null; } - public IDBRequest Get(object key) { + public DBRequest Get(object key) { return null; } - public IDBRequest GetKey(object key) { + public DBRequest GetKey(object key) { return null; } - public IDBRequest Count() { + public DBRequest Count() { return null; } - public IDBRequest Count(object key) { + public DBRequest Count(object key) { return null; } } diff --git a/src/Libraries/Web/Html/Data/IDBIndexParameters.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs similarity index 84% rename from src/Libraries/Web/Html/Data/IDBIndexParameters.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs index 486aca654..28b522594 100644 --- a/src/Libraries/Web/Html/Data/IDBIndexParameters.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs @@ -1,12 +1,12 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] [ScriptName("Object")] - public sealed class IDBIndexParameters { + public sealed class DBIndexParameters { [ScriptField] public bool Unique { diff --git a/src/Libraries/Web/Html/Data/IDBObjectStore.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs similarity index 50% rename from src/Libraries/Web/Html/Data/IDBObjectStore.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs index 2efe920c7..2ba5ec0a0 100644 --- a/src/Libraries/Web/Html/Data/IDBObjectStore.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBObjectStore { + public sealed class DBObjectStore { - private IDBObjectStore() { + private DBObjectStore() { } [ScriptField] @@ -26,8 +26,8 @@ public string[] IndexNames { } [ScriptField] - public IDBTransaction Transaction { - get { return default(IDBTransaction); } + public DBTransaction Transaction { + get { return default(DBTransaction); } } [ScriptField] @@ -35,66 +35,66 @@ public bool AutoIncremenent { get { return default(bool); } } - public IDBRequest Put(object value) { + public DBRequest Put(object value) { return null; } - public IDBRequest Put(object value, object key) { + public DBRequest Put(object value, object key) { return null; } - public IDBRequest Add(object value) { + public DBRequest Add(object value) { return null; } - public IDBRequest Add(object value, object key) { + public DBRequest Add(object value, object key) { return null; } - public IDBRequest Delete(object key) { + public DBRequest Delete(object key) { return null; } - public IDBRequest Get(object key) { + public DBRequest Get(object key) { return null; } - public IDBRequest Clear() { + public DBRequest Clear() { return null; } - public IDBRequest OpenCursor() { + public DBRequest OpenCursor() { return null; } - public IDBRequest OpenCursor(object range) { + public DBRequest OpenCursor(object range) { return null; } - public IDBRequest OpenCursor(object range, string direction) { + public DBRequest OpenCursor(object range, string direction) { return null; } - public IDBIndex CreateIndex(string name, object keyPath) { - return default(IDBIndex); + public DBIndex CreateIndex(string name, object keyPath) { + return default(DBIndex); } - public IDBIndex CreateIndex(string name, object keyPath, IDBIndexParameters optionalParameters) { - return default(IDBIndex); + public DBIndex CreateIndex(string name, object keyPath, DBIndexParameters optionalParameters) { + return default(DBIndex); } - public IDBIndex Index(string name) { - return default(IDBIndex); + public DBIndex Index(string name) { + return default(DBIndex); } public void DeleteIndex(string indexName) { } - public IDBRequest Count() { + public DBRequest Count() { return null; } - public IDBRequest Count(object key) { + public DBRequest Count(object key) { return null; } } diff --git a/src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs similarity index 83% rename from src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs index 70d3b82c3..e7f8150ec 100644 --- a/src/Libraries/Web/Html/Data/IDBObjectStoreParameters.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs @@ -1,12 +1,12 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] [ScriptName("Object")] - public sealed class IDBObjectStoreParameters { + public sealed class DBObjectStoreParameters { [ScriptField] public string KeyPath { diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs new file mode 100644 index 000000000..413c343a8 --- /dev/null +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs @@ -0,0 +1,27 @@ +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data.IndexedDB { + + [ScriptIgnoreNamespace] + [ScriptImport] + public class DBOpenDBRequest : DBRequest { + + protected DBOpenDBRequest() { + } + + [ScriptName("onblocked")] + public DBOpenDBRequestCallback OnBlocked; + + [ScriptName("onupgradeneeded")] + public DBOpenDBRequestVersionChangeCallback OnUpgradeNeeded; + } + + [ScriptIgnoreNamespace] + [ScriptImport] + public delegate void DBOpenDBRequestCallback(DBEvent e); + + [ScriptIgnoreNamespace] + [ScriptImport] + public delegate void DBOpenDBRequestVersionChangeCallback(DBVersionChangeEvent e); +} diff --git a/src/Libraries/Web/Html/Data/IDBRequest.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs similarity index 69% rename from src/Libraries/Web/Html/Data/IDBRequest.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs index 63e3c848f..9e38e48f4 100644 --- a/src/Libraries/Web/Html/Data/IDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class IDBRequest : IDBEventTarget { + public class DBRequest : DBEventTarget { - protected IDBRequest() { + protected DBRequest() { } [ScriptField] @@ -26,7 +26,7 @@ public object Source { } [ScriptField] - public IDBTransaction Transaction { + public DBTransaction Transaction { get { return null; } } @@ -36,14 +36,14 @@ public string ReadyState { } [ScriptName("onsuccess")] - public IDBRequestCallback OnSuccess; + public DBRequestCallback OnSuccess; [ScriptName("onerror")] - public IDBRequestCallback OnError; + public DBRequestCallback OnError; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBRequestCallback(IDBEvent e); + public delegate void DBRequestCallback(DBEvent e); } diff --git a/src/Libraries/Web/Html/Data/IDBTransaction.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs similarity index 58% rename from src/Libraries/Web/Html/Data/IDBTransaction.cs rename to src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs index 0c0b1b6ce..a5ec3c5c4 100644 --- a/src/Libraries/Web/Html/Data/IDBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs @@ -1,13 +1,13 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { +namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public sealed class IDBTransaction : IDBEventTarget { + public sealed class DBTransaction : DBEventTarget { - private IDBTransaction() { + private DBTransaction() { } [ScriptField] @@ -16,7 +16,7 @@ public string Mode { } [ScriptField] - public IDBDatabase Db { + public DBDatabase Db { get { return null; } } @@ -25,7 +25,7 @@ public object Error { get { return null; } } - public IDBObjectStore ObjectStore(string name) { + public DBObjectStore ObjectStore(string name) { return null; } @@ -33,18 +33,18 @@ public void Abort() { } [ScriptName("onabort")] - public IDBTransactionCallback OnAbort; + public DBTransactionCallback OnAbort; [ScriptName("oncomplete")] - public IDBTransactionCallback OnComplete; + public DBTransactionCallback OnComplete; [ScriptName("onerror")] - public IDBTransactionCallback OnError; + public DBTransactionCallback OnError; } [ScriptIgnoreNamespace] [ScriptImport] - public delegate void IDBTransactionCallback(IDBEvent e); + public delegate void DBTransactionCallback(DBEvent e); } diff --git a/src/Libraries/Web/Html/Window.cs b/src/Libraries/Web/Html/Window.cs index 68d8730e2..f5802fbe1 100644 --- a/src/Libraries/Web/Html/Window.cs +++ b/src/Libraries/Web/Html/Window.cs @@ -5,6 +5,7 @@ using System; using System.Html.Data; +using System.Html.Data.IndexedDB; using System.Runtime.CompilerServices; namespace System.Html { @@ -411,7 +412,7 @@ public static SqlDatabase OpenDatabase(string name, string version, string displ } [ScriptField] - public static IDBFactory IndexedDB { + public static DBFactory IndexedDB { get { return null; } diff --git a/src/Libraries/Web/Web.csproj b/src/Libraries/Web/Web.csproj index d8370bcb2..ce9c4cfe0 100644 --- a/src/Libraries/Web/Web.csproj +++ b/src/Libraries/Web/Web.csproj @@ -48,19 +48,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + From d798382080f1b37cdc648ab06b6f6c43f2387ea8 Mon Sep 17 00:00:00 2001 From: andekande Date: Wed, 23 Jan 2013 12:06:42 +0100 Subject: [PATCH 009/107] fixed parseDate and parseNumber --- src/Core/Scripts/Runtime/Misc.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Core/Scripts/Runtime/Misc.js b/src/Core/Scripts/Runtime/Misc.js index 481e0ca68..258e077c8 100644 --- a/src/Core/Scripts/Runtime/Misc.js +++ b/src/Core/Scripts/Runtime/Misc.js @@ -36,12 +36,16 @@ function parseNumber(s) { return 0; } if ((s.indexOf('.') >= 0) || (s.indexOf('e') >= 0) || - s.endsWith('f') || s.endsWith('F')) { + endsWith(s, 'f') || endsWith(s, 'F')) { return parseFloat(s); } return parseInt(s, 10); } +function parseDate(s) { + return new Date(Date.parse(s)); +} + function truncate(n) { return (n >= 0) ? Math.floor(n) : Math.ceil(n); } From 37adfe85dd3deb2b92bf5306d342ae5311e5cd39 Mon Sep 17 00:00:00 2001 From: andekande Date: Wed, 23 Jan 2013 12:10:32 +0100 Subject: [PATCH 010/107] fixed parseDate and parseNumber --- src/Core/Scripts/Runtime.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Core/Scripts/Runtime.js b/src/Core/Scripts/Runtime.js index b4cf92324..6244ce646 100644 --- a/src/Core/Scripts/Runtime.js +++ b/src/Core/Scripts/Runtime.js @@ -55,6 +55,7 @@ boolean: parseBoolean, regexp: parseRegExp, number: parseNumber, + date: parseDate, truncate: truncate, now: now, today: today, From 608288cca72502967502f5e5073d7b0a8de39e2d Mon Sep 17 00:00:00 2001 From: andekande Date: Wed, 23 Jan 2013 12:11:54 +0100 Subject: [PATCH 011/107] fixed parseDate and parseNumber --- src/Core/CoreLib/Date.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/CoreLib/Date.cs b/src/Core/CoreLib/Date.cs index d1c03fd4a..f4e5b6cef 100644 --- a/src/Core/CoreLib/Date.cs +++ b/src/Core/CoreLib/Date.cs @@ -183,7 +183,7 @@ public int GetUTCSeconds() { return 0; } - [ScriptName("parseDate")] + [ScriptAlias("ss.date")] public static Date Parse(string value) { return null; } From c83ef671e634289f52047f4a591a96c57127da4a Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:06:28 -0800 Subject: [PATCH 012/107] Formatting changes + few API changes (internal ctors, props instead of fields etc.) --- .../Web/Html/Data/IndexedDB/DBCursor.cs | 37 ++++++--- .../Html/Data/IndexedDB/DBCursorWithValue.cs | 9 ++- .../Web/Html/Data/IndexedDB/DBDatabase.cs | 71 ++++++++++++----- .../Web/Html/Data/IndexedDB/DBEvent.cs | 32 ++++---- .../Web/Html/Data/IndexedDB/DBEventTarget.cs | 16 ++-- .../Web/Html/Data/IndexedDB/DBFactory.cs | 20 +++-- .../Web/Html/Data/IndexedDB/DBIndex.cs | 55 ++++++++----- .../Html/Data/IndexedDB/DBIndexParameters.cs | 11 ++- .../Web/Html/Data/IndexedDB/DBObjectStore.cs | 79 +++++++++++-------- .../Data/IndexedDB/DBObjectStoreParameters.cs | 15 ++-- .../Html/Data/IndexedDB/DBOpenDBRequest.cs | 29 +++++-- .../Web/Html/Data/IndexedDB/DBRequest.cs | 62 +++++++++++---- .../Web/Html/Data/IndexedDB/DBTransaction.cs | 67 +++++++++++----- .../Data/IndexedDB/DBVersionChangeEvent.cs | 32 ++++++++ src/Libraries/Web/Web.csproj | 1 + 15 files changed, 371 insertions(+), 165 deletions(-) create mode 100644 src/Libraries/Web/Html/Data/IndexedDB/DBVersionChangeEvent.cs diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs index fd36fc4f4..e42200aa6 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBCursor.cs @@ -1,4 +1,9 @@ -using System; +// DBCursor.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -7,31 +12,35 @@ namespace System.Html.Data.IndexedDB { [ScriptImport] public class DBCursor { - protected DBCursor() { - } - - [ScriptField] - public object Source { - get { return null; } + internal DBCursor() { } [ScriptField] public string Direction { - get { return null; } + get { + return null; + } } [ScriptField] public object Key { - get { return null; } + get { + return null; + } } [ScriptField] public object PrimaryKey { - get { return null; } + get { + return null; + } } - public DBRequest Update(object value) { - return null; + [ScriptField] + public object Source { + get { + return null; + } } public void Advance(long count) { @@ -46,5 +55,9 @@ public void Continue(object key) { public DBRequest Delete(object value) { return null; } + + public DBRequest Update(object value) { + return null; + } } } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs index ddac8e28e..1f7620c7e 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBCursorWithValue.cs @@ -1,11 +1,16 @@ -using System; +// DBCursorWithValue.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class DBCursorWithValue : DBCursor { + public sealed class DBCursorWithValue : DBCursor { private DBCursorWithValue() { } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs index e4c86b936..bbdd4bcb9 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBDatabase.cs @@ -1,4 +1,9 @@ -using System; +// DBDatabase.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -12,17 +17,56 @@ private DBDatabase() { [ScriptField] public string Name { - get { return default(string); } + get { + return default(string); + } } [ScriptField] - public long Version { - get { return default(long); } + public string[] ObjectStoreNames { + get { + return default(string[]); + } } + [ScriptName("onabort")] [ScriptField] - public string[] ObjectStoreNames { - get { return default(string[]); } + public DBDatabaseCallback OnAbort { + get { + return null; + } + set { + } + } + + [ScriptName("onerror")] + [ScriptField] + public DBDatabaseCallback OnError { + get { + return null; + } + set { + } + } + + [ScriptName("onversionchange")] + [ScriptField] + public DBDatabaseVersionChangeCallback OnVersionChange { + get { + return null; + } + set { + } + } + + [ScriptField] + public long Version { + get { + return default(long); + } + } + + public void Close() { } public DBObjectStore CreateObjectStore(string name) { @@ -35,7 +79,7 @@ public DBObjectStore CreateObjectStore(string name, DBObjectStoreParameters opti public void DeleteObjectStore(string name) { } - + public DBTransaction Transaction(string[] storenames) { return default(DBTransaction); } @@ -43,18 +87,6 @@ public DBTransaction Transaction(string[] storenames) { public DBTransaction Transaction(string[] storenames, string mode) { return default(DBTransaction); } - - public void Close() { - } - - [ScriptName("onabort")] - public DBDatabaseCallback OnAbort; - - [ScriptName("onerror")] - public DBDatabaseCallback OnError; - - [ScriptName("onversionchange")] - public DBDatabaseVersionChangeCallback OnVersionChange; } [ScriptIgnoreNamespace] @@ -64,5 +96,4 @@ public void Close() { [ScriptIgnoreNamespace] [ScriptImport] public delegate void DBDatabaseVersionChangeCallback(DBVersionChangeEvent e); - } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs index 080bd8ad7..f329cba0d 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBEvent.cs @@ -1,4 +1,9 @@ -using System; +// DBEvent.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -7,30 +12,21 @@ namespace System.Html.Data.IndexedDB { [ScriptImport] public class DBEvent { - [ScriptField] - public string Type { - get { return null; } + internal DBEvent() { } [ScriptField] public T Target { - get { return default(T); } - } - } - - [ScriptIgnoreNamespace] - [ScriptImport] - public class DBVersionChangeEvent : DBEvent { - - [ScriptField] - public long OldVersion { - get { return default(long); } + get { + return default(T); + } } [ScriptField] - public long NewVersion { - get { return default(long); } + public string Type { + get { + return null; + } } } - } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs index c9c7dd3a3..de2ad05e2 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBEventTarget.cs @@ -1,11 +1,19 @@ -using System; +// DBEventTarget.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class DBEventTarget { + public abstract class DBEventTarget { + + internal DBEventTarget() { + } public void AddEventListener(string type, Action listener) { } @@ -18,9 +26,5 @@ public void RemoveEventListener(string type, Action listener) { public void RemoveEventListener(string type, Action listener, bool useCapture) { } - - public bool DispatchEvent(DBEvent e) { - return false; - } } } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs index dd6b2be3a..84ce1c6f3 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBFactory.cs @@ -1,4 +1,9 @@ -using System; +// DBFactory.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -10,20 +15,21 @@ public sealed class DBFactory { private DBFactory() { } - public DBOpenDBRequest Open(string name) { - return null; + [ScriptName("cmp")] + public int Compare(object first, object last) { + return default(short); } - public DBOpenDBRequest Open(string name, long version) { + public DBOpenDBRequest DeleteDatabase(string name) { return null; } - public DBOpenDBRequest DeleteDatabase(string name) { + public DBOpenDBRequest Open(string name) { return null; } - public short Cmp(object first, object last) { - return default(short); + public DBOpenDBRequest Open(string name, long version) { + return null; } } } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs index 12b384559..f26854ce5 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBIndex.cs @@ -1,4 +1,9 @@ -using System; +// DBIndex.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -11,67 +16,77 @@ private DBIndex() { } [ScriptField] - public string Name { - get { return default(string); } + public string KeyPath { + get { + return default(string); + } } [ScriptField] - public DBObjectStore ObjectStore { - get { return default(DBObjectStore); } + public bool MultiEntry { + get { + return default(bool); + } } [ScriptField] - public string KeyPath { - get { return default(string); } + public string Name { + get { + return default(string); + } } [ScriptField] - public bool MultiEntry { - get { return default(bool); } + public DBObjectStore ObjectStore { + get { + return default(DBObjectStore); + } } [ScriptField] public bool Unique { - get { return default(bool); } + get { + return default(bool); + } } - public DBRequest OpenCursor() { + public DBRequest Count() { return null; } - public DBRequest OpenCursor(object range) { + public DBRequest Count(object key) { return null; } - public DBRequest OpenCursor(object range, string direction) { + public DBRequest Get(object key) { return null; } - public DBRequest OpenKeyCursor() { + public DBRequest GetKey(object key) { return null; } - public DBRequest OpenKeyCursor(object range) { + public DBRequest OpenCursor() { return null; } - public DBRequest OpenKeyCursor(object range, string direction) { + public DBRequest OpenCursor(object range) { return null; } - public DBRequest Get(object key) { + public DBRequest OpenCursor(object range, string direction) { return null; } - public DBRequest GetKey(object key) { + public DBRequest OpenKeyCursor() { return null; } - public DBRequest Count() { + public DBRequest OpenKeyCursor(object range) { return null; } - public DBRequest Count(object key) { + public DBRequest OpenKeyCursor(object range, string direction) { return null; } } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs index 28b522594..799c652ce 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBIndexParameters.cs @@ -1,4 +1,9 @@ -using System; +// DBIndexParameters.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -9,7 +14,7 @@ namespace System.Html.Data.IndexedDB { public sealed class DBIndexParameters { [ScriptField] - public bool Unique { + public bool MultiEntry { get { return false; } @@ -18,7 +23,7 @@ public bool Unique { } [ScriptField] - public bool MultiEntry { + public bool Unique { get { return false; } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs index 2ba5ec0a0..abca44cc5 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStore.cs @@ -1,4 +1,9 @@ -using System; +// DBObjectStore.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -11,90 +16,100 @@ private DBObjectStore() { } [ScriptField] - public string Name { - get { return default(string); } + public bool AutoIncremenent { + get { + return default(bool); + } } [ScriptField] - public string KeyPath { - get { return default(string); } + public string[] IndexNames { + get { + return default(string[]); + } } [ScriptField] - public string[] IndexNames { - get { return default(string[]); } + public string KeyPath { + get { + return default(string); + } } [ScriptField] - public DBTransaction Transaction { - get { return default(DBTransaction); } + public string Name { + get { + return default(string); + } } [ScriptField] - public bool AutoIncremenent { - get { return default(bool); } + public DBTransaction Transaction { + get { + return default(DBTransaction); + } } - public DBRequest Put(object value) { + public DBRequest Add(object value) { return null; } - public DBRequest Put(object value, object key) { + public DBRequest Add(object value, object key) { return null; } - public DBRequest Add(object value) { + public DBRequest Clear() { return null; } - public DBRequest Add(object value, object key) { + public DBRequest Count() { return null; } - public DBRequest Delete(object key) { + public DBRequest Count(object key) { return null; } - public DBRequest Get(object key) { - return null; + public DBIndex CreateIndex(string name, object keyPath) { + return default(DBIndex); } - public DBRequest Clear() { - return null; + public DBIndex CreateIndex(string name, object keyPath, DBIndexParameters optionalParameters) { + return default(DBIndex); } - public DBRequest OpenCursor() { + public DBRequest Delete(object key) { return null; } - public DBRequest OpenCursor(object range) { - return null; + public void DeleteIndex(string indexName) { } - public DBRequest OpenCursor(object range, string direction) { + public DBRequest Get(object key) { return null; } - public DBIndex CreateIndex(string name, object keyPath) { + public DBIndex Index(string name) { return default(DBIndex); } - public DBIndex CreateIndex(string name, object keyPath, DBIndexParameters optionalParameters) { - return default(DBIndex); + public DBRequest OpenCursor() { + return null; } - public DBIndex Index(string name) { - return default(DBIndex); + public DBRequest OpenCursor(object range) { + return null; } - public void DeleteIndex(string indexName) { + public DBRequest OpenCursor(object range, string direction) { + return null; } - public DBRequest Count() { + public DBRequest Put(object value) { return null; } - public DBRequest Count(object key) { + public DBRequest Put(object value, object key) { return null; } } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs index e7f8150ec..5f5cb5259 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBObjectStoreParameters.cs @@ -1,4 +1,9 @@ -using System; +// DBObjectStoreParameters.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -9,18 +14,18 @@ namespace System.Html.Data.IndexedDB { public sealed class DBObjectStoreParameters { [ScriptField] - public string KeyPath { + public bool AutoIncrement { get { - return null; + return false; } set { } } [ScriptField] - public bool AutoIncrement { + public string KeyPath { get { - return false; + return null; } set { } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs index 413c343a8..6adc6b78b 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBOpenDBRequest.cs @@ -1,20 +1,39 @@ -using System; +// DBOpenDBRequest.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { [ScriptIgnoreNamespace] [ScriptImport] - public class DBOpenDBRequest : DBRequest { + public sealed class DBOpenDBRequest : DBRequest { - protected DBOpenDBRequest() { + private DBOpenDBRequest() { } [ScriptName("onblocked")] - public DBOpenDBRequestCallback OnBlocked; + [ScriptField] + public DBOpenDBRequestCallback OnBlocked { + get { + return null; + } + set { + } + } [ScriptName("onupgradeneeded")] - public DBOpenDBRequestVersionChangeCallback OnUpgradeNeeded; + [ScriptField] + public DBOpenDBRequestVersionChangeCallback OnUpgradeNeeded { + get { + return null; + } + set { + } + } } [ScriptIgnoreNamespace] diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs index 9e38e48f4..0743ee701 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBRequest.cs @@ -1,4 +1,9 @@ -using System; +// DBRequest.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -7,43 +12,66 @@ namespace System.Html.Data.IndexedDB { [ScriptImport] public class DBRequest : DBEventTarget { - protected DBRequest() { + internal DBRequest() { } [ScriptField] - public object Result { - get { return null; } + public object Error { + get { + return null; + } } + [ScriptName("onerror")] [ScriptField] - public object Error { - get { return null; } + public DBRequestCallback OnError { + get { + return null; + } + set { + } } + [ScriptName("onsuccess")] [ScriptField] - public object Source { - get { return null; } + public DBRequestCallback OnSuccess { + get { + return null; + } + set { + } } [ScriptField] - public DBTransaction Transaction { - get { return null; } + public string ReadyState { + get { + return null; + } } [ScriptField] - public string ReadyState { - get { return null; } + public object Result { + get { + return null; + } } - [ScriptName("onsuccess")] - public DBRequestCallback OnSuccess; + [ScriptField] + public object Source { + get { + return null; + } + } - [ScriptName("onerror")] - public DBRequestCallback OnError; + [ScriptField] + public DBTransaction Transaction { + get { + return null; + } + } } [ScriptIgnoreNamespace] [ScriptImport] public delegate void DBRequestCallback(DBEvent e); - } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs index a5ec3c5c4..5d393bcc6 100644 --- a/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBTransaction.cs @@ -1,4 +1,9 @@ -using System; +// DBTransaction.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; using System.Runtime.CompilerServices; namespace System.Html.Data.IndexedDB { @@ -11,40 +16,66 @@ private DBTransaction() { } [ScriptField] - public string Mode { - get { return null; } - } - - [ScriptField] - public DBDatabase Db { - get { return null; } + [ScriptName("db")] + public DBDatabase Database { + get { + return null; + } } [ScriptField] public object Error { - get { return null; } + get { + return null; + } } - public DBObjectStore ObjectStore(string name) { - return null; - } - - public void Abort() { + [ScriptField] + public string Mode { + get { + return null; + } } [ScriptName("onabort")] - public DBTransactionCallback OnAbort; + [ScriptField] + public DBTransactionCallback OnAbort { + get { + return null; + } + set { + } + } [ScriptName("oncomplete")] - public DBTransactionCallback OnComplete; + [ScriptField] + public DBTransactionCallback OnComplete { + get { + return null; + } + set { + } + } [ScriptName("onerror")] - public DBTransactionCallback OnError; + [ScriptField] + public DBTransactionCallback OnError { + get { + return null; + } + set { + } + } + + public void Abort() { + } + public DBObjectStore ObjectStore(string name) { + return null; + } } [ScriptIgnoreNamespace] [ScriptImport] public delegate void DBTransactionCallback(DBEvent e); - } diff --git a/src/Libraries/Web/Html/Data/IndexedDB/DBVersionChangeEvent.cs b/src/Libraries/Web/Html/Data/IndexedDB/DBVersionChangeEvent.cs new file mode 100644 index 000000000..2ba7e578f --- /dev/null +++ b/src/Libraries/Web/Html/Data/IndexedDB/DBVersionChangeEvent.cs @@ -0,0 +1,32 @@ +// DBVersionChangeEvent.cs +// Script#/Libraries/Web +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; +using System.Runtime.CompilerServices; + +namespace System.Html.Data.IndexedDB { + + [ScriptIgnoreNamespace] + [ScriptImport] + public sealed class DBVersionChangeEvent : DBEvent { + + private DBVersionChangeEvent() { + } + + [ScriptField] + public long NewVersion { + get { + return default(long); + } + } + + [ScriptField] + public long OldVersion { + get { + return default(long); + } + } + } +} diff --git a/src/Libraries/Web/Web.csproj b/src/Libraries/Web/Web.csproj index ce9c4cfe0..aea6574d7 100644 --- a/src/Libraries/Web/Web.csproj +++ b/src/Libraries/Web/Web.csproj @@ -48,6 +48,7 @@ + From 623625a8470a5c7eb59b02295e3aede0d8c78dee Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:08:28 -0800 Subject: [PATCH 013/107] Move WebSQL APIs into Sql subnamespace --- src/Libraries/Web/Html/Data/SqlDatabase.cs | 6 +++--- src/Libraries/Web/Html/Data/SqlError.cs | 6 +++--- src/Libraries/Web/Html/Data/SqlResultSet.cs | 2 +- src/Libraries/Web/Html/Data/SqlResultSetRow.cs | 2 +- src/Libraries/Web/Html/Data/SqlResultSetRowList.cs | 2 +- src/Libraries/Web/Html/Data/SqlTransaction.cs | 14 +++++++------- src/Libraries/Web/Html/Window.cs | 1 + 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/Libraries/Web/Html/Data/SqlDatabase.cs b/src/Libraries/Web/Html/Data/SqlDatabase.cs index 9e6ca8981..c5c57b276 100644 --- a/src/Libraries/Web/Html/Data/SqlDatabase.cs +++ b/src/Libraries/Web/Html/Data/SqlDatabase.cs @@ -6,9 +6,7 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { - - public delegate bool SqlDatabaseCallback(SqlDatabase db); +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] @@ -33,4 +31,6 @@ public void ReadTransaction(SqlTransactionCallback callback, SqlErrorCallback er public void Transaction(SqlTransactionCallback callback, SqlErrorCallback errorCallback, Action successCallback) { } } + + public delegate bool SqlDatabaseCallback(SqlDatabase db); } diff --git a/src/Libraries/Web/Html/Data/SqlError.cs b/src/Libraries/Web/Html/Data/SqlError.cs index a04259a21..88ecef06d 100644 --- a/src/Libraries/Web/Html/Data/SqlError.cs +++ b/src/Libraries/Web/Html/Data/SqlError.cs @@ -6,9 +6,7 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { - - public delegate bool SqlErrorCallback(SqlError error); +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] @@ -31,4 +29,6 @@ public string Message { } } } + + public delegate bool SqlErrorCallback(SqlError error); } diff --git a/src/Libraries/Web/Html/Data/SqlResultSet.cs b/src/Libraries/Web/Html/Data/SqlResultSet.cs index 12c40ee59..c4e713c87 100644 --- a/src/Libraries/Web/Html/Data/SqlResultSet.cs +++ b/src/Libraries/Web/Html/Data/SqlResultSet.cs @@ -7,7 +7,7 @@ using System.Runtime.CompilerServices; using System.Collections; -namespace System.Html.Data { +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] diff --git a/src/Libraries/Web/Html/Data/SqlResultSetRow.cs b/src/Libraries/Web/Html/Data/SqlResultSetRow.cs index 25de3ea63..dff90378c 100644 --- a/src/Libraries/Web/Html/Data/SqlResultSetRow.cs +++ b/src/Libraries/Web/Html/Data/SqlResultSetRow.cs @@ -7,7 +7,7 @@ using System.Runtime.CompilerServices; using System.Collections; -namespace System.Html.Data { +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] diff --git a/src/Libraries/Web/Html/Data/SqlResultSetRowList.cs b/src/Libraries/Web/Html/Data/SqlResultSetRowList.cs index 7ca197739..017d4d11a 100644 --- a/src/Libraries/Web/Html/Data/SqlResultSetRowList.cs +++ b/src/Libraries/Web/Html/Data/SqlResultSetRowList.cs @@ -7,7 +7,7 @@ using System.Runtime.CompilerServices; using System.Collections; -namespace System.Html.Data { +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] diff --git a/src/Libraries/Web/Html/Data/SqlTransaction.cs b/src/Libraries/Web/Html/Data/SqlTransaction.cs index 9b21e9210..ebbb66240 100644 --- a/src/Libraries/Web/Html/Data/SqlTransaction.cs +++ b/src/Libraries/Web/Html/Data/SqlTransaction.cs @@ -6,13 +6,7 @@ using System; using System.Runtime.CompilerServices; -namespace System.Html.Data { - - public delegate bool SqlTransactionCallback(SqlTransaction transaction); - - public delegate bool SqlStatementCallback(SqlTransaction transaction, SqlResultSet resultSet); - - public delegate bool SqlStatementErrorCallback(SqlTransaction transaction, SqlError error); +namespace System.Html.Data.Sql { [ScriptIgnoreNamespace] [ScriptImport] @@ -24,4 +18,10 @@ private SqlTransaction() { public void ExecuteSql(string sql, object[] arguments, SqlStatementCallback callback, SqlStatementErrorCallback errorCallback) { } } + + public delegate bool SqlTransactionCallback(SqlTransaction transaction); + + public delegate bool SqlStatementCallback(SqlTransaction transaction, SqlResultSet resultSet); + + public delegate bool SqlStatementErrorCallback(SqlTransaction transaction, SqlError error); } diff --git a/src/Libraries/Web/Html/Window.cs b/src/Libraries/Web/Html/Window.cs index f5802fbe1..09014a4cb 100644 --- a/src/Libraries/Web/Html/Window.cs +++ b/src/Libraries/Web/Html/Window.cs @@ -6,6 +6,7 @@ using System; using System.Html.Data; using System.Html.Data.IndexedDB; +using System.Html.Data.Sql; using System.Runtime.CompilerServices; namespace System.Html { From ee2ae295b2380a1fd4bd34fb172ef5e5da1e8c9f Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:09:15 -0800 Subject: [PATCH 014/107] Move WebSQL related files within project --- src/Libraries/Web/Html/Data/{ => Sql}/SqlDatabase.cs | 0 src/Libraries/Web/Html/Data/{ => Sql}/SqlError.cs | 0 .../Web/Html/Data/{ => Sql}/SqlResultSet.cs | 0 .../Web/Html/Data/{ => Sql}/SqlResultSetRow.cs | 0 .../Web/Html/Data/{ => Sql}/SqlResultSetRowList.cs | 0 .../Web/Html/Data/{ => Sql}/SqlTransaction.cs | 0 src/Libraries/Web/Web.csproj | 12 ++++++------ 7 files changed, 6 insertions(+), 6 deletions(-) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlDatabase.cs (100%) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlError.cs (100%) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlResultSet.cs (100%) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlResultSetRow.cs (100%) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlResultSetRowList.cs (100%) rename src/Libraries/Web/Html/Data/{ => Sql}/SqlTransaction.cs (100%) diff --git a/src/Libraries/Web/Html/Data/SqlDatabase.cs b/src/Libraries/Web/Html/Data/Sql/SqlDatabase.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlDatabase.cs rename to src/Libraries/Web/Html/Data/Sql/SqlDatabase.cs diff --git a/src/Libraries/Web/Html/Data/SqlError.cs b/src/Libraries/Web/Html/Data/Sql/SqlError.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlError.cs rename to src/Libraries/Web/Html/Data/Sql/SqlError.cs diff --git a/src/Libraries/Web/Html/Data/SqlResultSet.cs b/src/Libraries/Web/Html/Data/Sql/SqlResultSet.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlResultSet.cs rename to src/Libraries/Web/Html/Data/Sql/SqlResultSet.cs diff --git a/src/Libraries/Web/Html/Data/SqlResultSetRow.cs b/src/Libraries/Web/Html/Data/Sql/SqlResultSetRow.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlResultSetRow.cs rename to src/Libraries/Web/Html/Data/Sql/SqlResultSetRow.cs diff --git a/src/Libraries/Web/Html/Data/SqlResultSetRowList.cs b/src/Libraries/Web/Html/Data/Sql/SqlResultSetRowList.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlResultSetRowList.cs rename to src/Libraries/Web/Html/Data/Sql/SqlResultSetRowList.cs diff --git a/src/Libraries/Web/Html/Data/SqlTransaction.cs b/src/Libraries/Web/Html/Data/Sql/SqlTransaction.cs similarity index 100% rename from src/Libraries/Web/Html/Data/SqlTransaction.cs rename to src/Libraries/Web/Html/Data/Sql/SqlTransaction.cs diff --git a/src/Libraries/Web/Web.csproj b/src/Libraries/Web/Web.csproj index aea6574d7..a78343865 100644 --- a/src/Libraries/Web/Web.csproj +++ b/src/Libraries/Web/Web.csproj @@ -76,12 +76,12 @@ - - - - - - + + + + + + From 2c0cacf1587e56e710bddf877a3b84753b585761 Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:26:19 -0800 Subject: [PATCH 015/107] Fix unit test for date parsing change --- tests/TestCases/Type/Imported/Baseline.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestCases/Type/Imported/Baseline.txt b/tests/TestCases/Type/Imported/Baseline.txt index c8eaaf777..dbad9d4cc 100644 --- a/tests/TestCases/Type/Imported/Baseline.txt +++ b/tests/TestCases/Type/Imported/Baseline.txt @@ -14,7 +14,7 @@ define('test', ['ss'], function(ss) { var n = ss.truncate(5.5); var parser = new DOMParser(); var doc = parser.parseFromString('', 'text/xml'); - var d = Date.parseDate('1/1/2010'); + var d = ss.date('1/1/2010'); var eventHandler = function() { }; elem.addEventListener('click', eventHandler); From c7965cacef5d29e744643ad6d88fb0a3ae8048b7 Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:31:50 -0800 Subject: [PATCH 016/107] Added Script.IsNaN/IsFinite --- History.txt | 3 ++- src/Core/CoreLib/Script.cs | 10 ++++++++++ tests/TestCases/Basic/Metadata/Baseline.txt | 12 +++++++++++- tests/TestCases/Expression/Script/Baseline.txt | 2 ++ tests/TestCases/Expression/Script/Code.cs | 2 ++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/History.txt b/History.txt index 00e03519b..2291e3c9c 100644 --- a/History.txt +++ b/History.txt @@ -21,6 +21,7 @@ v0.8 (combines changes from 0.7.6 that weren't released as an actual build build also produces Foo.js and corresponding minimized Foo.min.js. - Leverage AjaxMin tool to perform minimization (better minimization as a result) + - HTML5 IndexedDB APIs added - NodeJS support - Removed metadata attributes . ScriptNamespaceAttribute @@ -61,7 +62,7 @@ v0.8 (combines changes from 0.7.6 that weren't released as an actual build String.LocaleFormat -> use overload that takes in CultureInfo Added: - Script.Global, Undefined + Script.Global, Undefined, IsNaN, IsFinite Script.Require - MSBuild changes: . Added support for a CrunchScripts property in your csproj to control diff --git a/src/Core/CoreLib/Script.cs b/src/Core/CoreLib/Script.cs index 43f84b8bd..ecb78904b 100644 --- a/src/Core/CoreLib/Script.cs +++ b/src/Core/CoreLib/Script.cs @@ -131,6 +131,16 @@ public static T InvokeMethod(Type type, string name, params object[] args) { return default(T); } + [ScriptAlias("isFinite")] + public static bool IsFinite(object o) { + return false; + } + + [ScriptAlias("isNaN")] + public static bool IsNaN(object o) { + return false; + } + /// /// Checks if the specified object is null. /// diff --git a/tests/TestCases/Basic/Metadata/Baseline.txt b/tests/TestCases/Basic/Metadata/Baseline.txt index f64abef15..f6febe96c 100644 --- a/tests/TestCases/Basic/Metadata/Baseline.txt +++ b/tests/TestCases/Basic/Metadata/Baseline.txt @@ -609,7 +609,7 @@ Types: Method: Parse AssociatedType: Date Visibility: Public, Static - Generated Name: parseDate + Generated Name: ss.date Abstract: False Method: SetDate AssociatedType: Void @@ -1513,6 +1513,16 @@ Types: Visibility: Public, Static Generated Name: invokeMethod Abstract: False + Method: IsFinite + AssociatedType: Boolean + Visibility: Public, Static + Generated Name: isFinite + Abstract: False + Method: IsNaN + AssociatedType: Boolean + Visibility: Public, Static + Generated Name: isNaN + Abstract: False Method: IsNull AssociatedType: Boolean Visibility: Public, Static diff --git a/tests/TestCases/Expression/Script/Baseline.txt b/tests/TestCases/Expression/Script/Baseline.txt index 5508d0084..afd6f0c27 100644 --- a/tests/TestCases/Expression/Script/Baseline.txt +++ b/tests/TestCases/Expression/Script/Baseline.txt @@ -25,6 +25,8 @@ define('test', ['ss'], function(ss) { b = (i === null); b = (i === undefined); b = ss.isValue(i); + b = isNaN(0); + b = isFinite(3); var addition = eval('2 + 2'); addition = 2 + 2; addition = 2 + 3; diff --git a/tests/TestCases/Expression/Script/Code.cs b/tests/TestCases/Expression/Script/Code.cs index 330846ace..f7cd615fa 100644 --- a/tests/TestCases/Expression/Script/Code.cs +++ b/tests/TestCases/Expression/Script/Code.cs @@ -27,6 +27,8 @@ public void Test(int arg) { b = Script.IsNull(i); b = Script.IsUndefined(i); b = Script.IsValue(i); + b = Script.IsNaN(0); + b = Script.IsFinite(3); int addition = (int)Script.Eval("2 + 2"); From 17ee86b6fca5c7433825f8d093c5d0fbd312e95a Mon Sep 17 00:00:00 2001 From: nikhilk Date: Thu, 24 Jan 2013 23:38:54 -0800 Subject: [PATCH 017/107] Make parseDate return NaN for invalid dates (consistent with parseInt/parseFloat) --- src/Core/Scripts/Runtime/Misc.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Core/Scripts/Runtime/Misc.js b/src/Core/Scripts/Runtime/Misc.js index 258e077c8..6618f8a6a 100644 --- a/src/Core/Scripts/Runtime/Misc.js +++ b/src/Core/Scripts/Runtime/Misc.js @@ -36,14 +36,15 @@ function parseNumber(s) { return 0; } if ((s.indexOf('.') >= 0) || (s.indexOf('e') >= 0) || - endsWith(s, 'f') || endsWith(s, 'F')) { + endsWith(s, 'f') || endsWith(s, 'F')) { return parseFloat(s); } return parseInt(s, 10); } function parseDate(s) { - return new Date(Date.parse(s)); + var t = Date.parse(s); + return isNaN(t) ? t : new Date(t); } function truncate(n) { From 9cfcb1cb0c8ad36539fc7ac3dc3f52817e7fda94 Mon Sep 17 00:00:00 2001 From: nikhilk Date: Sat, 26 Jan 2013 10:34:36 -0800 Subject: [PATCH 018/107] Added stub DataContract related attributes for shared code scenarios (#321) --- History.txt | 1 + src/Core/CoreLib/Runtime.cs | 59 ++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/History.txt b/History.txt index 2291e3c9c..646d246a4 100644 --- a/History.txt +++ b/History.txt @@ -64,6 +64,7 @@ v0.8 (combines changes from 0.7.6 that weren't released as an actual build Added: Script.Global, Undefined, IsNaN, IsFinite Script.Require + DataContract/DataMember attributes to help in shared code scenarios - MSBuild changes: . Added support for a CrunchScripts property in your csproj to control whether crunching happens for the .min.js script is produced. diff --git a/src/Core/CoreLib/Runtime.cs b/src/Core/CoreLib/Runtime.cs index 0293a8f29..63c298b1f 100644 --- a/src/Core/CoreLib/Runtime.cs +++ b/src/Core/CoreLib/Runtime.cs @@ -544,9 +544,66 @@ public decimal Value { namespace System.Runtime.InteropServices { + [AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ScriptIgnore] - public class OutAttribute { + public sealed class OutAttribute : Attribute { + } +} + +namespace System.Runtime.Serialization { + + [AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, Inherited = false, AllowMultiple = false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [ScriptIgnore] + public sealed class DataContractAttribute : Attribute { + + public bool IsReference { + get; + set; + } + + public string Name { + get; + set; + } + + public string Namespace { + get; + set; + } + } + + [AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [ScriptIgnore] + public sealed class DataMemberAttribute : Attribute { + + public bool EmitDefaultValue { + get; + set; + } + + public bool IsReference { + get; + set; + } + + public string Name { + get; + set; + } + + public int Order { + get; + set; + } + } + + [AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [ScriptIgnore] + public sealed class IgnoreDataMemberAttribute : Attribute { } } From 03daf9d65b81356120a9754fd08cef71709b9bf3 Mon Sep 17 00:00:00 2001 From: nikhilk Date: Sun, 27 Jan 2013 20:54:27 -0800 Subject: [PATCH 019/107] Some node-related API fixes --- src/Libraries/Node/Node.Core/IO/FileSystem.cs | 11 +-------- src/Libraries/Node/Node.Core/Network/Url.cs | 2 +- .../Node/Node.Core/Network/UrlData.cs | 1 + src/Libraries/Node/Node.Express/Express.cs | 4 ++++ .../Node/Node.Mongo/MongoConnector.cs | 24 +++++++++++++++++++ .../Node/Node.Mongo/Node.Mongo.csproj | 1 + 6 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 src/Libraries/Node/Node.Mongo/MongoConnector.cs diff --git a/src/Libraries/Node/Node.Core/IO/FileSystem.cs b/src/Libraries/Node/Node.Core/IO/FileSystem.cs index af2d4eeff..ec90c58a7 100644 --- a/src/Libraries/Node/Node.Core/IO/FileSystem.cs +++ b/src/Libraries/Node/Node.Core/IO/FileSystem.cs @@ -118,10 +118,6 @@ public static string[] ReadDirectorySync(string path) { public static void ReadFile(string fileName, AsyncResultCallback callback) { } - [ScriptName("readFile")] - public static void ReadFileText(string fileName, AsyncResultCallback callback) { - } - [ScriptName("readFile")] public static void ReadFileText(string fileName, Encoding encoding, AsyncResultCallback callback) { } @@ -130,12 +126,7 @@ public static Buffer ReadFileSync(string fileName) { return null; } - [ScriptName("readFile")] - public static string ReadFileTextSync(string fileName) { - return null; - } - - [ScriptName("readFile")] + [ScriptName("readFileSync")] public static string ReadFileTextSync(string fileName, Encoding encoding) { return null; } diff --git a/src/Libraries/Node/Node.Core/Network/Url.cs b/src/Libraries/Node/Node.Core/Network/Url.cs index 3d005d49b..42e005363 100644 --- a/src/Libraries/Node/Node.Core/Network/Url.cs +++ b/src/Libraries/Node/Node.Core/Network/Url.cs @@ -11,7 +11,7 @@ namespace NodeApi.Network { [ScriptImport] [ScriptIgnoreNamespace] [ScriptDependency("url")] - [ScriptName("URL")] + [ScriptName("url")] public static class Url { public static string Format(UrlData urlData) { diff --git a/src/Libraries/Node/Node.Core/Network/UrlData.cs b/src/Libraries/Node/Node.Core/Network/UrlData.cs index 19f856479..f2c03902e 100644 --- a/src/Libraries/Node/Node.Core/Network/UrlData.cs +++ b/src/Libraries/Node/Node.Core/Network/UrlData.cs @@ -39,6 +39,7 @@ public string Host { } [ScriptField] + [ScriptName("hostname")] public string HostName { get; set; diff --git a/src/Libraries/Node/Node.Express/Express.cs b/src/Libraries/Node/Node.Express/Express.cs index 4baea2251..720b95845 100644 --- a/src/Libraries/Node/Node.Express/Express.cs +++ b/src/Libraries/Node/Node.Express/Express.cs @@ -85,6 +85,10 @@ public static ExpressMiddleware Static(string path) { return null; } + public static ExpressMiddleware Static(string path, object options) { + return null; + } + [ScriptName("urlencoded")] public static ExpressMiddleware UrlEncoded() { return null; diff --git a/src/Libraries/Node/Node.Mongo/MongoConnector.cs b/src/Libraries/Node/Node.Mongo/MongoConnector.cs new file mode 100644 index 000000000..18bd3ef23 --- /dev/null +++ b/src/Libraries/Node/Node.Mongo/MongoConnector.cs @@ -0,0 +1,24 @@ +// MongoConnector.cs +// Script#/Libraries/Node/Mongo +// This source code is subject to terms and conditions of the Apache License, Version 2.0. +// + +using System; +using System.Runtime.CompilerServices; + +namespace NodeApi.MongoDB { + + [ScriptImport] + [ScriptName("Db")] + public sealed class MongoConnector { + + public MongoConnector(string name, MongoServer server) { + } + + public MongoConnector(string name, MongoServer server, object options) { + } + + public void Open(AsyncResultCallback callback) { + } + } +} diff --git a/src/Libraries/Node/Node.Mongo/Node.Mongo.csproj b/src/Libraries/Node/Node.Mongo/Node.Mongo.csproj index 2fbd6c480..3cb4428b9 100644 --- a/src/Libraries/Node/Node.Mongo/Node.Mongo.csproj +++ b/src/Libraries/Node/Node.Mongo/Node.Mongo.csproj @@ -40,6 +40,7 @@ true + From 5b422bf674b9b8ca48c05ff07ba220b0c2c38cbd Mon Sep 17 00:00:00 2001 From: nikhilk Date: Sun, 27 Jan 2013 21:17:16 -0800 Subject: [PATCH 020/107] Wine cellar sample (script# with nodejs, express, mongo, and knockout) --- samples/Cellar/Cellar.sln | 29 +++ .../Cellar/CellarClient/CellarApplication.cs | 106 ++++++++ .../Cellar/CellarClient/CellarClient.csproj | 60 +++++ .../CellarClient/DataModels/WineResults.cs | 16 ++ samples/Cellar/CellarClient/Page.cs | 14 + .../CellarClient/Properties/AssemblyInfo.cs | 39 +++ .../CellarClient/Properties/FxCop.ruleset | 101 ++++++++ samples/Cellar/CellarClient/packages.config | 6 + .../Cellar/CellarServer/CellarApplication.cs | 67 +++++ .../Cellar/CellarServer/CellarServer.csproj | 187 ++++++++++++++ .../Cellar/CellarServer/Content/cellar.html | 43 ++++ .../Cellar/CellarServer/Content/images/bg.jpg | Bin 0 -> 176652 bytes .../CellarServer/Content/images/github.png | Bin 0 -> 2184 bytes .../CellarServer/Content/images/wine.png | Bin 0 -> 587 bytes .../Cellar/CellarServer/Content/index.html | 18 ++ .../Content/scripts/jquery-1.4.4.min.js | 167 ++++++++++++ .../Content/scripts/jquery.reveal.js | 160 ++++++++++++ .../Content/scripts/knockout-2.1.0.js | 86 +++++++ .../Content/scripts/require.min.js | 35 +++ samples/Cellar/CellarServer/Content/site.css | 202 +++++++++++++++ .../CellarServer/Content/wines/argiano.jpg | Bin 0 -> 5480 bytes .../CellarServer/Content/wines/block_nine.jpg | Bin 0 -> 6559 bytes .../Content/wines/bodega_lurton.jpg | Bin 0 -> 4980 bytes .../CellarServer/Content/wines/bouscat.jpg | Bin 0 -> 9057 bytes .../CellarServer/Content/wines/calera.jpg | Bin 0 -> 5230 bytes .../CellarServer/Content/wines/caronne.jpg | Bin 0 -> 6252 bytes .../CellarServer/Content/wines/dinastia.jpg | Bin 0 -> 7427 bytes .../Content/wines/domaine_serene.jpg | Bin 0 -> 8854 bytes .../CellarServer/Content/wines/ex_umbris.jpg | Bin 0 -> 5330 bytes .../CellarServer/Content/wines/fourvines.jpg | Bin 0 -> 6609 bytes .../CellarServer/Content/wines/hugel.jpg | Bin 0 -> 6210 bytes .../CellarServer/Content/wines/lan_rioja.jpg | Bin 0 -> 16139 bytes .../CellarServer/Content/wines/le_doyenne.jpg | Bin 0 -> 10836 bytes .../CellarServer/Content/wines/margerum.jpg | Bin 0 -> 6033 bytes .../CellarServer/Content/wines/momo.jpg | Bin 0 -> 6473 bytes .../CellarServer/Content/wines/morizottes.jpg | Bin 0 -> 6332 bytes .../CellarServer/Content/wines/petalos.jpg | Bin 0 -> 6857 bytes .../CellarServer/Content/wines/ponzi.jpg | Bin 0 -> 7043 bytes .../CellarServer/Content/wines/quivira.jpg | Bin 0 -> 5601 bytes .../CellarServer/Content/wines/rex_hill.jpg | Bin 0 -> 17148 bytes .../Content/wines/saint_cosme.jpg | Bin 0 -> 19554 bytes .../CellarServer/Content/wines/shafer.jpg | Bin 0 -> 6910 bytes .../CellarServer/Content/wines/viticcio.jpg | Bin 0 -> 6455 bytes .../CellarServer/Content/wines/waterbrook.jpg | Bin 0 -> 5725 bytes .../Controllers/WinesController.cs | 77 ++++++ .../CellarServer/Properties/AssemblyInfo.cs | 31 +++ .../CellarServer/Properties/FxCop.ruleset | 101 ++++++++ samples/Cellar/CellarServer/Server.cs | 48 ++++ .../CellarServer/Services/IWineRepository.cs | 20 ++ .../Services/MongoLab/MongoWineRepository.cs | 120 +++++++++ samples/Cellar/CellarServer/data.json | 242 ++++++++++++++++++ samples/Cellar/CellarServer/package.json | 6 + samples/Cellar/CellarServer/packages.config | 7 + samples/Cellar/Common/Wine.cs | 33 +++ samples/Cellar/packages/nuget.exe | Bin 0 -> 619520 bytes samples/Cellar/packages/nuget.targets | 16 ++ samples/Cellar/packages/repositories.config | 5 + 57 files changed, 2042 insertions(+) create mode 100644 samples/Cellar/Cellar.sln create mode 100644 samples/Cellar/CellarClient/CellarApplication.cs create mode 100644 samples/Cellar/CellarClient/CellarClient.csproj create mode 100644 samples/Cellar/CellarClient/DataModels/WineResults.cs create mode 100644 samples/Cellar/CellarClient/Page.cs create mode 100644 samples/Cellar/CellarClient/Properties/AssemblyInfo.cs create mode 100644 samples/Cellar/CellarClient/Properties/FxCop.ruleset create mode 100644 samples/Cellar/CellarClient/packages.config create mode 100644 samples/Cellar/CellarServer/CellarApplication.cs create mode 100644 samples/Cellar/CellarServer/CellarServer.csproj create mode 100644 samples/Cellar/CellarServer/Content/cellar.html create mode 100644 samples/Cellar/CellarServer/Content/images/bg.jpg create mode 100644 samples/Cellar/CellarServer/Content/images/github.png create mode 100644 samples/Cellar/CellarServer/Content/images/wine.png create mode 100644 samples/Cellar/CellarServer/Content/index.html create mode 100644 samples/Cellar/CellarServer/Content/scripts/jquery-1.4.4.min.js create mode 100644 samples/Cellar/CellarServer/Content/scripts/jquery.reveal.js create mode 100644 samples/Cellar/CellarServer/Content/scripts/knockout-2.1.0.js create mode 100644 samples/Cellar/CellarServer/Content/scripts/require.min.js create mode 100644 samples/Cellar/CellarServer/Content/site.css create mode 100644 samples/Cellar/CellarServer/Content/wines/argiano.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/block_nine.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/bodega_lurton.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/bouscat.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/calera.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/caronne.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/dinastia.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/domaine_serene.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/ex_umbris.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/fourvines.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/hugel.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/lan_rioja.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/le_doyenne.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/margerum.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/momo.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/morizottes.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/petalos.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/ponzi.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/quivira.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/rex_hill.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/saint_cosme.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/shafer.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/viticcio.jpg create mode 100644 samples/Cellar/CellarServer/Content/wines/waterbrook.jpg create mode 100644 samples/Cellar/CellarServer/Controllers/WinesController.cs create mode 100644 samples/Cellar/CellarServer/Properties/AssemblyInfo.cs create mode 100644 samples/Cellar/CellarServer/Properties/FxCop.ruleset create mode 100644 samples/Cellar/CellarServer/Server.cs create mode 100644 samples/Cellar/CellarServer/Services/IWineRepository.cs create mode 100644 samples/Cellar/CellarServer/Services/MongoLab/MongoWineRepository.cs create mode 100644 samples/Cellar/CellarServer/data.json create mode 100644 samples/Cellar/CellarServer/package.json create mode 100644 samples/Cellar/CellarServer/packages.config create mode 100644 samples/Cellar/Common/Wine.cs create mode 100644 samples/Cellar/packages/nuget.exe create mode 100644 samples/Cellar/packages/nuget.targets create mode 100644 samples/Cellar/packages/repositories.config diff --git a/samples/Cellar/Cellar.sln b/samples/Cellar/Cellar.sln new file mode 100644 index 000000000..b29f739b5 --- /dev/null +++ b/samples/Cellar/Cellar.sln @@ -0,0 +1,29 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CellarServer", "CellarServer\CellarServer.csproj", "{C58080FF-3DFB-4EBC-A05F-B35EEB686E33}" + ProjectSection(ProjectDependencies) = postProject + {E32153A0-364C-418F-B409-287B764E2875} = {E32153A0-364C-418F-B409-287B764E2875} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CellarClient", "CellarClient\CellarClient.csproj", "{E32153A0-364C-418F-B409-287B764E2875}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C58080FF-3DFB-4EBC-A05F-B35EEB686E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C58080FF-3DFB-4EBC-A05F-B35EEB686E33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C58080FF-3DFB-4EBC-A05F-B35EEB686E33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C58080FF-3DFB-4EBC-A05F-B35EEB686E33}.Release|Any CPU.Build.0 = Release|Any CPU + {E32153A0-364C-418F-B409-287B764E2875}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E32153A0-364C-418F-B409-287B764E2875}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E32153A0-364C-418F-B409-287B764E2875}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E32153A0-364C-418F-B409-287B764E2875}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/samples/Cellar/CellarClient/CellarApplication.cs b/samples/Cellar/CellarClient/CellarApplication.cs new file mode 100644 index 000000000..976e5f76f --- /dev/null +++ b/samples/Cellar/CellarClient/CellarApplication.cs @@ -0,0 +1,106 @@ +// CellarApplication.cs +// + +using System; +using System.Collections.Generic; +using System.Net; +using System.Serialization; +using Cellar.DataModels; +using KnockoutApi; + +namespace Cellar { + + public sealed class CellarApplication { + + private const int WinesPerPage = 8; + + private readonly Observable _pageIndex; + private readonly Observable _pages; + + public readonly ComputedObservable CanGoPrevious; + public readonly ComputedObservable CanGoNext; + public readonly Observable> Wines; + public readonly Observable SelectedWine; + public readonly ComputedObservable ShowSelection; + + public readonly Action Next; + public readonly Action Previous; + public readonly Action Select; + + public CellarApplication() { + _pages = Knockout.Observable(0); + _pageIndex = Knockout.Observable(0); + + Wines = Knockout.Observable>(); + SelectedWine = Knockout.Observable(); + CanGoPrevious = Knockout.Computed(ComputeCanGoPrevious); + CanGoNext = Knockout.Computed(ComputeCanGoNext); + ShowSelection = Knockout.Computed(ComputeShowSelection); + + Next = delegate() { + NextCommand(); + }; + Previous = delegate() { + PreviousCommand(); + }; + Select = delegate(Wine wine) { + SelectCommand(wine); + }; + + LoadWines(); + } + + private bool ComputeCanGoNext() { + return _pageIndex.GetValue() < (_pages.GetValue() - 1); + } + + private bool ComputeCanGoPrevious() { + return _pageIndex.GetValue() > 0; + } + + private bool ComputeShowSelection() { + return SelectedWine.GetValue() != null; + } + + private void LoadWines() { + int skip = _pageIndex.GetValue() * WinesPerPage; + + XmlHttpRequest xhr = new XmlHttpRequest(); + xhr.OnReadyStateChange = delegate() { + if ((xhr.ReadyState == ReadyState.Loaded) && + (xhr.Status == 200)) { + WineResults results = Json.ParseData(xhr.ResponseText); + + if (results.Count != 0) { + _pages.SetValue(Math.Ceil(results.Count / WinesPerPage)); + } + + Wines.SetValue(results.Wines); + + Wine selectedWine = null; + if ((results.Wines != null) && (results.Wines.Length != 0)) { + selectedWine = results.Wines[0]; + } + SelectedWine.SetValue(selectedWine); + } + }; + + xhr.Open(HttpVerb.Get, "/wines/?skip=" + skip + "&count=" + WinesPerPage, true); + xhr.Send(); + } + + private void PreviousCommand() { + _pageIndex.SetValue(_pageIndex.GetValue() - 1); + LoadWines(); + } + + private void NextCommand() { + _pageIndex.SetValue(_pageIndex.GetValue() + 1); + LoadWines(); + } + + private void SelectCommand(Wine wine) { + SelectedWine.SetValue(wine); + } + } +} diff --git a/samples/Cellar/CellarClient/CellarClient.csproj b/samples/Cellar/CellarClient/CellarClient.csproj new file mode 100644 index 000000000..d6dab8a79 --- /dev/null +++ b/samples/Cellar/CellarClient/CellarClient.csproj @@ -0,0 +1,60 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {E32153A0-364C-418F-B409-287B764E2875} + Library + Properties + Cellar + cellar + Properties\FxCop.ruleset + True + True + True + True + True + ..\CellarServer\Content\scripts + true + + + bin\Debug\ + DEBUG;CODE_ANALYSIS;SCRIPTSHARP + prompt + 4 + 0028, 1591, 1684 + bin\Debug\cellar.xml + + + bin\Release\ + CODE_ANALYSIS;SCRIPTSHARP + prompt + 4 + 0028, 1591, 1684 + bin\Release\cellar.xml + + + + + + DataModels\Wine.cs + + + + + + + + + ..\packages\ScriptSharp.Lib.Knockout.0.8\lib\Script.Knockout.dll + + + ..\packages\ScriptSharp.Lib.HTML.0.8\lib\Script.Web.dll + + + + + + diff --git a/samples/Cellar/CellarClient/DataModels/WineResults.cs b/samples/Cellar/CellarClient/DataModels/WineResults.cs new file mode 100644 index 000000000..7298c5eb3 --- /dev/null +++ b/samples/Cellar/CellarClient/DataModels/WineResults.cs @@ -0,0 +1,16 @@ +// WineResults.cs +// + +using System; +using System.Runtime.CompilerServices; + +namespace Cellar.DataModels { + + [ScriptImport] + [ScriptObject] + public sealed class WineResults { + + public int Count; + public Wine[] Wines; + } +} diff --git a/samples/Cellar/CellarClient/Page.cs b/samples/Cellar/CellarClient/Page.cs new file mode 100644 index 000000000..9ec277527 --- /dev/null +++ b/samples/Cellar/CellarClient/Page.cs @@ -0,0 +1,14 @@ +// Page.cs +// + +using System; +using KnockoutApi; +using Cellar; + +[ScriptModule] +internal static class Page { + + static Page() { + Knockout.ApplyBindings(new CellarApplication()); + } +} diff --git a/samples/Cellar/CellarClient/Properties/AssemblyInfo.cs b/samples/Cellar/CellarClient/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..d4db5084b --- /dev/null +++ b/samples/Cellar/CellarClient/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// AssemblyInfo.cs +// + +using System; +using System.Reflection; +using System.Runtime.CompilerServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Cellar")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Cellar Sample for Script#")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: ScriptAssembly("cellar")] +[assembly: ScriptReference("knockout", Path="knockout-2.1.0")] + +// A script template using an AMD pattern for declaring dependencies consumed +// by the generated script. +[assembly: ScriptTemplate(@" +/*! {name}.js {version} + * {description} + */ + +""use strict""; + +require([{requires}], function({dependencies}) { + var $global = this; + + {script} +}); +")] diff --git a/samples/Cellar/CellarClient/Properties/FxCop.ruleset b/samples/Cellar/CellarClient/Properties/FxCop.ruleset new file mode 100644 index 000000000..47c160f61 --- /dev/null +++ b/samples/Cellar/CellarClient/Properties/FxCop.ruleset @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Cellar/CellarClient/packages.config b/samples/Cellar/CellarClient/packages.config new file mode 100644 index 000000000..cf5db3f97 --- /dev/null +++ b/samples/Cellar/CellarClient/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/samples/Cellar/CellarServer/CellarApplication.cs b/samples/Cellar/CellarServer/CellarApplication.cs new file mode 100644 index 000000000..cd31db2d2 --- /dev/null +++ b/samples/Cellar/CellarServer/CellarApplication.cs @@ -0,0 +1,67 @@ +// CellarApplication.cs +// + +using System; +using System.Diagnostics; +using System.Serialization; +using System.Threading; +using NodeApi.IO; +using NodeApi.Network; +using Cellar.Controllers; +using Cellar.DataModels; +using Cellar.Services; +using Cellar.Services.MongoLab; + +namespace Cellar { + + internal sealed class CellarApplication { + + private IWineRepository _repository; + + public WinesController CreateWinesController() { + return new WinesController(_repository); + } + + public void Initialize(string dbUrl, Action callback) { + UrlData urlData = Url.Parse(dbUrl); + string[] credentials = urlData.Auth.Split(':'); + + MongoWineRepository.Create(urlData.HostName, Number.ParseInt(urlData.Port, 10), + urlData.Path.Substr(1), + credentials[0], credentials[1]) + .Done(delegate(MongoWineRepository repository) { + _repository = repository; + _repository.CountWines() + .ContinueWith(delegate(Task countTask) { + if ((countTask.Error != null) || + (countTask.Result == 0)) { + PopulateRepository(callback); + } + else { + Debug.WriteLine("Repository initialized (and already populated)."); + callback(null); + } + }); + }) + .Fail(delegate(Exception error) { + callback(new Exception("Unable to create repository.")); + }); + } + + private void PopulateRepository(Action callback) { + Debug.WriteLine("Populating repository..."); + + string data = FileSystem.ReadFileTextSync("data.json", Encoding.UTF8); + Wine[] wines = Json.ParseData(data); + + _repository.InsertWines(wines) + .Done(delegate() { + Debug.WriteLine("Repository populated."); + callback(null); + }) + .Fail(delegate(Exception error) { + callback(new Exception("Could not populate repository.")); + }); + } + } +} diff --git a/samples/Cellar/CellarServer/CellarServer.csproj b/samples/Cellar/CellarServer/CellarServer.csproj new file mode 100644 index 000000000..71868a85b --- /dev/null +++ b/samples/Cellar/CellarServer/CellarServer.csproj @@ -0,0 +1,187 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {C58080FF-3DFB-4EBC-A05F-B35EEB686E33} + Library + Properties + Cellar + cellar.server + Properties\FxCop.ruleset + True + True + False + False + True + node_modules + true + + + bin\Debug\ + DEBUG;CODE_ANALYSIS;SCRIPTSHARP + prompt + 4 + 0028, 1591, 1684 + bin\Debug\cellar.server.xml + + + bin\Release\ + CODE_ANALYSIS;SCRIPTSHARP + prompt + 4 + 0028, 1591, 1684 + bin\Release\cellar.server.xml + + + + DataModels\Wine.cs + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + PreserveNewest + + + + + ..\packages\ScriptSharp.Lib.Node.0.8\lib\Script.Node.dll + + + False + ..\packages\ScriptSharp.Lib.Node.Express.0.8\lib\Script.Node.Express.dll + + + False + ..\packages\ScriptSharp.Lib.Node.Mongo.0.8\lib\Script.Node.Mongo.dll + + + + + + \ No newline at end of file diff --git a/samples/Cellar/CellarServer/Content/cellar.html b/samples/Cellar/CellarServer/Content/cellar.html new file mode 100644 index 000000000..bf0e18844 --- /dev/null +++ b/samples/Cellar/CellarServer/Content/cellar.html @@ -0,0 +1,43 @@ + + + + Wines in the Cellar + + + + +
+
+

Cellar

+
+
+
+ +
+

+ +

+

+

+

+ × +
+
+
+ + +
+ + + + + diff --git a/samples/Cellar/CellarServer/Content/images/bg.jpg b/samples/Cellar/CellarServer/Content/images/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ba169b0874a948f462c492eccb38caabbc6cb82 GIT binary patch literal 176652 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 literal 0 HcmV?d00001 diff --git a/samples/Cellar/CellarServer/Content/images/github.png b/samples/Cellar/CellarServer/Content/images/github.png new file mode 100644 index 0000000000000000000000000000000000000000..9194d80c4460f1a0870e441f8f5a887a25441889 GIT binary patch literal 2184 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 Z>?a2`TQtV-X*B=<002ovPDHLkV1n7_?S23N literal 0 HcmV?d00001 diff --git a/samples/Cellar/CellarServer/Content/index.html b/samples/Cellar/CellarServer/Content/index.html new file mode 100644 index 000000000..fb04c6d87 --- /dev/null +++ b/samples/Cellar/CellarServer/Content/index.html @@ -0,0 +1,18 @@ + + + + Cellar + + + + + + + + diff --git a/samples/Cellar/CellarServer/Content/scripts/jquery-1.4.4.min.js b/samples/Cellar/CellarServer/Content/scripts/jquery-1.4.4.min.js new file mode 100644 index 000000000..2bd4cbb8a --- /dev/null +++ b/samples/Cellar/CellarServer/Content/scripts/jquery-1.4.4.min.js @@ -0,0 +1,167 @@ +/*! + * jQuery JavaScript Library v1.4.4 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Nov 11 19:04:53 2010 -0500 + */ +(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h= +h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;kd)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La, +"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this, +e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a, +"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+ +a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/, +C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j, +s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this, +j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length}, +toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j=== +-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false; +if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", +b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& +!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& +l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H
a";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), +k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, +scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= +false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= +1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
t
";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= +"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= +c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); +else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; +if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, +attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& +b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; +c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, +arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= +d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ +c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== +8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== +"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ +d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= +B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== +"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== +0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); +(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; +break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, +q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= +l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, +m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== +true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== +g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- +0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== +i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; +if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, +g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); +n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& +function(){var g=k,i=t.createElement("div");i.innerHTML="

";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| +p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= +t.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? +function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= +h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): +c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, +2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, +b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& +e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, +""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; +else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", +prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length- +1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); +d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, +jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, +zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), +h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); +if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= +d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; +e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/)<[^<]*)*<\/script>/gi, +ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b=== +"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("
").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& +!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, +getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", +script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| +!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache= +false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset; +A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", +b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& +c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| +c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]= +encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess", +[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"), +e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}}); +if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show", +3),a,b,d);else{d=0;for(var e=this.length;d=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, +d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* +Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)} +var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; +this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| +this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= +c.timers,b=0;b-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a, +e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&& +c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); +c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+ +b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window); \ No newline at end of file diff --git a/samples/Cellar/CellarServer/Content/scripts/jquery.reveal.js b/samples/Cellar/CellarServer/Content/scripts/jquery.reveal.js new file mode 100644 index 000000000..9140d48b4 --- /dev/null +++ b/samples/Cellar/CellarServer/Content/scripts/jquery.reveal.js @@ -0,0 +1,160 @@ +/* + * jQuery Reveal Plugin 1.0 + * www.ZURB.com + * Copyright 2010, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + + +(function($) { + +/*--------------------------- + Defaults for Reveal +----------------------------*/ + +/*--------------------------- + Listener for data-reveal-id attributes +----------------------------*/ + + $('a[data-reveal-id]').live('click', function(e) { + e.preventDefault(); + var modalLocation = $(this).attr('data-reveal-id'); + $('#'+modalLocation).reveal($(this).data()); + }); + +/*--------------------------- + Extend and Execute +----------------------------*/ + + $.fn.reveal = function(options) { + + + var defaults = { + animation: 'fadeAndPop', //fade, fadeAndPop, none + animationspeed: 300, //how fast animtions are + closeonbackgroundclick: true, //if you click background will modal close? + dismissmodalclass: 'close-reveal-modal' //the class of a button or element that will close an open modal + }; + + //Extend dem' options + var options = $.extend({}, defaults, options); + + return this.each(function() { + +/*--------------------------- + Global Variables +----------------------------*/ + var modal = $(this), + topMeasure = parseInt(modal.css('top')), + topOffset = modal.height() + topMeasure, + locked = false, + modalBG = $('.reveal-modal-bg'); + +/*--------------------------- + Create Modal BG +----------------------------*/ + if(modalBG.length == 0) { + modalBG = $('
').insertAfter(modal); + } + +/*--------------------------- + Open & Close Animations +----------------------------*/ + //Entrance Animations + modal.bind('reveal:open', function () { + modalBG.unbind('click.modalEvent'); + $('.' + options.dismissmodalclass).unbind('click.modalEvent'); + if(!locked) { + lockModal(); + if(options.animation == "fadeAndPop") { + modal.css({'top': $(document).scrollTop()-topOffset, 'opacity' : 0, 'visibility' : 'visible'}); + modalBG.fadeIn(options.animationspeed/2); + modal.delay(options.animationspeed/2).animate({ + "top": $(document).scrollTop()+topMeasure + 'px', + "opacity" : 1 + }, options.animationspeed,unlockModal()); + } + if(options.animation == "fade") { + modal.css({'opacity' : 0, 'visibility' : 'visible', 'top': $(document).scrollTop()+topMeasure}); + modalBG.fadeIn(options.animationspeed/2); + modal.delay(options.animationspeed/2).animate({ + "opacity" : 1 + }, options.animationspeed,unlockModal()); + } + if(options.animation == "none") { + modal.css({'visibility' : 'visible', 'top':$(document).scrollTop()+topMeasure}); + modalBG.css({"display":"block"}); + unlockModal() + } + } + modal.unbind('reveal:open'); + }); + + //Closing Animation + modal.bind('reveal:close', function () { + if(!locked) { + lockModal(); + if(options.animation == "fadeAndPop") { + modalBG.delay(options.animationspeed).fadeOut(options.animationspeed); + modal.animate({ + "top": $(document).scrollTop()-topOffset + 'px', + "opacity" : 0 + }, options.animationspeed/2, function() { + modal.css({'top':topMeasure, 'opacity' : 1, 'visibility' : 'hidden'}); + unlockModal(); + }); + } + if(options.animation == "fade") { + modalBG.delay(options.animationspeed).fadeOut(options.animationspeed); + modal.animate({ + "opacity" : 0 + }, options.animationspeed, function() { + modal.css({'opacity' : 1, 'visibility' : 'hidden', 'top' : topMeasure}); + unlockModal(); + }); + } + if(options.animation == "none") { + modal.css({'visibility' : 'hidden', 'top' : topMeasure}); + modalBG.css({'display' : 'none'}); + } + } + modal.unbind('reveal:close'); + }); + +/*--------------------------- + Open and add Closing Listeners +----------------------------*/ + //Open Modal Immediately + modal.trigger('reveal:open') + + //Close Modal Listeners + var closeButton = $('.' + options.dismissmodalclass).bind('click.modalEvent', function () { + modal.trigger('reveal:close') + }); + + if(options.closeonbackgroundclick) { + modalBG.css({"cursor":"pointer"}) + modalBG.bind('click.modalEvent', function () { + modal.trigger('reveal:close') + }); + } + $('body').keyup(function(e) { + if(e.which===27){ modal.trigger('reveal:close'); } // 27 is the keycode for the Escape key + }); + + +/*--------------------------- + Animations Locks +----------------------------*/ + function unlockModal() { + locked = false; + } + function lockModal() { + locked = true; + } + + });//each call + }//orbit plugin call +})(jQuery); + diff --git a/samples/Cellar/CellarServer/Content/scripts/knockout-2.1.0.js b/samples/Cellar/CellarServer/Content/scripts/knockout-2.1.0.js new file mode 100644 index 000000000..107026da1 --- /dev/null +++ b/samples/Cellar/CellarServer/Content/scripts/knockout-2.1.0.js @@ -0,0 +1,86 @@ +// Knockout JavaScript library v2.1.0 +// (c) Steven Sanderson - http://knockoutjs.com/ +// License: MIT (http://www.opensource.org/licenses/mit-license.php) + +(function(window,document,navigator,undefined){ +function m(w){throw w;}var n=void 0,p=!0,s=null,t=!1;function A(w){return function(){return w}};function E(w){function B(b,c,d){d&&c!==a.k.r(b)&&a.k.S(b,c);c!==a.k.r(b)&&a.a.va(b,"change")}var a="undefined"!==typeof w?w:{};a.b=function(b,c){for(var d=b.split("."),f=a,g=0;g",c[0];);return 4a.a.j(c,b[e])&&c.push(b[e]);return c},T:function(a,b){for(var a=a||[],c=[], +e=0,f=a.length;ea.length?t:a.substring(0,b.length)===b},eb:function(a,b){for(var c="return ("+a+")",e=0;e","
"]||!d.indexOf("",""]||(!d.indexOf("",""]||[0,"",""];b="ignored
"+d[1]+b+d[2]+"
";for("function"==typeof window.innerShiv?c.appendChild(window.innerShiv(b)):c.innerHTML=b;d[0]--;)c=c.lastChild;c=a.a.L(c.lastChild.childNodes)}return c}; +a.a.Y=function(b,c){a.a.ga(b);if(c!==s&&c!==n)if("string"!=typeof c&&(c=c.toString()),"undefined"!=typeof jQuery)jQuery(b).html(c);else for(var d=a.a.pa(c),f=0;f"},Va:function(a,b){var c=d[a];c===n&&m(Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized."));try{return c.apply(s,b||[]),p}finally{delete d[a]}},Wa:function(b,d){var e=[];c(b,e);for(var h=0,j=e.length;hc;c++)b=b();return b})};a.toJSON=function(b,c,e){b=a.Ta(b);return a.a.sa(b,c,e)}})();a.b("toJS",a.Ta);a.b("toJSON",a.toJSON);(function(){a.k={r:function(b){switch(a.a.o(b)){case "option":return b.__ko__hasDomDataOptionValue__===p?a.a.f.get(b,a.c.options.oa):b.getAttribute("value");case "select":return 0<=b.selectedIndex?a.k.r(b.options[b.selectedIndex]):n;default:return b.value}},S:function(b,c){switch(a.a.o(b)){case "option":switch(typeof c){case "string":a.a.f.set(b,a.c.options.oa, +n);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=c;break;default:a.a.f.set(b,a.c.options.oa,c),b.__ko__hasDomDataOptionValue__=p,b.value="number"===typeof c?c:""}break;case "select":for(var d=b.options.length-1;0<=d;d--)if(a.k.r(b.options[d])==c){b.selectedIndex=d;break}break;default:if(c===s||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.k);a.b("selectExtensions.readValue",a.k.r);a.b("selectExtensions.writeValue",a.k.S);a.g=function(){function b(a,b){for(var d= +s;a!=d;)d=a,a=a.replace(c,function(a,c){return b[c]});return a}var c=/\@ko_token_(\d+)\@/g,d=/^[\_$a-z][\_$a-z0-9]*(\[.*?\])*(\.[\_$a-z][\_$a-z0-9]*(\[.*?\])*)*$/i,f=["true","false"];return{D:[],W:function(c){var e=a.a.w(c);if(3>e.length)return[];"{"===e.charAt(0)&&(e=e.substring(1,e.length-1));for(var c=[],d=s,f,k=0;k$/: +/^\s*ko\s+(.*\:.*)\s*$/,h=g?/^<\!--\s*\/ko\s*--\>$/:/^\s*\/ko\s*$/,j={ul:p,ol:p};a.e={C:{},childNodes:function(a){return b(a)?d(a):a.childNodes},ha:function(c){if(b(c))for(var c=a.e.childNodes(c),e=0,d=c.length;e"),t))}};a.c.uniqueName.gb=0;a.c.checked={init:function(b,c,d){a.a.n(b,"click",function(){var f;if("checkbox"==b.type)f=b.checked;else if("radio"==b.type&&b.checked)f=b.value;else return;var g=c();"checkbox"==b.type&&a.a.d(g)instanceof Array?(f=a.a.j(a.a.d(g),b.value), +b.checked&&0>f?g.push(b.value):!b.checked&&0<=f&&g.splice(f,1)):a.g.$(g,d,"checked",f,p)});"radio"==b.type&&!b.name&&a.c.uniqueName.init(b,A(p))},update:function(b,c){var d=a.a.d(c());"checkbox"==b.type?b.checked=d instanceof Array?0<=a.a.j(d,b.value):d:"radio"==b.type&&(b.checked=b.value==d)}};var F={"class":"className","for":"htmlFor"};a.c.attr={update:function(b,c){var d=a.a.d(c())||{},f;for(f in d)if("string"==typeof f){var g=a.a.d(d[f]),e=g===t||g===s||g===n;e&&b.removeAttribute(f);8>=a.a.ja&& +f in F?(f=F[f],e?b.removeAttribute(f):b[f]=g):e||b.setAttribute(f,g.toString())}}};a.c.hasfocus={init:function(b,c,d){function f(b){var e=c();a.g.$(e,d,"hasfocus",b,p)}a.a.n(b,"focus",function(){f(p)});a.a.n(b,"focusin",function(){f(p)});a.a.n(b,"blur",function(){f(t)});a.a.n(b,"focusout",function(){f(t)})},update:function(b,c){var d=a.a.d(c());d?b.focus():b.blur();a.a.va(b,d?"focusin":"focusout")}};a.c["with"]={p:function(b){return function(){var c=b();return{"if":c,data:c,templateEngine:a.q.K}}}, +init:function(b,c){return a.c.template.init(b,a.c["with"].p(c))},update:function(b,c,d,f,g){return a.c.template.update(b,a.c["with"].p(c),d,f,g)}};a.g.D["with"]=t;a.e.C["with"]=p;a.c["if"]={p:function(b){return function(){return{"if":b(),templateEngine:a.q.K}}},init:function(b,c){return a.c.template.init(b,a.c["if"].p(c))},update:function(b,c,d,f,g){return a.c.template.update(b,a.c["if"].p(c),d,f,g)}};a.g.D["if"]=t;a.e.C["if"]=p;a.c.ifnot={p:function(b){return function(){return{ifnot:b(),templateEngine:a.q.K}}}, +init:function(b,c){return a.c.template.init(b,a.c.ifnot.p(c))},update:function(b,c,d,f,g){return a.c.template.update(b,a.c.ifnot.p(c),d,f,g)}};a.g.D.ifnot=t;a.e.C.ifnot=p;a.c.foreach={p:function(b){return function(){var c=a.a.d(b());return!c||"number"==typeof c.length?{foreach:c,templateEngine:a.q.K}:{foreach:c.data,includeDestroyed:c.includeDestroyed,afterAdd:c.afterAdd,beforeRemove:c.beforeRemove,afterRender:c.afterRender,templateEngine:a.q.K}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.p(c))}, +update:function(b,c,d,f,g){return a.c.template.update(b,a.c.foreach.p(c),d,f,g)}};a.g.D.foreach=t;a.e.C.foreach=p;a.t=function(){};a.t.prototype.renderTemplateSource=function(){m(Error("Override renderTemplateSource"))};a.t.prototype.createJavaScriptEvaluatorBlock=function(){m(Error("Override createJavaScriptEvaluatorBlock"))};a.t.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){var c=c||document,d=c.getElementById(b);d||m(Error("Cannot find template with ID "+b));return new a.l.i(d)}if(1== +b.nodeType||8==b.nodeType)return new a.l.M(b);m(Error("Unknown template type: "+b))};a.t.prototype.renderTemplate=function(a,c,d,f){return this.renderTemplateSource(this.makeTemplateSource(a,f),c,d)};a.t.prototype.isTemplateRewritten=function(a,c){return this.allowTemplateRewriting===t||!(c&&c!=document)&&this.V&&this.V[a]?p:this.makeTemplateSource(a,c).data("isRewritten")};a.t.prototype.rewriteTemplate=function(a,c,d){var f=this.makeTemplateSource(a,d),c=c(f.text());f.text(c);f.data("isRewritten", +p);!(d&&d!=document)&&"string"==typeof a&&(this.V=this.V||{},this.V[a]=p)};a.b("templateEngine",a.t);a.Z=function(){function b(b,c,e){for(var b=a.g.W(b),d=a.g.D,j=0;j/g;return{mb:function(b,c,e){c.isTemplateRewritten(b,e)||c.rewriteTemplate(b,function(b){return a.Z.zb(b,c)},e)},zb:function(a,g){return a.replace(c,function(a,c,d,f,i,l,q){return b(q,c,g)}).replace(d,function(a,c){return b(c,"<\!-- ko --\>",g)})},Za:function(b){return a.s.na(function(c, +e){c.nextSibling&&a.ya(c.nextSibling,b,e)})}}}();a.b("templateRewriting",a.Z);a.b("templateRewriting.applyMemoizedBindingsToNextSibling",a.Z.Za);(function(){a.l={};a.l.i=function(a){this.i=a};a.l.i.prototype.text=function(){var b=a.a.o(this.i),b="script"===b?"text":"textarea"===b?"value":"innerHTML";if(0==arguments.length)return this.i[b];var c=arguments[0];"innerHTML"===b?a.a.Y(this.i,c):this.i[b]=c};a.l.i.prototype.data=function(b){if(1===arguments.length)return a.a.f.get(this.i,"templateSourceData_"+ +b);a.a.f.set(this.i,"templateSourceData_"+b,arguments[1])};a.l.M=function(a){this.i=a};a.l.M.prototype=new a.l.i;a.l.M.prototype.text=function(){if(0==arguments.length){var b=a.a.f.get(this.i,"__ko_anon_template__")||{};b.ua===n&&b.da&&(b.ua=b.da.innerHTML);return b.ua}a.a.f.set(this.i,"__ko_anon_template__",{ua:arguments[0]})};a.l.i.prototype.nodes=function(){if(0==arguments.length)return(a.a.f.get(this.i,"__ko_anon_template__")||{}).da;a.a.f.set(this.i,"__ko_anon_template__",{da:arguments[0]})}; +a.b("templateSources",a.l);a.b("templateSources.domElement",a.l.i);a.b("templateSources.anonymousTemplate",a.l.M)})();(function(){function b(b,c,d){for(var f,c=a.e.nextSibling(c);b&&(f=b)!==c;)b=a.e.nextSibling(f),(1===f.nodeType||8===f.nodeType)&&d(f)}function c(c,d){if(c.length){var f=c[0],g=c[c.length-1];b(f,g,function(b){a.xa(d,b)});b(f,g,function(b){a.s.Wa(b,[d])})}}function d(a){return a.nodeType?a:0a.a.ja)&&b.nodes?b.nodes():s; +if(c)return a.a.L(c.cloneNode(p).childNodes);b=b.text();return a.a.pa(b)};a.q.K=new a.q;a.ra(a.q.K);a.b("nativeTemplateEngine",a.q);(function(){a.ma=function(){var a=this.vb=function(){if("undefined"==typeof jQuery||!jQuery.tmpl)return 0;try{if(0<=jQuery.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,f,g){g=g||{};2>a&&m(Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."));var e=b.data("precompiled"); +e||(e=b.text()||"",e=jQuery.template(s,"{{ko_with $item.koBindingContext}}"+e+"{{/ko_with}}"),b.data("precompiled",e));b=[f.$data];f=jQuery.extend({koBindingContext:f},g.templateOptions);f=jQuery.tmpl(e,b,f);f.appendTo(document.createElement("div"));jQuery.fragments={};return f};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){document.write(" + + + +

Test Results

+

+

+
    +
    + + + + + + + + + diff --git a/tests/TestSite/Code/OOP.cs b/tests/TestSite/Code/OOP.cs index 1b5d7b415..e6c0a0241 100644 --- a/tests/TestSite/Code/OOP.cs +++ b/tests/TestSite/Code/OOP.cs @@ -9,22 +9,22 @@ namespace Test { public interface IMammal { } - + public interface IPet { - + string Name { get; } - + string Owner { get; } } - + public class Animal { - + private string _species; - + public Animal(string species) { _species = species; } @@ -104,7 +104,7 @@ public string Name { return _name; } } - + public ICharacter Star { get { return _star; @@ -121,3 +121,140 @@ public interface IObject { public class Zoo { } } + + +namespace Test.Bases { + + // A series of classes with different combinations of overrides at different + // levels in the class hierarchy. Tests issues #379, #384 as applied to properties, + // methods, and index operators. + + public class C1 { + private string _valueA = "A"; + + public virtual string PropertyA { + get { + return _valueA + "-PC1"; + } + set { + _valueA = value + "+PC1"; + } + } + + public virtual string MethodA() { + return _valueA + "-MC1"; + } + + public virtual string this[int key] { + get { + return _valueA + "-" + key.ToString() + "IC1"; + } + set { + _valueA = value + "+" + key.ToString() + "IC1"; + } + } + } + + public class C2 : C1 { + public override string PropertyA { + get { + return base.PropertyA + "-PC2"; + } + set { + base.PropertyA = value + "+PC2"; + } + } + + public override string MethodA() { + return base.MethodA() + "-MC2"; + } + + public override string this[int key] { + get { + return base[key] + "-" + key.ToString() + "IC2"; + } + set { + base[key] = value + "+" + key.ToString() + "IC2"; + } + } + } + + public class C3 : C2 { + public override string PropertyA { + get { + return base.PropertyA + "-PC3"; + } + set { + base.PropertyA = value + "+PC3"; + } + } + + public override string MethodA() { + return base.MethodA() + "-MC3"; + } + + public override string this[int key] { + get { + return base[key] + "-" + key.ToString() + "IC3"; + } + set { + base[key] = value + "+" + key.ToString() + "IC3"; + } + } + } + + public class C4 : C3 { + // intentionally skip this generation of overrides + } + + public class C5 : C4 { + public override string PropertyA { + get { + return base.PropertyA + "-PC5"; + } + set { + base.PropertyA = value + "+PC5"; + } + } + + public override string MethodA() { + return base.MethodA() + "-MC5"; + } + + public override string this[int key] { + get { + return base[key] + "-" + key.ToString() + "IC5"; + } + set { + base[key] = value + "+" + key.ToString() + "IC5"; + } + } + } + + public class TestCase { + + public static string RunTest(C1 x) { + string output = ""; + string delim = ","; + + // Test getter, method, and index (should accumulate outward through bases) + output = x.PropertyA + + delim + x.MethodA() + + delim + x[99]; + + // Test property setter (should accumulate inward and outward through bases) + + x.PropertyA = "X"; + output += delim + x.PropertyA; + + // Test index setter (should accumulate inward and outward through bases) + + x[88] = "Y"; + output += delim + x[99]; + + return output; + } + + } + +} From 66bf380983bc14e3ed3286cfa649cc1f9d3b9988 Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Fri, 21 Jun 2013 09:57:20 -0500 Subject: [PATCH 103/107] Fix some whitespace. --- tests/TestSite/Code/OOP.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/TestSite/Code/OOP.cs b/tests/TestSite/Code/OOP.cs index e6c0a0241..7891e84ef 100644 --- a/tests/TestSite/Code/OOP.cs +++ b/tests/TestSite/Code/OOP.cs @@ -9,22 +9,22 @@ namespace Test { public interface IMammal { } - + public interface IPet { - + string Name { get; } - + string Owner { get; } } - + public class Animal { - + private string _species; - + public Animal(string species) { _species = species; } @@ -104,7 +104,7 @@ public string Name { return _name; } } - + public ICharacter Star { get { return _star; From 4fac58c3c005080a8b1c91e70f1db00e105f895e Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Fri, 21 Jun 2013 14:06:36 -0500 Subject: [PATCH 104/107] Add missing namespaced methods to Html.Document. And ImportNode. --- src/Libraries/Web/Html/Document.cs | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/Libraries/Web/Html/Document.cs b/src/Libraries/Web/Html/Document.cs index b4790206e..957266017 100644 --- a/src/Libraries/Web/Html/Document.cs +++ b/src/Libraries/Web/Html/Document.cs @@ -148,18 +148,53 @@ public static void AddEventListener(string eventName, ElementEventListener liste public static void AttachEvent(string eventName, ElementEventHandler handler) { } + /// + /// Creates an Attr of the given name. Note that the Attr instance can then be set on an + /// Element using the setAttributeNode method. To create an attribute with a qualified name + /// and namespace URI, use the CreateAttributeNS method. + /// + /// The name of the attribute. + /// A new Attr object with the nodeName attribute set to name, and localName, prefix, + /// and namespaceURI set to null. The value of the attribute is the empty string. public static ElementAttribute CreateAttribute(string name) { return null; } + /// + /// Creates an attribute of the given qualified name and namespace URI. + /// + /// The namespace URI of the attribute to create. + /// The qualified name of the attribute to instantiate. + /// A new Attr object with the given namespace and qualified name. + public static ElementAttribute CreateAttributeNS(string namespaceURI, string qualifiedName) { + return null; + } + public static DocumentFragment CreateDocumentFragment() { return null; } + /// + /// Creates an element of the type specified. + /// To create an element with a qualified name and namespace URI, use the CreateElementNS method. + /// + /// The name of the element type to instantiate. + /// A new Element object with the nodeName attribute set to tagName, and localName, + /// prefix, and namespaceURI set to null. public static Element CreateElement(string tagName) { return null; } + /// + /// Creates an element of the given qualified name and namespace URI. + /// + /// The namespace URI of the element to create. + /// The qualified name of the element type to instantiate. + /// A new Element object with the given namespace and qualified name. + public static Element CreateElementNS(string namespaceURI, string qualifiedName) { + return null; + } + public static MutableEvent CreateEvent(string eventType) { return null; } @@ -168,6 +203,10 @@ public static Element CreateTextNode(string data) { return null; } + public static Element ImportNode(Element imporedNode, bool deep) { + return null; + } + public static void DetachEvent(string eventName, ElementEventHandler handler) { } @@ -206,6 +245,16 @@ public static ElementCollection GetElementsByTagName(string tagName) { return null; } + /// + /// Returns a NodeList of all the Elements with a given local name and namespace URI in the order in which they are encountered in a preorder traversal of the Document tree. + /// + /// The namespace URI of the elements to match on. The special value "*" matches all namespaces. + /// The local name of the elements to match on. The special value "*" matches all local names. + /// A new NodeList object containing all the matched Elements. + public static ElementCollection GetElementsByTagNameNS(string namespaceURI, string localName) { + return null; + } + public static bool HasFocus() { return false; } From 0e3f288247a38d4930570fcc6951895de562606e Mon Sep 17 00:00:00 2001 From: Nikhil Kothari Date: Sun, 23 Jun 2013 17:06:50 -0600 Subject: [PATCH 105/107] Minor formatting changes --- tests/Core/BrowserTest.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Core/BrowserTest.cs b/tests/Core/BrowserTest.cs index d807e7f4e..2dc75d4ab 100644 --- a/tests/Core/BrowserTest.cs +++ b/tests/Core/BrowserTest.cs @@ -49,15 +49,15 @@ static BrowserTest() { SimpleCompilation compilation = new SimpleCompilation(Path.Combine(scriptsDirectory, script)); bool result = compilation.AddReference(mscorlibPath) - .AddSource(Path.Combine(codeDirectory, codeFile)) - .Execute(); + .AddSource(Path.Combine(codeDirectory, codeFile)) + .Execute(); - if (!result) { + if (result == false) { codeFailures.Add(codeFile); } } - _compilationFailures = (codeFailures.Count == 0) ? null : string.Join(", ", codeFailures); + _compilationFailures = (codeFailures.Count == 0) ? null : String.Join(", ", codeFailures); _webTest = new WebTest(); _webTest.StartWebServer(_port, webRoot); From 26dc5645b86946c7a01edf16d2dc18e3f3720be4 Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Fri, 23 Aug 2013 11:51:08 -0500 Subject: [PATCH 106/107] NodeApi.IO.Buffer.Length should be a simple property accessor. --- src/Libraries/Node/Node.Core/IO/Buffer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Libraries/Node/Node.Core/IO/Buffer.cs b/src/Libraries/Node/Node.Core/IO/Buffer.cs index b2c81f3ae..3b8c1de6a 100644 --- a/src/Libraries/Node/Node.Core/IO/Buffer.cs +++ b/src/Libraries/Node/Node.Core/IO/Buffer.cs @@ -24,6 +24,7 @@ public Buffer(string data) { public Buffer(string data, Encoding encoding) { } + [ScriptField] public int Length { get { return 0; From 9b4780f03e7b1169c43df337ed8f20c14f089e4e Mon Sep 17 00:00:00 2001 From: Mark Stega Date: Mon, 18 Nov 2013 09:22:45 -0500 Subject: [PATCH 107/107] Added VS2013 target --- src/ZipX/VSIX/Extension.vsixmanifest | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ZipX/VSIX/Extension.vsixmanifest b/src/ZipX/VSIX/Extension.vsixmanifest index d8ed80ae0..459fd8d27 100644 --- a/src/ZipX/VSIX/Extension.vsixmanifest +++ b/src/ZipX/VSIX/Extension.vsixmanifest @@ -29,6 +29,13 @@ VCSExpress VWDExpress + + Ultimate + Premium + Pro + VCSExpress + VWDExpress +