/** * Create a default popup menu for an internal link. * * @param textPane Text pane. * @param position Position in the text. * @param pageAnalysis Page analysis. * @param link Internal link. * @return Popup menu. */ protected JPopupMenu createDefaultPopupInternalLink( MWPane textPane, int position, PageAnalysis pageAnalysis, PageElementInternalLink link) { if (link == null) { return null; } // Initialization Page page = DataManager.getPage(wikipedia, link.getLink(), null, null, null); // Menu creation BasicMenuCreator menu = new BasicMenuCreator(); JPopupMenu popup = menu.createPopupMenu(GT._( "Page: {0}", limitTextLength(page.getTitle(), 50))); menu.addCurrentChapter(popup, position, pageAnalysis); menu.addSeparator(popup); menu.addView(wikipedia, popup, page, false); menu.addAnalyze(wikipedia, popup, page); menu.addDisambiguation(wikipedia, popup, page); menu.addSeparator(popup); menu.addItemRemoveLink( popup, link.getDisplayedText(), textPane, link.getBeginIndex(), link.getEndIndex()); return popup; }
/** * Fix all the errors in the page. * * @param fixName Fix name (extracted from getGlobalFixes()). * @param analysis Page analysis. * @param textPane Text pane. * @return Page contents after fix. */ @Override public String fix(String fixName, PageAnalysis analysis, MWPane textPane) { // Initialize API api = APIFactory.getAPI(); StringBuilder tmpContents = new StringBuilder(); int currentIndex = 0; // Manage templates that can be used to replace a link to an other language List<String> templatesList = getTemplatesList(); String[] templateArgs = null; if ((templatesList != null) && (templatesList.size() > 0)) { String[] tmp = templatesList.get(0).split("\\|"); if (tmp.length >= 5) { templateArgs = tmp; } } // Check all internal links Object highlight = null; String contents = analysis.getContents(); try { EnumWikipedia toWiki = analysis.getWikipedia(); for (PageElementInterwikiLink link : analysis.getInterwikiLinks()) { if (isLanguageLink(link, toWiki)) { String lgCode = link.getInterwiki().getPrefix(); EnumWikipedia fromWiki = EnumWikipedia.getWikipedia(lgCode); if ((fromWiki != null) && (fromWiki.getSettings().getCode().equals(lgCode))) { String pageTitle = link.getLink(); int beginIndex = link.getBeginIndex(); int endIndex = link.getEndIndex(); String replacement = null; // Display selection highlight = addHighlight(textPane, beginIndex, endIndex); textPane.select(beginIndex, endIndex); // Check for language link String toTitle = api.getLanguageLink(fromWiki, toWiki, pageTitle); if (toTitle != null) { // List possible replacements List<String> possibleValues = new ArrayList<String>(); String possible = null; possible = PageElementInternalLink.createInternalLink(toTitle, link.getText()); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possible = PageElementInternalLink.createInternalLink(toTitle, link.getFullLink()); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possible = PageElementInternalLink.createInternalLink(toTitle, null); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possibleValues.add(GT._("Do not replace")); possibleValues.add(GT._("Cancel")); // Ask user what replacement to use String message = GT._( "The page \"{0}\" in \"{1}\" has a language link to \"{2}\": {3}.\n" + "With what text do you want to replace the link ?", new Object[] { pageTitle, fromWiki, toWiki, toTitle } ); int answer = Utilities.displayQuestion( textPane.getParent(), message, possibleValues.toArray()); if ((answer < 0) || (answer >= possibleValues.size() - 1)) { break; } else if (answer < possibleValues.size() - 2) { replacement = possibleValues.get(answer); } } else if (templateArgs != null) { String message = GT._("The page \"{0}\" in \"{1}\" doesn''t have a language link to \"{2}\".", new Object[] { pageTitle, fromWiki, toWiki }) +"\n" + GT._("You can replace the link using template {0}.", "{{" + templateArgs[0] + "}}") + "\n" + GT._("What is the title of the page on this wiki ?"); if ((link.getText() != null) && (!link.getText().equals(pageTitle))) { toTitle = Utilities.askForValue( textPane.getParent(), message, link.getText(), checker); } else { toTitle = Utilities.askForValue( textPane.getParent(), message, pageTitle, checker); } if (toTitle != null) { replacement = "{{" + templateArgs[0] + "|" + templateArgs[1] + "=" + toTitle + "|" + templateArgs[2] + "=" + lgCode + "|" + templateArgs[3] + "=" + pageTitle + "|" + templateArgs[4] + "=" + ((link.getText() != null) ? link.getText() : pageTitle) + "}}"; } } // Do the replacement if (replacement != null) { if (currentIndex < link.getBeginIndex()) { tmpContents.append(contents.substring(currentIndex, link.getBeginIndex())); } tmpContents.append(replacement); currentIndex = link.getEndIndex(); } removeHighlight(textPane, highlight); highlight = null; } } } } catch (APIException e) { // } removeHighlight(textPane, highlight); highlight = null; // Return result if (currentIndex == 0) { return contents; } if (currentIndex < contents.length()) { tmpContents.append(contents.substring(currentIndex)); } return tmpContents.toString(); }