diff options
Diffstat (limited to 'js/document/helpers/url-parser.js')
-rwxr-xr-x | js/document/helpers/url-parser.js | 141 |
1 files changed, 71 insertions, 70 deletions
diff --git a/js/document/helpers/url-parser.js b/js/document/helpers/url-parser.js index 9c663e8a..01bd72f5 100755 --- a/js/document/helpers/url-parser.js +++ b/js/document/helpers/url-parser.js | |||
@@ -1,24 +1,25 @@ | |||
1 | /* <copyright> | 1 | /* <copyright> |
2 | Copyright (c) 2012, Motorola Mobility, Inc | 2 | Copyright (c) 2012, Motorola Mobility LLC. |
3 | All Rights Reserved. | 3 | All Rights Reserved. |
4 | BSD License. | ||
5 | 4 | ||
6 | Redistribution and use in source and binary forms, with or without | 5 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met: | 6 | modification, are permitted provided that the following conditions are met: |
8 | 7 | ||
9 | - Redistributions of source code must retain the above copyright notice, | 8 | * Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. | 9 | this list of conditions and the following disclaimer. |
11 | - Redistributions in binary form must reproduce the above copyright | 10 | |
12 | notice, this list of conditions and the following disclaimer in the | 11 | * Redistributions in binary form must reproduce the above copyright notice, |
13 | documentation and/or other materials provided with the distribution. | 12 | this list of conditions and the following disclaimer in the documentation |
14 | - Neither the name of Motorola Mobility nor the names of its contributors | 13 | and/or other materials provided with the distribution. |
15 | may be used to endorse or promote products derived from this software | 14 | |
16 | without specific prior written permission. | 15 | * Neither the name of Motorola Mobility LLC nor the names of its |
16 | contributors may be used to endorse or promote products derived from this | ||
17 | software without specific prior written permission. | ||
17 | 18 | ||
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 22 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
@@ -30,81 +31,81 @@ POSSIBILITY OF SUCH DAMAGE. | |||
30 | 31 | ||
31 | //////////////////////////////////////////////////////////////////////// | 32 | //////////////////////////////////////////////////////////////////////// |
32 | // | 33 | // |
33 | var Montage = require("montage/core/core").Montage, | 34 | var Montage = require("montage/core/core").Montage, |
34 | Component = require("montage/ui/component").Component; | 35 | Component = require("montage/ui/component").Component; |
35 | //////////////////////////////////////////////////////////////////////// | 36 | //////////////////////////////////////////////////////////////////////// |
36 | // | 37 | // |
37 | exports.UrlParser = Montage.create(Component, { | 38 | exports.UrlParser = Montage.create(Component, { |
38 | //////////////////////////////////////////////////////////////////// | 39 | //////////////////////////////////////////////////////////////////// |
39 | // | 40 | // |
40 | hasTemplate: { | 41 | hasTemplate: { |
41 | value: false | 42 | value: false |
42 | }, | 43 | }, |
43 | //////////////////////////////////////////////////////////////////// | 44 | //////////////////////////////////////////////////////////////////// |
44 | // | 45 | // |
45 | parseStyleUrls: { | 46 | parseStyleUrls: { |
46 | value: function (css, href, local) { | 47 | value: function (css, href, local) { |
47 | // | 48 | // |
48 | if (local) { | 49 | if (local) { |
49 | var fileCouldDirUrl = href.split(href.split('/')[href.split('/').length-1])[0]; | 50 | var fileCouldDirUrl = href.split(href.split('/')[href.split('/').length-1])[0]; |
50 | } else { | 51 | } else { |
51 | //TODO: Add logic for external URLs | 52 | //TODO: Add logic for external URLs |
52 | } | 53 | } |
53 | //TODO: Clean up functions | 54 | //TODO: Clean up functions |
54 | css = css.replace(/url\(()(.+?)\1\)/g, parseToNinjaUrl.bind(this)); | 55 | css = css.replace(/url\(()(.+?)\1\)/g, parseToNinjaUrl.bind(this)); |
55 | // | 56 | // |
56 | function parseToNinjaUrl (prop) { | 57 | function parseToNinjaUrl (prop) { |
57 | // | 58 | // |
58 | return prop.replace(/[^()\\""\\'']+/g, prefixWithNinjaUrl.bind(this)); | 59 | return prop.replace(/[^()\\""\\'']+/g, prefixWithNinjaUrl.bind(this)); |
59 | } | 60 | } |
60 | // | 61 | // |
61 | function prefixWithNinjaUrl (url) { | 62 | function prefixWithNinjaUrl (url) { |
62 | // | 63 | // |
63 | if (url !== 'url' && !url.match(/(\b(?:(?:https?|ftp|file|[A-Za-z]+):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]))/gi)) { | 64 | if (url !== 'url' && !url.match(/(\b(?:(?:https?|ftp|file|[A-Za-z]+):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]))/gi)) { |
64 | url = fileCouldDirUrl+url; | 65 | url = fileCouldDirUrl+url; |
65 | } | 66 | } |
66 | // | 67 | // |
67 | return url; | 68 | return url; |
68 | } | 69 | } |
69 | // | 70 | // |
70 | return css; | 71 | return css; |
71 | } | 72 | } |
72 | }, | 73 | }, |
73 | //////////////////////////////////////////////////////////////////// | 74 | //////////////////////////////////////////////////////////////////// |
74 | // | 75 | // |
75 | loadLocalStyleSheet: { | 76 | loadLocalStyleSheet: { |
76 | value: function (href) { | 77 | value: function (href) { |
77 | //Getting file URI (not URL since we must load through I/O API) | 78 | //Getting file URI (not URL since we must load through I/O API) |
78 | var css = {}, file; | 79 | var css = {}, file; |
79 | css.cssUrl = href.split(this.application.ninja.coreIoApi.rootUrl)[1]; | 80 | css.cssUrl = href.split(this.application.ninja.coreIoApi.rootUrl)[1]; |
80 | css.fileUri = this.application.ninja.coreIoApi.cloudData.root + unescape(css.cssUrl); | 81 | css.fileUri = this.application.ninja.coreIoApi.cloudData.root + unescape(css.cssUrl); |
81 | //Loading data from CSS file | 82 | //Loading data from CSS file |
82 | file = this.application.ninja.coreIoApi.readFile({uri: css.fileUri}); | 83 | file = this.application.ninja.coreIoApi.readFile({uri: css.fileUri}); |
83 | //Checking for file to be writable on disk | 84 | //Checking for file to be writable on disk |
84 | css.writable = JSON.parse(this.application.ninja.coreIoApi.isFileWritable({uri: css.fileUri}).content).readOnly; | 85 | css.writable = JSON.parse(this.application.ninja.coreIoApi.isFileWritable({uri: css.fileUri}).content).readOnly; |
85 | //Returning loaded file | 86 | //Returning loaded file |
86 | if (file && file.content) { | 87 | if (file && file.content) { |
87 | //Getting file contents | 88 | //Getting file contents |
88 | css.content = this.parseStyleUrls(file.content, href, true); | 89 | css.content = this.parseStyleUrls(file.content, href, true); |
89 | //Returning CSS object | 90 | //Returning CSS object |
90 | return css; | 91 | return css; |
91 | } else { | 92 | } else { |
92 | return false; | 93 | return false; |
93 | } | 94 | } |
94 | } | 95 | } |
95 | }, | 96 | }, |
96 | //////////////////////////////////////////////////////////////////// | 97 | //////////////////////////////////////////////////////////////////// |
97 | // | 98 | // |
98 | loadExternalStyleSheet: { | 99 | loadExternalStyleSheet: { |
99 | value: function (href) { | 100 | value: function (href) { |
100 | //Loading external file | 101 | //Loading external file |
101 | var file = this.application.ninja.coreIoApi.readExternalFile({url: href, binary: false}); | 102 | var file = this.application.ninja.coreIoApi.readExternalFile({url: href, binary: false}); |
102 | //Returning file | 103 | //Returning file |
103 | return file; | 104 | return file; |
104 | } | 105 | } |
105 | } | 106 | } |
106 | //////////////////////////////////////////////////////////////////// | 107 | //////////////////////////////////////////////////////////////////// |
107 | //////////////////////////////////////////////////////////////////// | 108 | //////////////////////////////////////////////////////////////////// |
108 | }); | 109 | }); |
109 | //////////////////////////////////////////////////////////////////////// | 110 | //////////////////////////////////////////////////////////////////////// |
110 | //////////////////////////////////////////////////////////////////////// | 111 | //////////////////////////////////////////////////////////////////////// |