nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

track-list.localstorage.js (3099B)


      1 import './track-list';
      2 import L from 'leaflet';
      3 import {parseNktkSequence} from './lib/parsers/nktk';
      4 import safeLocalStorage from '~/lib/safe-localstorage';
      5 import * as logging from '~/lib/logging';
      6 
      7 L.Control.TrackList.include({
      8         maxLocalStorageSessions: 5,
      9 
     10         saveTracksToStorage: function() {
     11             var tracks = this.tracks(),
     12                 serialized = [],
     13                 maxKey = -1,
     14                 i, track, s, key, m,
     15                 keys = [];
     16 
     17             for (i = 0; i < safeLocalStorage.length; i++) {
     18                 key = safeLocalStorage.key(i);
     19                 m = key.match(/^trackList_(\d+)$/u);
     20                 if (m && m[1] !== undefined) {
     21                     if (Number(m[1]) > maxKey) {
     22                         maxKey = Number(m[1]);
     23                     }
     24                 }
     25             }
     26             key = 'trackList_' + (maxKey + 1);
     27 
     28             if (tracks.length === 0) {
     29                 safeLocalStorage.setItem(key, '');
     30                 return;
     31             }
     32             for (i = 0; i < tracks.length; i++) {
     33                 track = tracks[i];
     34                 s = this.trackToString(track);
     35                 serialized.push(s);
     36             }
     37             if (serialized.length === 0) {
     38                 return;
     39             }
     40             s = '#nktk=' + serialized.join('/');
     41 
     42             safeLocalStorage.setItem(key, s);
     43 
     44             // cleanup stale records
     45             for (i = 0; i < safeLocalStorage.length; i++) {
     46                 key = safeLocalStorage.key(i);
     47                 m = key.match(/^trackList_(\d+)$/u);
     48                 if (m && m[1] !== undefined) {
     49                     keys.push(Number(m[1]));
     50                 }
     51             }
     52             if (keys.length > this.maxLocalStorageSessions) {
     53                 keys.sort(function(a, b) {
     54                         return a - b;
     55                     }
     56                 );
     57                 for (i = 0; i < keys.length - this.maxLocalStorageSessions; i++) {
     58                     key = 'trackList_' + keys[i];
     59                     safeLocalStorage.removeItem(key);
     60                 }
     61             }
     62         },
     63 
     64         loadTracksFromStorage: function() {
     65             var i, key, m, s,
     66                 geodata,
     67                 maxKey = -1;
     68 
     69             for (i = 0; i < safeLocalStorage.length; i++) {
     70                 key = safeLocalStorage.key(i);
     71                 m = key.match(/^trackList_(\d+)$/u);
     72                 if (m && m[1] !== undefined) {
     73                     if (Number(m[1]) > maxKey) {
     74                         maxKey = Number(m[1]);
     75                     }
     76                 }
     77             }
     78             if (maxKey > -1) {
     79                 key = 'trackList_' + maxKey;
     80                 s = safeLocalStorage.getItem(key);
     81                 safeLocalStorage.removeItem(key);
     82                 if (s) {
     83                     logging.captureBreadcrumb('load track from localStorage');
     84                     s = s.slice(6); // remove "#nktk=" prefix
     85                     geodata = parseNktkSequence(s);
     86                     this.addTracksFromGeodataArray(geodata);
     87                 }
     88             }
     89         }
     90     }
     91 );