MediaWiki:Common.js
Материал из ArcheAge
Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
- Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
- Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
- Opera: Выберите очистку кэша в меню Инструменты → Настройки
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */ /* selectTextOnClick */ $(function() { jQuery.fn.selectText = function() { var doc = document; var element = this[0]; if(doc.body.createTextRange) { var range = document.body.createTextRange(); range.moveToElementText(element); range.select(); } else if(window.getSelection) { var selection = window.getSelection(); var range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); } } $(".selectTextOnClick").click(function() { $(this).selectText(); }); }); /* Interactive map */ $(function() { var mapDialog = null; var blocks = $(".interactiveMapBlock"); if(blocks.length > 0) mw.loader.load('jquery.ui.dialog'); blocks.each(function(blockIndex, blockElement) { var block = $(blockElement); var innerBlock = block.find(".interactiveMapInnerBlock"); var container = block.find(".interactiveMapContainer"); var link = container.data("link"); var mapFrame = $('<iframe src="http://aadb.info/map/?link=' + link + '&action=frame&logo=no" width="360" height="270"></iframe>'); container.empty(); container.append(mapFrame); var enlargeLink = $('<a href="#">' + '<img src="http://aa.mail.ru/wiki/images/4/41/Увеличить.png" width="16" height="16" /> Увеличить карту</a>'); var enlargeLinkDiv = $('<div style="text-align: right;"></div>') enlargeLinkDiv.append(enlargeLink) innerBlock.append(enlargeLinkDiv); if(mapDialog == null) { mapDialog = $('<div id="interactiveMapDialog" title="Карта"></div>'); $(document.body).append(mapDialog); $('.ui-widget-overlay').live("click",function(){ mapDialog.dialog("close"); }); } enlargeLink.on('click', function(event) { var win = $(window); mw.loader.using('jquery.ui.dialog', function() { mapDialog.empty(); var mapDialogWidth = (win.width() - 170) var largeMapFrame = $('<iframe src="http://aadb.info/map/?link=' + link + '&action=frame&logo=no" width="' + mapDialogWidth + '" height="' + (win.height() - 170) + '"></iframe>'); mapDialog.append(largeMapFrame); mapDialog.dialog({ width: mapDialogWidth + 35, modal: true, resizable: false }) }); return false; }); }); }); /* Simple craft calculator */ $(function() { var resultCountInput = '<input type="text" size="4" maxlength="4"/>'; $(".simpleCraftCalcResultCount").empty().append(resultCountInput); var craftCountSpans = ' (<span class="simpleCraftCalcCraftCount">1</span> × ' + '<span class="simpleCraftCalcInitialCount">1</span> = <span class="simpleCraftCalcProduct">1</span>) <sup>' + '<abbr title="Кол-во крафтов × кол-во предметов, изготавливаемых за 1 крафт = получаемое кол-во предметов в результате">?</abbr></sup>'; $(".simpleCraftCalcResultCount").append(craftCountSpans); $(".simpleCraftCalcResultCount").each(function(index, element) { var resultEl = $(element); var countInput = resultEl.find("input"); var initialCount = parseInt(resultEl.data("initial-count")); countInput.val(initialCount); if(initialCount > 1) countInput.attr("title", "Округляется вверх до ближайшего кратного " + initialCount); countInput.change(valueChanged); countInput.keyup(valueChanged); resultEl.find(".simpleCraftCalcInitialCount").text(initialCount); resultEl.find(".simpleCraftCalcProduct").text(initialCount); }); function valueChanged(event) { var countInput = $(this); var count = parseInt(countInput.val()); if(isFinite(count) && count > 0) { var initialCount = parseInt(countInput.parents(".simpleCraftCalcResultCount").data("initial-count")); var crafts = craftCount(count, initialCount); var recipeBase = countInput.parents(".simpleCraftCalcRecipeBase"); var craftCountSpan = recipeBase.find(".simpleCraftCalcCraftCount"); craftCountSpan.text(crafts); var productSpan = recipeBase.find(".simpleCraftCalcProduct"); productSpan.text(crafts * initialCount); recipeBase.find(".simpleCraftCalcIngredientCount").each(function(index, element) { var ingSpan = $(this); var ingInitialCount = parseInt(ingSpan.data("initial-count")); ingSpan.text(crafts * ingInitialCount); }); } } function craftCount(resultCount, initialCount) { return Math.ceil(resultCount / initialCount); } }); /* Item stat calc */ var ITEM_RARITY = { 0: { "color": "#949293", "name": "Бесполезный предмет", "dps": 0.8, "stat": 0.8 }, 1: { "color": "#000000", "name": "Обычный предмет", "dps": 1, "stat": 1 }, 2: { "color": "#77b064", "name": "Необычный предмет", "dps": 1.05, "stat": 1.08 }, 3: { "color": "#558fd7", "name": "Редкий предмет", "dps": 1.1, "stat": 1.16 }, 4: { "color": "#cb72d8", "name": "Уникальный предмет", "dps": 1.15, "stat": 1.24 }, 5: { "color": "#d78b06", "name": "Эпический предмет", "dps": 1.2, "stat": 1.32 }, 6: { "color": "#e17853", "name": "Легендарный предмет", "dps": 1.25, "stat": 1.4 }, 7: { "color": "#f95252", "name": "Реликвия", "dps": 1.35, "stat": 1.5 }, 8: { "color": "#cf7d5d", "name": "Предмет эпохи чудес", "dps": 1.45, "stat": 1.6 }, 9: { "color": "#8fa5ca", "name": "Предмет эпохи сказаний", "dps": 1.55, "stat": 1.7 }, 10: { "color": "#bf7900", "name": "Предмет эпохи легенд", "dps": 1.65, "stat": 1.8 }, 11: { "color": "#c90b0b", "name": "Предмет эпохи мифов", "dps": 1.75, "stat": 1.9 }, 100: { "color": "#000000", "name": "Нет", "dps": 0, "stat": 0 } }; var Collections = { find: function(collection, closure) { var result = null; $.each(collection, function(index, it) { if(closure(it)) { result = it; return false; } }); return result; }, sum: function(collection, closure) { if(closure == null) closure = function(it) { return it; } var sum = 0; $.each(collection, function(index, it) { sum += closure(it); }); return sum; } } function ItemStatCalcBase(itemBlock, rarityContainerSelector) { var self = this; this.recalcStats = function(rarityIndex) { }; var block = itemBlock; this.block = block; var selectContainer = block.find(rarityContainerSelector); var select = $('<select class="itemStatCalcRaritySelect" style="color:#000000;"></select>'); $.each(ITEM_RARITY, function(rarityIndex, rarity) { var option = $('<option></option>').attr("value", rarityIndex).text(rarity.name).css("color", rarity.color); select.append(option); }) this.select = select; selectContainer.append(select); var initialRarityIndex = findRarityIndexByName(selectContainer.data("initial-rarity")); select.val(initialRarityIndex); select.on('change', function(event) { var rarityIndex = $(this).val(); self.updateSelectedColor(rarityIndex); self.recalcStats(rarityIndex); }) this.init = function() { this.updateSelectedColor(initialRarityIndex); this.recalcStats(initialRarityIndex); } this.setRarityIndex = function(rarityIndex) { select.val(rarityIndex); self.updateSelectedColor(rarityIndex); self.recalcStats(rarityIndex); } function findRarityIndexByName(name) { var result = 1; $.each(ITEM_RARITY, function(rarityIndex, rarity) { if(rarity.name == name) { result = rarityIndex; return false; } }) return result; } this.updateSelectedColor = function(rarityIndex) { select.css("color", ITEM_RARITY[rarityIndex].color); } this.formatValue = function(value, dataType) { var result; if(dataType == "double") { result = value.toFixed(1); } else { result = value.toFixed(0); } return result; } this.makeCalculatedValue = function(value, dataType) { var result; if(dataType == "double") { result = value; } else { result = Math.round(value); } return result; } } function ItemStatCalcItem(itemBlock, rarityContainerSelector) { var self = this; var superObj = new ItemStatCalcBase(itemBlock, rarityContainerSelector); superObj.recalcStats = function(rarityIndex) { var rarity = ITEM_RARITY[rarityIndex]; var dpsStats = self.block.find(".itemStatCalcDps"); var dpsMultiplier = rarity.dps; dpsStats.each(function(index, element) { var el = $(element); var baseValue = parseFloat(el.data("base-value")); var value = baseValue * dpsMultiplier; var dataType = el.data("type"); var resultValueString = self.formatValue(value, dataType); el.data("calculatedValue", self.makeCalculatedValue(value, dataType)); el.text(resultValueString); }) var statMultiplier = rarity.stat; var baseStats = self.block.find(".itemStatCalcBaseStat"); var statsSum = 0; var ratioSum = 0; baseStats.each(function(index, element) { var el = $(element); var baseValue = parseFloat(el.data("base-value")); statsSum += baseValue; var ratio = parseInt(el.data("ratio")); ratioSum += ratio; }) statsSum *= statMultiplier; baseStats.each(function(index, element) { var el = $(element); var ratio = parseInt(el.data("ratio")); var value = statsSum * ratio / ratioSum; var dataType = el.data("type"); var resultValueString = self.formatValue(value, dataType); el.data("calculatedValue", self.makeCalculatedValue(value, dataType)); el.text(resultValueString); }) var extraStats = self.block.find(".itemStatCalcExtraStat"); extraStats.each(function(index, element) { var el = $(element); var baseValue = parseFloat(el.data("base-value")); var value = baseValue * statMultiplier; var dataType = el.data("type"); var resultValueString = self.formatValue(value, dataType); el.text(resultValueString); }) } $.extend(this, superObj); self.init(); } function ItemStatCalcSet(itemBlocks, sumItem, rarityContainerSelector) { var ITEM_SET_SUMMED_STAT_NAMES = ["pdef", "mdef", "str", "dex", "sta", "int", "spi"]; var self = this; var superObj = new ItemStatCalcBase(sumItem, rarityContainerSelector); var items = itemBlocks.map(function() { return new ItemStatCalcItem($(this), rarityContainerSelector); }); var itemSelects = items.map(function() { return this.select; }) superObj.recalcStats = function(rarityIndex) { items.each(function(index, it) { it.setRarityIndex(rarityIndex); }); recalcSum(); } $.extend(this, superObj); self.init(); itemSelects.each(function(index, it) { $(it).on('change', recalcSum); }); function recalcSum() { $.each(ITEM_SET_SUMMED_STAT_NAMES, function(index, statName) { var statValues = items.map(function() { var v = 0; var el = findElementByStatName(this.block, statName); if(el) { var elValue = $(el).data("calculatedValue"); if(isFinite(elValue)) v = elValue; } return v; }) var sum = Collections.sum(statValues); var sumEl = $(findElementByStatName(self.block, statName)); if(sumEl) { sumEl.text(self.formatValue(sum)); var sumRow = sumEl.parents(".itemSetStatCalcStatSumRow"); sumRow.css("display", sum > 0 ? "block" : "none"); } }) } function findElementByStatName(item, statName) { return Collections.find(item.find(".itemStatCalcDps, .itemStatCalcBaseStat"), function(el) { return $(el).data("stat-name") == statName; }); } } $(function() { if($(".itemStatCalcBlock").length > 0) new ItemStatCalcItem($(".itemStatCalcBlock"), ".itemStatCalcRaritySelectContainer"); if($(".itemSetStatCalcBlock").length > 0) new ItemStatCalcSet($(".itemSetStatCalcBlock .itemSetStatCalcItem"), $(".itemSetStatCalcSum"), ".itemSetStatCalcRaritySelectContainer"); }); /* Editor toolbar customization */ var customizeToolbar = function() { //item icon $('#wpTextbox1').wikiEditor('addToToolbar', { 'section': 'main', 'group': 'insert', 'tools': { 'itemIcon': { label: 'Иконка предмета', type: 'button', icon: '//aa.mail.ru/wiki/images/a/aa/Иконка_предмета_кнопка.png', action: { type: 'encapsulate', options: { pre: "{{иконка предмета|", peri: "", post: "}}" } } } } }); }; /* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */ if($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) { mw.loader.using('user.options', function() { if(mw.user.options.get('usebetatoolbar')) { mw.loader.using('ext.wikiEditor.toolbar', function() { $(document).ready(customizeToolbar); }); } }); } // Add the customizations to LiquidThreads' edit toolbar, if available mw.hook('ext.lqt.textareaCreated').add(customizeToolbar);
- Оружие
- Доспехи
- Украшения
- Материалы
- Предметы
- Рецепты
- Задания