/ views / syncframe.html
syncframe.html
 1  <!DOCTYPE html>
 2  <html>
 3  <head>
 4    <title>4chan</title>
 5  </head>
 6  <body>
 7  <script>
 8  var SyncFrame = {
 9    init: function() {
10      if (window.self === window.parent) {
11        return;
12      }
13      
14      this.remoteOrigin = location.protocol + '//boards.'
15        + (location.host === 'boards.4channel.org' ? '4chan' : '4channel')
16        + '.org';
17      
18      this.domain = location.host.replace(/^boards\./, '');
19      
20      window.addEventListener('message', this.onMessage, false);
21      
22      window.parent.postMessage('ready', this.remoteOrigin);
23    },
24    
25    onMessage: function(e) {
26      var self = SyncFrame;
27      
28      if (e.origin !== self.remoteOrigin) {
29        return;
30      }
31      
32      if (!e.data) {
33        return;
34      }
35      
36      if (e.data.storage) {
37        self.setStorage(e.data.storage);
38      }
39      
40      if (e.data.cookie) {
41        self.setCookie(e.data.cookie);
42      }
43    },
44    
45    setStorage: function(data) {
46      for (var key in data) {
47        if (data[key] === null) {
48          localStorage.removeItem(key);
49        }
50        else {
51          localStorage.setItem(key, data[key]);
52        }
53      }
54    },
55    
56    setCookie: function(data) {
57      var domain, path, date, self;
58      
59      self = SyncFrame;
60      
61      date = new Date();
62      
63      date.setTime(date.getTime() + (data.days * 24 * 60 * 60 * 1000));
64      
65      if (!data.domain) {
66        domain = self.domain;
67      }
68      else {
69        domain = data.domain + self.domain;
70      }
71      
72      if (!data.path) {
73        path = '/';
74      }
75      else {
76        path = data.path;
77      }
78      
79      document.cookie = data.name + '=' + data.value
80        + '; expires=' + date.toGMTString()
81        + '; path=' + path + '; domain=' + domain;
82    }
83  };
84  
85  SyncFrame.init();
86  </script>
87  </body>
88  </html>