/nodechat/docs/models.html

https://github.com/sigmonky/LivingRoom · HTML · 119 lines · 100 code · 19 blank · 0 comment · 0 complexity · 91fd6d8c8652957da62faf13c9a79050 MD5 · raw file

  1. <!DOCTYPE html> <html> <head> <title>models.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To &hellip; <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="controllers.html"> controllers.js </a> <a class="source" href="auth.html"> auth.js </a> <a class="source" href="backbone.html"> backbone.js </a> <a class="source" href="io.html"> io.js </a> <a class="source" href="jquery-1.5.1.html"> jquery-1.5.1.js </a> <a class="source" href="mashlib.html"> mashlib.js </a> <a class="source" href="ncutils.html"> ncutils.js </a> <a class="source" href="socket.io.html"> socket.io.js </a> <a class="source" href="socket.html"> socket.js </a> <a class="source" href="transport.html"> transport.js </a> <a class="source" href="underscore.html"> underscore.js </a> <a class="source" href="util.html"> util.js </a> <a class="source" href="models.html"> models.js </a> <a class="source" href="views.html"> views.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> models.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">&#182;</a> </div> </td> <td class="code"> <div class="highlight"><pre><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
  2. <span class="kd">var</span> <span class="nx">server</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">models</span><span class="p">;</span>
  3. <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">exports</span> <span class="o">!==</span> <span class="s1">&#39;undefined&#39;</span><span class="p">)</span> <span class="p">{</span>
  4. <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;underscore&#39;</span><span class="p">).</span><span class="nx">_</span><span class="p">;</span>
  5. <span class="nx">Backbone</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;backbone&#39;</span><span class="p">);</span>
  6. <span class="nx">models</span> <span class="o">=</span> <span class="nx">exports</span><span class="p">;</span>
  7. <span class="nx">server</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
  8. <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
  9. <span class="nx">models</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">models</span> <span class="o">=</span> <span class="p">{};</span>
  10. <span class="p">}</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</a> </div> <p>models</p> </td> <td class="code"> <div class="highlight"><pre>
  11. <span class="nx">models</span><span class="p">.</span><span class="nx">ChatEntry</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span><span class="p">({});</span>
  12. </pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">&#182;</a> </div> <p>Users have references to their direct chats</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">models</span><span class="p">.</span><span class="nx">User</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  13. <span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
  14. <span class="k">this</span><span class="p">.</span><span class="nx">directs</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatCollection</span><span class="p">();</span>
  15. <span class="k">this</span><span class="p">.</span><span class="nx">followedMashTags</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">MashChatCollection</span><span class="p">();</span>
  16. <span class="p">}</span>
  17. <span class="p">});</span>
  18. <span class="nx">models</span><span class="p">.</span><span class="nx">NodeChatModel</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  19. <span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
  20. <span class="k">this</span><span class="p">.</span><span class="nx">chats</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatCollection</span><span class="p">();</span>
  21. <span class="k">this</span><span class="p">.</span><span class="nx">chats</span><span class="p">.</span><span class="nx">comparator</span> <span class="o">=</span> <span class="nx">chatComparator</span><span class="p">;</span>
  22. <span class="k">this</span><span class="p">.</span><span class="nx">mashes</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">MashChatCollection</span><span class="p">();</span>
  23. <span class="k">this</span><span class="p">.</span><span class="nx">mashes</span><span class="p">.</span><span class="nx">comparator</span> <span class="o">=</span> <span class="nx">chatComparator</span><span class="p">;</span>
  24. <span class="k">this</span><span class="p">.</span><span class="nx">mashTags</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">MashTagCollection</span><span class="p">();</span>
  25. <span class="k">this</span><span class="p">.</span><span class="nx">globalMashTags</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">MashTagCollection</span><span class="p">();</span>
  26. <span class="k">this</span><span class="p">.</span><span class="nx">users</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">UserCollection</span><span class="p">();</span>
  27. <span class="k">this</span><span class="p">.</span><span class="nx">directs</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatCollection</span><span class="p">();</span>
  28. <span class="p">}</span>
  29. <span class="p">});</span>
  30. </pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">&#182;</a> </div> <p>Mashtags have references to their chats</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">models</span><span class="p">.</span><span class="nx">MashTagModel</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  31. <span class="nx">initialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
  32. <span class="k">this</span><span class="p">.</span><span class="nx">watchingUsers</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">models</span><span class="p">.</span><span class="nx">UserCollection</span><span class="p">();</span>
  33. <span class="p">}</span>
  34. <span class="p">});</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">&#182;</a> </div> <p>Collections</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatCollection</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  35. <span class="nx">model</span><span class="o">:</span> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatEntry</span>
  36. <span class="p">});</span>
  37. <span class="nx">models</span><span class="p">.</span><span class="nx">MashChatCollection</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  38. <span class="nx">model</span><span class="o">:</span> <span class="nx">models</span><span class="p">.</span><span class="nx">ChatEntry</span>
  39. <span class="p">});</span>
  40. <span class="kd">var</span> <span class="nx">chatComparator</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">chat</span><span class="p">)</span> <span class="p">{</span>
  41. <span class="kd">var</span> <span class="nx">datetime</span> <span class="o">=</span> <span class="nx">chat</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">&#39;datetime&#39;</span><span class="p">);</span>
  42. <span class="k">if</span><span class="p">(</span><span class="nx">datetime</span><span class="p">)</span> <span class="k">return</span> <span class="nx">datetime</span><span class="p">;</span>
  43. <span class="k">else</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
  44. <span class="p">}</span>
  45. <span class="nx">models</span><span class="p">.</span><span class="nx">MashTagCollection</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  46. <span class="nx">model</span><span class="o">:</span> <span class="nx">models</span><span class="p">.</span><span class="nx">MashTagModel</span>
  47. <span class="p">});</span>
  48. <span class="nx">models</span><span class="p">.</span><span class="nx">UserCollection</span> <span class="o">=</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
  49. <span class="nx">model</span><span class="o">:</span> <span class="nx">models</span><span class="p">.</span><span class="nx">UserModel</span>
  50. <span class="p">});</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <p>Model exporting/importing</p> </td> <td class="code"> <div class="highlight"><pre>
  51. <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">xport</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">opt</span><span class="p">)</span> <span class="p">{</span>
  52. <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="p">{},</span>
  53. <span class="nx">settings</span> <span class="o">=</span> <span class="nx">_</span><span class="p">({</span><span class="nx">recurse</span><span class="o">:</span> <span class="kc">true</span><span class="p">}).</span><span class="nx">extend</span><span class="p">(</span><span class="nx">opt</span> <span class="o">||</span> <span class="p">{});</span>
  54. <span class="kd">function</span> <span class="nx">process</span><span class="p">(</span><span class="nx">targetObj</span><span class="p">,</span> <span class="nx">source</span><span class="p">)</span> <span class="p">{</span>
  55. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">source</span><span class="p">.</span><span class="nx">id</span> <span class="o">||</span> <span class="kc">null</span><span class="p">;</span>
  56. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">cid</span> <span class="o">=</span> <span class="nx">source</span><span class="p">.</span><span class="nx">cid</span> <span class="o">||</span> <span class="kc">null</span><span class="p">;</span>
  57. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">attrs</span> <span class="o">=</span> <span class="nx">source</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">();</span>
  58. <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <p>since models store a reference to their collection
  59. we need to make sure we don't create a circular refrence</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">settings</span><span class="p">.</span><span class="nx">recurse</span><span class="p">)</span> <span class="p">{</span>
  60. <span class="k">if</span> <span class="p">(</span><span class="nx">key</span> <span class="o">!==</span> <span class="s1">&#39;collection&#39;</span> <span class="o">&amp;&amp;</span> <span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Collection</span><span class="p">)</span> <span class="p">{</span>
  61. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span> <span class="o">=</span> <span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span> <span class="o">||</span> <span class="p">{};</span>
  62. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{};</span>
  63. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">models</span> <span class="o">=</span> <span class="p">[];</span>
  64. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">id</span> <span class="o">||</span> <span class="kc">null</span><span class="p">;</span>
  65. <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">models</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="p">{</span>
  66. <span class="nx">process</span><span class="p">(</span><span class="nx">targetObj</span><span class="p">.</span><span class="nx">collections</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">models</span><span class="p">[</span><span class="nx">index</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> <span class="nx">value</span><span class="p">);</span>
  67. <span class="p">});</span>
  68. <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">source</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">)</span> <span class="p">{</span>
  69. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">models</span> <span class="o">=</span> <span class="nx">targetObj</span><span class="p">.</span><span class="nx">models</span> <span class="o">||</span> <span class="p">{};</span>
  70. <span class="nx">process</span><span class="p">(</span><span class="nx">targetObj</span><span class="p">.</span><span class="nx">models</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> <span class="nx">value</span><span class="p">);</span>
  71. <span class="p">}</span>
  72. <span class="p">}</span>
  73. <span class="p">});</span>
  74. <span class="p">}</span>
  75. <span class="nx">process</span><span class="p">(</span><span class="nx">result</span><span class="p">,</span> <span class="k">this</span><span class="p">);</span>
  76. <span class="k">return</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">result</span><span class="p">);</span>
  77. <span class="p">};</span>
  78. <span class="nx">Backbone</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">mport</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">data</span><span class="p">,</span> <span class="nx">silent</span><span class="p">)</span> <span class="p">{</span>
  79. <span class="kd">function</span> <span class="nx">process</span><span class="p">(</span><span class="nx">targetObj</span><span class="p">,</span> <span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
  80. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">data</span><span class="p">.</span><span class="nx">id</span> <span class="o">||</span> <span class="kc">null</span><span class="p">;</span>
  81. <span class="nx">targetObj</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">attrs</span><span class="p">,</span> <span class="p">{</span><span class="nx">silent</span><span class="o">:</span> <span class="nx">silent</span><span class="p">});</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">&#182;</a> </div> <p>loop through each collection</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">collections</span><span class="p">)</span> <span class="p">{</span>
  82. <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">collections</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">collection</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
  83. <span class="nx">targetObj</span><span class="p">[</span><span class="nx">name</span><span class="p">].</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">collection</span><span class="p">.</span><span class="nx">id</span><span class="p">;</span>
  84. <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">collection</span><span class="p">.</span><span class="nx">models</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">modelData</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="p">{</span>
  85. <span class="kd">var</span> <span class="nx">newObj</span> <span class="o">=</span> <span class="nx">targetObj</span><span class="p">[</span><span class="nx">name</span><span class="p">].</span><span class="nx">_add</span><span class="p">({},</span> <span class="p">{</span><span class="nx">silent</span><span class="o">:</span> <span class="nx">silent</span><span class="p">});</span>
  86. <span class="nx">process</span><span class="p">(</span><span class="nx">newObj</span><span class="p">,</span> <span class="nx">modelData</span><span class="p">);</span>
  87. <span class="p">});</span>
  88. <span class="p">});</span>
  89. <span class="p">}</span>
  90. <span class="k">if</span> <span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">models</span><span class="p">)</span> <span class="p">{</span>
  91. <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">models</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">modelData</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
  92. <span class="nx">process</span><span class="p">(</span><span class="nx">targetObj</span><span class="p">[</span><span class="nx">name</span><span class="p">],</span> <span class="nx">modelData</span><span class="p">);</span>
  93. <span class="p">});</span>
  94. <span class="p">}</span>
  95. <span class="p">}</span>
  96. <span class="nx">process</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">data</span><span class="p">));</span>
  97. <span class="k">return</span> <span class="k">this</span><span class="p">;</span>
  98. <span class="p">};</span>
  99. <span class="p">})()</span>
  100. </pre></div> </td> </tr> </tbody> </table> </div> </body> </html>