UNPKG

can

Version:

MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.

111 lines (110 loc) 3.66 kB
/*! * CanJS - 2.3.34 * http://canjs.com/ * Copyright (c) 2018 Bitovi * Mon, 30 Apr 2018 20:56:51 GMT * Licensed MIT */ /*can@2.3.34#map/map_helpers*/ define([ 'can/util/library', 'can/util/object/isplain' ], function (can) { var mapHelpers = { attrParts: function (attr, keepKey) { if (keepKey) { return [attr]; } return typeof attr === 'object' ? attr : ('' + attr).split('.'); }, canMakeObserve: function (obj) { return obj && !can.isPromise(obj) && (can.isArray(obj) || can.isPlainObject(obj)); }, serialize: function () { var serializeMap = null; return function (map, how, where) { var cid = can.cid(map), firstSerialize = false; if (!serializeMap) { firstSerialize = true; serializeMap = { attr: {}, serialize: {} }; } serializeMap[how][cid] = where; map.each(function (val, name) { var result, isObservable = can.isMapLike(val), serialized = isObservable && serializeMap[how][can.cid(val)]; if (serialized) { result = serialized; } else { if (map['___' + how]) { result = map['___' + how](name, val); } else { result = mapHelpers.getValue(map, name, val, how); } } if (result !== undefined) { where[name] = result; } }); if (firstSerialize) { serializeMap = null; } return where; }; }(), getValue: function (map, name, val, how) { if (can.isMapLike(val)) { return val[how](); } else { return val; } }, define: null, addComputedAttr: function (map, attrName, compute) { map._computedAttrs[attrName] = { compute: compute, count: 0, handler: function (ev, newVal, oldVal) { map._triggerChange(attrName, 'set', newVal, oldVal, ev.batchNum); } }; }, addToMap: function addToMap(obj, instance) { var teardown; if (!madeMap) { teardown = teardownMap; madeMap = {}; } var hasCid = obj._cid; var cid = can.cid(obj); if (!madeMap[cid]) { madeMap[cid] = { obj: obj, instance: instance, added: !hasCid }; } return teardown; }, getMapFromObject: function (obj) { return madeMap && madeMap[obj._cid] && madeMap[obj._cid].instance; }, twoLevelDeepExtend: function (destination, source) { for (var prop in source) { destination[prop] = destination[prop] || {}; can.simpleExtend(destination[prop], source[prop]); } } }; var madeMap = null; var teardownMap = function () { for (var cid in madeMap) { if (madeMap[cid].added) { delete madeMap[cid].obj._cid; } } madeMap = null; }; return mapHelpers; });