Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXWorkout/js/
Upload File :
Current File : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXWorkout/js/userDataLocal.js

"use strict";

!function($, DX, wo, undefined) {
    var CURRENT_KEY = "dxworkout-current-workout",
        WORKOUTS_KEY = "dxworkout-workouts",
        workoutArray;

    function insertWorkout(workout) {
        workoutArray.push(workout);
        saveWorkouts();
    }

    function updateWorkout(id, workout) {
        var index,
            array = workoutArray();
        for (index = 0; index < array.length; index++) {
            if (array[index].id === id)
                break;
        }

        workoutArray.splice(index, 1, workout);
        saveWorkouts();
    }

    function deleteWorkout(id) {
        workoutArray.remove(function(item) {
            return item.id === id;
        });
        saveWorkouts();
    }

    function saveWorkouts() {
        localStorage.setItem(WORKOUTS_KEY, JSON.stringify(workoutArray()));
    }

    function initCurrentWorkout() {
        var current = wo.createWorkoutViewModel(),
            savedData = localStorage.getItem(CURRENT_KEY);
        if (savedData)
            current.fromJS(JSON.parse(savedData));
        else
            current.clear();

        wo.currentWorkout = current;
        wo.currentId = current.id() || (new DevExpress.data.Guid).toString();
    }

    function setCurrentWorkoutById(id) {
        var workout = wo.currentWorkout,
            currentId = wo.currentId;

        if (id != currentId) {
            var index,
                foundItem,
                array = workoutArray();
            for (index = 0; index < array.length; index++) {
                if (array[index].id === id) {
                    foundItem = array[index];
                    break;
                }
            }

            workout = wo.createWorkoutViewModel();
            if (foundItem)
                workout.fromJS(foundItem);
            else
                workout.clear();
            wo.currentWorkout = workout;
            wo.currentId = id;
        } else if (!workout) {
            workout = wo.createWorkoutViewModel();
            workout.clear();
            wo.currentWorkout = workout;
        }
        return workout;
    }

    function saveCurrentWorkout() {
        var data = JSON.stringify(wo.currentWorkout.toJS());
        localStorage.setItem(CURRENT_KEY, data);
    }

    function removeCurrentWorkout() {
        localStorage.removeItem(CURRENT_KEY);

        wo.currentWorkout = null;
        wo.currentId = (new DevExpress.data.Guid).toString();
    }

    function initSetting(key) {
        var settingsFromStorage = localStorage.getItem("dxworkout-settings-" + key),
            currentSettings;
        if(settingsFromStorage) {
            currentSettings = JSON.parse(settingsFromStorage); 
        } else {
           currentSettings = wo.defaultSettings[key]; 
        }
        wo.settings[key] = currentSettings;
    }

    function saveSetting(key, value) {
        wo.settings[key] = value;
        localStorage.setItem("dxworkout-settings-" + key, JSON.stringify(value));
    }

    function initUserData() {
        var result = $.Deferred();

        initSetting("goal");
        initSetting("exercise");
        initSetting("equipment");
        initSetting("lengthUnit");
        initSetting("weightUnit");
        initCurrentWorkout();

        var storageData = localStorage.getItem(WORKOUTS_KEY);
        var data = storageData ? JSON.parse(storageData) : [];
        var state = data.length > 0
                ? wo.initStates.NORMAL
                : wo.initStates.EMPTY;

        workoutArray = wo.workouts = ko.observableArray(data);
        return result.resolve(state).promise();
    }

    function clearUserData() {
        var localStorageKeys = [
            CURRENT_KEY,
            WORKOUTS_KEY,
            "dxworkout-settings-exercise",
            "dxworkout-settings-equipment",
            "dxworkout-settings-lengthUnit",
            "dxworkout-settings-weightUnit"
        ];

        $.each(localStorageKeys, function () {
            localStorage.removeItem(this);
        });
    }

    $.extend(wo, {
        workouts: null,

        insertWorkout: insertWorkout,
        updateWorkout: updateWorkout,
        deleteWorkout: deleteWorkout,

        initUserData: initUserData,
        clearUserData: clearUserData,

        initCurrentWorkout: initCurrentWorkout,
        setCurrentWorkoutById: setCurrentWorkoutById,
        saveCurrentWorkout: saveCurrentWorkout,
        removeCurrentWorkout: removeCurrentWorkout,
        
        saveSettings: saveSetting,
        settings: {}
    });

    
}(jQuery, DevExpress, DXWorkout);