NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Redesign OBI IT Catalogue // @author Aleksey Bagrov OBI 016 // @description Редизайн ОБИ ИТ каталога // @include http://svrua000047.de.obi.net/ // @include http://svrua000047.de.obi.net/# // @include http://svrua000047.de.obi.net/MainTaskForm.aspx* // @include http://svrua000047.de.obi.net/subforms/ShopPage.aspx* // @include http://svrua000047.de.obi.net/subforms/CartGrid.aspx* // @downloadURL https://openuserjs.org/install/Runner2k11/Redesign_OBI_IT_Catalogue.user.js // @updateURL https://openuserjs.org/install/Runner2k11/Redesign_OBI_IT_Catalogue.user.js // @grant none // @version 1.13 // @license MIT // ==/UserScript== var scriptVersion = '1.13'; var ButtonAddWidth = '220px'; // 1 2 3 4 5 6 7 8 9 var ColWidth = ['120px', '450px', '0px', '85px', '40px', '0px', '0px', ButtonAddWidth, '90px'] //1 Артикул //2 Описание полное //3 Контрагент //4 Цена за ед. //5 Валюта //6 ОБИ (DE) Артикул товара //7 Фото //8 Корзина //9 Стоимость //0px - не отображать столбик var ColWidthLen = ColWidth.length - 1; var CatPosButtonAdd = ColWidth.indexOf(ButtonAddWidth); var CatButtons = ['ИТ расходка', '355', 'ИТ оборудование', '354'] var getFooter; var i, j; var elems, elems2; var FirstCol; var FrameHeight=850; var FrameWidth=0; for (i = 0; i < ColWidth.length; i++) { FrameWidth += parseInt(ColWidth[i]); } FrameWidth += 20; ColWidth[1] = '100%'; //добавить скрипт на страницу function AppendScript(s) { document.head.appendChild(document.createElement('script')) .innerHTML = s.toString().replace(/^function.*{|}$/g, ''); } function ChangeCellsView() { //меняем общую ширину таблицы elems = document.getElementById('CartRadGrid'); if (elems) elems.style.width="100%"; // getFooter = document.getElementById('CartRadGrid_ctl00'); if (getFooter) { elems = getFooter.getElementsByTagName('th'); i = 0; while((i < elems.length)&&(elems[i].getAttribute('title').toLowerCase().indexOf('vendors article') == -1)){ i++; } FirstCol = (i < elems.length) ? i : 0; //меняем colgroup elems = getFooter.getElementsByTagName('col'); for (i=0; i<=ColWidthLen; i++) if (ColWidth[i] != '0px') { elems[i+FirstCol].style.width = ColWidth[i]; } else { elems[i+FirstCol].style.display = 'none'; } //меняем заголовки elems = getFooter.getElementsByTagName('thead')[0].getElementsByTagName('th'); for (i = 0; i < elems.length; i++) if (ColWidth[i] == '0px') elems[i+FirstCol].style.display = 'none'; //меняем поиск elems = getFooter.getElementsByTagName('thead')[0].getElementsByClassName('rgFilterRow')[0].getElementsByTagName('td'); for (i = 0; i < elems.length; i++) if (ColWidth[i] == '0px') elems[i+FirstCol].style.display = 'none'; elems[ColWidthLen+FirstCol].innerHTML = '<span id="RedCatTotalSumm" style="font-weight: bold; color: red;">' + GetTotalSumm() + '</span>'; elems[ColWidthLen+FirstCol].setAttribute('align', 'right'); //меняем ячейки i=0; do { elems = document.getElementById('CartRadGrid_ctl00__' + i); if (elems) { elems = elems.getElementsByTagName('td'); if (elems) { elems[3+FirstCol].setAttribute('align', 'right'); elems[CatPosButtonAdd+FirstCol].setAttribute('align', 'right'); //elems[7+FirstCol].setAttribute('valign', 'middle'); //удаляем дивы с мин кол-вом заказа и поставки elems2 = elems[CatPosButtonAdd+FirstCol].getElementsByTagName('div'); //.getElementsByClassName('dMinVal')[0]; if (elems2.length == 2) { if (elems2[0].innerHTML.indexOf(': 1шт.') != -1) { elems2[0].parentNode.removeChild(elems2[0]); elems2[0].parentNode.removeChild(elems2[0]); } } for (j = 0; j < elems.length; j++) { if (ColWidth[j] == '0px') elems[j+FirstCol].style.display = 'none'; } i++; } } } while (elems); } } //меняем размер фрейма каталога (динамически) function ChangeFrameSize() { $(document).ready(function() { resizeiFrames(); window.getHeight = function(id) { return FrameHeight; }; }); $(window).on("resize", function () { resizeiFrames(); }); function resizeiFrames() { $("iframe").each(function () { if ((this.id == 'iCatalog') || (this.id == 'iCart')) { var self = this; $(this.contentWindow.document).ready(function () { $(self).height(FrameHeight - 30); $(self).width($(this).width() - $(self).offset().left - 5); if (FrameWidth > 0 && (FrameWidth >= $(this).width() - $(self).offset().left - 5)) { $(self).attr("horizontalscrolling", "yes"); $(self).height($(self).height() - 26); } }); } }); } } //добавляем кнопки принудительного переключения на "ИТ оборудование" и "Расходка" function AddOverrideCatButton() { elems = document.getElementById('pvCatalog'); if (elems) { elems = elems.appendChild(document.createElement('div')); with(elems.style) { position = 'absolute'; top = '50px'; left = '300px'; } elems.innerHTML = //elems = elems.getElementsByClassName('dSelectSubcat'); //elems.innerHTML += ' Принудительное переключение ' + '<input type="button" value="' + CatButtons[0] + '" title="Принудительно переключить на \'' + CatButtons[0] + '\'" tabindex="-1" onclick="document.getElementById(\'iCatalog\').src=document.getElementById(\'iCatalog\').src.replace(/(SubcatID=)(\\d+)/i,\'$1' + CatButtons[1] + '\');return false"></input>' + ' <input type="button" value="' + CatButtons[2] + '" title="Принудительно переключить на \'' + CatButtons[2] + '\'" tabindex="-1" onclick="document.getElementById(\'iCatalog\').src=document.getElementById(\'iCatalog\').src.replace(/(SubcatID=)(\\d+)/i,\'$1' + CatButtons[3] + '\');return false"></input>'; } } //расширяем фрейм накладных function ChangeDeliveryNoteFrame() { elems = document.getElementById('ep3239iframe'); if (elems) elems.width = "108%"; } //меняем способ отображения каталога на дочернее окно function ChangeCatView() { elems = document.getElementById('InlineExtFormsItem0'); if (elems) { //меняем общую ширину таблицы //elems.style.width=FrameWidth + "px"; elems = elems.getElementsByClassName('InlineExtFormsName'); if (elems) { elems = elems[0]; var hrefCatalogue = elems.href; elems = document.getElementById('ctl00_formInner_Contenttd').getElementsByTagName("a"); for (i=0; i<elems.length; i++) { if (elems[i].href.toLowerCase().indexOf('shoppage.aspx') != -1) { elems[i].parentNode.parentNode.innerHTML = //'>>> КАТАЛОГ <<<'; '<a class="aBlueBtn" href="javascript:;" onclick="' + 'window.open(\'' + elems[i].href + '\',\'ИТ Каталог\',' + //'openWindowWithPostRequest(\'' + elems[i].href + '\',\'ИТ Каталог\',' + '\'left=' + ((screen.width - FrameWidth) / 2) + ',top=' + ((screen.height - FrameHeight - 50) / 2) + ',height=' + FrameHeight + ',width=' + FrameWidth + '\').focus()">' + //'\')">' + '<table class="BlueBtn" cellspacing="0" cellpadding="0" onmouseout="Sys.UI.DomElement.removeCssClass(this, \'BlueBtnH\')" onmouseover="Sys.UI.DomElement.addCssClass(this,\'BlueBtnH\')" style="width:" tstchangeconfirmtext="" attrs="" title="Открыть окно заказа">' + '<tbody><tr><td class="BlueBtnLeftCorner"></td>' + '<td class="BlueBtnText"><span style="font-weight: bold; color: rgb(51, 102, 153);"> Каталог </span></td>' + '<td class="BlueBtnRightCorner"></td>' + '</tr></tbody></table>' + '</a>'; } else if (elems[i].href.toLowerCase().indexOf('taskprintform.aspx') != -1) { //попутно красиво оформляем карточку согласования elems[i].parentNode.style.paddingLeft='2px'; elems[i].innerHTML = '<table class="BlueBtn" cellspacing="0" cellpadding="0" onmouseout="Sys.UI.DomElement.removeCssClass(this, \'BlueBtnH\')" onmouseover="Sys.UI.DomElement.addCssClass(this,\'BlueBtnH\')" style="width:" tstchangeconfirmtext="" attrs="" title="Открыть карточку согласования">' + '<tbody><tr><td class="BlueBtnLeftCorner"></td>' + '<td class="BlueBtnText"><span style="font-weight: bold; color: rgb(51, 102, 153);"> ' + elems[i].innerHTML + ' </span></td>' + '<td class="BlueBtnRightCorner"></td>' + '</tr></tbody></table>'; elems[i].setAttribute('class','aBlueBtn'); } else if (elems[i].href.toLowerCase().indexOf('createmailpr') != -1) { //и "письмо контрагенту" тоже красивенько делаем elems[i].innerHTML = '<table class="BlueBtn" cellspacing="0" cellpadding="0" onmouseout="Sys.UI.DomElement.removeCssClass(this, \'BlueBtnH\')" onmouseover="Sys.UI.DomElement.addCssClass(this,\'BlueBtnH\')" style="width:" tstchangeconfirmtext="" attrs="" title="Открыть карточку согласования">' + '<tbody><tr><td class="BlueBtnLeftCorner"></td>' + '<td class="BlueBtnText"><span style="font-weight: bold; color: rgb(51, 102, 153);"> ' + elems[i].innerHTML + ' </span></td>' + '<td class="BlueBtnRightCorner"></td>' + '</tr></tbody></table>'; elems[i].setAttribute('class','aBlueBtn'); } } } } //удаляем фрейм каталога elems = document.getElementById('Catalogue'); if (elems) elems.parentNode.removeChild(elems); } function openCatalogWithPost() { function openWindowWithPostRequest(winURL, winName, windowoption) { var params = { '__EVENTARGUMENT' : 'FireCommand:CartRadGrid$ctl00;PageSize;20' , '__EVENTTARGET' : 'CartRadGrid' }; var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", winURL); form.setAttribute("target",winName); for (var i in params) { if (params.hasOwnProperty(i)) { var input = document.createElement('input'); input.type = 'hidden'; input.name = i; input.value = params[i]; form.appendChild(input); } } document.body.appendChild(form); window.open('', winName,windowoption); form.target = winName; form.submit(); document.body.removeChild(form); } } function RedCatNewScript() { function OnCartSuccess(res, amountWrapper) { if (amountWrapper != null) { amountWrapper.set_value(0); } if (res != null) { if (res.indexOf("rebindCart") > -1) window.parent.needRebindCart = true; if (res.indexOf("rebindCatalog") > -1) { window.parent.needRebindCatalog = true; if (!isShopCart) RebindCatalog(); } if (res.indexOf("enableSelectSubcat") > -1) { window.parent.$find($(window.parent.document).contents().find("#ddlSelectSubcat").prop('id')).set_enabled(true); } else if (res.indexOf("disableSelectSubcat") > -1) { window.parent.$find($(window.parent.document).contents().find("#ddlSelectSubcat").prop('id')).set_enabled(false); } } if (!isShopCart) alert(Constants.ShopCart.CartMsgItemAddSuccess); else alert(Constants.ShopCart.CartMsgItemSetSuccess); //обновляем общую сумму в родительском окне, а не в фрейме (new window.parent.opener.ExtParam(TotalSummEPID)).update(); //MainTaskForm.aspx } function GetTotalSumm() { var masterTable = $find("CartRadGrid").get_masterTableView(); var count = masterTable.get_dataItems().length; var item; var summ = 0; for (var i = 0; i < count; i++) { item = masterTable.get_dataItems()[i]; summ = parseFloat(summ) + parseFloat(item.get_cell("TotalPrice").innerHTML.replace(",", ".")); //!!!фикс неправильной суммы summ = Math.round(summ * 100) / 100; } return summ; } $.fn.getRowId = function() { //меняем общую сумму setTimeout('var elems = document.getElementById(\'RedCatTotalSumm\');if (elems) elems.innerHTML = GetTotalSumm();', 100); return this.closest("tr")[0].id.split("__")[1]; }; } function SetupBanner() { elems= document.body.appendChild(document.createElement('div')); if (elems) { elems.id = 'RedCatBanner'; elems.innerHTML += //'<div style="position: fixed; bottom: 1%; left: 1%; background-color: #A0D0F0; ' + '<div style="position: fixed; top: 3px; left: 660px; background-color: #A0D0F0; ' + 'box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5), 0 3px 6px -3px rgba(0,0,0,0.25); ' + 'text-shadow: 0 2px 2px rgba(255,255,255,1); ' + 'border: 1px dashed #6090B0; border-radius: 7px; padding: 3px; text-align:center;">' + //'<span style="font-size: 12px; font-weight: bold; color: red;">' + '<span style="font-size: 10px; font-weight: bold; color: red;">' + 'Redesign<br>OBI IT<br>Catalogue v' + scriptVersion + '</span></div>'; } } //меняем ширину панели навигации на 300px, если ширина не установлена или установлена по умолчанию function SetWidth_navigationPane() { i = window.findCookie(window.Constants.Default.TreeWidthCookieName); if ((i == null)||(i == window.Constants.Default.LeftTreesPinnedDefaultWidth)) { i = 300; window.addCookie(window.Constants.Default.TreeWidthCookieName, i, 900); window.$find('navigationPane').resize(i - window.Constants.Default.LeftTreesPinnedDefaultWidth, 1); openDef(); } } //раскрываем "дерево" навигации, открываем "Заявки на закупку ИТ" по умолчанию function openDef() { TCLeftTrees.openSyndicate('?PID=272&force=grid&wiki=False'); //TCLeftTrees.openNodeForSyndicate(80,'?iscat=true&PID=80&force=grid'); //setTimeout(function () { TCLeftTrees.openNodeForSyndicate(81,'?iscat=true&PID=81&force=grid') }, 3000); openNode(80,'?iscat=true&PID=80&force=grid'); setTimeout(function () { openNode(81,'?iscat=true&PID=81&force=grid') }, 3000); } function openNode(catID, subcatID, fileBrowserTree) { var treeId = fileBrowserTree ? TCLeftTrees.TreeFilesClientID : TCLeftTrees.TreeTasksClientID; var nodeVal = catID ? TCLeftTrees.CatNodePrefix + catID : TCLeftTrees.SubcatNodePrefix + subcatID; var node = $find(treeId).findNodeByValue(nodeVal); if (!node.get_expanded()) { node.set_expanded(true); TCLeftTrees.addTreeCookie(node.get_value()); } } $(document).ready(function() { var href_locase = window.location.href.toLowerCase(); if (href_locase.indexOf("maintaskform.aspx") != -1) { //AppendScript(openCatalogWithPost); ChangeCatView(); ChangeDeliveryNoteFrame(); } else if (href_locase.indexOf("shoppage.aspx") != -1) { ChangeFrameSize(); AddOverrideCatButton(); } else if (href_locase.indexOf("cartgrid.aspx") != -1) { AppendScript(RedCatNewScript); ChangeCellsView(); } else if (window.location.href == 'http://svrua000047.de.obi.net/') { SetWidth_navigationPane(); SetupBanner(); //openDef(); } });