main.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. //CHARGEMENT DE LA PAGE
  2. function init_plugin_hackpoint(){
  3. switch($.urlParam('page')){
  4. case 'sheet.sketch':
  5. if($('.hackpoint').hasClass('readonly')){
  6. $('.editable-input').attr('readonly','readonly');
  7. init_components();
  8. }
  9. break;
  10. default:
  11. break;
  12. }
  13. $('#parts').sortable_table({
  14. onSort : hackpoint_part_search
  15. });
  16. $('#sketchs').sortable_table({
  17. onSort : hackpoint_sketch_search
  18. });
  19. hackpoint_resource_search();
  20. }
  21. //Enregistrement des configurations
  22. function hackpoint_setting_save(){
  23. $.action({
  24. action : 'hackpoint_setting_save',
  25. fields : $('#hackpoint-setting-form').toJson()
  26. },function(){ $.message('info','Configuration enregistrée'); });
  27. }
  28. /** PART **/
  29. //Récuperation d'une liste de part dans le tableau #parts
  30. function hackpoint_part_search(callback){
  31. $('#parts').fill({
  32. action:'hackpoint_part_search',
  33. resource : $('#sketch-editor').attr('data-id'),
  34. showItems : false
  35. },function(){
  36. $('#parts li:not(:eq(0))').each(function(i,li){
  37. hackpoint_resource_part_upload(li);
  38. var div = $('[data-stream]',li);
  39. if($(div).attr('data-stream') =='') return;
  40. $(div).css('background','url(data:'+$(div).attr('data-stream')+')')
  41. .css('background-size','cover');
  42. });
  43. $('#parts li:not(:eq(0))').css('transform','scale(0)').removeClass('hidden')
  44. $('#parts li:not(:eq(0))').each(function(i,li){
  45. var li = $(li);
  46. setTimeout(function(){
  47. li.css('transform','scale(1)');
  48. },i*200);
  49. });
  50. if(callback!=null) callback();
  51. });
  52. }
  53. //Ajout ou modification d'élément part
  54. function hackpoint_part_save(element){
  55. var li = $(element).closest('li');
  56. var data = {
  57. action : 'hackpoint_part_save',
  58. resource : $('#sketch-editor').attr('data-id'),
  59. part : li.attr('data-part'),
  60. id : li.attr('data-id'),
  61. label : li.find('.label').val(),
  62. brand : li.find('.brand input').val(),
  63. price : li.find('.price input').val(),
  64. url : li.find('.url').val(),
  65. picture : li.find('.part-image').attr('data-stream')
  66. }
  67. $.action(data,function(r){
  68. li.attr('data-part',r.part);
  69. li.attr('data-id',r.id)
  70. $.message('success','Enregistré');
  71. });
  72. }
  73. function hackpoint_part_find(element){
  74. var li = $(element).closest('li');
  75. var label = li.find('.label').val();
  76. var brand = li.find('.brand input').val();
  77. var url = "https://www.ebay.fr/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&LH_PrefLoc=2&_sop=15";
  78. if(null!=brand && brand !='') label = brand+'+'+label;
  79. url += "&_nkw="+label;
  80. window.open(url);
  81. }
  82. function hackpoint_part_add(){
  83. var tpl = $('#parts li:eq(0)').get(0).outerHTML;
  84. var data = {
  85. price : 1,
  86. url : 'http://ebay.com'
  87. }
  88. var item = $(Mustache.render(tpl,data));
  89. item.removeClass('hidden');
  90. item.css({
  91. transform : 'scale(0)',
  92. opacity : 0,
  93. });
  94. $('#parts li:eq(0)').after(item);
  95. item.css({
  96. transform : 'scale(1) rotate(0deg)',
  97. opacity : 1,
  98. });
  99. init_components(item);
  100. hackpoint_resource_part_upload(item);
  101. }
  102. function hackpoint_resource_part_upload(item){
  103. var item = $(item);
  104. var image = item.find('.part-image');
  105. image.click(function(e){
  106. e.preventDefault();
  107. e.stopPropagation();
  108. var picker = image.next('input[type="file"]');
  109. picker.trigger('click');
  110. picker.change(function(){
  111. var file = picker.get(0).files[0];
  112. var reader = new FileReader();
  113. reader.addEventListener("load", function () {
  114. image.css('background','url('+reader.result+')')
  115. .attr('data-stream',reader.result)
  116. .css('background-size','cover');
  117. }, false);
  118. reader.readAsDataURL(file);
  119. });
  120. });
  121. image.on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {
  122. e.preventDefault();
  123. e.stopPropagation();
  124. })
  125. image.on('drop', function (e) {
  126. var droppedFiles = e.originalEvent.dataTransfer.files;
  127. var reader = new FileReader();
  128. reader.readAsDataURL(droppedFiles[0]);
  129. reader.onload = function () {
  130. image.css('background','url('+reader.result+')')
  131. .attr('data-stream',reader.result)
  132. .css('background-size','cover');
  133. };
  134. reader.onerror = function (error) {
  135. console.log('Error: ', error);
  136. };
  137. });
  138. /*
  139. var preload = $('<div class="preload progress-bar progress-bar-striped progress-bar-animated"></div>');
  140. item.find('.part-image').append(preload);
  141. item.find('.part-image').attr('id','part-image-'+$('#parts li').length());
  142. item.find('.part-image').upload({
  143. allowed : 'jpg,png,jpeg,bmp,svg',
  144. size : 0,
  145. action : 'hackpoint_part_image_upload',
  146. readonly: false,
  147. start: function(){
  148. preload.show();
  149. },
  150. success: function(response){
  151. if(response.previews.length && response.previews[0].name) {
  152. }
  153. console.log(response);
  154. preload.fadeOut();
  155. },
  156. complete: function(){
  157. preload.fadeOut();
  158. }
  159. });*/
  160. }
  161. //Suppression d'élement part
  162. function hackpoint_resource_part_delete(element){
  163. if(!confirm('Êtes vous sûr de vouloir supprimer cet item ?')) return;
  164. var line = $(element).closest('li');
  165. if(line.attr('data-id')==''){
  166. line.css('transform','scale(0)');
  167. setTimeout(function(){
  168. line.remove()
  169. },210);
  170. return;
  171. }
  172. $.action({
  173. action : 'hackpoint_resource_part_delete',
  174. id : line.attr('data-id')
  175. },function(r){
  176. line.css('transform','scale(0)');
  177. setTimeout(function(){
  178. line.remove()
  179. },210);
  180. });
  181. }
  182. //Suppression d'élement part
  183. function hackpoint_part_delete(element){
  184. if(!confirm('Êtes vous sûr de vouloir supprimer cet item ?')) return;
  185. var line = $(element).closest('li');
  186. if(line.attr('data-id')==''){
  187. line.css('transform','scale(0)');
  188. setTimeout(function(){
  189. line.remove()
  190. },210);
  191. return;
  192. }
  193. $.action({
  194. action : 'hackpoint_part_delete',
  195. id : line.attr('data-id')
  196. },function(r){
  197. line.css('transform','scale(0)');
  198. setTimeout(function(){
  199. line.remove()
  200. },210);
  201. });
  202. }
  203. /** SKETCH **/
  204. //Récuperation d'une liste de sketch dans le tableau #sketchs
  205. function hackpoint_sketch_search(callback){
  206. $('#sketchs').fill({
  207. action:'hackpoint_sketch_search',
  208. filters : $('#filters').filters(),
  209. sort : $('#sketchs').sortable_table('get')
  210. },function(r){
  211. if(!r.rows) $('.no-sketch').removeClass('hidden');
  212. init_components('#sketchs');
  213. $('.progress').click(function(e){
  214. var x = e.pageX - $(this).offset().left;
  215. var percent = Math.round(x *100 / $(this).width());
  216. var progressClass = 'bg-danger';
  217. if(percent>97) percent = 100;
  218. if(percent > 30) progressClass = 'bg-warning';
  219. if(percent > 45) progressClass = 'bg-info';
  220. if(percent > 65) progressClass = '';
  221. if(percent > 85) progressClass = 'bg-success';
  222. var li = $(this).closest('li');
  223. $(this).find('.progress-bar')
  224. .css('width',percent+'%')
  225. .attr('aria-valuenow',percent)
  226. .text(percent+'%')
  227. .attr('class','progress-bar progress-bar-striped progress-bar-animated '+progressClass);
  228. $.action({
  229. action : 'hackpoint_sketch_progress_save',
  230. id : li.attr('data-id'),
  231. progress : percent,
  232. },function(r){});
  233. });
  234. if(callback!=null) callback();
  235. });
  236. }
  237. //Ajout ou modification d'élément sketch
  238. function hackpoint_sketch_save(){
  239. if($('.hackpoint').hasClass('readonly')) return;
  240. $('.sketch-preloader').show();
  241. var data = {
  242. action : 'hackpoint_sketch_save',
  243. id : $('#sketch-form').attr('data-id'),
  244. label : $('#label').val(),
  245. state : $('#state').prop('checked'),
  246. comment : $('#comment').val()
  247. }
  248. $.action(data,function(){
  249. $('.sketch-preloader').fadeOut(300);
  250. });
  251. }
  252. function hackpoint_sketch_save_cover(input,stream){
  253. console.log('hey');
  254. var li = input.closest('li');
  255. $.action({
  256. action : 'hackpoint_sketch_save_cover',
  257. stream : stream,
  258. sketch : li.attr('data-id')
  259. },function(r){
  260. input.attr('src',r.stream);
  261. });
  262. }
  263. //Suppression d'élement sketch
  264. function hackpoint_sketch_delete(element){
  265. if(!confirm('Êtes vous sûr de vouloir supprimer cet item ?')) return;
  266. $.action({
  267. action : 'hackpoint_sketch_delete',
  268. id : $('#sketch-form').attr('data-id')
  269. },function(r){
  270. window.location = 'index.php?module=hackpoint&success=Sketch supprimé';
  271. });
  272. }
  273. /** RESOURCE **/
  274. //Récuperation d'une liste de resource dans le tableau #resources
  275. function hackpoint_resource_search(callback,triggered){
  276. $('#resources').fill({
  277. action:'hackpoint_resource_search',
  278. sketch : $('#sketch-form').attr('data-id'),
  279. showItems : false
  280. },function(){
  281. //rend les menu sortables
  282. $( ".hackpoint.editable #resources" ).sortable({
  283. axis: "y",
  284. update: function( event, ui ){
  285. var sort = [];
  286. $( "#resources li:visible" ).each(function(i,li){
  287. li = $(li);
  288. sort.push(li.attr('data-id'));
  289. });
  290. $.action({
  291. action : 'hackpoint_resource_sort',
  292. sort : sort
  293. },function(r){
  294. });
  295. }
  296. });
  297. $( "#resources" ).disableSelection();
  298. //affiche les menu de façon progressive
  299. $('#resources li:not(:eq(0))').removeClass('hidden')
  300. .css('transform','translateX(-120px)');
  301. $('#resources li:visible').each(function(i,element){
  302. setTimeout(function(){
  303. $(element)
  304. .css('transform','translateX(0px)');
  305. },150*i);
  306. });
  307. var trigger = '#resources li:eq(1)';
  308. if(triggered){
  309. trigger = triggered;
  310. }else if($.urlParam('resource')){
  311. trigger = '#resources li[data-id="'+$.urlParam('resource')+'"]';
  312. }
  313. $(trigger).trigger('click');
  314. if(callback!=null) callback();
  315. });
  316. }
  317. function hackpoint_resource_edit(element){
  318. var line = $(element).closest('li');
  319. var id = line.attr('data-id');
  320. $('#resources li:visible').removeClass('active');
  321. line.addClass('active');
  322. $.action({
  323. action : 'hackpoint_resource_edit',
  324. id : id
  325. },function(r){
  326. $('#sketch-editor')
  327. .html(r.html)
  328. .attr('data-id',id)
  329. .attr('class','resource-'+r.resourceType);
  330. window.history.replaceState(null, null, "index.php?module=hackpoint&page=sheet.sketch&id="+$('#sketch-form').attr('data-id')+"&resource="+id);
  331. init_components('#sketch-editor');
  332. if(r.javascript){
  333. eval(r.javascript);
  334. }
  335. });
  336. }
  337. function resource_add_document(files){
  338. $.action({
  339. action : 'resource_add_document',
  340. id: $('#sketch-editor').attr('data-id'),
  341. files : files
  342. }, function(r){
  343. $.each(r.files, function(i, file){
  344. var line = $('#sketch-editor li[data-path="'+file.oldPath+'"]');
  345. line.attr('data-path', file.relative);
  346. line.find('a').attr('href', file.url);
  347. line.find('i.pointer').attr('onclick', 'resource_delete_document(this)');
  348. if($('.hackpoint').hasClass('readonly')) line.find('i.pointer').hide();
  349. if(!file.icon){
  350. line.find('img').attr('src', file.url);
  351. }else{
  352. line.find('img').after('<i class="'+file.icon+'"></i>');
  353. line.find('img').remove();
  354. }
  355. $('#sketch-editor [data-type="dropzone"] input:not(:visible)').val('');
  356. });
  357. });
  358. }
  359. function resource_delete_document(element){
  360. if($('.hackpoint').hasClass('readonly')) return;
  361. if(!confirm("Êtes-vous sûr de vouloir supprimer ce fichier ?")) return;
  362. var line = $(element).closest('li');
  363. $.action({
  364. action : 'resource_delete_document',
  365. path : line.attr('data-path')
  366. },function(r){
  367. line.remove();
  368. });
  369. }
  370. function hackpoint_resource_title_edit(event,element){
  371. event.stopPropagation();
  372. event.preventDefault();
  373. var title = $(element);
  374. var span = $(element).find('span');
  375. var input = $(element).find('input');
  376. span.hide();
  377. input.removeClass('hidden');
  378. input.focus();
  379. input.val(span.text());
  380. input.select();
  381. input.blur(function(){
  382. input.hide();
  383. span.text(input.val());
  384. span.show();
  385. var li = $(this).closest('li');
  386. $.action({
  387. action : 'hackpoint_resource_save',
  388. id : li.attr('data-id'),
  389. label : input.val()
  390. },function(r){
  391. });
  392. });
  393. console.log(event,'hey!');
  394. }
  395. function hackpoint_resource_mirrorify(element,data){
  396. if($('.hackpoint').hasClass('readonly')) data.readOnly = true;
  397. var editor = CodeMirror.fromTextArea($(element).get(0), data);
  398. editor.on("blur", function(cm,obj){
  399. if($('.hackpoint').hasClass('readonly')) return;
  400. var data = {};
  401. data.action = 'hackpoint_resource_save_content';
  402. data.id = $('#sketch-editor').attr('data-id');
  403. data.content = cm.getValue();
  404. $('.sketch-preloader').show();
  405. $.action(data,function(r){
  406. setTimeout(function(){
  407. $('.sketch-preloader').fadeOut(200);
  408. },300);
  409. });
  410. });
  411. editor.on("change", function() {
  412. var data ={height:800};
  413. var wrap = editor.getWrapperElement();
  414. var approp = editor.getScrollInfo().height > data.height ? data.height+"px" : "auto";
  415. if (wrap.style.height != approp) {
  416. wrap.style.height = approp;
  417. editor.refresh();
  418. }
  419. });
  420. }
  421. //Ajout ou modification d'élément resource
  422. function hackpoint_resource_save(element){
  423. var data = {
  424. action:'hackpoint_resource_save',
  425. sketch:$('#sketch-form').attr('data-id'),
  426. type:$(element).attr('data-slug')
  427. }
  428. $.action(data,function(r){
  429. var tpl = $('#resources li:eq(0)').get(0).outerHTML;
  430. var element = $(Mustache.render(tpl,r));
  431. $('#resources').append(element);
  432. element.removeClass('hidden')
  433. .css('transform','translateX(-120px)');
  434. setTimeout(function(){
  435. $(element).css('transform','translateX(0px)');
  436. },150);
  437. element.trigger('click');
  438. });
  439. }
  440. //Suppression d'élement resource
  441. function hackpoint_resource_delete(element,event){
  442. event.stopPropagation();
  443. if(!confirm('Êtes vous sûr de vouloir supprimer cet item ?')) return;
  444. var line = $(element).closest('li');
  445. $.action({
  446. action : 'hackpoint_resource_delete',
  447. id : line.attr('data-id')
  448. },function(r){
  449. $('#resources li:visible(:eq(0))').removeClass('active');
  450. $('#sketch-editor').html('');
  451. line.remove();
  452. });
  453. }