templates.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /**
  2. *
  3. * @author: Malishev Dmitry <[email protected]>
  4. */
  5. App.Templates.html = {
  6. WEB: {
  7. hint: ['']
  8. },
  9. // file manager
  10. //
  11. //<input id="check~!:index~!" class="ch-toggle2" type="checkbox" name="domain[]" value="~!:index3~!">\
  12. FM: {
  13. entry_line: ['<li class="dir">\
  14. <span class="marker">\
  15. </span>\
  16. <span class="icon ~!:ITEM_TYPE~!" ></span>\
  17. <input type="hidden" class="source" value=\'~!:SOURCE~!\'/>\
  18. <span class="filename ripple" ~!:CL_ACTION_1~!>~!:NAME~!</span>\
  19. <span class="mode">~!:PERMISSIONS~!</span>\
  20. <span class="owner">~!:OWNER~!</span>\
  21. <span class="size-unit">~!:SIZE_UNIT~!</span>\
  22. <span class="size-value">~!:SIZE_VALUE~!</span>\
  23. <span class="date">~!:DATE~!</span>\
  24. <span class="time">~!:TIME~!</span>\
  25. <!-- span class="subcontext-control ~!:SUBMENU_CLASS~!" onClick="FM.toggleSubContextMenu(this)">&#8226;&#8226;&#8226;&nbsp;\
  26. <ul class="subcontext-menu subcontext-menu-hidden"><li onClick="FM.downloadFileFromSubcontext(this);">Download</li><li onClick="FM.editFileFromSubcontext(this);">Edit</li></ul>\
  27. </span -->\
  28. </li>'],
  29. popup_alert: ['<div class="confirm-box alarm popup-box">\
  30. <div class="message">~!:TEXT~!</div>\
  31. <div class="controls">\
  32. <p class="ok" onClick="FM.popupClose();">close</p>\
  33. </div>\
  34. </div>'],
  35. popup_bulk: ['<div class="confirm-box alarm popup-box">\
  36. <div class="message">~!:ACTION~!: <br />~!:TEXT~!</div>\
  37. <div class="results"></div>\
  38. <div class="controls">\
  39. <!-- p class="ok" onClick="FM.popupClose();">close</p -->\
  40. <p><img src="/images/in_progress.gif"></p>\
  41. </div>\
  42. </div>'],
  43. popup_delete: ['<div class="confirm-box delete popup-box">\
  44. <div class="message">Are you sure you want to delete <span class="title">"~!:FILENAME~!"</span>?</div>\
  45. <div class="controls">\
  46. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  47. <p class="ok" onClick="FM.confirmDelete();">delete</p>\
  48. </div>\
  49. </div>'],
  50. popup_copy: ['<div class="confirm-box copy popup-box">\
  51. <div class="message">Are you sure you want to copy <span class="title">"~!:SRC_FILENAME~!"</span> into:</div>\
  52. <div class="actions">\
  53. <input type="text" id="copy_dest" value="~!:DST_FILENAME~!" class="new-title">\
  54. </div>\
  55. <div class="message">existing files will be replaced</div>\
  56. <div class="controls">\
  57. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  58. <p class="ok" onClick="FM.confirmCopyItems();">copy</p>\
  59. </div>\
  60. </div>'],
  61. popup_rename: ['<div class="confirm-box rename warning">\
  62. <div class="message">Original name: <span class="title">"~!:FILENAME~!"</span></div>\
  63. <!-- div class="warning">File <span class="title">"reading.txt"</span> already exists</div -->\
  64. <div class="warning warning-message"></div>\
  65. <div class="actions">\
  66. <input type="text" id="rename-title" class="new-title" value="~!:NEW_NAME~!" />\
  67. </div>\
  68. <div class="controls">\
  69. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  70. <p class="ok" onClick="FM.confirmRename();">rename</p>\
  71. </div>\
  72. <div class="controls replace">\
  73. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  74. <p class="ok" onClick="FM.confirmRename();">rename</p>\
  75. </div>\
  76. </div>'],
  77. popup_pack: ['<div class="confirm-box pack warning">\
  78. <div class="message">Pack <span class="title">"~!:FILENAME~!"</span> into:</div>\
  79. <div class="actions">\
  80. <input type="text" id="pack-destination" class="new-title" value="~!:DST_DIRNAME~!">\
  81. </div>\
  82. <div class="warning warning-message"></div>\
  83. <!-- div class="actions">\
  84. <label><input type="checkbox" name="overwrite" class="title" />Overwrite exising files</label>\
  85. </div -->\
  86. <div class="controls">\
  87. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  88. <p class="ok" onClick="FM.confirmPackItem();">Pack</p>\
  89. </div>\
  90. </div>'],
  91. popup_unpack: ['<div class="confirm-box unpack warning">\
  92. <div class="message">Extract archive <span class="title">"~!:FILENAME~!"</span> to:</div>\
  93. <div class="actions">\
  94. <input type="text" id="unpack-destination" class="new-title" value="~!:DST_DIRNAME~!">\
  95. </div>\
  96. <div class="warning warning-message"></div>\
  97. <!-- div class="actions">\
  98. <label><input type="checkbox" name="overwrite" class="title" />Overwrite exising files</label>\
  99. </div -->\
  100. <div class="controls">\
  101. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  102. <p class="ok" onClick="FM.confirmUnpackItem();">Extract</p>\
  103. </div>\
  104. </div>'],
  105. popup_create_file: ['<div class="confirm-box rename warning">\
  106. <div class="message">Create file</div>\
  107. <!-- div class="warning">File <span class="title">"reading.txt"</span> already exists</div -->\
  108. <div class="warning warning-message"></div>\
  109. <div class="actions">\
  110. <input type="text" id="rename-title" class="new-title" />\
  111. </div>\
  112. <div class="controls replace">\
  113. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  114. <p class="ok" onClick="FM.confirmCreateFile();">create</p>\
  115. </div>\
  116. </div>'],
  117. popup_create_dir: ['<div class="confirm-box rename warning">\
  118. <div class="message">Create directory</div>\
  119. <!-- div class="warning">File <span class="title">"reading.txt"</span> already exists</div -->\
  120. <div class="warning warning-message"></div>\
  121. <div class="actions">\
  122. <input type="text" id="rename-title" class="new-title" />\
  123. </div>\
  124. <div class="controls replace">\
  125. <p class="cancel" onClick="FM.popupClose();">cancel</p>\
  126. <p class="ok" onClick="FM.confirmCreateDir();">create</p>\
  127. </div>\
  128. </div>'],
  129. popup_no_file_selected: ['<div class="confirm-box no-file-selected">\
  130. <div class="message">Please select a file</div>\
  131. <div class="controls">\
  132. <p class="ok" onClick="FM.confirmCreateDir();">ok</p>\
  133. </div>\
  134. </div>']
  135. }
  136. };
  137. // Internals
  138. var Tpl = App.Templates;
  139. var Templator = function()
  140. {
  141. var init = function()
  142. {
  143. fb.info('Templator work');
  144. Templator.splitThemAll();
  145. Templator.freezeTplIndexes();
  146. };
  147. /**
  148. * Split the tpl strings into arrays
  149. */
  150. Templator.splitThemAll = function(){
  151. fb.info('splitting tpls');
  152. jQuery.each(App.Templates.html, function(o){
  153. //try{
  154. var tpls = App.Templates.html[o];
  155. jQuery.each(tpls, function(t){
  156. tpls[t] = tpls[t][0].split('~!');
  157. });
  158. //}catch(e){fb.error('%o %o', o, e);}
  159. });
  160. },
  161. /**
  162. * Iterates tpls
  163. */
  164. Templator.freezeTplIndexes = function(){
  165. fb.info('freezing tpl keys');
  166. jQuery.each(App.Templates.html, Templator.cacheTplIndexes);
  167. },
  168. /**
  169. * Grab the tpl group key and process it
  170. */
  171. Templator.cacheTplIndexes = function(key)
  172. {
  173. var tpls = App.Templates.html[key];
  174. jQuery.each(tpls, function(o)
  175. {
  176. var tpl = tpls[o];
  177. Templator.catchIndex(key, o, tpl);
  178. });
  179. },
  180. /**
  181. * Set the indexes
  182. */
  183. Templator.catchIndex = function(key, ref_key, tpl)
  184. {
  185. 'undefined' == typeof App.Templates._indexes[key] ? App.Templates._indexes[key] = {} : false;
  186. 'undefined' == typeof App.Templates._indexes[key][ref_key] ?
  187. App.Templates._indexes[key][ref_key] = {} : false;
  188. jQuery(tpl).each(function(index, o) {
  189. if (':' == o.charAt(0)) {
  190. App.Templates._indexes[key][ref_key][o.toString()] = index;
  191. }
  192. });
  193. }
  194. /**
  195. * Get concrete templates
  196. */
  197. init();
  198. return Templator;
  199. };
  200. Templator.getTemplate = function(ns, key){
  201. return [
  202. App.Templates._indexes[ns][key],
  203. App.Templates.html[ns][key].slice(0)
  204. ];
  205. }
  206. // init templator
  207. Tpl.Templator = Templator();
  208. Tpl.get = function(key, group){
  209. return Tpl.Templator.getTemplate(group, key);
  210. }