Kaynağa Gözat

[GinR] Cookie warning

cgars 7 yıl önce
ebeveyn
işleme
65d03f48a0
3 değiştirilmiş dosya ile 189 ekleme ve 0 silme
  1. 17 0
      public/js/gogs.js
  2. 165 0
      public/js/libs/js.cookie.js
  3. 7 0
      templates/base/head.tmpl

+ 17 - 0
public/js/gogs.js

@@ -1085,6 +1085,22 @@ function initCodeView() {
     }
 }
 
+function initCookieWarn() {
+	// Automatically shows on init if cookie isnt set
+	if (Cookies.get('cookieok') === undefined) {
+		$('.cookie.nag')
+			.nag({
+				key: 'accepts-cookies',
+				value: true
+			})
+		;
+		$('.nag.close').click(function () {
+			Cookies.set('cookieok', true)
+		})
+
+	}
+}
+
 function initUserSettings() {
     console.log('initUserSettings');
 
@@ -1389,6 +1405,7 @@ $(document).ready(function () {
     initOrganization();
     initAdmin();
     initCodeView();
+	initCookieWarn();
 
     // Repo clone url.
     if ($('#repo-clone-url').length > 0) {

+ 165 - 0
public/js/libs/js.cookie.js

@@ -0,0 +1,165 @@
+/*!
+ * JavaScript Cookie v2.2.0
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */
+;(function (factory) {
+	var registeredInModuleLoader = false;
+	if (typeof define === 'function' && define.amd) {
+		define(factory);
+		registeredInModuleLoader = true;
+	}
+	if (typeof exports === 'object') {
+		module.exports = factory();
+		registeredInModuleLoader = true;
+	}
+	if (!registeredInModuleLoader) {
+		var OldCookies = window.Cookies;
+		var api = window.Cookies = factory();
+		api.noConflict = function () {
+			window.Cookies = OldCookies;
+			return api;
+		};
+	}
+}(function () {
+	function extend () {
+		var i = 0;
+		var result = {};
+		for (; i < arguments.length; i++) {
+			var attributes = arguments[ i ];
+			for (var key in attributes) {
+				result[key] = attributes[key];
+			}
+		}
+		return result;
+	}
+
+	function init (converter) {
+		function api (key, value, attributes) {
+			var result;
+			if (typeof document === 'undefined') {
+				return;
+			}
+
+			// Write
+
+			if (arguments.length > 1) {
+				attributes = extend({
+					path: '/'
+				}, api.defaults, attributes);
+
+				if (typeof attributes.expires === 'number') {
+					var expires = new Date();
+					expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
+					attributes.expires = expires;
+				}
+
+				// We're using "expires" because "max-age" is not supported by IE
+				attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
+
+				try {
+					result = JSON.stringify(value);
+					if (/^[\{\[]/.test(result)) {
+						value = result;
+					}
+				} catch (e) {}
+
+				if (!converter.write) {
+					value = encodeURIComponent(String(value))
+						.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
+				} else {
+					value = converter.write(value, key);
+				}
+
+				key = encodeURIComponent(String(key));
+				key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
+				key = key.replace(/[\(\)]/g, escape);
+
+				var stringifiedAttributes = '';
+
+				for (var attributeName in attributes) {
+					if (!attributes[attributeName]) {
+						continue;
+					}
+					stringifiedAttributes += '; ' + attributeName;
+					if (attributes[attributeName] === true) {
+						continue;
+					}
+					stringifiedAttributes += '=' + attributes[attributeName];
+				}
+				return (document.cookie = key + '=' + value + stringifiedAttributes);
+			}
+
+			// Read
+
+			if (!key) {
+				result = {};
+			}
+
+			// To prevent the for loop in the first place assign an empty array
+			// in case there are no cookies at all. Also prevents odd result when
+			// calling "get()"
+			var cookies = document.cookie ? document.cookie.split('; ') : [];
+			var rdecode = /(%[0-9A-Z]{2})+/g;
+			var i = 0;
+
+			for (; i < cookies.length; i++) {
+				var parts = cookies[i].split('=');
+				var cookie = parts.slice(1).join('=');
+
+				if (!this.json && cookie.charAt(0) === '"') {
+					cookie = cookie.slice(1, -1);
+				}
+
+				try {
+					var name = parts[0].replace(rdecode, decodeURIComponent);
+					cookie = converter.read ?
+						converter.read(cookie, name) : converter(cookie, name) ||
+						cookie.replace(rdecode, decodeURIComponent);
+
+					if (this.json) {
+						try {
+							cookie = JSON.parse(cookie);
+						} catch (e) {}
+					}
+
+					if (key === name) {
+						result = cookie;
+						break;
+					}
+
+					if (!key) {
+						result[name] = cookie;
+					}
+				} catch (e) {}
+			}
+
+			return result;
+		}
+
+		api.set = api;
+		api.get = function (key) {
+			return api.call(api, key);
+		};
+		api.getJSON = function () {
+			return api.apply({
+				json: true
+			}, [].slice.call(arguments));
+		};
+		api.defaults = {};
+
+		api.remove = function (key, attributes) {
+			api(key, '', extend(attributes, {
+				expires: -1
+			}));
+		};
+
+		api.withConverter = init;
+
+		return api;
+	}
+
+	return init(function () {});
+}));

+ 7 - 0
templates/base/head.tmpl

@@ -50,6 +50,7 @@
 		<link rel="shortcut icon" href="{{AppSubURL}}/img/favicon.png"/>
 		<script src="{{AppSubURL}}/js/jquery-1.11.3.min.js"></script>
 		<script src="{{AppSubURL}}/js/libs/jquery.are-you-sure.js"></script>
+		<script src="{{AppSubURL}}/js/libs/js.cookie.js"></script>
 		<link rel="stylesheet" href="{{AppSubURL}}/assets/font-awesome-4.6.3/css/font-awesome.min.css">
 		<link rel="stylesheet" href="{{AppSubURL}}/assets/octicons-4.3.0/octicons.min.css">
 
@@ -106,6 +107,12 @@
 		<noscript>Please enable JavaScript in your browser!</noscript>
 
 		{{if not .PageIsInstall}}
+		<div class="ui inline cookie nag">
+			<span class="title">
+				We use cookies to ensure you get the best experience on our website
+			</span>
+			<i class="nag close icon"></i>
+		</div>
 			<div class="following bar light">
 				<div class="ui container">
 					<div class="ui grid">