templates.js 13 KB

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