fa468177e4b38a371f56ddb0787cc32bdf5e3853
[ccsdk/features.git] /
1 /**
2  * Copyright 2010-2013 Ben Birch
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this software except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 (function( $, app ) {
17
18         var data = app.ns("data");
19         var ux = app.ns("ux");
20
21         data.Model = ux.Observable.extend({
22                 defaults: {
23                         data: null
24                 },
25                 init: function() {
26                         this.set( this.config.data );
27                 },
28                 set: function( key, value ) {
29                         if( arguments.length === 1 ) {
30                                 this._data = $.extend( {}, key );
31                         } else {
32                                 key.split(".").reduce(function( ptr, prop, i, props) {
33                                         if(i === (props.length - 1) ) {
34                                                 ptr[prop] = value;
35                                         } else {
36                                                 if( !(prop in ptr) ) {
37                                                         ptr[ prop ] = {};
38                                                 }
39                                                 return ptr[prop];
40                                         }
41                                 }, this._data );
42                         }
43                 },
44                 get: function( key ) {
45                         return key.split(".").reduce( function( ptr, prop ) {
46                                 return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined;
47                         }, this._data );
48                 },
49         });
50 })( this.jQuery, this.app );