1. JavaScript / Говнокод #26510

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    <script>
    			if (!window.BX && top.BX)
    				window.BX = top.BX;
    
    			<?CMedialib::AppendLangMessages();?>
    			window.<?= $arConfig['event']?> = function(bLoadJS)
    			{
    				if (window.oBXMedialib && window.oBXMedialib.bOpened)
    					return false;
    
    				<?if(!CMedialib::CanDoOperation('medialib_view_collection', 0)):?>
    					return alert(ML_MESS.AccessDenied);
    				<?else:?>
    
    				if (!window.BXMediaLib)
    				{
    					if (bLoadJS !== false)
    					{
    						// Append CSS
    						BX.loadCSS("/bitrix/js/fileman/medialib/medialib.css");
    
    						var arJS = [];
    						if (!window.jsAjaxUtil)
    							arJS.push("/bitrix/js/main/ajax.js?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"].'/bitrix/js/main/ajax.js')?>");
    						if (!window.jsUtils)
    							arJS.push("/bitrix/js/main/utils.js?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"].'/bitrix/js/main/utils.js')?>");
    						if (!window.CHttpRequest)
    							arJS.push("/bitrix/js/main/admin_tools.js?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"].'/bitrix/js/main/admin_tools.js')?>");
    
    						arJS.push("/bitrix/js/fileman/medialib/common.js?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"].'/bitrix/js/fileman/medialib/common.js')?>");
    						arJS.push("/bitrix/js/fileman/medialib/core.js?v=<?= filemtime($_SERVER["DOCUMENT_ROOT"].'/bitrix/js/fileman/medialib/core.js')?>");
    						BX.loadScript(arJS);
    					}
    					return setTimeout(function(){<?=$arConfig['event']?>(false)}, 50);
    				}
    
    				<?CMedialib::ShowJS()?>
    				<?
    					$arSet = explode(',' , CUserOptions::GetOption("fileman", "medialib_user_set", '600,450,0'));
    					$width = $arSet[0] ? intVal($arSet[0]) : 600;
    					$height = $arSet[1] ? intVal($arSet[1]) : 450;
    					$coll_id = $arSet[2] ? intVal($arSet[2]) : 0;
    				?>
    				window._mlUserSettings = window._mlUserSettings || {width: <?=$width?>, height: <?=$height?>, coll_id: <?=$coll_id?>}
    
    				var oConfig =
    				{
    					sessid: "<?=bitrix_sessid()?>",
    					thumbWidth : <?= COption::GetOptionInt('fileman', "ml_thumb_width", 140)?>,
    					thumbHeight : <?= COption::GetOptionInt('fileman', "ml_thumb_height", 105) ?>,
    					userSettings : window._mlUserSettings,
    					resType: "<?= $resultDest?>",
    					Types : <?= CUtil::PhpToJSObject(CMedialib::GetTypes($arConfig['types']))?>,
    					arResultDest : <?= CUtil::PhpToJSObject($arConfig['arResultDest'])?>,
    					rootAccess: {
    						new_col: '<?= CMedialib::CanDoOperation('medialib_new_collection', 0)?>',
    						edit: '<?= CMedialib::CanDoOperation('medialib_edit_collection', 0)?>',
    						del: '<?= CMedialib::CanDoOperation('medialib_del_collection', 0)?>',
    						new_item: '<?= CMedialib::CanDoOperation('medialib_new_item', 0)?>',
    						edit_item: '<?= CMedialib::CanDoOperation('medialib_edit_item', 0)?>',
    						del_item: '<?= CMedialib::CanDoOperation('medialib_del_item', 0)?>',
    						access: '<?= CMedialib::CanDoOperation('medialib_access', 0)?>'
    					},
    					bCanUpload: <?= $USER->CanDoOperation('fileman_upload_files') ? 'true' : 'false'?>,
    					bCanViewStructure: <?= $USER->CanDoOperation('fileman_view_file_structure') ? 'true' : 'false'?>,
    					strExt : "<?= CUtil::JSEscape(CMedialib::GetMediaExtentions())?>",
    					lang : "<?= $arConfig['lang']?>",
    					description_id : '<?= CUtil::JSEscape($arConfig['description_id'])?>'
    				};
    
    				window.oBXMedialib = new BXMediaLib(oConfig);
    				oBXMedialib.Open();
    				<?endif;?>
    			};
    			</script>

    Запостил: phpBidlokoder2, 20 Марта 2020

    Комментарии (57) RSS

    • А что, мне нравится. Взяли язык и лаконично дополнили его препроцессором. Прямо как в сишке. Но только вместо ублюдочных сишных мокросов, в которых даже цикл без пердолинга не сделаешь, тут используется годный шаблонизатор.
      Ответить
    • > bLoadJS

      звучит так, как будто кого-то вырвало
      Ответить
      • И эта софтина успешно продается от 6к до 400к+ в месяц
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Там еще и самописная реализация jquery (BX)
            Ответить
          • > буржуазным свиньям нравится только дерьмо» — сказал художник
            > в баночках на самом деле содержится обычный гипс
            Типичный левачок, которому повезло и его не потянули в левацкий суд за объёб потребителя.
            Ответить
    • Я за C++, поэтому спрашиваю: что в этой питушне значат теги типа <?CMedialib::ShowJS()?>, <?else:?>, <?if(!CMedialib::CanDoOperation('mediali b_view_collection', 0)):?>...
      Ответить
    • > arrSet
      > intVal
      > width

      Почему не intWidth?
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Сейчас венгерка не в моде, и я сам перестал ее юзать, но я постоянно не могу из названия переменной угадать её тип.
          Вот возьмем C#. Width у нас чем будет? Интом или доублём?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • lpctstrName
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • lParam... long, проверяй.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • PLONGLONG это ближний указатель (P) на LONGLONG, PLONG64 это ближний указатель (P) на LONG64. Но сейчас ближние указатели не отличимы от дальних, и сейчас мы их не различаем, так что ближний указатель = указатель. Осталось разобраться, что такое LONGLONG и LONG64. LONGLONG это синоним походу long long, а LONG64 это синоним походу __int64.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Там ещё DWORD32, DWORD64 и DWORDLONG есть.
                          Ответить
                        • __int64 -- так сложилось исторически, это юзается под Windows вместо long long.
                          Походу тут намек на старину - целое в формате вещественного.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Да. Во времена 16-бит не было нормальных 64-битных чисел (как и во времена 32-бит не было нормальных нормальных 128-битных чисел). Поэтому в те далекие времена нам на помощь приходили математические сопроцессоры с доублами и целыми в формате вещественного. А если хотели без них? А тогда делали так:
                              typedef struct tagint64 { long low, high; } int64;
                              /* при 16-битной архитектуре int был 16-битным (как short сейчас), а long 32-битным */
                              Такое легаси до сих пор есть в WinAPI, например LARGE_INTEGER
                              Ответить
                              • Это не легацы, а поддержка легацы, почитай Rе:маркс где предостерегают от простого каста к QWORD
                                Ответить
                                • Represents a 64-bit signed integer value.
                                  The LARGE_INTEGER structure is actually a union. If your compiler has built-in support for 64-bit integers, use the QuadPart member to store the 64-bit integer. Otherwise, use the LowPart and HighPart members to store the 64-bit integer.
                                  Никакого предостережения такого не увидел.
                                  LARGE_INTEGER la;
                                  //...
                                  __int64 ll = *((__int64*)&la);
                                  Ответить
                                  • Или нота про __ште64 - остаток от него или я сконфузил с ремаркой про FILETIME

                                    It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times. Instead, you should copy the low- and high-order parts of the file time to a ULARGE_INTEGER structure, perform 64-bit arithmetic on the QuadPart member, and copy the LowPart and HighPart members into the FILETIME structure.
                                    Ответить
                                    • Вот там действительно предостережение есть: Do not cast a pointer to a FILETIME structure to either a ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows.
                                      В статье про эти alignment faults: On x64 and ARM64 systems, any alignment faults are handled by a combination of hardware and software. For best performance, all access to memory should be properly aligned. In addition, unaligned interlocked variable access should be avoided on ARM64, as these operations are not atomic-safe.

                                      Но, alignment faults, это то, чего надо избегать на ARM, и то, можно забить - ведь операционная система сама обработает эту хню, ценой некоторого времени. Вот что на x64 это может сделать. Чуть-чуть подзамедлить программу?
                                      Ответить
                                      • Тут деструктивно что оно не атомно-безопасно.
                                        А насчет пирфоманса интересно было бы погонять бенчи, может действительно дешевле скопировать по частям, посчитать и скопировать обратно.
                                        Ответить
                                        • Я не обучен мыслить а тем более действовать конструктивно, зато деструктивно - дай бог.
                                          Апчхии!
                                          Ответить
                  • Пасквилянт детектед. LPARAM же!
                    Ответить
                    • Я вообще про название переменной lParam писал, которая имеет тип LPARAM.
                      Да, и я в себе уже убил этот пацкаль, от которого только хочется рыгать.
                      Ответить
            • Ну я вот так и понимаю это дело, по сути. Контекст (тип в WPF Width это double, в WinForms или P/Invoke это int) + IDE саппортит.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Можно задать единицы измерения. Если единицы измерения не заданы явно, то используются по умолчанию пиксели, но не обычные, а 'логические', которые независят от устройства. Один 'логический' пиксель = 1/96 дюйма.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • WPF считает, что у вас идеальное беспиксельное устройство. Чтобы спустить его на землю, используйте SnapsToDevicePixels="True"
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • К ним наиболее близки принтеры.
                          Хотя существование идеальных беспиксельных устройств противоречит физике, ведь длина волны света конечна, и имеет определенное значение (для определенного цвета).
                          Ответить
                        • У телевизора изображение не разбито на пиксели по горизонтали, тем не менее, оно по вертикали разбито на заранее известное количество строк.

                          Идеальное беспиксельное — это векторный дисплей. Недавно обсуждали.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • На чёрно-белом нет никакой «апертурной решётки или теневой маски». Именно поэтому я за «чёрно-белый кинескоп».
                              Ответить
                            • Неряшливые корейские девушки оставляют в тринитронах волосы, которые потом электрическое поле растягивает поперек экрана.
                              Ответить
                        • Схуяли? Строка развертки тебе уже не пикчи элемент?
                          Ответить
          • Именно поэтому я за Type Script
            Ответить

    Добавить комментарий