[seed] Add lang.js from GJS modules
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] Add lang.js from GJS modules
- Date: Sat, 9 May 2009 21:29:40 -0400 (EDT)
commit 7db832dd1425dc2cab8124af945aca386c6fd086
Author: Robert Carr <racarr svn gnome org>
Date: Sat May 9 21:27:19 2009 -0400
Add lang.js from GJS modules
---
modules/dbus/Makefile.am | 2 +-
modules/dbus/lang.js | 112 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 113 insertions(+), 1 deletions(-)
diff --git a/modules/dbus/Makefile.am b/modules/dbus/Makefile.am
index 5b8804f..7dcffa6 100644
--- a/modules/dbus/Makefile.am
+++ b/modules/dbus/Makefile.am
@@ -1,7 +1,7 @@
if BUILD_DBUS_MODULE
moduledir = ${seeddir}/share/seed
-module_DATA = dbus.js
+module_DATA = dbus.js lang.js
seedlibdir = ${exec_prefix}/lib/seed
diff --git a/modules/dbus/lang.js b/modules/dbus/lang.js
new file mode 100644
index 0000000..baa00fc
--- /dev/null
+++ b/modules/dbus/lang.js
@@ -0,0 +1,112 @@
+// Copyright (c) 2008 litl, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+
+// Utilities that are "meta-language" things like manipulating object props
+
+function countProperties(obj) {
+ let count = 0;
+ for (let property in obj) {
+ count += 1;
+ }
+ return count;
+}
+
+function _copyProperty(source, dest, property) {
+ let getterFunc = source.__lookupGetter__(property);
+ let setterFunc = source.__lookupSetter__(property);
+
+ if (getterFunc) {
+ dest.__defineGetter__(property, getterFunc);
+ }
+
+ if (setterFunc) {
+ dest.__defineSetter__(property, setterFunc);
+ }
+
+ if (!setterFunc && !getterFunc) {
+ dest[property] = source[property];
+ }
+}
+
+function copyProperties(source, dest) {
+ for (let property in source) {
+ _copyProperty(source, dest, property);
+ }
+}
+
+function copyPublicProperties(source, dest) {
+ for (let property in source) {
+ if (typeof(property) == 'string' &&
+ property.substring(0, 1) == '_') {
+ continue;
+ } else {
+ _copyProperty(source, dest, property);
+ }
+ }
+}
+
+function copyPropertiesNoOverwrite(source, dest) {
+ for (let property in source) {
+ if (!(property in dest)) {
+ _copyProperty(source, dest, property);
+ }
+ }
+}
+
+function removeNullProperties(obj) {
+ for (let property in obj) {
+ if (obj[property] == null)
+ delete obj[property];
+ else if (typeof(obj[property]) == 'object')
+ removeNullProperties(obj[property]);
+ }
+}
+
+/**
+ * Binds obj to callback. Makes it possible to refer to "obj"
+ * using this within the callback.
+ * @param {object} obj the object to bind
+ * @param {function} callback callback to bind obj in
+ * @param arguments additional arguments to the callback
+ * @returns: a new callback
+ * @type: function
+ */
+function bind(obj, callback) {
+ let me = obj;
+ let bindArguments = Array.prototype.slice.call(arguments, 2);
+
+ if (typeof(obj) != 'object') {
+ throw new Error(
+ "first argument to Lang.bind() must be an object, not " +
+ typeof(obj));
+ }
+
+ if (typeof(callback) != 'function') {
+ throw new Error(
+ "second argument to Lang.bind() must be a function, not " +
+ typeof(callback));
+ }
+
+ return function() {
+ let args = Array.prototype.slice.call(arguments);
+ args = args.concat(bindArguments);
+ return callback.apply(me, args);
+ };
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]