phaser3-rex-plugins
Version:
1,345 lines (1,288 loc) • 41.2 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.rexparseplugin = factory());
})(this, (function () { 'use strict';
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
}
var LoadScript = function LoadScript(url, onload) {
var scripts = document.getElementsByTagName('script');
for (var i = 0, cnt = scripts.length; i < cnt; i++) {
if (scripts[i].src.indexOf(url) != -1) {
if (onload) {
onload();
}
return;
}
}
var newScriptTag = document.createElement('script');
newScriptTag.setAttribute('src', url);
if (onload) {
newScriptTag.onload = onload;
}
document.head.appendChild(newScriptTag);
};
var LoadScriptPromise = function LoadScriptPromise(url) {
return new Promise(function (resolve, reject) {
LoadScript(url, resolve);
});
};
var VERSION = '2.11.0';
var CDNURL = "https://npmcdn.com/parse@".concat(VERSION, "/dist/parse.min.js");
var Preload = function Preload(url) {
if (url === undefined) {
url = CDNURL;
}
return LoadScriptPromise(url);
};
var FILE_POPULATED = Phaser.Loader.FILE_POPULATED;
var UUID = Phaser.Utils.String.UUID;
var AwaitFile = /*#__PURE__*/function (_Phaser$Loader$File) {
_inherits(AwaitFile, _Phaser$Loader$File);
var _super = _createSuper(AwaitFile);
function AwaitFile(loader, fileConfig) {
_classCallCheck(this, AwaitFile);
if (!fileConfig.hasOwnProperty('type')) {
fileConfig.type = 'await';
}
if (!fileConfig.hasOwnProperty('url')) {
fileConfig.url = '';
}
if (!fileConfig.hasOwnProperty('key')) {
fileConfig.key = UUID();
}
return _super.call(this, loader, fileConfig);
}
_createClass(AwaitFile, [{
key: "load",
value: function load() {
if (this.state === FILE_POPULATED) {
// Can happen for example in a JSONFile if they've provided a JSON object instead of a URL
this.loader.nextFile(this, true);
} else {
// start loading task
var config = this.config;
var callback = config.callback;
var scope = config.scope;
var successCallback = this.onLoad.bind(this);
var failureCallback = this.onError.bind(this);
if (callback) {
if (scope) {
callback.call(scope, successCallback, failureCallback);
} else {
callback(successCallback, failureCallback);
}
} else {
this.onLoad();
}
}
}
}, {
key: "onLoad",
value: function onLoad() {
this.loader.nextFile(this, true);
}
}, {
key: "onError",
value: function onError() {
this.loader.nextFile(this, false);
}
}]);
return AwaitFile;
}(Phaser.Loader.File);
var LoaderCallback = function LoaderCallback(url) {
var callback = function callback(successCallback, failureCallback) {
return Preload(url).then(function () {
setTimeout(successCallback, 0);
})["catch"](failureCallback);
};
this.addFile(new AwaitFile(this, {
config: {
callback: callback
}
}));
return this;
};
var ObjectFactory = /*#__PURE__*/function () {
function ObjectFactory() {
_classCallCheck(this, ObjectFactory);
}
_createClass(ObjectFactory, [{
key: "initializeApp",
value: function initializeApp(config) {
firebase.initializeApp(config);
return this;
}
}], [{
key: "register",
value: function register(type, callback) {
ObjectFactory.prototype[type] = callback;
}
}]);
return ObjectFactory;
}();
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2019 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
// Source object
// The key as a string, or an array of keys, i.e. 'banner', or 'banner.hideBanner'
// The default value to use if the key doesn't exist
/**
* Retrieves a value from an object.
*
* @function Phaser.Utils.Objects.GetValue
* @since 3.0.0
*
* @param {object} source - The object to retrieve the value from.
* @param {string} key - The name of the property to retrieve from the object. If a property is nested, the names of its preceding properties should be separated by a dot (`.`) - `banner.hideBanner` would return the value of the `hideBanner` property from the object stored in the `banner` property of the `source` object.
* @param {*} defaultValue - The value to return if the `key` isn't found in the `source` object.
*
* @return {*} The value of the requested key.
*/
var GetValue = function GetValue(source, key, defaultValue) {
if (!source || typeof source === 'number') {
return defaultValue;
} else if (source.hasOwnProperty(key)) {
return source[key];
} else if (key.indexOf('.') !== -1) {
var keys = key.split('.');
var parent = source;
var value = defaultValue;
// Use for loop here so we can break early
for (var i = 0; i < keys.length; i++) {
if (parent.hasOwnProperty(keys[i])) {
// Yes it has a key property, let's carry on down
value = parent[keys[i]];
parent = parent[keys[i]];
} else {
// Can't go any further, so reset to default
value = defaultValue;
break;
}
}
return value;
} else {
return defaultValue;
}
};
var Query = function Query(config) {
if (config.startIndex === undefined) {
config.startIndex = 0;
}
if (config.totalLines === undefined) {
config.totalLines = Infinity;
}
if (config.linesPerPage === undefined) {
config.linesPerPage = 1000;
}
config.remainderLines = config.totalLines;
return QueryNextPage(config);
};
var QueryNextPage = function QueryNextPage(config) {
var query = config.query;
var lineCount = Math.min(config.remainderLines, config.linesPerPage);
config.remainderLines -= lineCount;
return query.skip(config.startIndex).limit(lineCount).find().then(function (items) {
var done = config.remainderLines === 0 || items.length < lineCount; // Is last page
if (config.forEachPageCallback) {
done |= !!config.forEachPageCallback(items);
}
if (done) {
var out;
if (config.resolveCallback) {
out = config.resolveCallback();
}
return Promise.resolve(out);
} else {
config.startIndex += items.length;
return QueryNextPage(config);
}
});
};
var Load = function Load(query, startIndex, totalLines) {
var out = [];
return Query({
query: query,
startIndex: startIndex,
totalLines: totalLines,
forEachPageCallback: function forEachPageCallback(items) {
out.push.apply(out, _toConsumableArray(items));
},
resolveCallback: function resolveCallback() {
return out;
}
});
};
var Methods$5 = {
loadItems: function loadItems(startIndex, itemCount) {
if (startIndex === undefined) {
startIndex = 0;
}
if (itemCount === undefined) {
itemCount = Infinity;
}
this.items.length = 0;
var self = this;
return Load(this.query, startIndex, itemCount).then(function (items) {
self.items = items;
self.startIndex = startIndex;
self.pageIndex = Math.floor(startIndex / self.itemCount);
self.isFullPage = itemCount === Infinity ? true : itemCount === items.length;
return Promise.resolve(items);
})["catch"](function (error) {
self.isFullPage = false;
return Promise.reject(error);
});
},
loadPage: function loadPage(pageIndex) {
var startIndex = pageIndex * this.itemCount;
return this.loadItems(startIndex, this.itemCount);
},
loadFirstPage: function loadFirstPage() {
return this.loadItems(0, this.itemCount);
},
loadCurrentPage: function loadCurrentPage() {
return this.loadItems(this.startIndex, this.itemCount);
},
loadNextPage: function loadNextPage() {
var startIndex = this.startIndex + this.itemCount;
return this.loadItems(startIndex, this.itemCount);
},
loadPreviousPage: function loadPreviousPage() {
var startIndex = this.startIndex - this.itemCount;
return this.loadItems(startIndex, this.itemCount);
}
};
var PageLoader = /*#__PURE__*/function () {
function PageLoader(config) {
_classCallCheck(this, PageLoader);
this.items = [];
this.startIndex = 0;
this.pageIndex = 0;
this.isFullPage = false;
this.setItemCount(GetValue(config, 'itemCount', 100));
this.setQuery(GetValue(config, 'query', undefined));
}
_createClass(PageLoader, [{
key: "setItemCount",
value: function setItemCount(itemCount) {
this.itemCount = itemCount;
this.pageIndex = Math.floor(this.startIndex / itemCount);
return this;
}
}, {
key: "setQuery",
value: function setQuery(query) {
this.query = query;
return this;
}
}, {
key: "getItem",
value: function getItem(i) {
return this.items[i - this.startIndex];
}
}, {
key: "findFirst",
value: function findFirst(key, value) {
for (var i, cnt = this.items.length; i < cnt; i++) {
if (this.items[i].get(key) === value) {
return i + this.startIndex;
}
}
return -1;
}
}]);
return PageLoader;
}();
Object.assign(PageLoader.prototype, Methods$5);
var IsInValidKey = function IsInValidKey(keys) {
return keys == null || keys === '' || keys.length === 0;
};
var GetEntry = function GetEntry(target, keys, defaultEntry) {
var entry = target;
if (IsInValidKey(keys)) ; else {
if (typeof keys === 'string') {
keys = keys.split('.');
}
var key;
for (var i = 0, cnt = keys.length; i < cnt; i++) {
key = keys[i];
if (entry[key] == null || _typeof(entry[key]) !== 'object') {
var newEntry;
if (i === cnt - 1) {
if (defaultEntry === undefined) {
newEntry = {};
} else {
newEntry = defaultEntry;
}
} else {
newEntry = {};
}
entry[key] = newEntry;
}
entry = entry[key];
}
}
return entry;
};
var SetValue = function SetValue(target, keys, value, delimiter) {
if (delimiter === undefined) {
delimiter = '.';
}
// no object
if (_typeof(target) !== 'object') {
return;
}
// invalid key
else if (IsInValidKey(keys)) {
// don't erase target
if (value == null) {
return;
}
// set target to another object
else if (_typeof(value) === 'object') {
target = value;
}
} else {
if (typeof keys === 'string') {
keys = keys.split(delimiter);
}
var lastKey = keys.pop();
var entry = GetEntry(target, keys);
entry[lastKey] = value;
}
return target;
};
ObjectFactory.register('pageLoader', function (config) {
return new PageLoader(config);
});
SetValue(window, 'RexPlugins.Parse.PageLoader', PageLoader);
var GetQuery = function GetQuery(data) {
var query = this.baseQuery;
var isItem = data instanceof this.customClass;
var key, value;
for (var i = 0, cnt = this.primaryKeys.length; i < cnt; i++) {
key = this.primaryKeys[i];
value = isItem ? data.get(key) : data[key];
query.equalTo(key, value);
}
return query;
};
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2018 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
/**
* Shuffles the contents of the given array using the Fisher-Yates implementation.
*
* The original array is modified directly and returned.
*
* @function Phaser.Utils.Array.Shuffle
* @since 3.0.0
*
* @param {array} array - The array to shuffle. This array is modified in place.
*
* @return {array} The shuffled array.
*/
var Shuffle = function Shuffle(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
};
var LoadRandomItems = function LoadRandomItems(query, count) {
if (typeof query === 'number') {
count = query;
query = undefined;
}
if (query === undefined) {
query = this.baseQuery;
}
if (count === undefined) {
count = 1;
}
// Load all item Id
query.select('id');
var self = this;
return Load(query).then(function (items) {
// Shuffle items
Shuffle(items);
count = Math.min(count, items.length);
var itemIds = [];
for (var i = 0; i < count; i++) {
itemIds.push(items[i].id);
}
// Load first N items by item Id
query = self.baseQuery.containedIn('objectId', itemIds);
return Load(query);
});
};
var Methods$4 = {
loadItem: function loadItem(itemId, select) {
if (typeof itemId === 'string') {
var query = this.baseQuery;
if (select) {
query = query.select(select);
}
return query.get(itemId);
} else {
// Query by primary keys
var query = this.getQuery(itemId).limit(1);
if (select) {
query = query.select(select);
}
return query.find().then(function (result) {
return Promise.resolve(result[0]);
});
}
},
loadPage: function loadPage(pageIndex) {
return this.pageLoader.loadPage(pageIndex);
},
loadCurrentPage: function loadCurrentPage() {
return this.pageLoader.loadCurrentPage();
},
loadNextPage: function loadNextPage() {
return this.pageLoader.loadNextPage();
},
loadPreviousPage: function loadPreviousPage() {
return this.pageLoader.loadPreviousPage();
},
loadItems: function loadItems(startIndex, itemCount) {
return this.pageLoader.loadItems(startIndex, itemCount);
},
load: function load(query) {
if (query === undefined) {
query = this.baseQuery;
}
return Load(query);
},
loadRandomItems: LoadRandomItems
};
var Delete = function Delete(query) {
query.select('id');
return Load(query).then(function (items) {
if (items.length === 0) {
return Promise.resolve();
}
return Parse.Object.destroyAll(items);
});
};
var Methods$3 = {
deleteItem: function deleteItem(itemId) {
return this.createItem().set('id', itemId).destroy();
},
"delete": function _delete(query) {
if (query === undefined) {
query = this.baseQuery;
}
return Delete(query);
}
};
var Copy = function Copy(dest, src, startIdx, endIdx) {
if (startIdx === undefined) {
startIdx = 0;
}
if (endIdx === undefined) {
endIdx = src.length;
}
dest.length = endIdx - startIdx;
for (var i = 0, len = dest.length; i < len; i++) {
dest[i] = src[i + startIdx];
}
return dest;
};
var IsArray = function IsArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
var DataToItem = function DataToItem(data, itemClass, item) {
if (!item) {
item = new itemClass();
}
item.set(data);
return item;
};
var SetOwnerAccessMode = function SetOwnerAccessMode(item, ownerRead, ownerWrite) {
if (!ownerRead && !ownerWrite) {
return item;
}
var currentUser = Parse.User.current();
if (!currentUser) {
return item;
}
var acl = new Parse.ACL(currentUser);
if (!ownerWrite) {
acl.setPublicWriteAccess(true);
}
if (!ownerRead) {
acl.setPublicReadAccess(true);
}
item.setACL(acl);
return item;
};
var Save = function Save(data) {
// JSON data, or parse object
if (IsArray(data)) {
return this.saveItems(data);
}
var self = this;
return new Promise(function (resolve, reject) {
if (self.primaryKeys.length > 0) {
self.loadItem(data, 'id').then(resolve, reject);
} else {
return resolve();
}
}).then(function (item) {
item = DataToItem(data, self.customClass, item);
SetOwnerAccessMode(item, self.ownerRead, self.ownerWrite);
return item.save();
});
};
var SaveItems = function SaveItems(dataArray) {
var self = this;
return new Promise(function (resolve, reject) {
var items = [];
if (self.primaryKeys.length > 0) {
var promises = [],
promise;
var _loop = function _loop() {
var data = dataArray[i];
promise = self.loadItem(data, 'id').then(function (item) {
item = DataToItem(data, self.customClass, item);
SetOwnerAccessMode(item, self.ownerRead, self.ownerWrite);
items.push(item);
});
promises.push(promise);
};
for (var i = 0, cnt = dataArray.length; i < cnt; i++) {
_loop();
}
Promise.all(promises).then(function () {
return resolve(items);
})["catch"](reject);
} else {
for (var i = 0, cnt = dataArray.length; i < cnt; i++) {
var item = DataToItem(dataArray[i], self.customClass);
SetOwnerAccessMode(item, self.ownerRead, self.ownerWrite);
items.push(item);
}
return resolve(items);
}
}).then(function (items) {
return Parse.Object.saveAll(items);
});
};
var GetItemCount = function GetItemCount(query) {
if (query === undefined) {
query = this.baseQuery;
}
return query.count();
};
var ItemTable = /*#__PURE__*/function () {
function ItemTable(config) {
_classCallCheck(this, ItemTable);
this.pageLoader = new PageLoader();
this.setClassName(GetValue(config, 'className', 'Item'));
this.setItemCount(GetValue(config, 'itemCount', 100));
this.setQuery(); // Reset to base query
this.primaryKeys = [];
var primaryKeys = GetValue(config, 'primaryKeys', undefined);
if (primaryKeys) {
this.setPrimaryKey(primaryKeys);
}
this.setOwnerReadMode(GetValue(config, 'ownerRead', undefined));
this.setOwnerWriteMode(GetValue(config, 'ownerWrite', undefined));
}
_createClass(ItemTable, [{
key: "setClassName",
value: function setClassName(className) {
this.customClass = Parse.Object.extend(className);
return this;
}
}, {
key: "setPrimaryKey",
value: function setPrimaryKey(key) {
if (!key) {
this.primaryKeys.length = 0;
} else if (typeof key === 'string') {
this.primaryKeys.length = 1;
this.primaryKeys[0] = key;
} else {
Copy(this.primaryKeys, key);
}
return this;
}
}, {
key: "setOwnerReadMode",
value: function setOwnerReadMode(mode) {
this.ownerRead = mode;
return this;
}
}, {
key: "setOwnerWriteMode",
value: function setOwnerWriteMode(mode) {
this.ownerWrite = mode;
return this;
}
}, {
key: "createItem",
value: function createItem() {
return new this.customClass();
}
}, {
key: "setItemCount",
value: function setItemCount(itemCount) {
this.pageLoader.setItemCount(itemCount);
return this;
}
}, {
key: "setQuery",
value: function setQuery(query) {
if (query === undefined) {
query = this.baseQuery;
}
this.pageLoader.setQuery(query);
return this;
}
}, {
key: "baseQuery",
get: function get() {
return new Parse.Query(this.customClass);
}
}, {
key: "startIndex",
get: function get() {
return this.pageLoader.startIndex;
}
}, {
key: "pageIndex",
get: function get() {
return this.pageLoader.pageIndex;
}
}, {
key: "isLastPage",
get: function get() {
return this.pageLoader.isLastPage;
}
}]);
return ItemTable;
}();
var methods$2 = {
getQuery: GetQuery,
save: Save,
saveItems: SaveItems,
getItemCount: GetItemCount
};
Object.assign(ItemTable.prototype, Methods$4, Methods$3, methods$2);
ObjectFactory.register('itemTable', function (config) {
return new ItemTable(config);
});
SetValue(window, 'RexPlugins.Parse.ItemTable', ItemTable);
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2018 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
/**
* This is a slightly modified version of jQuery.isPlainObject.
* A plain object is an object whose internal class property is [object Object].
*
* @function Phaser.Utils.Objects.IsPlainObject
* @since 3.0.0
*
* @param {object} obj - The object to inspect.
*
* @return {boolean} `true` if the object is plain, otherwise `false`.
*/
var IsPlainObject = function IsPlainObject(obj) {
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
// - DOM nodes
// - window
if (_typeof(obj) !== 'object' || obj.nodeType || obj === obj.window) {
return false;
}
// Support: Firefox <20
// The try/catch suppresses exceptions thrown when attempting to access
// the "constructor" property of certain host objects, ie. |window.location|
// https://bugzilla.mozilla.org/show_bug.cgi?id=814622
try {
if (obj.constructor && !{}.hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) {
return false;
}
} catch (e) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
};
var GetTime = function GetTime(timeStamp) {
var date = timeStamp ? new Date(timeStamp) : new Date();
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var Jan1st = new Date(date.getFullYear(), 0, 1);
var w = Math.ceil(((date - Jan1st) / 86400000 + Jan1st.getDay() + 1) / 7);
return {
d: "".concat(y, "-").concat(m, "-").concat(d),
w: "".concat(y, "-").concat(w),
m: "".concat(y, "-").concat(m),
y: "".concat(y)
};
};
var TimeTagKeys = {
d: 'tagD',
w: 'tagW',
m: 'tagM',
y: 'tagY'
};
var ScoreKeys = {
d: 'scoreD',
w: 'scoreW',
m: 'scoreM',
y: 'scoreY'
};
var Post = function Post(score, extraData, timeStamp) {
var newRecord = {
userID: this.userID
};
if (this.boardID !== undefined) {
newRecord.boardID = this.boardID;
}
if (this.userName) {
newRecord.userName = this.userName;
}
var curTimeData = GetTime(timeStamp);
if (this.timeFilters !== false) {
for (var t in this.timeFilters) {
if (!this.timeFilters[t]) {
continue;
}
newRecord[TimeTagKeys[t]] = curTimeData[t];
newRecord[ScoreKeys[t]] = score;
}
} else {
// No time filters
newRecord.score = score;
}
if (this.tag) {
newRecord.tag = this.tag;
}
if (extraData) {
Object.assign(newRecord, extraData);
}
var curTimeData = GetTime();
var self = this;
return this.getMyRecordQuery().find().then(function (results) {
var prevRecord = results[0];
if (prevRecord) {
if (self.timeFilters !== false) {
for (var t in self.timeFilters) {
if (!self.timeFilters[t]) {
continue;
}
var timeTagKey = TimeTagKeys[t];
if (prevRecord.get(timeTagKey) === newRecord[timeTagKey]) {
var scoreKey = ScoreKeys[t];
newRecord[scoreKey] = Math.max(prevRecord.get(scoreKey), newRecord[scoreKey]);
}
}
} else {
// No time filters
newRecord.score = Math.max(prevRecord.get('score'), newRecord.score);
}
}
var item = DataToItem(newRecord, self.customClass, prevRecord);
return item.save();
});
};
var Methods$2 = {
loadFirstPage: function loadFirstPage() {
this.resetPageQuery();
var self = this;
return this.page.loadFirstPage().then(function (items) {
return Promise.resolve(ItemsToDataArray.call(self, items));
});
},
loadNextPage: function loadNextPage() {
this.resetPageQuery();
var self = this;
return this.page.loadNextPage().then(function (items) {
return Promise.resolve(ItemsToDataArray.call(self, items));
});
},
loadPreviousPage: function loadPreviousPage() {
this.resetPageQuery();
var self = this;
return this.page.loadPreviousPage().then(function (items) {
return Promise.resolve(ItemsToDataArray.call(self, items));
});
},
loadCurrentPage: function loadCurrentPage() {
this.resetPageQuery();
var self = this;
return this.page.loadCurrentPage().then(function (items) {
return Promise.resolve(ItemsToDataArray.call(self, items));
});
},
load: function load(count, skip) {
this.resetPageQuery();
var self = this;
return this.page.load(count, skip).then(function (items) {
return Promise.resolve(ItemsToDataArray.call(self, items));
});
},
resetPageQuery: function resetPageQuery() {
if (!this.resetQueryFlag) {
return this;
}
this.resetQueryFlag = false;
this.page.setQuery(this.getPageQuery());
return this;
}
};
var ItemsToDataArray = function ItemsToDataArray(items) {
var dataArray = [],
data;
var scoreKey = ScoreKeys[this.timeFilterType[0]];
for (var i = 0, cnt = items.length; i < cnt; i++) {
data = items[i].toJSON();
if (this.timeFilters !== false) {
data.score = data[scoreKey];
// Remove timeFilterKeys, and scoreKeys
for (var t in this.timeFilters) {
delete data[TimeTagKeys[t]];
delete data[ScoreKeys[t]];
}
}
dataArray.push(data);
}
return dataArray;
};
var GetScore = function GetScore(userID) {
return this.getMyRecordQuery(userID).find().then(function (results) {
var myRecord = results[0];
if (myRecord) {
myRecord = myRecord.toJSON();
}
return Promise.resolve(myRecord);
});
};
var FindFirst = function FindFirst(query, testCallback) {
var out = {
item: undefined,
index: undefined
};
var startIndex = 0;
return Query({
query: query,
forEachPageCallback: function forEachPageCallback(items) {
var item;
for (var i = 0, cnt = items.length; i < cnt; i++) {
item = items[i];
if (testCallback(item)) {
out.item = item;
out.index = startIndex + i;
return true;
}
}
startIndex += items.length;
},
resolveCallback: function resolveCallback() {
return out;
}
});
};
var GetRank = function GetRank(userID) {
if (userID === undefined) {
userID = this.userID;
}
var query = this.getPageQuery();
var testCallback = function testCallback(item) {
return item.get('userID') === userID;
};
return FindFirst(query, testCallback).then(function (result) {
return Promise.resolve({
userID: userID,
rank: result.index
});
});
};
var Methods$1 = {
deleteUser: function deleteUser(userID) {
if (userID === undefined) {
userID = this.userID;
}
var query = this.getRecordQuery(undefined, undefined, userID, undefined);
return Delete(query);
},
deleteBoard: function deleteBoard(boardId, tag) {
if (boardId === undefined) {
boardId = this.boardID;
}
if (tag === undefined) {
tag = this.tag;
}
var query = this.getRecordQuery(boardId, tag, undefined, undefined);
return Delete(query);
}
};
var Methods = {
getRecordQuery: function getRecordQuery(boardID, customTag, userID, timeTagKey) {
var query = this.baseQuery;
query = boardID !== undefined ? query.equalTo('boardID', boardID) : query;
query = customTag !== undefined ? query.equalTo('tag', customTag) : query;
query = userID !== undefined ? query.equalTo('userID', userID) : query;
if (timeTagKey !== undefined) {
query = query.equalTo(timeTagKey[0], timeTagKey[1]);
}
return query;
},
getMyRecordQuery: function getMyRecordQuery(userID) {
if (userID === undefined) {
userID = this.userID;
}
return this.getRecordQuery(this.boardID, this.tag, userID, undefined).limit(1);
},
getPageQuery: function getPageQuery() {
var timeTagKey, scoreKey;
if (this.timeFilters !== false) {
var t = this.timeFilterType[0];
timeTagKey = [TimeTagKeys[t], GetTime()[t]];
scoreKey = ScoreKeys[t];
} else {
// No time filters
timeTagKey = undefined;
scoreKey = 'score';
}
var query = this.getRecordQuery(this.boardID, this.tag, undefined, timeTagKey);
query = query.descending(scoreKey);
return query;
}
};
var LeaderBoard = /*#__PURE__*/function () {
function LeaderBoard(config) {
_classCallCheck(this, LeaderBoard);
this.setClassName(GetValue(config, 'className', 'Item'));
this.userInfo = {
userID: undefined,
userName: undefined
};
this.setUser(GetValue(config, 'userID', ''), GetValue(config, 'userName', undefined));
this.setBoardID(GetValue(config, 'boardID', undefined));
this.setTag(GetValue(config, 'tag', undefined));
this.setTimeFilters(GetValue(config, 'timeFilters', false));
this.setTimeFilterType(GetValue(config, 'timeFilterType', 'year'));
this.page = new PageLoader({
itemCount: GetValue(config, 'pageItemCount', 100)
});
this.resetQueryFlag = true;
}
_createClass(LeaderBoard, [{
key: "shutdown",
value: function shutdown() {}
}, {
key: "destroy",
value: function destroy() {
this.shutdown();
}
}, {
key: "userID",
get: function get() {
return this.userInfo.userID;
},
set: function set(value) {
this.userInfo.userID = value;
}
}, {
key: "userName",
get: function get() {
return this.userInfo.userName;
},
set: function set(value) {
this.userInfo.userName = value;
}
}, {
key: "setClassName",
value: function setClassName(className) {
this.resetQueryFlag = true;
this.customClass = Parse.Object.extend(className);
return this;
}
}, {
key: "setUser",
value: function setUser(userID, userName) {
if (IsPlainObject(userID)) {
this.userInfo = userID;
} else {
this.userID = userID;
this.userName = userName;
}
return this;
}
}, {
key: "setBoardID",
value: function setBoardID(boardID) {
this.resetQueryFlag |= this.boardID !== boardID;
this.boardID = boardID;
return this;
}
}, {
key: "setTag",
value: function setTag(tag) {
this.resetQueryFlag |= this.tag !== tag;
this.tag = tag;
return this;
}
}, {
key: "setTimeFilters",
value: function setTimeFilters(filters) {
if (filters === false) {
this.timeFilters = false;
} else {
// filters is true, or a plain object
this.timeFilters = {
d: GetValue(filters, 'day', true),
w: GetValue(filters, 'week', true),
m: GetValue(filters, 'month', true),
y: GetValue(filters, 'year', true)
};
}
return this;
}
}, {
key: "setTimeFilterType",
value: function setTimeFilterType(type) {
this.resetQueryFlag |= this.timeFilterType !== type;
this.timeFilterType = type;
return this;
}
}, {
key: "setPageItemCount",
value: function setPageItemCount(count) {
this.page.setItemCount(count);
return this;
}
}, {
key: "baseQuery",
get: function get() {
return new Parse.Query(this.customClass);
}
}, {
key: "pageIndex",
get: function get() {
return this.page.pageIndex;
}
}, {
key: "isFirstPage",
get: function get() {
return this.page.pageIndex === 0;
}
}, {
key: "isLastPage",
get: function get() {
return this.page.isFullPage === false;
}
}]);
return LeaderBoard;
}();
var methods$1 = {
post: Post,
getScore: GetScore,
getRank: GetRank
};
Object.assign(LeaderBoard.prototype, methods$1, Methods, Methods$2, Methods$1);
ObjectFactory.register('leaderBoard', function (config) {
return new LeaderBoard(config);
});
SetValue(window, 'RexPlugins.Parse.Leaderboard', LeaderBoard);
var QuickLogin = function QuickLogin(userName, password) {
return Parse.User.logOut() // // Log-out first
.then(function () {
return Parse.User.logIn(userName, password); // Try login
})["catch"](function () {
// Login fail, try sign-up, then login again
return SignUpThenLogin(userName, password);
});
};
var SignUpThenLogin = function SignUpThenLogin(userName, password) {
var user = new Parse.User();
user.set('username', userName).set('password', password);
return user.signUp().then(function () {
// Sign up success, try login again
return Parse.User.logIn(userName, password);
});
};
var ParsePlugin = /*#__PURE__*/function (_Phaser$Plugins$BaseP) {
_inherits(ParsePlugin, _Phaser$Plugins$BaseP);
var _super = _createSuper(ParsePlugin);
function ParsePlugin(pluginManager) {
var _this;
_classCallCheck(this, ParsePlugin);
_this = _super.call(this, pluginManager);
_this.add = new ObjectFactory();
return _this;
}
_createClass(ParsePlugin, [{
key: "start",
value: function start() {
var eventEmitter = this.game.events;
eventEmitter.on('destroy', this.destroy, this);
}
}, {
key: "preload",
value: function preload(scene, url) {
LoaderCallback.call(scene.sys.load, url);
return this;
}
}]);
return ParsePlugin;
}(Phaser.Plugins.BasePlugin);
var methods = {
quickLogin: QuickLogin
};
Object.assign(ParsePlugin.prototype, methods);
return ParsePlugin;
}));