%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/wiki.varak.net/extensions/CookiePolicy/scripts/
Upload File :
Create Path :
Current File : /www/varak.net/wiki.varak.net/extensions/CookiePolicy/scripts/cookiePolicy.js

/* global Geo, mediaWiki */
( function ( mw, $ ) {
	'use strict';

	/**
	 * Initialize JS for whether or not to show a banner notifying European Union
	 * users that we use cookies on our site, per EU law.
	 * Users can dismiss the notification and will not be shown again, unless
	 * they clear their cookies.
	 */
	function initCookieNotification() {
		if ( shouldShowBanner() ) {
			showBanner();
		}
	}

	/**
	 * @return string Two-letter country code
	 */
	function getCountryCode() {
		/**
		 * safe fallback -- if geolocation fails, display the notice anyway
		 */
		var countryCode = 'EU';

		if ( !$.cookie( 'euCookiePolicyCountryCode' ) ) {
			// @see http://www.dwuser.com/education/content/web-services-made-practical-where-are-your-visitors-from/
			$.get( '//' + mw.config.get( 'wgCookiePolicyGeoIPServiceURL' ) + '/json/', function( data ) {
				// Get the country code
				countryCode = data.country_code;
				// Store the result in a cookie (ah, the sweet, sweet irony) to
				// avoid hitting the geolocation service unnecessarily
				$.cookie( 'euCookiePolicyCountryCode', countryCode, {
					domain: window.mw.config.get( 'wgCookieDomain' ),
					path: '/',
					expires: 30
				} );
			}, 'jsonp' );
		} else if ( $.cookie( 'euCookiePolicyCountryCode' ) !== null ) {
			countryCode = $.cookie( 'euCookiePolicyCountryCode' );
		}

		return countryCode;
	}

	/**
	 * Check if user is from the EU and hasn't seen the banner yet
	 * @return {boolean}
	 */
	function shouldShowBanner() {
		var countryCode = getCountryCode();
		var fromEU = isEuropeanCountry( countryCode );

		return ( fromEU && !hasSeenBanner() );
	}

	/**
	 * Check if the supplied country code is that of an European state.
	 *
	 * List of countries pulled from http://dev.maxmind.com/geoip/legacy/codes/eu_country_list/
	 * on 19 August 2015.
	 *
	 * @return {boolean}
	 */
	function isEuropeanCountry( countryCode ) {
		return $.inArray( countryCode, [
			'EU', // Europe
			'AD', // Andorra
			'AL', // Albania
			'AT', // Austria
			'BA', // Bosnia and Herzegovina
			'BE', // Belgium
			'BG', // Bulgaria
			'BY', // Belarus
			'CH', // Switzerland
			'CS', // Serbia and Montenegro
			'CZ', // Czech Republic
			'DE', // Germany
			'DK', // Denmark
			'EE', // Estonia
			'ES', // Spain
			'FI', // Finland
			'FO', // Faroe Islands
			'FR', // France
			'FX', // France, Metropolitan
			'GB', // United Kingdom
			'GI', // Gibraltar
			'GR', // Greece
			'HR', // Croatia
			'HU', // Hungary
			'IE', // Ireland
			'IS', // Iceland
			'IT', // Italy
			'LI', // Liechtenstein
			'LT', // Lithuania
			'LU', // Luxembourg
			'LV', // Latvia
			'MC', // Monaco
			'MD', // Moldova, Republic of
			'MK', // Macedonia
			'MT', // Malta
			'NL', // Netherlands
			'NO', // Norway
			'PL', // Poland
			'PT', // Portugal
			'RO', // Romania
			'SE', // Sweden
			'SI', // Slovenia
			'SJ', // Svalbard and Jan Mayen
			'SK', // Slovakia
			'SM', // San Marino
			'UA', // Ukraine
			'VA' // Holy See (Vatican City State)
		] ) > -1;
	}

	/**
	 * Display the cookie policy message to the user
	 */
	function showBanner() {
		var message = formatMessage();

		mw.notify( $.parseHTML( message ), { autoHide: false, tag: 'cookiePolicy' } );

		// bind a click handler on the notification and only *after* the user
		// clicks on the notification, set the cookie
		$( document ).one( 'click', '.mw-notification-tag-cookiePolicy', function() {
			setCookie();
		} );
	}

	/**
	 * This is just nasty; I'm so sorry. --ashley, 20 August 2015
	 */
	function formatMessage() {
		var message = mw.message( 'cookie-policy-notification-message' ),
			policyURL = mw.message( 'cookie-policy-link' );
		var readMoreMsg = '<a target="_blank" href="' + policyURL + '">' +
				mw.message( 'cookie-policy-read-more' ) + '</a>';
		message = String( message );
		message = message + '<br />' + readMoreMsg;
		return message;
	}

	/**
	 * Check if the user has seen the cookie notification banner before.
	 * @return {boolean}
	 */
	function hasSeenBanner() {
		return !!$.cookie( 'euCookiePolicy' );
	}

	/**
	 * Set a cookie so we know not to show the policy banner again.
	 */
	function setCookie() {
		var date = new Date( '31 December 2037' );
		$.cookie( 'euCookiePolicy', '1', {
			domain: window.mw.config.get( 'wgCookieDomain' ),
			path: '/',
			// original code used 'never' but $.cookie doesn't like that
			// also see http://stackoverflow.com/questions/9466829/jquery-cookie-persistence
			expires: date
		} );
	}

	$( function () {
		initCookieNotification();
	} );
}( mediaWiki, jQuery ) );

Zerion Mini Shell 1.0